75 lines
2.6 KiB
Go
75 lines
2.6 KiB
Go
package config
|
|
|
|
import "testing"
|
|
|
|
func TestConfigRejectsRealDispatcherWithoutBroker(t *testing.T) {
|
|
c := FromEnv()
|
|
c.Mode, c.RabbitURL, c.DBPath = "real", "", ":memory:"
|
|
if err := c.Validate("dispatcher"); err == nil {
|
|
t.Fatal("expected real-mode broker requirement")
|
|
}
|
|
}
|
|
|
|
func TestConfigAcceptsMockAgent(t *testing.T) {
|
|
c := Config{Mode: "mock", SpoolRoot: t.TempDir()}
|
|
if err := c.Validate("agent"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestConfigLoadsUnifiedDispatcherGRPCSettings(t *testing.T) {
|
|
t.Setenv("DISPATCHER_GRPC_LISTEN", "127.0.0.1:19443")
|
|
t.Setenv("DISPATCHER_GRPC_ENDPOINT", "dispatcher.test:19443")
|
|
t.Setenv("DISPATCHER_GRPC_SERVER_NAME", "dispatcher.test")
|
|
t.Setenv("DISPATCHER_ALLOWED_AGENT_IDS", "agent-cell-a,agent-cell-b")
|
|
c := FromEnv()
|
|
if c.DispatcherGRPCListen != "127.0.0.1:19443" || c.DispatcherGRPCEndpoint != "dispatcher.test:19443" || c.DispatcherGRPCServerName != "dispatcher.test" || c.DispatcherGRPCAllowedAgentIDs != "agent-cell-a,agent-cell-b" {
|
|
t.Fatalf("unified Dispatcher gRPC settings were not loaded: %+v", c)
|
|
}
|
|
}
|
|
|
|
func TestConfigRequiresPhoneLogPair(t *testing.T) {
|
|
c := Config{Mode: "mock", SpoolRoot: t.TempDir(), CallLogPath: "calls.jsonl"}
|
|
if err := c.Validate("agent"); err == nil {
|
|
t.Fatal("expected phone log key requirement")
|
|
}
|
|
c.CallLogPhoneKey = "0123456789abcdef"
|
|
if err := c.Validate("agent"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
c.CallLogPath = ""
|
|
if err := c.Validate("agent"); err != nil {
|
|
t.Fatalf("key-only configuration should use spool fallback: %v", err)
|
|
}
|
|
c.CallLogPhoneKey = "short"
|
|
if err := c.Validate("agent"); err == nil {
|
|
t.Fatal("expected phone log key length requirement")
|
|
}
|
|
}
|
|
|
|
func TestConfigRequiresAgentTLSFilesWhenRPCIsEnabled(t *testing.T) {
|
|
c := Config{Mode: "mock", SpoolRoot: t.TempDir(), GRPCListen: "127.0.0.1:19090"}
|
|
if err := c.Validate("agent"); err == nil {
|
|
t.Fatal("expected mTLS file requirement")
|
|
}
|
|
c.MTLSCAFile, c.MTLSCertFile, c.MTLSKeyFile = "ca.pem", "agent.pem", "agent.key"
|
|
if err := c.Validate("agent"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
c.Mode, c.GRPCListen = "real", ""
|
|
if err := c.Validate("agent"); err == nil {
|
|
t.Fatal("expected real agent listener requirement")
|
|
}
|
|
}
|
|
|
|
func TestConfigRequiresStaticArtifactForRealAgent(t *testing.T) {
|
|
c := Config{Mode: "real", SpoolRoot: t.TempDir(), GRPCListen: "127.0.0.1:19090", MTLSCAFile: "ca.pem", MTLSCertFile: "agent.pem", MTLSKeyFile: "agent.key"}
|
|
if err := c.Validate("agent"); err == nil {
|
|
t.Fatal("expected static artifact requirement")
|
|
}
|
|
c.StaticArtifactPath = "artifact.json"
|
|
if err := c.Validate("agent"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|