fix: validate matchmaking event vocabulary

This commit is contained in:
Josh Creek
2026-08-31 23:10:31 +01:00
parent a4bc8cdac8
commit 161d2cdceb
3 changed files with 56 additions and 3 deletions
+17
View File
@@ -278,6 +278,23 @@ func TestEventHubClosesSlowSubscribersExactlyOnce(t *testing.T) {
hub.unsubscribe(subscriber)
}
func TestEventHubRejectsEventsOutsideTheV1Vocabulary(t *testing.T) {
hub := newEventHub()
base := ControlPlaneEvent{Revision: 1, ResourceID: "ticket-1234567890123456", OccurredAt: time.Unix(1000, 0).UTC(), PlayerID: "player-1"}
invalid := []ControlPlaneEvent{
{Event: "unknown", Revision: base.Revision, ResourceID: base.ResourceID, OccurredAt: base.OccurredAt, PlayerID: base.PlayerID},
{Event: "state_changed", State: "NOT_A_STATE", Revision: base.Revision, ResourceID: base.ResourceID, OccurredAt: base.OccurredAt, PlayerID: base.PlayerID},
{Event: "proposal_changed", State: "LIVE", Revision: base.Revision, ResourceID: base.ResourceID, OccurredAt: base.OccurredAt, PlayerID: base.PlayerID},
{Event: "assignment_changed", Revision: base.Revision, ResourceID: base.ResourceID, OccurredAt: base.OccurredAt, PlayerID: base.PlayerID},
{Event: "error", Code: "SECRET_LEAK", Revision: base.Revision, ResourceID: base.ResourceID, OccurredAt: base.OccurredAt, PlayerID: base.PlayerID},
}
for _, event := range invalid {
if err := hub.publish(event); err == nil {
t.Fatalf("invalid event was accepted: %+v", event)
}
}
}
func TestQueueAPIRejectsUnauthenticatedUnknownAndOversizedInput(t *testing.T) {
service := &Service{Sessions: domain.NewSessionStore(), Queue: domain.NewQueue(), Candidate: func(string, string) (domain.Candidate, error) { return domain.Candidate{}, nil }}
server := httptest.NewServer(service.Handler())