62 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|