- 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
330 lines
8.7 KiB
Go
330 lines
8.7 KiB
Go
package gosqs
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"shared-sqs/app/conf"
|
|
"shared-sqs/app/fixtures"
|
|
"shared-sqs/app/interfaces"
|
|
"shared-sqs/app/models"
|
|
"shared-sqs/app/test"
|
|
"shared-sqs/app/utils"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDeleteMessageBatchV1_success_all_message(t *testing.T) {
|
|
models.CurrentEnvironment = fixtures.LOCAL_ENVIRONMENT
|
|
|
|
defer func() {
|
|
models.ResetApp()
|
|
utils.REQUEST_TRANSFORMER = utils.TransformRequest
|
|
}()
|
|
|
|
q := &models.Queue{
|
|
Name: "testing",
|
|
Messages: []models.SqsMessage{
|
|
{
|
|
MessageBody: "test%20message%20body%201",
|
|
ReceiptHandle: "test1",
|
|
},
|
|
{
|
|
MessageBody: "test%20message%20body%202",
|
|
ReceiptHandle: "test2",
|
|
},
|
|
{
|
|
MessageBody: "test%20message%20body%203",
|
|
ReceiptHandle: "test3",
|
|
},
|
|
},
|
|
}
|
|
models.SyncQueues.Queues["testing"] = q
|
|
|
|
utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
|
|
v := resultingStruct.(*models.DeleteMessageBatchRequest)
|
|
*v = models.DeleteMessageBatchRequest{
|
|
Entries: []models.DeleteMessageBatchRequestEntry{
|
|
{
|
|
Id: "delete-test-1",
|
|
ReceiptHandle: "test1",
|
|
},
|
|
{
|
|
Id: "delete-test-2",
|
|
ReceiptHandle: "test2",
|
|
},
|
|
{
|
|
Id: "delete-test-3",
|
|
ReceiptHandle: "test3",
|
|
},
|
|
},
|
|
QueueUrl: fmt.Sprintf("%s/%s", fixtures.BASE_URL, "testing"),
|
|
}
|
|
return true
|
|
}
|
|
_, request2 := test.GenerateRequestInfo(
|
|
"POST",
|
|
"/",
|
|
nil,
|
|
true)
|
|
|
|
status, response2 := DeleteMessageBatchV1(request2)
|
|
deleteMessageBatchResponse := response2.(models.DeleteMessageBatchResponse)
|
|
assert.Equal(t, status, http.StatusOK)
|
|
assert.Equal(t, "delete-test-1", deleteMessageBatchResponse.Result.Successful[0].Id)
|
|
assert.Equal(t, "delete-test-2", deleteMessageBatchResponse.Result.Successful[1].Id)
|
|
assert.Equal(t, "delete-test-3", deleteMessageBatchResponse.Result.Successful[2].Id)
|
|
assert.Empty(t, deleteMessageBatchResponse.Result.Failed)
|
|
assert.Empty(t, models.SyncQueues.Queues["testing"].Messages)
|
|
}
|
|
func TestDeleteMessageBatchV1_success_not_found_message(t *testing.T) {
|
|
models.CurrentEnvironment = fixtures.LOCAL_ENVIRONMENT
|
|
|
|
defer func() {
|
|
models.ResetApp()
|
|
utils.REQUEST_TRANSFORMER = utils.TransformRequest
|
|
}()
|
|
|
|
q := &models.Queue{
|
|
Name: "testing",
|
|
Messages: []models.SqsMessage{
|
|
{
|
|
MessageBody: "test%20message%20body%201",
|
|
ReceiptHandle: "test1",
|
|
},
|
|
{
|
|
MessageBody: "test%20message%20body%203",
|
|
ReceiptHandle: "test3",
|
|
},
|
|
},
|
|
}
|
|
models.SyncQueues.Queues["testing"] = q
|
|
|
|
utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
|
|
v := resultingStruct.(*models.DeleteMessageBatchRequest)
|
|
*v = models.DeleteMessageBatchRequest{
|
|
Entries: []models.DeleteMessageBatchRequestEntry{
|
|
{
|
|
Id: "delete-test-1",
|
|
ReceiptHandle: "test1",
|
|
},
|
|
{
|
|
Id: "delete-test-2",
|
|
ReceiptHandle: "test2",
|
|
},
|
|
{
|
|
Id: "delete-test-3",
|
|
ReceiptHandle: "test3",
|
|
},
|
|
},
|
|
QueueUrl: fmt.Sprintf("%s/%s", fixtures.BASE_URL, "testing"),
|
|
}
|
|
return true
|
|
}
|
|
_, request := test.GenerateRequestInfo(
|
|
"POST",
|
|
"/",
|
|
nil,
|
|
true)
|
|
|
|
status, response := DeleteMessageBatchV1(request)
|
|
deleteMessageBatchResponse := response.(models.DeleteMessageBatchResponse)
|
|
assert.Equal(t, status, http.StatusOK)
|
|
assert.Equal(t, "delete-test-1", deleteMessageBatchResponse.Result.Successful[0].Id)
|
|
assert.Equal(t, "delete-test-3", deleteMessageBatchResponse.Result.Successful[1].Id)
|
|
assert.Equal(t, "1", deleteMessageBatchResponse.Result.Failed[0].Code)
|
|
assert.Equal(t, "delete-test-2", deleteMessageBatchResponse.Result.Failed[0].Id)
|
|
assert.Equal(t, "Message not found", deleteMessageBatchResponse.Result.Failed[0].Message)
|
|
assert.True(t, deleteMessageBatchResponse.Result.Failed[0].SenderFault)
|
|
assert.Empty(t, models.SyncQueues.Queues["testing"].Messages)
|
|
}
|
|
|
|
func TestDeleteMessageBatchV1_error_not_found_queue(t *testing.T) {
|
|
models.CurrentEnvironment = fixtures.LOCAL_ENVIRONMENT
|
|
|
|
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.DeleteMessageBatchRequest)
|
|
*v = models.DeleteMessageBatchRequest{
|
|
Entries: []models.DeleteMessageBatchRequestEntry{
|
|
{
|
|
Id: "delete-test-1",
|
|
ReceiptHandle: "test1",
|
|
},
|
|
{
|
|
Id: "delete-test-2",
|
|
ReceiptHandle: "test2",
|
|
},
|
|
{
|
|
Id: "delete-test-3",
|
|
ReceiptHandle: "test3",
|
|
},
|
|
},
|
|
QueueUrl: fmt.Sprintf("%s/%s", fixtures.BASE_URL, "not-exist-queue"),
|
|
}
|
|
return true
|
|
}
|
|
_, r := test.GenerateRequestInfo(
|
|
"POST",
|
|
"/",
|
|
nil,
|
|
true)
|
|
|
|
status, _ := DeleteMessageBatchV1(r)
|
|
assert.Equal(t, status, http.StatusBadRequest)
|
|
|
|
}
|
|
|
|
func TestDeleteMessageBatchV1_error_no_entry(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.DeleteMessageBatchRequest)
|
|
*v = models.DeleteMessageBatchRequest{
|
|
Entries: make([]models.DeleteMessageBatchRequestEntry, 0),
|
|
QueueUrl: fmt.Sprintf("%s/%s", fixtures.BASE_URL, "unit-queue1"),
|
|
}
|
|
return true
|
|
}
|
|
_, r := test.GenerateRequestInfo(
|
|
"POST",
|
|
"/",
|
|
nil,
|
|
true)
|
|
|
|
status, _ := DeleteMessageBatchV1(r)
|
|
assert.Equal(t, status, http.StatusBadRequest)
|
|
}
|
|
|
|
func TestDeleteMessageBatchV1_error_too_many_entries(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.DeleteMessageBatchRequest)
|
|
*v = models.DeleteMessageBatchRequest{
|
|
Entries: []models.DeleteMessageBatchRequestEntry{
|
|
{
|
|
Id: "test-1",
|
|
ReceiptHandle: "test-1",
|
|
},
|
|
{
|
|
Id: "test-2",
|
|
ReceiptHandle: "test-2",
|
|
},
|
|
{
|
|
Id: "test-3",
|
|
ReceiptHandle: "test-3",
|
|
},
|
|
{
|
|
Id: "test-4",
|
|
ReceiptHandle: "test-4",
|
|
},
|
|
{
|
|
Id: "test-5",
|
|
ReceiptHandle: "test-5",
|
|
},
|
|
{
|
|
Id: "test-6",
|
|
ReceiptHandle: "test-6",
|
|
},
|
|
{
|
|
Id: "test-7",
|
|
ReceiptHandle: "test-7",
|
|
},
|
|
{
|
|
Id: "test-8",
|
|
ReceiptHandle: "test-8",
|
|
},
|
|
{
|
|
Id: "test-9",
|
|
ReceiptHandle: "test-9",
|
|
},
|
|
{
|
|
Id: "test-10",
|
|
ReceiptHandle: "test-10",
|
|
},
|
|
{
|
|
Id: "test-11",
|
|
ReceiptHandle: "test-11",
|
|
},
|
|
},
|
|
QueueUrl: fmt.Sprintf("%s/%s", fixtures.BASE_URL, "unit-queue1"),
|
|
}
|
|
return true
|
|
}
|
|
_, r := test.GenerateRequestInfo(
|
|
"POST",
|
|
"/",
|
|
nil,
|
|
true)
|
|
|
|
status, _ := DeleteMessageBatchV1(r)
|
|
assert.Equal(t, status, http.StatusBadRequest)
|
|
}
|
|
|
|
func TestDeleteMessageBatchV1_Error_IdNotDistinct(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.DeleteMessageBatchRequest)
|
|
*v = models.DeleteMessageBatchRequest{
|
|
Entries: []models.DeleteMessageBatchRequestEntry{
|
|
{
|
|
Id: "delete-test-1",
|
|
ReceiptHandle: "test1",
|
|
},
|
|
{
|
|
Id: "delete-test-1",
|
|
ReceiptHandle: "test2",
|
|
},
|
|
},
|
|
QueueUrl: fmt.Sprintf("%s/%s", fixtures.BASE_URL, "unit-queue1"),
|
|
}
|
|
return true
|
|
}
|
|
_, r := test.GenerateRequestInfo(
|
|
"POST",
|
|
"/",
|
|
nil,
|
|
true)
|
|
|
|
status, _ := DeleteMessageBatchV1(r)
|
|
assert.Equal(t, http.StatusBadRequest, status)
|
|
}
|
|
|
|
func TestDeleteMessageBatchV1_Error_transformer(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)
|
|
status, _ := DeleteMessageBatchV1(r)
|
|
|
|
assert.Equal(t, http.StatusBadRequest, status)
|
|
|
|
}
|