mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-11 00:14:00 +00:00
fix: close slow event subscribers safely
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user