Web App Testing – POST – Persiapan

Instalasi Docker dan Postgres

Webapp testing post akan kita gunakan form login yang telah dibuat pada modul sebelumnya. Untuk data, kita akan gunakan Postgres Database yang diintall dalam docker. Jika Anda ingin mengikuti environment yang digunakan pada tutorial, berikut hal yang perlu disiapkan.

Setelah docker terinstall, dan simpan file docker compose serta SQL di root direktori. Buka command prompt, pada app root direktori, jalankan perintah docker-compose.

$ docker-compose up

Perhatian, untuk compose pertama kali, disarankan menggunakan perintah docker diatas, untuk melihat proses download postgres. Untuk selanjutnya dapat digunakan option background

$ docker-compose up -d

Setelah docker live, selanjutnya kita bisa lakukan test database connection menggunakan database manager (lihat setting pada image dibawah).

Docker Container
Database Connection

Instalasi pgx

Selanjutnya, kita perlu install package untuk Postgres agar bisa diakses melalui Go. Pada tutorial digunakan GitHub – jackc/pgx: PostgreSQL driver and toolkit for Go

Untuk instalasi, masuk ke root app melalui command prompt, lalu jalankan perintah berikut:

$ go get https://github.com/jackc/pgx/v4

Perhatian, gunakan versi 4, untuk mencegah error.

Database Connection Testing

Langkah selanjutnya adalah melakukan testing database connection, buat file cmd/web/db.go, gunakan code berikut:

package main

import (
	"database/sql"
	"log"

	_ "github.com/jackc/pgconn"
	_ "github.com/jackc/pgx/v4"
	_ "github.com/jackc/pgx/v4/stdlib"
)

func openDB(dsn string) (*sql.DB, error) {
	db, err := sql.Open("pgx", dsn)
	if err != nil {
		return nil, err
	}

	err = db.Ping()
	if err != nil {
		return nil, err
	}

	return db, nil
}

func (app *application) connectToDB() (*sql.DB, error) {
	connection, err := openDB(app.DSN)
	if err != nil {
		return nil, err
	}

	log.Println("Connected to Postgres!")

	return connection, nil
}

Kemudian modifikasi file cmd/web/main.go untuk melakukan koneksi ke database.

package main

import (
	"database/sql"
	"flag"
	"log"
	"net/http"

	"github.com/alexedwards/scs/v2"
)

type application struct {
	DSN     string
	DB      *sql.DB
	Session *scs.SessionManager
}

func main() {
	//setup app config
	app := application{}

	//database connection string
	flag.StringVar(&app.DSN, "dsn", "host=localhost port=5432 user=postgres password=postgres dbname=users sslmode=disable timezone=UTC connect_timeout=5", "Postgres Connection")
	flag.Parse()

	//connection to database
	conn, err := app.connectToDB()
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()

	app.DB = conn

	//get session manager
	app.Session = getSession()

	//start server
	log.Println("Starting server on port 8080...")
	err = http.ListenAndServe(":8080", app.routes())

	if err != nil {
		log.Fatal(err)
	}

}

JIka kita jalankan aplikasi, sesuai ekspektasi koneksi ke database berhasil.

$ go run ./cmd/web

2022/10/24 18:15:17 Connected to Postgres!
2022/10/24 18:15:17 Starting server on port 8080...

Sampai disini kita sudah berhasil terhubung ke database, pada modul selanjutnya kita akan menambahkan package database model.

Sharing is caring:

Leave a Comment