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) } } }