66 lines
2.2 KiB
Go
66 lines
2.2 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoadAgentEndpointsValidatesStrictInventory(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "agents.json")
|
|
valid := `[{"agent_id":"agent-a","cell_id":"cell-a","address":"127.0.0.1:19090","server_name":"agent.test"}]`
|
|
if err := os.WriteFile(path, []byte(valid), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
endpoints, err := LoadAgentEndpoints(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(endpoints) != 1 || endpoints[0].AgentID != "agent-a" {
|
|
t.Fatalf("unexpected endpoints: %+v", endpoints)
|
|
}
|
|
|
|
if err := os.WriteFile(path, []byte(`[{"agent_id":"agent-a","cell_id":"cell-a","address":"127.0.0.1:19090","server_name":"agent.test","role":"dispatcher"}]`), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := LoadAgentEndpoints(path); err == nil {
|
|
t.Fatal("expected unknown endpoint field to be rejected")
|
|
}
|
|
|
|
if err := os.WriteFile(path, []byte(`[{
|
|
"agent_id":"agent-a","cell_id":"cell-a","address":"127.0.0.1:19090","server_name":"agent.test"
|
|
},{
|
|
"agent_id":"agent-a","cell_id":"cell-b","address":"127.0.0.1:19091","server_name":"agent.test"
|
|
}]`), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := LoadAgentEndpoints(path); err == nil {
|
|
t.Fatal("expected duplicate Agent ID to be rejected")
|
|
}
|
|
}
|
|
|
|
func TestParseCertificateFingerprints(t *testing.T) {
|
|
fingerprint := "aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa"
|
|
parsed, err := ParseCertificateFingerprints(fingerprint + "," + fingerprint)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(parsed) != 1 {
|
|
t.Fatalf("unexpected fingerprint count: %d", len(parsed))
|
|
}
|
|
if _, err := ParseCertificateFingerprints("not-a-fingerprint"); err == nil {
|
|
t.Fatal("expected invalid fingerprint to be rejected")
|
|
}
|
|
}
|
|
|
|
func TestConfigRequiresDispatcherMTLSForEndpointInventory(t *testing.T) {
|
|
cfg := Config{Mode: "mock", DBPath: ":memory:", AgentEndpointsFile: "agents.json"}
|
|
if err := cfg.Validate("dispatcher"); err == nil {
|
|
t.Fatal("expected Dispatcher mTLS requirement")
|
|
}
|
|
cfg.MTLSCAFile, cfg.MTLSCertFile, cfg.MTLSKeyFile = "ca.pem", "dispatcher.pem", "dispatcher.key"
|
|
if err := cfg.Validate("dispatcher"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|