All checks were successful
release-tag / release-image (push) Successful in 4m42s
43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package ws
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestPublishAdminDoesNotReachPublicClients(t *testing.T) {
|
|
h := New()
|
|
admin := &Client{Admin: true, send: make(chan []byte, 1), closed: make(chan struct{})}
|
|
public := &Client{All: true, send: make(chan []byte, 1), closed: make(chan struct{})}
|
|
|
|
h.mu.Lock()
|
|
h.clients[admin] = struct{}{}
|
|
h.clients[public] = struct{}{}
|
|
h.mu.Unlock()
|
|
|
|
if err := h.PublishAdmin(context.Background(), Event{Type: "guess_signal", TaskID: "task-1", Data: map[string]any{"score": 42.5}}); err != nil {
|
|
t.Fatalf("PublishAdmin: %v", err)
|
|
}
|
|
|
|
select {
|
|
case b := <-admin.send:
|
|
var e Event
|
|
if err := json.Unmarshal(b, &e); err != nil {
|
|
t.Fatalf("decode admin event: %v", err)
|
|
}
|
|
if e.Type != "guess_signal" || e.TaskID != "task-1" {
|
|
t.Fatalf("unexpected event: %#v", e)
|
|
}
|
|
case <-time.After(100 * time.Millisecond):
|
|
t.Fatal("admin client did not receive event")
|
|
}
|
|
|
|
select {
|
|
case b := <-public.send:
|
|
t.Fatalf("public client received admin-only event: %s", b)
|
|
default:
|
|
}
|
|
}
|