Files
go-sip/internal/config/agent_endpoints_test.go
T

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