fix: close slow event subscribers safely

This commit is contained in:
Josh Creek
2026-08-31 23:09:16 +01:00
parent 0be51ab902
commit a4bc8cdac8
3 changed files with 26 additions and 1 deletions
+21
View File
@@ -257,6 +257,27 @@ func readServerWebSocketFrame(reader *bufio.Reader) ([]byte, error) {
return payload, err
}
func TestEventHubClosesSlowSubscribersExactlyOnce(t *testing.T) {
hub := newEventHub()
subscriber := hub.subscribe("player-1")
event := ControlPlaneEvent{Event: "state_changed", Revision: 1, ResourceID: "ticket-1234567890123456", OccurredAt: time.Unix(1000, 0).UTC(), State: "QUEUED", PlayerID: "player-1"}
for i := 0; i < eventQueueCapacity; i++ {
if err := hub.publish(event); err != nil {
t.Fatal(err)
}
}
if err := hub.publish(event); err != nil {
t.Fatal(err)
}
for {
_, open := <-subscriber.queue
if !open {
break
}
}
hub.unsubscribe(subscriber)
}
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())