mirror of
https://github.com/werbenhu/eventbus.git
synced 2025-09-26 20:41:48 +08:00
114 lines
2.1 KiB
Go
114 lines
2.1 KiB
Go
package eventbus
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func recreateSingleton() {
|
|
singleton = nil
|
|
InitSingleton()
|
|
}
|
|
|
|
func Test_InitSingleton(t *testing.T) {
|
|
recreateSingleton()
|
|
assert.NotNil(t, singleton)
|
|
}
|
|
|
|
func Test_SingletonSubscribe(t *testing.T) {
|
|
recreateSingleton()
|
|
err := Subscribe("testtopic", busHandlerOne)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, singleton)
|
|
|
|
err = Subscribe("testtopic", busHandlerOne)
|
|
assert.Nil(t, err)
|
|
err = Subscribe("testtopic", 1)
|
|
assert.Equal(t, ErrHandlerIsNotFunc, err)
|
|
|
|
err = Subscribe("testtopic", func(topic string) error {
|
|
return nil
|
|
})
|
|
assert.Equal(t, ErrHandlerParamNum, err)
|
|
err = Subscribe("testtopic", func(topic int, payload int) error {
|
|
return nil
|
|
})
|
|
|
|
assert.Equal(t, ErrHandlerFirstParam, err)
|
|
Close()
|
|
err = Unsubscribe("testtopic", busHandlerTwo)
|
|
assert.Equal(t, ErrChannelClosed, err)
|
|
}
|
|
|
|
func Test_SingletonUnsubscribe(t *testing.T) {
|
|
recreateSingleton()
|
|
|
|
err := Unsubscribe("testtopic", busHandlerOne)
|
|
assert.Equal(t, ErrNoSubscriber, err)
|
|
assert.NotNil(t, singleton)
|
|
|
|
err = Subscribe("testtopic", busHandlerOne)
|
|
assert.Nil(t, err)
|
|
|
|
err = Unsubscribe("testtopic", busHandlerOne)
|
|
assert.Nil(t, err)
|
|
Close()
|
|
|
|
err = Unsubscribe("testtopic", busHandlerTwo)
|
|
assert.Equal(t, ErrChannelClosed, err)
|
|
}
|
|
|
|
func Test_SingletonPublish(t *testing.T) {
|
|
recreateSingleton()
|
|
|
|
err := Publish("testtopic", 1)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, singleton)
|
|
|
|
err = Subscribe("testtopic", busHandlerOne)
|
|
assert.Nil(t, err)
|
|
|
|
var wg sync.WaitGroup
|
|
wg.Add(100)
|
|
|
|
for i := 0; i < 100; i++ {
|
|
go func() {
|
|
for i := 0; i < 100; i++ {
|
|
err := Publish("testtopic", i)
|
|
assert.Nil(t, err)
|
|
}
|
|
wg.Done()
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
Close()
|
|
}
|
|
|
|
func Test_SingletonPublishSync(t *testing.T) {
|
|
recreateSingleton()
|
|
|
|
err := Publish("testtopic", 1)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, singleton)
|
|
|
|
err = Subscribe("testtopic", busHandlerOne)
|
|
assert.Nil(t, err)
|
|
|
|
var wg sync.WaitGroup
|
|
wg.Add(100)
|
|
|
|
for i := 0; i < 100; i++ {
|
|
go func() {
|
|
for i := 0; i < 100; i++ {
|
|
err := PublishSync("testtopic", i)
|
|
assert.Nil(t, err)
|
|
}
|
|
wg.Done()
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
Close()
|
|
}
|