mirror of
https://github.com/werbenhu/eventbus.git
synced 2025-09-26 20:41:48 +08:00
137 lines
2.5 KiB
Go
137 lines
2.5 KiB
Go
package eventbus
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_SingletonSubscribe(t *testing.T) {
|
|
ResetSingleton()
|
|
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)
|
|
singleton.Close()
|
|
err = Unsubscribe("testtopic", busHandlerTwo)
|
|
assert.Equal(t, ErrChannelClosed, err)
|
|
Close()
|
|
}
|
|
|
|
func Test_SingletonUnsubscribe(t *testing.T) {
|
|
ResetSingleton()
|
|
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)
|
|
singleton.Close()
|
|
|
|
err = Unsubscribe("testtopic", busHandlerTwo)
|
|
assert.Equal(t, ErrChannelClosed, err)
|
|
Close()
|
|
}
|
|
|
|
func Test_SingletonPublish(t *testing.T) {
|
|
ResetSingleton()
|
|
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) {
|
|
ResetSingleton()
|
|
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()
|
|
}
|
|
|
|
func BenchmarkSingletonPublish(b *testing.B) {
|
|
ResetSingleton()
|
|
Subscribe("testtopic", busHandlerOne)
|
|
|
|
b.ResetTimer()
|
|
var wg sync.WaitGroup
|
|
wg.Add(1)
|
|
go func() {
|
|
for i := 0; i < b.N; i++ {
|
|
Publish("testtopic", i)
|
|
}
|
|
wg.Done()
|
|
}()
|
|
wg.Wait()
|
|
Close()
|
|
}
|
|
|
|
func BenchmarkSingletonPublishSync(b *testing.B) {
|
|
ResetSingleton()
|
|
Subscribe("testtopic", busHandlerOne)
|
|
|
|
b.ResetTimer()
|
|
var wg sync.WaitGroup
|
|
wg.Add(1)
|
|
go func() {
|
|
for i := 0; i < b.N; i++ {
|
|
PublishSync("testtopic", i)
|
|
}
|
|
wg.Done()
|
|
}()
|
|
wg.Wait()
|
|
Close()
|
|
}
|