ARTEX — AI 自主渗透测试系统(Go 后端 + Next.js 前端,单二进制内嵌)。 Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
package db
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// testDSN returns the configured DSN, skipping the test when neither the env var
|
|
// nor a config file supplies one (DSN no longer has a built-in default).
|
|
func testDSN(t *testing.T) string {
|
|
t.Helper()
|
|
dsn, _, err := DSN()
|
|
if err != nil {
|
|
t.Skipf("no database config (%v) — skipping", err)
|
|
}
|
|
return dsn
|
|
}
|
|
|
|
// TestOpenSeed opens the live dev PG, applies schema, seeds, and verifies the
|
|
// builtin agents + their variable catalog exist. Skips if PG is unreachable.
|
|
func TestOpenSeed(t *testing.T) {
|
|
d, err := Open(testDSN(t))
|
|
if err != nil {
|
|
t.Skipf("postgres unavailable (%v) — skipping", err)
|
|
}
|
|
defer d.Close()
|
|
|
|
wantAgents := len(builtinAgents)
|
|
var agents int
|
|
if err := d.QueryRow(`SELECT count(*) FROM agents WHERE builtin`).Scan(&agents); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if agents != wantAgents {
|
|
t.Fatalf("want %d builtin agents, got %d", wantAgents, agents)
|
|
}
|
|
|
|
// planner should have at least its seeded catalog vars
|
|
wantPlannerVars := 0
|
|
for _, a := range builtinAgents {
|
|
if a.key == "planner" {
|
|
wantPlannerVars = len(a.vars)
|
|
break
|
|
}
|
|
}
|
|
var plannerVars int
|
|
if err := d.QueryRow(`
|
|
SELECT count(*) FROM agent_prompt_vars v
|
|
JOIN agents a ON a.id = v.agent_id
|
|
WHERE a.key = 'planner'`).Scan(&plannerVars); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if plannerVars < wantPlannerVars {
|
|
t.Fatalf("want at least %d planner vars, got %d", wantPlannerVars, plannerVars)
|
|
}
|
|
|
|
// re-open must be idempotent (no duplicate agents)
|
|
d2, err := Open(testDSN(t))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer d2.Close()
|
|
if err := d2.QueryRow(`SELECT count(*) FROM agents WHERE builtin`).Scan(&agents); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if agents != wantAgents {
|
|
t.Fatalf("after re-open want %d agents, got %d", wantAgents, agents)
|
|
}
|
|
}
|