go-sdk/service/internal/topicsubscription_test.go

75 lines
3.0 KiB
Go

package internal_test
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/assert"
"github.com/dapr/go-sdk/service/internal"
)
func TestTopicSubscripiton(t *testing.T) {
t.Run("duplicate metadata", func(t *testing.T) {
sub := internal.NewTopicSubscription("test", "mytopic", "")
require.NoError(t, sub.SetMetadata(map[string]string{
"test": "test",
}))
require.EqualError(t, sub.SetMetadata(map[string]string{
"test": "test",
}), "subscription for topic mytopic on pubsub test already has metadata set")
})
t.Run("duplicate route", func(t *testing.T) {
sub := internal.NewTopicSubscription("test", "mytopic", "")
require.NoError(t, sub.SetDefaultRoute("/test"))
assert.Equal(t, "/test", sub.Route)
require.EqualError(t, sub.SetDefaultRoute("/test"),
"subscription for topic mytopic on pubsub test already has route /test")
})
t.Run("duplicate route after routing rule", func(t *testing.T) {
sub := internal.NewTopicSubscription("test", "mytopic", "")
require.NoError(t, sub.AddRoutingRule("/other", `event.type == "test"`, 0))
require.NoError(t, sub.SetDefaultRoute("/test"))
require.EqualError(t, sub.SetDefaultRoute("/test"),
"subscription for topic mytopic on pubsub test already has route /test")
})
t.Run("default route after routing rule", func(t *testing.T) {
sub := internal.NewTopicSubscription("test", "mytopic", "")
require.NoError(t, sub.SetDefaultRoute("/test"))
assert.Equal(t, "/test", sub.Route)
require.NoError(t, sub.AddRoutingRule("/other", `event.type == "test"`, 0))
assert.Equal(t, "", sub.Route)
assert.Equal(t, "/test", sub.Routes.Default)
require.EqualError(t, sub.SetDefaultRoute("/test"),
"subscription for topic mytopic on pubsub test already has route /test")
})
t.Run("duplicate routing rule priority", func(t *testing.T) {
sub := internal.NewTopicSubscription("test", "mytopic", "")
require.NoError(t, sub.AddRoutingRule("/other", `event.type == "other"`, 1))
require.EqualError(t, sub.AddRoutingRule("/test", `event.type == "test"`, 1),
"subscription for topic mytopic on pubsub test already has a routing rule with priority 1")
})
t.Run("priority ordering", func(t *testing.T) {
sub := internal.NewTopicSubscription("test", "mytopic", "")
require.NoError(t, sub.AddRoutingRule("/100", `event.type == "100"`, 100))
require.NoError(t, sub.AddRoutingRule("/1", `event.type == "1"`, 1))
require.NoError(t, sub.AddRoutingRule("/50", `event.type == "50"`, 50))
require.NoError(t, sub.SetDefaultRoute("/default"))
assert.Equal(t, "/default", sub.Routes.Default)
if assert.Len(t, sub.Routes.Rules, 3) {
assert.Equal(t, "/1", sub.Routes.Rules[0].Path)
assert.Equal(t, `event.type == "1"`, sub.Routes.Rules[0].Match)
assert.Equal(t, "/50", sub.Routes.Rules[1].Path)
assert.Equal(t, `event.type == "50"`, sub.Routes.Rules[1].Match)
assert.Equal(t, "/100", sub.Routes.Rules[2].Path)
assert.Equal(t, `event.type == "100"`, sub.Routes.Rules[2].Match)
}
})
}