- Standalone SQS-service repository - Multi-tenant message queue service, AWS SQS compatible - Based on GoAws, with mutable tenants, auth, WebUI, Redis persistence - Ready for independent development and deployment - See doc/ and README.md for architecture and usage
170 lines
5.4 KiB
Go
170 lines
5.4 KiB
Go
package gosqs
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"shared-sqs/app/test"
|
|
|
|
"shared-sqs/app/conf"
|
|
"shared-sqs/app/fixtures"
|
|
"shared-sqs/app/interfaces"
|
|
"shared-sqs/app/models"
|
|
"shared-sqs/app/utils"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestSetQueueAttributesV1_success_multiple_attributes(t *testing.T) {
|
|
conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")
|
|
defer func() {
|
|
models.ResetApp()
|
|
utils.REQUEST_TRANSFORMER = utils.TransformRequest
|
|
}()
|
|
|
|
utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
|
|
v := resultingStruct.(*models.SetQueueAttributesRequest)
|
|
*v = fixtures.SetQueueAttributesRequest
|
|
return true
|
|
}
|
|
|
|
_, r := test.GenerateRequestInfo("POST", "/", nil, true)
|
|
code, response := SetQueueAttributesV1(r)
|
|
|
|
expectedResponse := models.SetQueueAttributesResponse{
|
|
Xmlns: models.BaseXmlns,
|
|
Metadata: models.BaseResponseMetadata,
|
|
}
|
|
assert.Equal(t, http.StatusOK, code)
|
|
assert.Equal(t, expectedResponse, response)
|
|
|
|
actualQueue := models.SyncQueues.Queues["unit-queue1"]
|
|
assert.Equal(t, 5, actualQueue.VisibilityTimeout)
|
|
assert.Equal(t, 4, actualQueue.ReceiveMessageWaitTimeSeconds)
|
|
assert.Equal(t, 1, actualQueue.DelaySeconds)
|
|
assert.Equal(t, 2, actualQueue.MaximumMessageSize)
|
|
assert.Equal(t, 3, actualQueue.MessageRetentionPeriod)
|
|
}
|
|
|
|
func TestSetQueueAttributesV1_success_single_attribute(t *testing.T) {
|
|
conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")
|
|
defer func() {
|
|
models.ResetApp()
|
|
utils.REQUEST_TRANSFORMER = utils.TransformRequest
|
|
}()
|
|
|
|
utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
|
|
v := resultingStruct.(*models.SetQueueAttributesRequest)
|
|
*v = models.SetQueueAttributesRequest{
|
|
QueueUrl: fmt.Sprintf("%s/%s", fixtures.BASE_URL, "unit-queue1"),
|
|
Attributes: models.QueueAttributes{
|
|
VisibilityTimeout: 5,
|
|
},
|
|
}
|
|
return true
|
|
}
|
|
|
|
_, r := test.GenerateRequestInfo("POST", "/", nil, true)
|
|
code, response := SetQueueAttributesV1(r)
|
|
|
|
expectedResponse := models.SetQueueAttributesResponse{
|
|
Xmlns: models.BaseXmlns,
|
|
Metadata: models.BaseResponseMetadata,
|
|
}
|
|
assert.Equal(t, http.StatusOK, code)
|
|
assert.Equal(t, expectedResponse, response)
|
|
|
|
actualQueue := models.SyncQueues.Queues["unit-queue1"]
|
|
assert.Equal(t, 5, actualQueue.VisibilityTimeout)
|
|
assert.Equal(t, 0, actualQueue.ReceiveMessageWaitTimeSeconds)
|
|
assert.Equal(t, 0, actualQueue.DelaySeconds)
|
|
assert.Equal(t, 0, actualQueue.MaximumMessageSize)
|
|
assert.Equal(t, 345600, actualQueue.MessageRetentionPeriod)
|
|
}
|
|
|
|
func TestSetQueueAttributesV1_invalid_request_body(t *testing.T) {
|
|
conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")
|
|
defer func() {
|
|
models.ResetApp()
|
|
utils.REQUEST_TRANSFORMER = utils.TransformRequest
|
|
}()
|
|
|
|
utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
|
|
return false
|
|
}
|
|
|
|
_, r := test.GenerateRequestInfo("POST", "/", nil, true)
|
|
code, _ := SetQueueAttributesV1(r)
|
|
|
|
assert.Equal(t, http.StatusBadRequest, code)
|
|
}
|
|
|
|
func TestSetQueueAttributesV1_missing_queue_url(t *testing.T) {
|
|
conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")
|
|
defer func() {
|
|
models.ResetApp()
|
|
utils.REQUEST_TRANSFORMER = utils.TransformRequest
|
|
}()
|
|
|
|
utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
|
|
v := resultingStruct.(*models.SetQueueAttributesRequest)
|
|
*v = models.SetQueueAttributesRequest{
|
|
Attributes: models.QueueAttributes{},
|
|
}
|
|
return true
|
|
}
|
|
|
|
_, r := test.GenerateRequestInfo("POST", "/", nil, true)
|
|
code, _ := SetQueueAttributesV1(r)
|
|
|
|
assert.Equal(t, http.StatusBadRequest, code)
|
|
}
|
|
|
|
func TestSetQueueAttributesV1_missing_expected_queue(t *testing.T) {
|
|
conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")
|
|
defer func() {
|
|
models.ResetApp()
|
|
utils.REQUEST_TRANSFORMER = utils.TransformRequest
|
|
}()
|
|
|
|
utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
|
|
v := resultingStruct.(*models.SetQueueAttributesRequest)
|
|
*v = models.SetQueueAttributesRequest{
|
|
QueueUrl: "garbage",
|
|
}
|
|
return true
|
|
}
|
|
|
|
_, r := test.GenerateRequestInfo("POST", "/", nil, true)
|
|
code, _ := SetQueueAttributesV1(r)
|
|
|
|
assert.Equal(t, http.StatusBadRequest, code)
|
|
}
|
|
|
|
func TestSetQueueAttributesV1_invalid_redrive_queue(t *testing.T) {
|
|
conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")
|
|
defer func() {
|
|
models.ResetApp()
|
|
utils.REQUEST_TRANSFORMER = utils.TransformRequest
|
|
}()
|
|
|
|
utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
|
|
v := resultingStruct.(*models.SetQueueAttributesRequest)
|
|
*v = models.SetQueueAttributesRequest{
|
|
QueueUrl: fmt.Sprintf("%s/%s", fixtures.BASE_URL, "unit-queue1"),
|
|
Attributes: models.QueueAttributes{
|
|
RedrivePolicy: models.RedrivePolicy{
|
|
MaxReceiveCount: 100,
|
|
DeadLetterTargetArn: fmt.Sprintf("arn:aws:sqs:us-east-1:100010001000:%s", "garbage"),
|
|
},
|
|
},
|
|
}
|
|
return true
|
|
}
|
|
|
|
_, r := test.GenerateRequestInfo("POST", "/", nil, true)
|
|
code, _ := SetQueueAttributesV1(r)
|
|
|
|
assert.Equal(t, http.StatusBadRequest, code)
|
|
}
|