Files
Agent-System/internal/config/explain_test.go
T
agent-bot 679028e44e
CI / go-vet (pull_request) Successful in 13s
CI / short-tests-report (pull_request) Failing after 35s
CI / backup-restore-drill (pull_request) Successful in 25s
CI / web (pull_request) Successful in 31s
feat(cli): 'config explain' with per-key layer attribution (U10b slice 1)
- config.Explain(envFiles, cliOverrides): per-key source layer following the
  application precedence cli > process-env > env-file > default; registry is
  reporting-only (values still applied solely by Load); secrets never shown
- ParseEnvFileKeys shares applyEnvFile's parsing rules
- cmd/server 'config explain' resolves the same env-file stack as Load and
  renders the attribution table; smoke: HTTP_PORT/AGENT_BACKEND -> cli
- tests: registry liveness sample + layer attribution (file/process/cli/
  default) + secret masking
- full per-field snapshot with applied/desired revisions remains U10b core
2026-09-29 07:39:28 +00:00

50 lines
1.5 KiB
Go

package config
import (
"os"
"path/filepath"
"testing"
)
// 注册表键必须真实影响 Load(抽样防 reporting-only 注册表漂移)。
func TestExplainRegistryKeysAreLive(t *testing.T) {
t.Setenv("HTTP_PORT", "9911")
t.Setenv("AGENT_BACKEND", "stub")
cfg, err := Load("")
if err != nil {
t.Fatalf("load: %v", err)
}
if cfg.HTTPPort != 9911 || cfg.AgentBackend != "stub" {
t.Fatalf("registry sample keys not applied: port=%d backend=%s", cfg.HTTPPort, cfg.AgentBackend)
}
}
func TestExplainLayerAttribution(t *testing.T) {
dir := t.TempDir()
envf := filepath.Join(dir, ".env")
if err := os.WriteFile(envf, []byte("HTTP_HOST=0.0.0.0\nKB_DB_PASSWORD=from-file\n"), 0o600); err != nil {
t.Fatal(err)
}
t.Setenv("KB_DB_PASSWORD", "from-process") // 进程 env 覆盖 env-file
entries := Explain([]string{envf}, map[string]string{"AGENT_BACKEND": "stub"})
by := map[string]ExplainEntry{}
for _, e := range entries {
by[e.Key] = e
}
if by["HTTP_HOST"].Layer != LayerEnvFile {
t.Fatalf("HTTP_HOST layer=%s want env-file", by["HTTP_HOST"].Layer)
}
if by["KB_DB_PASSWORD"].Layer != LayerProcessEnv {
t.Fatalf("KB_DB_PASSWORD layer=%s want process-env", by["KB_DB_PASSWORD"].Layer)
}
if by["KB_DB_PASSWORD"].Value != "<set>" {
t.Fatalf("secret value leaked: %q", by["KB_DB_PASSWORD"].Value)
}
if by["AGENT_BACKEND"].Layer != LayerCLI {
t.Fatalf("AGENT_BACKEND layer=%s want cli", by["AGENT_BACKEND"].Layer)
}
if by["ADMIN_USERNAME"].Layer != LayerDefault {
t.Fatalf("ADMIN_USERNAME layer=%s want default", by["ADMIN_USERNAME"].Layer)
}
}