Skip to content

Commit ffa95eb

Browse files
committed
Add remaining CreateQueueV1 tests
1 parent 75e8a05 commit ffa95eb

File tree

12 files changed

+592
-23
lines changed

12 files changed

+592
-23
lines changed

app/conf/config_test.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,18 @@ func TestConfig_NoQueueAttributeDefaults(t *testing.T) {
106106
}
107107
}
108108

109-
//func TestConfig_invalid_config_resorts_to_default_attributes(t *testing.T) {
110-
//// TODO
111-
//}
109+
func TestConfig_invalid_config_resorts_to_default_queue_attributes(t *testing.T) {
110+
env := "missing"
111+
port := LoadYamlConfig("./mock-data/mock-config.yaml", env)
112+
if port[0] != "4100" {
113+
t.Errorf("Expected port number 4100 but got %s\n", port)
114+
}
115+
116+
assert.Equal(t, 262144, app.CurrentEnvironment.QueueAttributeDefaults.MaximumMessageSize)
117+
assert.Equal(t, 345600, app.CurrentEnvironment.QueueAttributeDefaults.MessageRetentionPeriod)
118+
assert.Equal(t, 0, app.CurrentEnvironment.QueueAttributeDefaults.ReceiveMessageWaitTimeSeconds)
119+
assert.Equal(t, 30, app.CurrentEnvironment.QueueAttributeDefaults.VisibilityTimeout)
120+
}
112121

113122
func TestConfig_LoadYamlConfig_finds_default_config(t *testing.T) {
114123
expectedQueues := []string{

app/fixtures/request.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package fixtures
2+
3+
var JSONRequestBody = struct {
4+
RequestField string `json:"field"`
5+
}{
6+
RequestField: "mock-value",
7+
}

app/gosqs/gosqs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1013,7 +1013,7 @@ func createErrorResponseV1(err string) (int, app.ErrorResponse) {
10131013
er := app.SqsErrors[err]
10141014
respStruct := app.ErrorResponse{
10151015
Result: app.ErrorResult{Type: er.Type, Code: er.Code, Message: er.Message},
1016-
RequestId: "00000000-0000-0000-0000-000000000000",
1016+
RequestId: "00000000-0000-0000-0000-000000000000", // TODO - fix
10171017
}
10181018
return er.HttpError, respStruct
10191019
}

app/gosqs/gosqs_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2233,6 +2233,21 @@ func TestGetQueueAttributes_GetSelectedAttributes(t *testing.T) {
22332233
done <- struct{}{}
22342234
}
22352235

2236+
func TestCreateErrorResponseV1(t *testing.T) {
2237+
expectedResponse := app.ErrorResponse{
2238+
Result: app.ErrorResult{
2239+
Type: "Not Found",
2240+
Code: "AWS.SimpleQueueService.NonExistentQueue",
2241+
Message: "The specified queue does not exist for this wsdl version.",
2242+
},
2243+
RequestId: "00000000-0000-0000-0000-000000000000",
2244+
}
2245+
status, response := createErrorResponseV1("QueueNotFound")
2246+
2247+
assert.Equal(t, http.StatusBadRequest, status)
2248+
assert.Equal(t, expectedResponse, response)
2249+
}
2250+
22362251
// waitTimeout waits for the waitgroup for the specified max timeout.
22372252
// Returns true if waiting timed out.
22382253
// credits: https://stackoverflow.com/questions/32840687/timeout-for-waitgroup-wait

app/gosqs/queue_attributes_test.go

Lines changed: 114 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package gosqs
22

33
import (
4+
"fmt"
45
"net/url"
56
"reflect"
67
"testing"
78

89
"github.com/Admiral-Piett/goaws/app/utils"
910

11+
"github.com/stretchr/testify/assert"
12+
13+
"github.com/Admiral-Piett/goaws/app/models"
14+
1015
"github.com/Admiral-Piett/goaws/app"
1116
)
1217

@@ -63,19 +68,115 @@ func TestApplyQueueAttributes(t *testing.T) {
6368
})
6469
}
6570

