Files
eventbus2/singleton_test.go
werben 045603dbae add InitSingleton
add InitSingleton
2023-04-27 17:11:32 +08:00

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()
}