mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 04:11:05 +08:00
231 lines
3.8 KiB
Go
231 lines
3.8 KiB
Go
package servicebus
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/matryer/is"
|
|
"github.com/wailsapp/wails/v2/internal/logger"
|
|
)
|
|
|
|
type Person interface {
|
|
FullName() string
|
|
}
|
|
|
|
type person struct {
|
|
Firstname string
|
|
Lastname string
|
|
}
|
|
|
|
func newPerson(firstname string, lastname string) *person {
|
|
result := &person{}
|
|
result.Firstname = firstname
|
|
result.Lastname = lastname
|
|
return result
|
|
}
|
|
|
|
func (p *person) FullName() string {
|
|
return p.Firstname + " " + p.Lastname
|
|
}
|
|
|
|
func TestSingleTopic(t *testing.T) {
|
|
|
|
is := is.New(t)
|
|
|
|
var expected string = "I am a message!"
|
|
var actual string
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
// Create new bus
|
|
bus := New(logger.New())
|
|
messageChannel, _ := bus.Subscribe("hello")
|
|
|
|
wg.Add(1)
|
|
go func() {
|
|
message := <-messageChannel
|
|
actual = message.Data().(string)
|
|
wg.Done()
|
|
}()
|
|
|
|
bus.Start()
|
|
bus.Publish("hello", "I am a message!")
|
|
wg.Wait()
|
|
bus.Stop()
|
|
|
|
is.Equal(actual, expected)
|
|
|
|
}
|
|
func TestMultipleTopics(t *testing.T) {
|
|
|
|
is := is.New(t)
|
|
|
|
var hello string
|
|
var world string
|
|
var expected string = "Hello World!"
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
// Create new bus
|
|
bus := New(logger.New())
|
|
|
|
// Create subscriptions
|
|
helloChannel, _ := bus.Subscribe("hello")
|
|
worldChannel, _ := bus.Subscribe("world")
|
|
|
|
wg.Add(1)
|
|
go func() {
|
|
counter := 2
|
|
for counter > 0 {
|
|
select {
|
|
case helloMessage := <-helloChannel:
|
|
hello = helloMessage.Data().(string)
|
|
counter--
|
|
case worldMessage := <-worldChannel:
|
|
world = worldMessage.Data().(string)
|
|
counter--
|
|
}
|
|
}
|
|
wg.Done()
|
|
}()
|
|
|
|
bus.Start()
|
|
bus.Publish("hello", "Hello ")
|
|
bus.Publish("world", "World!")
|
|
wg.Wait()
|
|
bus.Stop()
|
|
|
|
is.Equal(hello+world, expected)
|
|
}
|
|
|
|
func TestSingleTopicWildcard(t *testing.T) {
|
|
|
|
is := is.New(t)
|
|
|
|
var expected string = "I am a message!"
|
|
var actual string
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
// Create new bus
|
|
bus := New(logger.New())
|
|
messageChannel, _ := bus.Subscribe("hello")
|
|
|
|
wg.Add(1)
|
|
go func() {
|
|
message := <-messageChannel
|
|
actual = message.Data().(string)
|
|
wg.Done()
|
|
}()
|
|
|
|
bus.Start()
|
|
bus.Publish("hello:wildcard:test", "I am a message!")
|
|
wg.Wait()
|
|
bus.Stop()
|
|
|
|
is.Equal(actual, expected)
|
|
|
|
}
|
|
func TestMultipleTopicsWildcard(t *testing.T) {
|
|
|
|
is := is.New(t)
|
|
|
|
var hello string
|
|
var world string
|
|
var expected string = "Hello World!"
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
// Create new bus
|
|
bus := New(logger.New())
|
|
helloChannel, _ := bus.Subscribe("hello")
|
|
worldChannel, _ := bus.Subscribe("world")
|
|
|
|
wg.Add(1)
|
|
go func() {
|
|
counter := 2
|
|
for counter > 0 {
|
|
select {
|
|
case helloMessage := <-helloChannel:
|
|
hello = helloMessage.Data().(string)
|
|
counter--
|
|
case worldMessage := <-worldChannel:
|
|
world = worldMessage.Data().(string)
|
|
counter--
|
|
}
|
|
}
|
|
wg.Done()
|
|
}()
|
|
|
|
bus.Start()
|
|
bus.Publish("hello:wildcard:test", "Hello ")
|
|
bus.Publish("world:wildcard:test", "World!")
|
|
wg.Wait()
|
|
bus.Stop()
|
|
|
|
is.Equal(hello+world, expected)
|
|
}
|
|
|
|
func TestStructData(t *testing.T) {
|
|
|
|
is := is.New(t)
|
|
|
|
var expected string = "Tom Jones"
|
|
var actual string
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
// Create new bus
|
|
bus := New(logger.New())
|
|
messageChannel, _ := bus.Subscribe("person")
|
|
|
|
wg.Add(1)
|
|
go func() {
|
|
message := <-messageChannel
|
|
p := message.Data().(*person)
|
|
actual = p.FullName()
|
|
wg.Done()
|
|
}()
|
|
|
|
bus.Start()
|
|
bus.Publish("person", newPerson("Tom", "Jones"))
|
|
wg.Wait()
|
|
bus.Stop()
|
|
|
|
is.Equal(actual, expected)
|
|
|
|
}
|
|
|
|
func TestErrors(t *testing.T) {
|
|
|
|
is := is.New(t)
|
|
|
|
// Create new bus
|
|
bus := New(logger.New())
|
|
|
|
_, err := bus.Subscribe("person")
|
|
is.NoErr(err)
|
|
|
|
err = bus.Start()
|
|
is.NoErr(err)
|
|
|
|
err = bus.Publish("person", newPerson("Tom", "Jones"))
|
|
is.NoErr(err)
|
|
|
|
err = bus.Stop()
|
|
is.NoErr(err)
|
|
|
|
err = bus.Stop()
|
|
is.True(err != nil)
|
|
|
|
err = bus.Start()
|
|
is.True(err != nil)
|
|
|
|
_, err = bus.Subscribe("person")
|
|
is.True(err != nil)
|
|
|
|
err = bus.Publish("person", newPerson("Tom", "Jones"))
|
|
is.True(err != nil)
|
|
|
|
}
|