Initial commit
This commit is contained in:
149
bus_test.go
Normal file
149
bus_test.go
Normal file
@@ -0,0 +1,149 @@
|
||||
package bus_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/gopatchy/bus"
|
||||
"github.com/gopatchy/metadata"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestBus(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
bus := bus.NewBus()
|
||||
|
||||
// Announce with no subscribers
|
||||
bus.Announce("busTest1", &busTest{
|
||||
Metadata: metadata.Metadata{
|
||||
ID: "id-nosub",
|
||||
},
|
||||
})
|
||||
|
||||
// Complex subscription layout
|
||||
c1a := bus.SubscribeKey("busTest1", "id-overlap", nil)
|
||||
require.Nil(t, <-c1a)
|
||||
|
||||
defer bus.UnsubscribeKey("busTest1", "id-overlap", c1a)
|
||||
|
||||
c2a := bus.SubscribeKey("busTest2", "id-overlap", nil)
|
||||
require.Nil(t, <-c2a)
|
||||
|
||||
defer bus.UnsubscribeKey("busTest2", "id-overlap", c2a)
|
||||
|
||||
c2b := bus.SubscribeKey("busTest2", "id-dupe", nil)
|
||||
require.Nil(t, <-c2b)
|
||||
|
||||
defer bus.UnsubscribeKey("busTest2", "id-dupe", c2b)
|
||||
|
||||
c2c := bus.SubscribeKey("busTest2", "id-dupe", nil)
|
||||
require.Nil(t, <-c2c)
|
||||
|
||||
defer bus.UnsubscribeKey("busTest2", "id-dupe", c2c)
|
||||
|
||||
ct1 := bus.SubscribeType("busTest1", nil)
|
||||
require.Nil(t, <-ct1)
|
||||
|
||||
defer bus.UnsubscribeType("busTest1", ct1)
|
||||
|
||||
ct2 := bus.SubscribeType("busTest2", nil)
|
||||
require.Nil(t, <-ct2)
|
||||
|
||||
defer bus.UnsubscribeType("busTest2", ct2)
|
||||
|
||||
// Overlapping IDs but not types
|
||||
bus.Announce("busTest1", &busTest{
|
||||
Metadata: metadata.Metadata{
|
||||
ID: "id-overlap",
|
||||
},
|
||||
})
|
||||
|
||||
msg := <-c1a
|
||||
require.Equal(t, "id-overlap", msg.(*busTest).ID)
|
||||
|
||||
msg = <-ct1
|
||||
require.Equal(t, "id-overlap", msg.(*busTest).ID)
|
||||
|
||||
select {
|
||||
case msg := <-c2a:
|
||||
require.Fail(t, "unexpected message", msg)
|
||||
case msg := <-ct2:
|
||||
require.Fail(t, "unexpected message", msg)
|
||||
default:
|
||||
}
|
||||
|
||||
bus.Announce("busTest2", &busTest{
|
||||
Metadata: metadata.Metadata{
|
||||
ID: "id-overlap",
|
||||
},
|
||||
})
|
||||
|
||||
select {
|
||||
case msg := <-c1a:
|
||||
require.Fail(t, "unexpected message", msg)
|
||||
case msg := <-ct1:
|
||||
require.Fail(t, "unexpected message", msg)
|
||||
default:
|
||||
}
|
||||
|
||||
msg = <-c2a
|
||||
require.Equal(t, "id-overlap", msg.(*busTest).ID)
|
||||
|
||||
msg = <-ct2
|
||||
require.Equal(t, "id-overlap", msg.(*busTest).ID)
|
||||
|
||||
bus.Announce("busTest2", &busTest{
|
||||
Metadata: metadata.Metadata{
|
||||
ID: "id-dupe",
|
||||
},
|
||||
})
|
||||
|
||||
msg = <-c2b
|
||||
require.Equal(t, "id-dupe", msg.(*busTest).ID)
|
||||
|
||||
msg = <-c2c
|
||||
require.Equal(t, "id-dupe", msg.(*busTest).ID)
|
||||
|
||||
msg = <-ct2
|
||||
require.Equal(t, "id-dupe", msg.(*busTest).ID)
|
||||
}
|
||||
|
||||
func TestBusDelete(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
bus := bus.NewBus()
|
||||
|
||||
c := bus.SubscribeKey("busTest", "id1", nil)
|
||||
require.Nil(t, <-c)
|
||||
|
||||
defer bus.UnsubscribeKey("busTest", "id1", c)
|
||||
|
||||
ct := bus.SubscribeType("busTest", nil)
|
||||
require.Nil(t, <-ct)
|
||||
|
||||
defer bus.UnsubscribeType("busTest", ct)
|
||||
|
||||
bus.Announce("busTest", &busTest{
|
||||
Metadata: metadata.Metadata{
|
||||
ID: "id1",
|
||||
},
|
||||
})
|
||||
|
||||
msg := <-c
|
||||
require.Equal(t, "id1", msg.(*busTest).ID)
|
||||
|
||||
msg = <-ct
|
||||
require.Equal(t, "id1", msg.(*busTest).ID)
|
||||
|
||||
bus.Delete("busTest", "id1")
|
||||
|
||||
_, ok := <-c
|
||||
require.False(t, ok)
|
||||
|
||||
id := (<-ct).(string)
|
||||
require.Equal(t, "id1", id)
|
||||
}
|
||||
|
||||
type busTest struct {
|
||||
metadata.Metadata
|
||||
}
|
||||
Reference in New Issue
Block a user