- 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
50 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|