2018-05-15 06:59:01 +00:00
|
|
|
package client
|
|
|
|
|
|
|
|
import (
|
2022-04-15 18:32:05 +00:00
|
|
|
"context"
|
2022-04-03 15:59:38 +00:00
|
|
|
"io/ioutil"
|
2018-05-15 06:59:01 +00:00
|
|
|
"net/http/httptest"
|
2022-04-03 15:59:38 +00:00
|
|
|
"os"
|
2018-05-15 06:59:01 +00:00
|
|
|
"testing"
|
2022-04-15 18:32:05 +00:00
|
|
|
"time"
|
2018-05-15 06:59:01 +00:00
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2022-04-03 15:59:38 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2018-05-15 06:59:01 +00:00
|
|
|
|
2021-07-12 21:57:54 +00:00
|
|
|
"git.mills.io/prologic/msgbus"
|
2018-05-15 06:59:01 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestClientPublish(t *testing.T) {
|
|
|
|
assert := assert.New(t)
|
2022-04-03 15:59:38 +00:00
|
|
|
require := require.New(t)
|
2018-05-15 06:59:01 +00:00
|
|
|
|
2022-04-03 15:59:38 +00:00
|
|
|
testdir, err := ioutil.TempDir("", "msgbus-logs-*")
|
|
|
|
require.NoError(err)
|
|
|
|
defer os.RemoveAll(testdir)
|
|
|
|
|
|
|
|
mb, err := msgbus.NewMessageBus(msgbus.WithLogPath(testdir))
|
|
|
|
require.NoError(err)
|
|
|
|
defer os.RemoveAll(testdir)
|
2018-05-15 06:59:01 +00:00
|
|
|
|
|
|
|
server := httptest.NewServer(mb)
|
|
|
|
defer server.Close()
|
|
|
|
|
|
|
|
client := NewClient(server.URL, nil)
|
|
|
|
|
2022-04-03 15:59:38 +00:00
|
|
|
err = client.Publish("hello", "hello world")
|
2018-05-15 06:59:01 +00:00
|
|
|
assert.NoError(err)
|
|
|
|
|
|
|
|
topic := mb.NewTopic("hello")
|
2022-04-03 15:59:38 +00:00
|
|
|
msg, ok := mb.Get(topic)
|
|
|
|
require.True(ok)
|
|
|
|
assert.Equal(int64(1), msg.ID)
|
|
|
|
assert.Equal(topic, msg.Topic)
|
|
|
|
assert.Equal([]byte("hello world"), msg.Payload)
|
2018-05-15 06:59:01 +00:00
|
|
|
}
|
2022-04-15 18:32:05 +00:00
|
|
|
|
|
|
|
func TestCancelContextOnSubscribe(t *testing.T) {
|
|
|
|
|
|
|
|
assert := assert.New(t)
|
|
|
|
require := require.New(t)
|
|
|
|
|
|
|
|
logDir, err := ioutil.TempDir("", "msgbus-logs-*")
|
|
|
|
require.NoError(err)
|
|
|
|
defer os.RemoveAll(logDir)
|
|
|
|
|
|
|
|
mb, err := msgbus.NewMessageBus(msgbus.WithLogPath(logDir))
|
|
|
|
require.NoError(err)
|
|
|
|
defer os.RemoveAll(logDir)
|
|
|
|
|
|
|
|
server := httptest.NewServer(mb)
|
|
|
|
defer server.Close()
|
|
|
|
|
|
|
|
client := NewClient(server.URL, nil)
|
|
|
|
|
|
|
|
sub := client.Subscribe("hello", 1, func(msg *msgbus.Message) error { return nil })
|
|
|
|
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
cancel()
|
|
|
|
|
|
|
|
failAfter := time.NewTimer(5 * time.Second)
|
|
|
|
|
|
|
|
errChan := make(chan error)
|
|
|
|
go func() {
|
|
|
|
errChan <- sub.Run(ctx)
|
|
|
|
}()
|
|
|
|
|
|
|
|
loop := true
|
|
|
|
for loop {
|
|
|
|
select {
|
|
|
|
case <-failAfter.C:
|
|
|
|
loop = false
|
|
|
|
t.Fatal("Run() with cancelled context did not exit on time")
|
|
|
|
case runError := <-errChan:
|
|
|
|
loop = false
|
|
|
|
assert.ErrorIs(runError, context.Canceled)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
cancel()
|
|
|
|
<-ctx.Done()
|
|
|
|
|
|
|
|
}
|