package ingress import ( "testing" "time" "example.com/siem-greenfield/internal/contracts" ) func TestValidateCompatiblePayload(t *testing.T) { p := contracts.LogPayload{Hostname: "PC01", Channel: "Security", EventID: 4625, Source: "agent", Time: time.Now().UTC(), Metadata: &contracts.EventMetadataPayload{TargetUser: "alice"}} if err := validate(&p); err != nil { t.Fatalf("valid payload rejected: %v", err) } } func TestValidateRequiresMessageOrMetadata(t *testing.T) { p := contracts.LogPayload{Hostname: "PC01", Channel: "Security", EventID: 4625, Source: "agent", Time: time.Now().UTC()} if err := validate(&p); err == nil { t.Fatal("expected validation error") } } func TestBatchUIDIsDeterministic(t *testing.T) { b := []contracts.LogPayload{{Hostname: "PC01", Channel: "Security", EventID: 4625, Source: "agent", Time: time.Date(2026, 7, 23, 12, 0, 0, 0, time.UTC), Metadata: &contracts.EventMetadataPayload{TargetUser: "alice"}}} a := batchUID("agent-1", b) if a == "" || a != batchUID("agent-1", b) { t.Fatalf("batch uid is not deterministic") } if a == batchUID("agent-2", b) { t.Fatalf("batch uid must be scoped to agent") } }