86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
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")
|
|
}
|
|
}
|
|
|