12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package utils
- import (
- "testing"
- "time"
- )
- func assertSubscribersCount(t *testing.T, q *JSONMessagePublisher, expected int) {
- if q.SubscribersCount() != expected {
- t.Fatalf("Expected %d registered subscribers, got %d", expected, q.SubscribersCount())
- }
- }
- func TestJSONMessagePublisherSubscription(t *testing.T) {
- q := NewJSONMessagePublisher()
- l1 := make(chan JSONMessage)
- l2 := make(chan JSONMessage)
- assertSubscribersCount(t, q, 0)
- q.Subscribe(l1)
- assertSubscribersCount(t, q, 1)
- q.Subscribe(l2)
- assertSubscribersCount(t, q, 2)
- q.Unsubscribe(l1)
- q.Unsubscribe(l2)
- assertSubscribersCount(t, q, 0)
- }
- func TestJSONMessagePublisherPublish(t *testing.T) {
- q := NewJSONMessagePublisher()
- l1 := make(chan JSONMessage)
- l2 := make(chan JSONMessage)
- go func() {
- for {
- select {
- case <-l1:
- close(l1)
- l1 = nil
- case <-l2:
- close(l2)
- l2 = nil
- case <-time.After(1 * time.Second):
- q.Unsubscribe(l1)
- q.Unsubscribe(l2)
- t.Fatal("Timeout waiting for broadcasted message")
- }
- }
- }()
- q.Subscribe(l1)
- q.Subscribe(l2)
- q.Publish(JSONMessage{})
- }
- func TestJSONMessagePublishTimeout(t *testing.T) {
- q := NewJSONMessagePublisher()
- l := make(chan JSONMessage)
- q.Subscribe(l)
- c := make(chan struct{})
- go func() {
- q.Publish(JSONMessage{})
- close(c)
- }()
- select {
- case <-c:
- case <-time.After(time.Second):
- t.Fatal("Timeout publishing message")
- }
- }
|