66-
func TestExtractQueueAttributes(t *testing.T) {
67-
u := url.Values{}
68-
u.Add("Attribute.1.Name", "DelaySeconds")
69-
u.Add("Attribute.1.Value", "20")
70-
u.Add("Attribute.2.Name", "VisibilityTimeout")
71-
u.Add("Attribute.2.Value", "30")
72-
u.Add("Attribute.3.Name", "Policy")
73-
attr := utils.ExtractQueueAttributes(u)
74-
expected := map[string]string{
75-
"DelaySeconds": "20",
76-
"VisibilityTimeout": "30",
71+
func TestSetQueueAttributesV1_success_no_redrive_policy(t *testing.T) {
72+
var emptyQueue *app.Queue
73+
q := &app.Queue{}
74+
attrs := models.Attributes{
75+
DelaySeconds: 1,
76+
MaximumMessageSize: 2,
77+
MessageRetentionPeriod: 3,
78+
ReceiveMessageWaitTimeSeconds: 4,
79+
VisibilityTimeout: 5,
80+
}
81+
err := setQueueAttributesV1(q, attrs)
82+
83+
assert.Nil(t, err)
84+
assert.Equal(t, 1, q.DelaySeconds)
85+
assert.Equal(t, 2, q.MaximumMessageSize)
86+
assert.Equal(t, 3, q.MessageRetentionPeriod)
87+
assert.Equal(t, 4, q.ReceiveMessageWaitTimeSeconds)
88+
assert.Equal(t, 5, q.VisibilityTimeout)
89+
assert.Equal(t, emptyQueue, q.DeadLetterQueue)
90+
assert.Equal(t, 0, q.MaxReceiveCount)
91+
}
92+
93+
func TestSetQueueAttributesV1_success_no_request_attributes(t *testing.T) {
94+
var emptyQueue *app.Queue
95+
q := &app.Queue{}
96+
attrs := models.Attributes{}
97+
err := setQueueAttributesV1(q, attrs)
98+
99+
assert.Nil(t, err)
100+
assert.Equal(t, 0, q.DelaySeconds)
101+
assert.Equal(t, 0, q.MaximumMessageSize)
102+
assert.Equal(t, 0, q.MessageRetentionPeriod)
103+
assert.Equal(t, 0, q.ReceiveMessageWaitTimeSeconds)
104+
assert.Equal(t, 0, q.VisibilityTimeout)
105+
assert.Equal(t, emptyQueue, q.DeadLetterQueue)
106+
assert.Equal(t, 0, q.MaxReceiveCount)
107+
}
108+
109+
func TestSetQueueAttributesV1_success_can_set_0_values_where_applicable(t *testing.T) {
110+
var emptyQueue *app.Queue
111+
q := &app.Queue{
112+
DelaySeconds: 1,
113+
MaximumMessageSize: 2,
114+
MessageRetentionPeriod: 3,
115+
ReceiveMessageWaitTimeSeconds: 4,
116+
VisibilityTimeout: 5,
117+
}
118+
attrs := models.Attributes{}
119+
err := setQueueAttributesV1(q, attrs)
120+
121+
assert.Nil(t, err)
122+
assert.Equal(t, 0, q.DelaySeconds)
123+
assert.Equal(t, 0, q.MaximumMessageSize)
124+
assert.Equal(t, 3, q.MessageRetentionPeriod)
125+
assert.Equal(t, 4, q.ReceiveMessageWaitTimeSeconds)
126+
assert.Equal(t, 0, q.VisibilityTimeout)
127+
assert.Equal(t, emptyQueue, q.DeadLetterQueue)
128+
assert.Equal(t, 0, q.MaxReceiveCount)
129+
}
130+
131+
func TestSetQueueAttributesV1_success_with_redrive_policy(t *testing.T) {
132+
defer func() {
133+
utils.ResetApp()
134+
}()
135+
136+
existingQueueName := "existing-queue"
137+
existingQueue := &app.Queue{Name: existingQueueName}
138+
app.SyncQueues.Queues[existingQueueName] = existingQueue
139+
140+
q := &app.Queue{}
141+
attrs := models.Attributes{
142+
DelaySeconds: 1,
143+
MaximumMessageSize: 2,
144+
MessageRetentionPeriod: 3,
145+
ReceiveMessageWaitTimeSeconds: 4,
146+
VisibilityTimeout: 5,
147+
RedrivePolicy: models.RedrivePolicy{
148+
MaxReceiveCount: 10,
149+
DeadLetterTargetArn: fmt.Sprintf("arn:aws:sqs:region:account-id:%s", existingQueueName),
150+
},
77151
}
78-
if ok := reflect.DeepEqual(attr, expected); !ok {
79-
t.Fatalf("expected %+v, got %+v", expected, attr)
152+
err := setQueueAttributesV1(q, attrs)
153+
154+
assert.Nil(t, err)
155+
assert.Equal(t, 1, q.DelaySeconds)
156+
assert.Equal(t, 2, q.MaximumMessageSize)
157+
assert.Equal(t, 3, q.MessageRetentionPeriod)
158+
assert.Equal(t, 4, q.ReceiveMessageWaitTimeSeconds)
159+
assert.Equal(t, 5, q.VisibilityTimeout)
160+
assert.Equal(t, existingQueue, q.DeadLetterQueue)
161+
assert.Equal(t, 10, q.MaxReceiveCount)
162+
}
163+
164+
func TestSetQueueAttributesV1_error_redrive_policy_targets_missing_queue(t *testing.T) {
165+
existingQueueName := "existing-queue"
166+
167+
q := &app.Queue{}
168+
attrs := models.Attributes{
169+
DelaySeconds: 1,
170+
MaximumMessageSize: 2,
171+
MessageRetentionPeriod: 3,
172+
ReceiveMessageWaitTimeSeconds: 4,
173+
VisibilityTimeout: 5,
174+
RedrivePolicy: models.RedrivePolicy{
175+
MaxReceiveCount: 10,
176+
DeadLetterTargetArn: fmt.Sprintf("arn:aws:sqs:region:account-id:%s", existingQueueName),
177+
},
80178
}
179+
err := setQueueAttributesV1(q, attrs)
180+
181+
assert.Error(t, err)
81182
}

app/mocks/mocks.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package mocks
2+
3+
import "net/url"
4+
5+
type MockRequestBody struct {
6+
RequestFieldStr string `json:"field" schema:"field"`
7+
RequestFieldInt int `json:"intField" schema:"intField"`
8+
9+
SetAttributesFromFormCalled bool
10+
SetAttributesFromFormCalledWith []interface{}
11+
12+
MockSetAttributesFromFormCalledWith func(values url.Values)
13+
}
14+
15+
func (m *MockRequestBody) SetAttributesFromForm(values url.Values) {
16+
m.SetAttributesFromFormCalled = true
17+
m.SetAttributesFromFormCalledWith = append(m.SetAttributesFromFormCalledWith, values)
18+
if m.MockSetAttributesFromFormCalledWith != nil {
19+
m.MockSetAttributesFromFormCalledWith(values)
20+
}
21+
}

0 commit comments

Comments
 (0)