Files
kra-oa/internal/data/database_test.go
T
2026-09-29 18:15:35 +08:00

62 lines
1.5 KiB
Go

package data
import (
"strings"
"testing"
mysqldriver "github.com/go-sql-driver/mysql"
"kra/internal/config"
)
func TestMySQLBootstrapConnectsWithoutTargetDatabase(t *testing.T) {
for _, host := range []string{"", "mysql"} {
t.Run("host="+host, func(t *testing.T) {
cfg := &config.Database{Driver: "mysql", Host: host, Name: "kra_new", Source: "root@tcp(localhost:3306)/kra_new"}
original := *cfg
dsn, err := bootstrapDatabaseDSN(cfg)
if err != nil {
t.Fatal(err)
}
parsed, err := mysqldriver.ParseDSN(dsn)
if err != nil {
t.Fatal(err)
}
if parsed.DBName != "" {
t.Fatalf("bootstrap selected database %q before creating it", parsed.DBName)
}
if *cfg != original {
t.Fatal("bootstrap changed the target configuration")
}
target, err := databaseDSN(cfg, "")
if err != nil {
t.Fatal(err)
}
parsed, err = mysqldriver.ParseDSN(target)
if err != nil {
t.Fatal(err)
}
if parsed.DBName != "kra_new" {
t.Fatalf("target connection selected database %q", parsed.DBName)
}
})
}
}
func TestMySQLDatabaseDSNIncludesNetworkTimeouts(t *testing.T) {
dsn, err := databaseDSN(&config.Database{
Driver: "mysql",
User: "root",
Password: "secret",
Host: "mysql",
Name: "kra",
}, "")
if err != nil {
t.Fatal(err)
}
for _, option := range []string{"timeout=5s", "readTimeout=5s", "writeTimeout=5s"} {
if !strings.Contains(dsn, option) {
t.Fatalf("DSN %q does not contain %q", dsn, option)
}
}
}