@@ -11,6 +11,8 @@ import (
1111
1212 "github.com/DataDog/datadog-serverless-functions/aws/logs_monitoring_go/internal/sdkclient"
1313 "github.com/DataDog/datadog-serverless-functions/aws/logs_monitoring_go/internal/testutil"
14+ "github.com/aws/aws-sdk-go-v2/service/sqs"
15+ "github.com/aws/aws-sdk-go-v2/service/sqs/types"
1416 "github.com/stretchr/testify/require"
1517 "go.uber.org/mock/gomock"
1618)
@@ -25,15 +27,20 @@ func TestSQS_Store(t *testing.T) {
2527 }{
2628 "five 100KB logs send one message" : {
2729 mockSetup : func (m * sdkclient.MockSQS ) {
28- m .EXPECT ().SendMessage (gomock .Any (), gomock .Any ()).Times (1 )
30+ m .EXPECT ().
31+ SendMessage (gomock .Any (), gomock .Any ()).
32+ Return (nil , nil )
2933 },
3034 batch : Batch {
3135 Data : testutil .GenerateJSONLogs (t , 100 * 1024 , 100 * 1024 , 100 * 1024 , 100 * 1024 , 100 * 1024 ),
3236 },
3337 },
3438 "two 512KB logs send two messages" : {
3539 mockSetup : func (m * sdkclient.MockSQS ) {
36- m .EXPECT ().SendMessage (gomock .Any (), gomock .Any ()).Times (2 )
40+ m .EXPECT ().
41+ SendMessage (gomock .Any (), gomock .Any ()).
42+ Times (2 ).
43+ Return (nil , nil )
3744 },
3845 batch : Batch {
3946 Data : testutil .GenerateJSONLogs (t , 512 * 1024 , 512 * 1024 ),
@@ -48,7 +55,9 @@ func TestSQS_Store(t *testing.T) {
4855 },
4956 "error on SendMessage call" : {
5057 mockSetup : func (m * sdkclient.MockSQS ) {
51- m .EXPECT ().SendMessage (gomock .Any (), gomock .Any ()).Return (nil , errors .New ("denied" ))
58+ m .EXPECT ().
59+ SendMessage (gomock .Any (), gomock .Any ()).
60+ Return (nil , errors .New ("denied" ))
5261 },
5362 batch : Batch {
5463 Data : testutil .GenerateJSONLogs (t , 1024 ),
@@ -76,3 +85,110 @@ func TestSQS_Store(t *testing.T) {
7685 })
7786 }
7887}
88+
89+ func TestSQS_Fetch (t * testing.T ) {
90+ t .Parallel ()
91+
92+ tests := map [string ]struct {
93+ mockSetup func (m * sdkclient.MockSQS )
94+ wantErr bool
95+ }{
96+ "exit on empty poll" : {
97+ mockSetup : func (m * sdkclient.MockSQS ) {
98+ gomock .InOrder (
99+ m .EXPECT ().
100+ ReceiveMessage (gomock .Any (), gomock .Any ()).
101+ Return (& sqs.ReceiveMessageOutput {
102+ Messages : []types.Message {{}},
103+ }, nil ),
104+ m .EXPECT ().
105+ ReceiveMessage (gomock .Any (), gomock .Any ()).
106+ Return (& sqs.ReceiveMessageOutput {
107+ Messages : []types.Message {{}},
108+ }, nil ),
109+ m .EXPECT ().
110+ ReceiveMessage (gomock .Any (), gomock .Any ()).
111+ Return (& sqs.ReceiveMessageOutput {}, nil ),
112+ )
113+ },
114+ },
115+ "error on ReceiveMessage" : {
116+ mockSetup : func (m * sdkclient.MockSQS ) {
117+ m .EXPECT ().
118+ ReceiveMessage (gomock .Any (), gomock .Any ()).
119+ Return (nil , errors .New ("denied" ))
120+ },
121+ wantErr : true ,
122+ },
123+ }
124+
125+ for name , tc := range tests {
126+ t .Run (name , func (t * testing.T ) {
127+ t .Parallel ()
128+
129+ ctrl := gomock .NewController (t )
130+ mock := sdkclient .NewMockSQS (ctrl )
131+ tc .mockSetup (mock )
132+ s := newSQS (mock , "https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue" )
133+
134+ for _ , err := range s .Fetch (t .Context ()) {
135+ if tc .wantErr {
136+ require .Error (t , err )
137+ return
138+ }
139+ require .NoError (t , err )
140+ }
141+ })
142+ }
143+ }
144+
145+ func TestSQS_Delete (t * testing.T ) {
146+ t .Parallel ()
147+
148+ tests := map [string ]struct {
149+ mockSetup func (m * sdkclient.MockSQS )
150+ batch Batch
151+ wantErr bool
152+ }{
153+ "success" : {
154+ mockSetup : func (m * sdkclient.MockSQS ) {
155+ m .EXPECT ().
156+ DeleteMessage (gomock .Any (), gomock .Any ()).
157+ Return (nil , nil )
158+ },
159+ batch : Batch {
160+ DeleteKey : "MbZj6wDWli+JvwwJaBV+3d=" ,
161+ },
162+ },
163+ "error on DeleteMessage call" : {
164+ mockSetup : func (m * sdkclient.MockSQS ) {
165+ m .EXPECT ().
166+ DeleteMessage (gomock .Any (), gomock .Any ()).
167+ Return (nil , errors .New ("denied" ))
168+ },
169+ batch : Batch {
170+ DeleteKey : "MbZj6wDWli+JvwwJaBV+3d=" ,
171+ },
172+ wantErr : true ,
173+ },
174+ }
175+
176+ for name , tc := range tests {
177+ t .Run (name , func (t * testing.T ) {
178+ t .Parallel ()
179+
180+ ctrl := gomock .NewController (t )
181+ mock := sdkclient .NewMockSQS (ctrl )
182+ tc .mockSetup (mock )
183+ sqs := newSQS (mock , "https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue" )
184+
185+ err := sqs .Delete (t .Context (), tc .batch )
186+
187+ if tc .wantErr {
188+ require .Error (t , err )
189+ return
190+ }
191+ require .NoError (t , err )
192+ })
193+ }
194+ }
0 commit comments