Add pubsub package to handle robust publisher
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
parent
99232a99a9
commit
eff8e3294c
2 changed files with 129 additions and 0 deletions
63
pubsub/publisher_test.go
Normal file
63
pubsub/publisher_test.go
Normal file
|
@ -0,0 +1,63 @@
|
|||
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")
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue