components-contrib/pubsub/rabbitmq/metadata_test.go

208 lines
5.4 KiB
Go

package rabbitmq
import (
"fmt"
"testing"
"github.com/dapr/components-contrib/pubsub"
"github.com/stretchr/testify/assert"
)
func getFakeProperties() map[string]string {
props := map[string]string{}
props[metadataHostKey] = "fakehost"
props[metadataConsumerIDKey] = "fakeConsumerID"
return props
}
func TestCreateMetadata(t *testing.T) {
var booleanFlagTests = []struct {
in string
expected bool
}{
{"true", true},
{"TRUE", true},
{"false", false},
{"FALSE", false},
}
t.Run("metadata is correct", func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.NoError(t, err)
assert.Equal(t, fakeProperties[metadataHostKey], m.host)
assert.Equal(t, fakeProperties[metadataConsumerIDKey], m.consumerID)
assert.Equal(t, false, m.durable)
assert.Equal(t, false, m.autoAck)
assert.Equal(t, false, m.requeueInFailure)
assert.Equal(t, true, m.deleteWhenUnused)
assert.Equal(t, uint8(0), m.deliveryMode)
})
t.Run("host is not given", func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
fakeMetaData.Properties[metadataHostKey] = ""
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.EqualError(t, err, "rabbitmq pub/sub error: missing RabbitMQ host")
assert.Empty(t, m.host)
assert.Empty(t, m.consumerID)
})
t.Run("consumerID is not given", func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
fakeMetaData.Properties[metadataConsumerIDKey] = ""
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.EqualError(t, err, "rabbitmq pub/sub error: missing RabbitMQ consumerID")
assert.Equal(t, fakeProperties[metadataHostKey], m.host)
assert.Equal(t, fakeProperties[metadataConsumerIDKey], m.consumerID)
assert.Empty(t, m.consumerID)
})
var invalidDeliveryModes = []string{"3", "10", "-1"}
for _, deliveryMode := range invalidDeliveryModes {
t.Run(fmt.Sprintf("deliveryMode value=%s", deliveryMode), func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
fakeMetaData.Properties[metadataDeliveryModeKey] = deliveryMode
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.EqualError(t, err, "rabbitmq pub/sub error: invalid RabbitMQ delivery mode, accepted values are between 0 and 2")
assert.Equal(t, fakeProperties[metadataHostKey], m.host)
assert.Equal(t, fakeProperties[metadataConsumerIDKey], m.consumerID)
assert.Equal(t, uint8(0), m.deliveryMode)
})
}
t.Run("deliveryMode is set", func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
fakeMetaData.Properties[metadataDeliveryModeKey] = "2"
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.NoError(t, err)
assert.Equal(t, fakeProperties[metadataHostKey], m.host)
assert.Equal(t, fakeProperties[metadataConsumerIDKey], m.consumerID)
assert.Equal(t, uint8(2), m.deliveryMode)
})
for _, tt := range booleanFlagTests {
t.Run(fmt.Sprintf("autoAck value=%s", tt.in), func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
fakeMetaData.Properties[metadataAutoAckKey] = tt.in
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.NoError(t, err)
assert.Equal(t, fakeProperties[metadataHostKey], m.host)
assert.Equal(t, fakeProperties[metadataConsumerIDKey], m.consumerID)
assert.Equal(t, tt.expected, m.autoAck)
})
}
for _, tt := range booleanFlagTests {
t.Run(fmt.Sprintf("requeueInFailure value=%s", tt.in), func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
fakeMetaData.Properties[metadataRequeueInFailureKey] = tt.in
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.NoError(t, err)
assert.Equal(t, fakeProperties[metadataHostKey], m.host)
assert.Equal(t, fakeProperties[metadataConsumerIDKey], m.consumerID)
assert.Equal(t, tt.expected, m.requeueInFailure)
})
}
for _, tt := range booleanFlagTests {
t.Run(fmt.Sprintf("deleteWhenUnused value=%s", tt.in), func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
fakeMetaData.Properties[metadataDeleteWhenUnusedKey] = tt.in
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.NoError(t, err)
assert.Equal(t, fakeProperties[metadataHostKey], m.host)
assert.Equal(t, fakeProperties[metadataConsumerIDKey], m.consumerID)
assert.Equal(t, tt.expected, m.deleteWhenUnused)
})
}
for _, tt := range booleanFlagTests {
t.Run(fmt.Sprintf("durable value=%s", tt.in), func(t *testing.T) {
fakeProperties := getFakeProperties()
fakeMetaData := pubsub.Metadata{
Properties: fakeProperties,
}
fakeMetaData.Properties[metadataDurableKey] = tt.in
// act
m, err := createMetadata(fakeMetaData)
// assert
assert.NoError(t, err)
assert.Equal(t, fakeProperties[metadataHostKey], m.host)
assert.Equal(t, fakeProperties[metadataConsumerIDKey], m.consumerID)
assert.Equal(t, tt.expected, m.durable)
})
}
}