44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
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")
|
|
}
|
|
}
|