package hub import ( "testing" "time" ) func TestNew(t *testing.T) { h := New() if h == nil { t.Fatal("New returned nil") } if h.clients == nil { t.Error("clients map not initialized") } if h.broadcast == nil { t.Error("broadcast channel not initialized") } if h.stop == nil { t.Error("stop channel not initialized") } } func TestClientCount(t *testing.T) { h := New() go h.Run() defer h.Shutdown() if count := h.ClientCount(); count != 0 { t.Errorf("Expected 0 clients, got %d", count) } } func TestBroadcastChannel(t *testing.T) { h := New() go h.Run() defer h.Shutdown() select { case h.broadcast <- []byte("test"): // Channel is working case <-time.After(100 * time.Millisecond): t.Error("broadcast channel blocked") } } func TestShutdown(t *testing.T) { h := New() done := make(chan struct{}) go func() { h.Run() close(done) }() // Ensure Run is processing before shutdown time.Sleep(10 * time.Millisecond) h.Shutdown() select { case <-done: // Hub.Run() returned successfully case <-time.After(1 * time.Second): t.Fatal("Hub.Run() did not return after Shutdown") } }