pkg/pubsub/publisher_test.go
2f46b760
 package pubsub
 
 import (
 	"testing"
 	"time"
 )
 
 func TestSendToOneSub(t *testing.T) {
 	p := NewPublisher(100*time.Millisecond, 10)
 	c := p.Subscribe()
 
 	p.Publish("hi")
 
 	msg := <-c
 	if msg.(string) != "hi" {
 		t.Fatalf("expected message hi but received %v", msg)
 	}
 }
 
 func TestSendToMultipleSubs(t *testing.T) {
 	p := NewPublisher(100*time.Millisecond, 10)
 	subs := []chan interface{}{}
 	subs = append(subs, p.Subscribe(), p.Subscribe(), p.Subscribe())
 
 	p.Publish("hi")
 
 	for _, c := range subs {
 		msg := <-c
 		if msg.(string) != "hi" {
 			t.Fatalf("expected message hi but received %v", msg)
 		}
 	}
 }
 
 func TestEvictOneSub(t *testing.T) {
 	p := NewPublisher(100*time.Millisecond, 10)
 	s1 := p.Subscribe()
 	s2 := p.Subscribe()
 
 	p.Evict(s1)
 	p.Publish("hi")
 	if _, ok := <-s1; ok {
 		t.Fatal("expected s1 to not receive the published message")
 	}
 
 	msg := <-s2
 	if msg.(string) != "hi" {
 		t.Fatalf("expected message hi but received %v", msg)
 	}
 }
 
 func TestClosePublisher(t *testing.T) {
 	p := NewPublisher(100*time.Millisecond, 10)
 	subs := []chan interface{}{}
 	subs = append(subs, p.Subscribe(), p.Subscribe(), p.Subscribe())
 	p.Close()
 
 	for _, c := range subs {
 		if _, ok := <-c; ok {
 			t.Fatal("expected all subscriber channels to be closed")
 		}
 	}
 }