package database import ( "encoding/json" "git.yuntuo.hk/k2safe/go-omni/config" "os" "path/filepath" "strings" "testing" "time" ) func TestExplicitConfigPreservesPoolAndHidesDSN(t *testing.T) { cfg := DefaultConfig() cfg.Driver = "mysql" path := filepath.Join(t.TempDir(), "db.yaml") if err := os.WriteFile(path, []byte("dsn: \"${OMNI_TEST_DSN}\"\nmaxIdleConns: \"${OMNI_TEST_MAX_IDLE_CONNS}\"\nmaxOpenConns: \"${OMNI_TEST_MAX_OPEN_CONNS:-3}\""), 0600); err != nil { t.Fatal(err) } cfg.MaxOpenConns = 3 cfg.MaxIdleConns = 1 cfg.PingTimeout = time.Second t.Setenv("OMNI_TEST_DSN", "user:secret@tcp(localhost:3306)/test") t.Setenv("OMNI_TEST_MAX_IDLE_CONNS", "0") got, err := config.LoadProject(path, cfg) if err != nil { t.Fatal(err) } if got.MaxOpenConns != 3 || got.MaxIdleConns != 0 || got.PingTimeout != time.Second { t.Fatalf("lost file defaults: %+v", got) } data, err := json.Marshal(got) if err != nil { t.Fatal(err) } if strings.Contains(string(data), "secret") || !strings.Contains(string(data), "maxOpenConns") { t.Fatalf("unsafe config encoding: %s", data) } t.Setenv("OMNI_TEST_MAX_OPEN_CONNS", "bad") if _, err = config.LoadProject(path, cfg); err == nil { t.Fatal("invalid override accepted") } }