Files
2026-08-31 21:20:12 +01:00

81 lines
3.3 KiB
Go

package domain
import (
"errors"
"testing"
"time"
)
func testCredential(binding WorkloadBinding, now time.Time) WorkloadCredential {
return WorkloadCredential{
Issuer: binding.Issuer, Audience: binding.Audience, IssuedAt: now.Add(-time.Minute), ExpiresAt: now.Add(time.Minute),
Namespace: binding.Namespace, ServiceAcct: binding.ServiceAcct, PodUID: binding.PodUID,
GameServerUID: binding.GameServerUID, AllocationID: binding.AllocationID, MatchID: binding.MatchID,
ServerID: binding.ServerID, Signature: []byte("attestation"),
}
}
func TestWorkloadCredentialValidatesOneAllocationIdentity(t *testing.T) {
now := time.Unix(1000, 0).UTC()
binding := testBinding()
policy, err := NewWorkloadCredentialPolicy(binding, func(credential WorkloadCredential) bool {
return string(credential.Signature) == "attestation"
})
if err != nil {
t.Fatal(err)
}
got, err := policy.Validate(testCredential(binding, now), now)
if err != nil || got != binding {
t.Fatalf("valid credential = %+v, err=%v", got, err)
}
}
func TestWorkloadCredentialRejectsEveryBindingAndTimeMutation(t *testing.T) {
now := time.Unix(1000, 0).UTC()
binding := testBinding()
policy, _ := NewWorkloadCredentialPolicy(binding, func(credential WorkloadCredential) bool { return true })
mutate := []func(*WorkloadCredential){
func(c *WorkloadCredential) { c.Issuer = "other" },
func(c *WorkloadCredential) { c.Audience = "other" },
func(c *WorkloadCredential) { c.Namespace = "other" },
func(c *WorkloadCredential) { c.ServiceAcct = "other" },
func(c *WorkloadCredential) { c.PodUID = "other" },
func(c *WorkloadCredential) { c.GameServerUID = "other" },
func(c *WorkloadCredential) { c.AllocationID = "other" },
func(c *WorkloadCredential) { c.MatchID = "other" },
func(c *WorkloadCredential) { c.ServerID = "other" },
func(c *WorkloadCredential) { c.ExpiresAt = now },
func(c *WorkloadCredential) { c.IssuedAt = now.Add(time.Second) },
}
for i, change := range mutate {
credential := testCredential(binding, now)
change(&credential)
if _, err := policy.Validate(credential, now); !errors.Is(err, ErrWorkloadCredential) {
t.Fatalf("mutation %d accepted: %v", i, err)
}
}
badSignature, _ := NewWorkloadCredentialPolicy(binding, func(WorkloadCredential) bool { return false })
if _, err := badSignature.Validate(testCredential(binding, now), now); !errors.Is(err, ErrWorkloadCredential) {
t.Fatalf("unverified signature accepted: %v", err)
}
}
func TestWorkloadCredentialRejectsMissingClaimsAndBoundaryExpiry(t *testing.T) {
now := time.Unix(1000, 0).UTC()
binding := testBinding()
policy, _ := NewWorkloadCredentialPolicy(binding, func(WorkloadCredential) bool { return true })
credential := testCredential(binding, now)
credential.Signature = nil
if _, err := policy.Validate(credential, now); !errors.Is(err, ErrWorkloadCredential) {
t.Fatalf("missing signature accepted: %v", err)
}
credential = testCredential(binding, now)
if _, err := policy.Validate(credential, credential.ExpiresAt); !errors.Is(err, ErrWorkloadCredential) {
t.Fatalf("expiry boundary accepted: %v", err)
}
credential = testCredential(binding, now)
if _, err := policy.Validate(credential, credential.IssuedAt.Add(-time.Nanosecond)); !errors.Is(err, ErrWorkloadCredential) {
t.Fatalf("not-before boundary accepted: %v", err)
}
}