Files
Autumn-27andClaude Opus 4.8 0ef8561411 chore: ARTEX 初始化
ARTEX — AI 自主渗透测试系统(Go 后端 + Next.js 前端,单二进制内嵌)。

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-07-26 04:27:45 -04:00

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