Dawid Wysokiński
5e9399a3d0
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: twhelp/core#38
77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
package msg_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/ThreeDotsLabs/watermill/pubsub/gochannel"
|
|
|
|
"github.com/ThreeDotsLabs/watermill"
|
|
"github.com/ThreeDotsLabs/watermill/message"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type registerer interface {
|
|
Register(router *message.Router)
|
|
}
|
|
|
|
func runRouter(tb testing.TB, rs ...registerer) *message.Router {
|
|
tb.Helper()
|
|
|
|
router, err := message.NewRouter(message.RouterConfig{}, watermill.NopLogger{})
|
|
require.NoError(tb, err)
|
|
tb.Cleanup(func() {
|
|
_ = router.Close()
|
|
})
|
|
|
|
for _, r := range rs {
|
|
r.Register(router)
|
|
}
|
|
|
|
go func() {
|
|
require.NoError(tb, router.Run(context.Background()))
|
|
}()
|
|
<-router.Running()
|
|
|
|
return router
|
|
}
|
|
|
|
func newPubSub(tb testing.TB) *gochannel.GoChannel {
|
|
tb.Helper()
|
|
|
|
pubSub := gochannel.NewGoChannel(gochannel.Config{Persistent: true}, watermill.NopLogger{})
|
|
tb.Cleanup(func() {
|
|
_ = pubSub.Close()
|
|
})
|
|
return pubSub
|
|
}
|
|
|
|
type middlewareRegisterer struct {
|
|
h message.HandlerMiddleware
|
|
}
|
|
|
|
var _ registerer = middlewareRegisterer{}
|
|
|
|
func (m middlewareRegisterer) Register(router *message.Router) {
|
|
router.AddMiddleware(m.h)
|
|
}
|
|
|
|
func newWaitForHandlerMiddleware(handlerName string) (middlewareRegisterer, <-chan struct{}) {
|
|
ch := make(chan struct{})
|
|
return middlewareRegisterer{
|
|
h: func(h message.HandlerFunc) message.HandlerFunc {
|
|
return func(msg *message.Message) ([]*message.Message, error) {
|
|
if message.HandlerNameFromCtx(msg.Context()) != handlerName {
|
|
return h(msg)
|
|
}
|
|
|
|
result, err := h(msg)
|
|
if len(result) == 0 && err == nil {
|
|
close(ch)
|
|
}
|
|
return result, err
|
|
}
|
|
},
|
|
}, ch
|
|
}
|