package controllers import ( "crypto/hmac" "crypto/sha256" "fmt" "testing" "time" "git.apinb.com/ops/logs/internal/config" ) func TestValidateResourceEventRequest(t *testing.T) { req := &resourceEventRequest{ EventID: "evt-1", EventTime: "2026-04-27T08:00:00Z", EventType: resourceEventUpsert, ResourceType: "server", ResourceID: "srv-1", ResourceName: "server-1", Version: 1, } if _, err := validateResourceEventRequest(req); err != nil { t.Fatalf("expected valid request, got error: %v", err) } } func TestValidateResourceEventRequestInvalidTime(t *testing.T) { req := &resourceEventRequest{ EventID: "evt-1", EventTime: "bad-time", EventType: resourceEventUpsert, ResourceType: "server", ResourceID: "srv-1", Version: 1, } if _, err := validateResourceEventRequest(req); err == nil { t.Fatal("expected invalid time error") } } func TestNonEmptyUnique(t *testing.T) { got := nonEmptyUnique([]string{" 10.0.0.1 ", "", "10.0.0.1", "host-a", "host-a"}) if len(got) != 2 { t.Fatalf("unexpected unique size: %d", len(got)) } if got[0] != "10.0.0.1" || got[1] != "host-a" { t.Fatalf("unexpected output: %#v", got) } } func TestVerifyResourceEventSignature(t *testing.T) { old := config.Spec.ResourceEvent.HMACSecret config.Spec.ResourceEvent.HMACSecret = "abc123" defer func() { config.Spec.ResourceEvent.HMACSecret = old }() body := []byte(`{"event_id":"evt-1"}`) mac := hmac.New(sha256.New, []byte("abc123")) mac.Write(body) signature := fmt.Sprintf("%x", mac.Sum(nil)) if err := verifyResourceEventSignature(signature, body); err != nil { t.Fatalf("expected signature to pass: %v", err) } if err := verifyResourceEventSignature("bad", body); err == nil { t.Fatal("expected invalid signature error") } } func TestValidateEventTimeSkew(t *testing.T) { old := config.Spec.ResourceEvent.MaxSkewSecs config.Spec.ResourceEvent.MaxSkewSecs = 60 defer func() { config.Spec.ResourceEvent.MaxSkewSecs = old }() if err := validateEventTimeSkew(time.Now()); err != nil { t.Fatalf("expected current time to pass: %v", err) } if err := validateEventTimeSkew(time.Now().Add(-2 * time.Minute)); err == nil { t.Fatal("expected skew validation to fail for old timestamp") } }