59 lines
1.9 KiB
Go
59 lines
1.9 KiB
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestConfigFromEnv(t *testing.T) {
|
|
keys := []string{
|
|
"GO_OMNI_DB_DRIVER", "GO_OMNI_DB_DSN", "GO_OMNI_DB_MAX_OPEN_CONNS",
|
|
"GO_OMNI_DB_MAX_IDLE_CONNS", "GO_OMNI_DB_CONN_MAX_LIFETIME",
|
|
"GO_OMNI_DB_CONN_MAX_IDLE_TIME", "GO_OMNI_DB_PING_TIMEOUT",
|
|
}
|
|
for _, key := range keys {
|
|
t.Setenv(key, "")
|
|
_ = os.Unsetenv(key)
|
|
}
|
|
t.Setenv("GO_OMNI_DB_DSN", "root:secret@tcp(127.0.0.1:3306)/demo")
|
|
t.Setenv("GO_OMNI_DB_MAX_OPEN_CONNS", "20")
|
|
t.Setenv("GO_OMNI_DB_MAX_IDLE_CONNS", "8")
|
|
t.Setenv("GO_OMNI_DB_CONN_MAX_LIFETIME", "2m")
|
|
t.Setenv("GO_OMNI_DB_PING_TIMEOUT", "750ms")
|
|
cfg, err := ConfigFromEnv("")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if cfg.Driver != "mysql" || cfg.DSN == "" || cfg.MaxOpenConns != 20 || cfg.MaxIdleConns != 8 || cfg.ConnMaxLifetime != 2*time.Minute || cfg.PingTimeout != 750*time.Millisecond {
|
|
t.Fatalf("unexpected config: %+v", cfg)
|
|
}
|
|
}
|
|
|
|
func TestConfigFromEnvRejectsInvalidValues(t *testing.T) {
|
|
t.Setenv("GO_OMNI_DB_DSN", "demo")
|
|
t.Setenv("GO_OMNI_DB_MAX_OPEN_CONNS", "bad")
|
|
if _, err := ConfigFromEnv(""); err == nil || !strings.Contains(err.Error(), "MAX_OPEN_CONNS") {
|
|
t.Fatalf("expected invalid pool limit error, got %v", err)
|
|
}
|
|
t.Setenv("GO_OMNI_DB_MAX_OPEN_CONNS", "2")
|
|
t.Setenv("GO_OMNI_DB_MAX_IDLE_CONNS", "3")
|
|
if _, err := ConfigFromEnv(""); err == nil || !strings.Contains(err.Error(), "max idle") {
|
|
t.Fatalf("expected pool relationship error, got %v", err)
|
|
}
|
|
t.Setenv("GO_OMNI_DB_MAX_IDLE_CONNS", "1")
|
|
t.Setenv("GO_OMNI_DB_PING_TIMEOUT", "0s")
|
|
if _, err := ConfigFromEnv(""); err == nil || !strings.Contains(err.Error(), "timeouts") {
|
|
t.Fatalf("expected timeout error, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestOpenValidatesBeforeLoadingDriver(t *testing.T) {
|
|
_, err := Open(context.Background(), Config{Driver: "", DSN: "demo"})
|
|
if err == nil || !strings.Contains(err.Error(), "driver") {
|
|
t.Fatalf("expected driver validation error, got %v", err)
|
|
}
|
|
}
|