mirror of
https://github.com/RuoJi6/ARTEX.git
synced 2026-10-27 17:03:49 +08:00
ARTEX — AI 自主渗透测试系统(Go 后端 + Next.js 前端,单二进制内嵌)。 Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestPostgresDSNPrecedence(t *testing.T) {
|
|
dir := t.TempDir()
|
|
cfgPath := filepath.Join(dir, "config.json")
|
|
os.WriteFile(cfgPath, []byte(`{"database":{"host":"10.1.2.3","port":6000,"user":"u","password":"p","dbname":"d","sslmode":"require"}}`), 0o644)
|
|
t.Setenv("ARTEX_CONFIG", cfgPath)
|
|
|
|
// no env DSN → built from config file fields
|
|
t.Setenv("ARTEX_PG_DSN", "")
|
|
got, _, err := PostgresDSN()
|
|
want := "postgres://u:[email protected]:6000/d?sslmode=require"
|
|
if err != nil || got != want {
|
|
t.Fatalf("from file: got %q err %v want %q", got, err, want)
|
|
}
|
|
|
|
// env wins over config file
|
|
t.Setenv("ARTEX_PG_DSN", "postgres://envwins/x")
|
|
if got, _, err := PostgresDSN(); err != nil || got != "postgres://envwins/x" {
|
|
t.Fatalf("env should win, got %q err %v", got, err)
|
|
}
|
|
|
|
// no env, no file → error (no built-in default)
|
|
t.Setenv("ARTEX_PG_DSN", "")
|
|
t.Setenv("ARTEX_CONFIG", filepath.Join(dir, "nope.json"))
|
|
if got, _, err := PostgresDSN(); err == nil {
|
|
t.Fatalf("missing config should error, got %q", got)
|
|
}
|
|
|
|
// full dsn in config file is used verbatim
|
|
os.WriteFile(cfgPath, []byte(`{"database":{"dsn":"postgres://full/dsn"}}`), 0o644)
|
|
t.Setenv("ARTEX_CONFIG", cfgPath)
|
|
if got, _, err := PostgresDSN(); err != nil || got != "postgres://full/dsn" {
|
|
t.Fatalf("file dsn verbatim, got %q err %v", got, err)
|
|
}
|
|
}
|