mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
47 lines
1.5 KiB
Go
47 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestEventHubCapsConnectionsPerPlayerAndReleasesCapacity(t *testing.T) {
|
|
hub := newEventHub()
|
|
first := hub.subscribe("player-1")
|
|
second := hub.subscribe("player-1")
|
|
if first == nil || second == nil {
|
|
t.Fatal("connection within per-player cap was rejected")
|
|
}
|
|
if third := hub.subscribe("player-1"); third != nil {
|
|
t.Fatal("connection over per-player cap was accepted")
|
|
}
|
|
hub.unsubscribe(first)
|
|
if third := hub.subscribe("player-1"); third == nil {
|
|
t.Fatal("released connection capacity was not reusable")
|
|
} else {
|
|
hub.unsubscribe(third)
|
|
}
|
|
hub.unsubscribe(second)
|
|
}
|
|
|
|
func TestEventConnectionCapReturnsHTTP429BeforeUpgrade(t *testing.T) {
|
|
service := &Service{SessionBackend: &sessionBackendSpy{}}
|
|
hub := service.getEventHub()
|
|
first := hub.subscribe("player-1")
|
|
second := hub.subscribe("player-1")
|
|
defer hub.unsubscribe(first)
|
|
defer hub.unsubscribe(second)
|
|
request := httptest.NewRequest(http.MethodGet, "/v1/events", nil)
|
|
request.Header.Set("Upgrade", "websocket")
|
|
request.Header.Set("Connection", "Upgrade")
|
|
request.Header.Set("Sec-WebSocket-Version", "13")
|
|
request.Header.Set("Sec-WebSocket-Key", "dGhlIHNhbXBsZSBub25jZQ==")
|
|
request.Header.Set("Authorization", "Bearer session-1:token-1")
|
|
recorder := httptest.NewRecorder()
|
|
service.controlPlaneEvent(recorder, request)
|
|
if recorder.Code != http.StatusTooManyRequests {
|
|
t.Fatalf("connection-cap status = %d, want 429", recorder.Code)
|
|
}
|
|
}
|