Skip to content

Commit 999a273

Browse files
committed
Fix DeleteMessageBatch form parsing
1 parent f58f9b0 commit 999a273

File tree

4 files changed

+93
-20
lines changed

4 files changed

+93
-20
lines changed

app/gosqs/delete_message_batch.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ import (
1212
)
1313

1414
func DeleteMessageBatchV1(req *http.Request) (int, interfaces.AbstractResponseBody) {
15-
1615
requestBody := models.NewDeleteMessageBatchRequest()
1716
ok := utils.REQUEST_TRANSFORMER(requestBody, req, false)
18-
1917
if !ok {
2018
log.Error("Invalid Request - DeleteMessageBatchV1")
2119
return utils.CreateErrorResponseV1("InvalidParameterValue", true)
@@ -44,12 +42,12 @@ func DeleteMessageBatchV1(req *http.Request) (int, interfaces.AbstractResponseBo
4442
return utils.CreateErrorResponseV1("TooManyEntriesInBatchRequest", true)
4543
}
4644

47-
ids := map[string]struct{}{}
45+
ids := map[string]bool{}
4846
for _, v := range requestBody.Entries {
49-
if _, ok := ids[v.Id]; ok {
47+
if _, found := ids[v.Id]; found {
5048
return utils.CreateErrorResponseV1("BatchEntryIdsNotDistinct", true)
5149
}
52-
ids[v.Id] = struct{}{}
50+
ids[v.Id] = true
5351
}
5452

5553
models.SyncQueues.Lock()

app/models/requests.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,15 +525,34 @@ type DeleteMessageBatchRequestEntry struct {
525525
}
526526

527527
type DeleteMessageBatchRequest struct {
528-
Entries []DeleteMessageBatchRequestEntry `json:"Entries" schema:"Entries"`
528+
Entries []DeleteMessageBatchRequestEntry `json:"Entries"`
529529
QueueUrl string `json:"QueueUrl" schema:"QueueUrl"`
530530
}
531531

532532
func NewDeleteMessageBatchRequest() *DeleteMessageBatchRequest {
533533
return &DeleteMessageBatchRequest{}
534534
}
535535

536-
func (r *DeleteMessageBatchRequest) SetAttributesFromForm(values url.Values) {}
536+
func (r *DeleteMessageBatchRequest) SetAttributesFromForm(values url.Values) {
537+
entries := []DeleteMessageBatchRequestEntry{}
538+
for i := 1; true; i++ {
539+
msgIdKey := fmt.Sprintf("DeleteMessageBatchRequestEntry.%d.Id", i)
540+
receiptHandleKey := fmt.Sprintf("DeleteMessageBatchRequestEntry.%d.ReceiptHandle", i)
541+
542+
msgId := values.Get(msgIdKey)
543+
receiptHandle := values.Get(receiptHandleKey)
544+
if msgId == "" || receiptHandle == "" {
545+
break
546+
}
547+
entries = append(entries, DeleteMessageBatchRequestEntry{
548+
Id: msgId,
549+
ReceiptHandle: receiptHandle,
550+
})
551+
}
552+
if len(entries) > 0 {
553+
r.Entries = entries
554+
}
555+
}
537556

538557
// ---- SNS ----
539558
func NewCreateTopicRequest() *CreateTopicRequest {

app/models/requests_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,3 +566,58 @@ func TestSubscribeRequest_SetAttributesFromForm_stops_if_attributes_not_numbered
566566
assert.False(t, cqr.Attributes.RawMessageDelivery)
567567
assert.Equal(t, FilterPolicy(nil), cqr.Attributes.FilterPolicy)
568568
}
569+
570+
func Test_DeleteMessageBatchRequest_SetAttributesFromForm_success(t *testing.T) {
571+
form := url.Values{}
572+
form.Add("DeleteMessageBatchRequestEntry.1.Id", "message-id-1")
573+
form.Add("DeleteMessageBatchRequestEntry.1.ReceiptHandle", "receipt-handle-1")
574+
form.Add("DeleteMessageBatchRequestEntry.2.Id", "message-id-2")
575+
form.Add("DeleteMessageBatchRequestEntry.2.ReceiptHandle", "receipt-handle-2")
576+
form.Add("DeleteMessageBatchRequestEntry.3.Id", "message-id-3")
577+
form.Add("DeleteMessageBatchRequestEntry.3.ReceiptHandle", "receipt-handle-3")
578+
579+
dmbr := &DeleteMessageBatchRequest{}
580+
dmbr.SetAttributesFromForm(form)
581+
582+
assert.Len(t, dmbr.Entries, 3)
583+
assert.Equal(t, "message-id-1", dmbr.Entries[0].Id)
584+
assert.Equal(t, "receipt-handle-1", dmbr.Entries[0].ReceiptHandle)
585+
assert.Equal(t, "message-id-2", dmbr.Entries[1].Id)
586+
assert.Equal(t, "receipt-handle-2", dmbr.Entries[1].ReceiptHandle)
587+
assert.Equal(t, "message-id-3", dmbr.Entries[2].Id)
588+
assert.Equal(t, "receipt-handle-3", dmbr.Entries[2].ReceiptHandle)
589+
}
590+
591+
func Test_DeleteMessageBatchRequest_SetAttributesFromForm_stops_at_non_sequential_keys(t *testing.T) {
592+
form := url.Values{}
593+
form.Add("DeleteMessageBatchRequestEntry.1.Id", "message-id-1")
594+
form.Add("DeleteMessageBatchRequestEntry.1.ReceiptHandle", "receipt-handle-1")
595+
form.Add("DeleteMessageBatchRequestEntry.4.Id", "message-id-2")
596+
form.Add("DeleteMessageBatchRequestEntry.4.ReceiptHandle", "receipt-handle-2")
597+
form.Add("DeleteMessageBatchRequestEntry.3.Id", "message-id-3")
598+
form.Add("DeleteMessageBatchRequestEntry.3.ReceiptHandle", "receipt-handle-3")
599+
600+
dmbr := &DeleteMessageBatchRequest{}
601+
dmbr.SetAttributesFromForm(form)
602+
603+
assert.Len(t, dmbr.Entries, 1)
604+
assert.Equal(t, "message-id-1", dmbr.Entries[0].Id)
605+
assert.Equal(t, "receipt-handle-1", dmbr.Entries[0].ReceiptHandle)
606+
}
607+
608+
func Test_DeleteMessageBatchRequest_SetAttributesFromForm_stops_at_invalid_keys(t *testing.T) {
609+
form := url.Values{}
610+
form.Add("DeleteMessageBatchRequestEntry.1.Id", "message-id-1")
611+
form.Add("DeleteMessageBatchRequestEntry.1.ReceiptHandle", "receipt-handle-1")
612+
form.Add("INVALID_DeleteMessageBatchRequestEntry.2.Id", "message-id-2")
613+
form.Add("DeleteMessageBatchRequestEntry.2.ReceiptHandle", "receipt-handle-2")
614+
form.Add("DeleteMessageBatchRequestEntry.3.Id", "message-id-3")
615+
form.Add("DeleteMessageBatchRequestEntry.3.ReceiptHandle", "receipt-handle-3")
616+
617+
dmbr := &DeleteMessageBatchRequest{}
618+
dmbr.SetAttributesFromForm(form)
619+
620+
assert.Len(t, dmbr.Entries, 1)
621+
assert.Equal(t, "message-id-1", dmbr.Entries[0].Id)
622+
assert.Equal(t, "receipt-handle-1", dmbr.Entries[0].ReceiptHandle)
623+
}

smoke_tests/sqs_delete_message_batch_test.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,8 @@ func Test_DeleteMessageBatchV1_json_success_all_delete(t *testing.T) {
231231
models.ResetResources()
232232
}()
233233

234-
sdkConfig, _ := config.LoadDefaultConfig(context.TODO())
234+
//sdkConfig, _ := config.LoadDefaultConfig(context.TODO())
235+
sdkConfig := GenerateLocalProxyConfig(9090)
235236
sdkConfig.BaseEndpoint = aws.String(server.URL)
236237
sqsClient := sqs.NewFromConfig(sdkConfig)
237238

@@ -468,12 +469,12 @@ func Test_DeleteMessageBatchV1_xml_success_not_found_message(t *testing.T) {
468469
// delete messages
469470
deletedMessages := e.POST("/").
470471
WithForm(deleteMessageBatchRequestBodyXML).
471-
WithFormField("Entries.0.Id", testId1).
472-
WithFormField("Entries.0.ReceiptHandle", *receivedMessageResponse1.Messages[0].ReceiptHandle).
473-
WithFormField("Entries.1.Id", testId2).
474-
WithFormField("Entries.1.ReceiptHandle", *receivedMessageResponse2.Messages[0].ReceiptHandle).
475-
WithFormField("Entries.2.Id", testId3).
476-
WithFormField("Entries.2.ReceiptHandle", *receivedMessageResponse1.Messages[1].ReceiptHandle).
472+
WithFormField("DeleteMessageBatchRequestEntry.1.Id", testId1).
473+
WithFormField("DeleteMessageBatchRequestEntry.1.ReceiptHandle", *receivedMessageResponse1.Messages[0].ReceiptHandle).
474+
WithFormField("DeleteMessageBatchRequestEntry.2.Id", testId2).
475+
WithFormField("DeleteMessageBatchRequestEntry.2.ReceiptHandle", *receivedMessageResponse2.Messages[0].ReceiptHandle).
476+
WithFormField("DeleteMessageBatchRequestEntry.3.Id", testId3).
477+
WithFormField("DeleteMessageBatchRequestEntry.3.ReceiptHandle", *receivedMessageResponse1.Messages[1].ReceiptHandle).
477478
Expect().
478479
Status(http.StatusOK).
479480
Body().Raw()
@@ -563,12 +564,12 @@ func Test_DeleteMessageBatchV1_xml_success_all_deletes(t *testing.T) {
563564
// delete messages
564565
deletedMessages := e.POST("/").
565566
WithForm(deleteMessageBatchRequestBodyXML).
566-
WithFormField("Entries.0.Id", testId1).
567-
WithFormField("Entries.0.ReceiptHandle", *receivedMessageResponse.Messages[0].ReceiptHandle).
568-
WithFormField("Entries.1.Id", testId2).
569-
WithFormField("Entries.1.ReceiptHandle", *receivedMessageResponse.Messages[1].ReceiptHandle).
570-
WithFormField("Entries.2.Id", testId3).
571-
WithFormField("Entries.2.ReceiptHandle", *receivedMessageResponse.Messages[2].ReceiptHandle).
567+
WithFormField("DeleteMessageBatchRequestEntry.1.Id", testId1).
568+
WithFormField("DeleteMessageBatchRequestEntry.1.ReceiptHandle", *receivedMessageResponse.Messages[0].ReceiptHandle).
569+
WithFormField("DeleteMessageBatchRequestEntry.2.Id", testId2).
570+
WithFormField("DeleteMessageBatchRequestEntry.2.ReceiptHandle", *receivedMessageResponse.Messages[1].ReceiptHandle).
571+
WithFormField("DeleteMessageBatchRequestEntry.3.Id", testId3).
572+
WithFormField("DeleteMessageBatchRequestEntry.3.ReceiptHandle", *receivedMessageResponse.Messages[2].ReceiptHandle).
572573
Expect().
573574
Status(http.StatusOK).
574575
Body().Raw()

0 commit comments

Comments
 (0)