Skip to content

Commit 986968d

Browse files
committed
Add more unittest
1 parent b576b3b commit 986968d

File tree

4 files changed

+146
-32
lines changed

4 files changed

+146
-32
lines changed

gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ public interface IQueue {
1515
List<SimpleQueueMessage> getMessages(MessageQueueOptions messageQueueOptions);
1616
DeleteMessageResult deleteMessage(String messageHandleId);
1717

18-
List<DeleteMessageResult> deleteMessages(List<String> messageHandleId, MessageQueueOptions messageQueueOptions);
18+
List<DeleteMessageResult> deleteMessages(List<String> messageHandleId);
1919
boolean purge();
2020
}

gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.genexus.messaging.queue.model;
22

33
public class MessageQueueOptions {
4-
private short maxNumberOfMessages;
4+
private int maxNumberOfMessages;
55
private boolean deleteConsumedMessages;
66
private int waitTimeout;
77
private int visibilityTimeout;
@@ -10,11 +10,11 @@ public class MessageQueueOptions {
1010
private String receiveRequestAttemptId = "";
1111
private boolean receiveMessageAttributes;
1212

13-
public short getMaxNumberOfMessages() {
13+
public int getMaxNumberOfMessages() {
1414
return maxNumberOfMessages;
1515
}
1616

17-
public void setMaxNumberOfMessages(short maxNumberOfMessages) {
17+
public void setMaxNumberOfMessages(int maxNumberOfMessages) {
1818
this.maxNumberOfMessages = maxNumberOfMessages;
1919
}
2020

gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.genexus.util.GXProperties;
1212
import com.genexus.util.GXProperty;
1313
import com.genexus.util.GXService;
14+
import org.apache.commons.lang.Validate;
1415
import org.apache.logging.log4j.LogManager;
1516
import org.apache.logging.log4j.Logger;
1617
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
@@ -110,8 +111,10 @@ private List<SendMessageResult> sendMessagesImpl(List<SimpleQueueMessage> simple
110111
List<SendMessageResult> sendMessageResultList = new ArrayList<>();
111112
List<SendMessageBatchRequestEntry> entryList = new ArrayList<>();
112113

113-
for (SimpleQueueMessage msg : simpleQueueMessages) {
114+
if (simpleQueueMessages.size() == 0)
115+
return sendMessageResultList;
114116

117+
for (SimpleQueueMessage msg : simpleQueueMessages) {
115118
Map<String, MessageAttributeValue> msgProps = new HashMap<>();
116119
for (int i = 0; i < msg.getMessageAttributes().count(); i++) {
117120
GXProperty prop = msg.getMessageAttributes().item(i);
@@ -156,7 +159,7 @@ private List<SendMessageResult> sendMessagesImpl(List<SimpleQueueMessage> simple
156159
}});
157160
}
158161
for (BatchResultErrorEntry msg : responseBatch.failed()) {
159-
logger.error(String.format("SendMessage '%s' was rejected by AWS SQS server %s", msg.id(), msg.message()));
162+
logger.error(String.format("SendMessage '%s' was rejected by AWS SQS server. Message: %s", msg.id(), msg.message()));
160163
sendMessageResultList.add(new SendMessageResult() {{
161164
setMessageId(msg.id());
162165
setMessageSentStatus(SendMessageResult.FAILED);
@@ -186,6 +189,8 @@ public List<SimpleQueueMessage> getMessages(MessageQueueOptions messageQueueOpti
186189
}
187190
if (messageQueueOptions.isReceiveMessageAttributes()) {
188191
receiveMessageRequest.messageAttributeNames("All");
192+
receiveMessageRequest.attributeNamesWithStrings("All");
193+
189194
}
190195

191196
ReceiveMessageResponse receiveMessageResponse = sqsClient.receiveMessage(receiveMessageRequest.build());
@@ -213,25 +218,37 @@ private SimpleQueueMessage setupSimpleQueueMessage(Message response) {
213218
messageAtts.add(entry.getKey(), entry.getValue());
214219
}
215220

221+
for (Map.Entry<String, MessageAttributeValue> entry : response.messageAttributes().entrySet()) {
222+
messageAtts.add(entry.getKey(), entry.getValue().stringValue());
223+
}
224+
216225
return simpleQueueMessage;
217226
}
218227

219228
@Override
220229
public DeleteMessageResult deleteMessage(String messageHandleId) {
221-
return deleteMessagesImpl(Arrays.asList(messageHandleId), new MessageQueueOptions()).get(0);
230+
if (messageHandleId.length() == 0)
231+
return new DeleteMessageResult();
232+
return deleteMessagesImpl(Arrays.asList(messageHandleId)).get(0);
222233
}
223234

224235
@Override
225-
public List<DeleteMessageResult> deleteMessages(List<String> messageHandleIds, MessageQueueOptions messageQueueOptions) {
226-
return deleteMessagesImpl(messageHandleIds, messageQueueOptions);
236+
public List<DeleteMessageResult> deleteMessages(List<String> messageHandleIds) {
237+
return deleteMessagesImpl(messageHandleIds);
227238
}
228239

229-
private List<DeleteMessageResult> deleteMessagesImpl(List<String> messageHandleIds, MessageQueueOptions messageQueueOptions) {
240+
private List<DeleteMessageResult> deleteMessagesImpl(List<String> messageHandleIds) {
241+
if (messageHandleIds.size() == 0)
242+
return new ArrayList<>();
243+
230244
List<DeleteMessageResult> deleteMessageResults = new ArrayList<>();
231245

232246
List<DeleteMessageBatchRequestEntry> deleteMessageEntries = new ArrayList<>();
233247
for (String msgId: messageHandleIds) {
234-
248+
deleteMessageEntries.add(DeleteMessageBatchRequestEntry.builder()
249+
.id(java.util.UUID.randomUUID().toString())
250+
.receiptHandle(msgId)
251+
.build());
235252
}
236253
DeleteMessageBatchRequest.Builder deleteMessageRequest = DeleteMessageBatchRequest.builder()
237254
.queueUrl(queueURL)
@@ -247,7 +264,7 @@ private List<DeleteMessageResult> deleteMessagesImpl(List<String> messageHandleI
247264
}
248265

249266
for (BatchResultErrorEntry msg:deleteMessageBatchResponse.failed()) {
250-
logger.error(String.format("DeleteMessage '%s' was rejected by AWS SQS server: %s", msg.id(), msg.message()));
267+
logger.error(String.format("DeleteMessage '%s' was rejected by AWS SQS server: Message: %s", msg.id(), msg.message()));
251268
deleteMessageResults.add(new DeleteMessageResult() {{
252269
setMessageId(msg.id());
253270
setMessageDeleteStatus(DeleteMessageResult.FAILED);

gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java

Lines changed: 117 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.genexus.messaging.queue.aws;
22

33
import com.genexus.messaging.queue.IQueue;
4+
import com.genexus.messaging.queue.model.DeleteMessageResult;
45
import com.genexus.messaging.queue.model.MessageQueueOptions;
56
import com.genexus.messaging.queue.model.SimpleQueueMessage;
67
import com.genexus.messaging.queue.model.SendMessageResult;
@@ -10,18 +11,15 @@
1011
import org.junit.Before;
1112
import org.junit.Test;
1213

14+
import java.util.ArrayList;
1315
import java.util.List;
1416

1517
import static org.junit.Assert.assertTrue;
1618
import static org.junit.Assume.assumeTrue;
1719

1820
public abstract class TestQueueBase {
19-
2021
protected IQueue queue;
2122

22-
//AKIAT2GWL4JGR56VMWGX
23-
//PYlgo9ysgr9G2srypFoKkRycjuPqEFB4uJWjgcNW
24-
//https://sqs.us-east-1.amazonaws.com/262442574413/gx-sqs-githubactions-test
2523
public abstract String getProviderName();
2624

2725
public abstract IQueue getQueue() throws ServiceConfigurationException;
@@ -76,50 +74,149 @@ private void sleep(int sleepMs) {
7674
public void getQueueLength() {
7775
boolean purged = ensurePurged();
7876
Assert.assertTrue("Queue was not purged", purged);
79-
int qLength = queue.getQueueLength();
80-
Assert.assertEquals(0, qLength);
77+
int retry = 60;
78+
while (queue.getQueueLength() != 0 && retry-- > 0) {
79+
sleep(500);
80+
}
81+
int queueLength = queue.getQueueLength();
82+
Assert.assertEquals(0, queueLength);
8183
}
8284

8385
@Test
84-
public void getQueueLengthNotEmpty() {
85-
boolean purged = ensurePurged();
86-
Assert.assertTrue("Queue was not purged", purged);
86+
public void sendMessage() {
87+
SendMessageResult sendResult = sendQueueMessage();
88+
Assert.assertNotNull(sendResult);
89+
Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus());
90+
Assert.assertNotEquals("", sendResult.getMessageId());
91+
Assert.assertNotEquals("", sendResult.getMessageServerId());
92+
}
8793

88-
int qLength = queue.getQueueLength();
89-
Assert.assertEquals(0, qLength);
90-
sendQueueMessage();
91-
sleep(5000);
92-
qLength = queue.getQueueLength();
93-
Assert.assertEquals(1, qLength);
94+
@Test
95+
public void sendMessageError() {
96+
List<SendMessageResult> sendResult = queue.sendMessages(new ArrayList<SimpleQueueMessage>(), new MessageQueueOptions());
97+
Assert.assertNotNull(sendResult);
98+
Assert.assertTrue(sendResult.size() == 0);
9499
}
95100

96101
@Test
97-
public void sendMessage() {
102+
public void receiveMessages() {
98103
SendMessageResult sendResult = sendQueueMessage();
99104
Assert.assertNotNull(sendResult);
100105
Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus());
101106
Assert.assertNotEquals("", sendResult.getMessageId());
102-
Assert.assertNotEquals("", sendResult.getMessageServerId());
107+
108+
List<SimpleQueueMessage> msgs = queue.getMessages(new MessageQueueOptions());
109+
Assert.assertTrue(msgs.size() > 0);
110+
SimpleQueueMessage msg = msgs.get(0);
111+
Assert.assertTrue(msg.getMessageBody().length() > 0);
112+
Assert.assertTrue(msg.getMessageId().length() > 0);
113+
Assert.assertTrue(msg.getMessageHandleId().length() > 0);
114+
103115
}
104116

105117
@Test
106-
public void receiveMessages() {
118+
public void receiveMessagesMaxNumberOfMessages() {
119+
for (int i = 0; i < 20; i++) {
120+
SendMessageResult sendResult = sendQueueMessage();
121+
Assert.assertNotNull(sendResult);
122+
Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus());
123+
Assert.assertNotEquals("", sendResult.getMessageId());
124+
}
125+
sleep(1000);
126+
List<SimpleQueueMessage> msgs = queue.getMessages(new MessageQueueOptions(){{
127+
setMaxNumberOfMessages(2);
128+
}});
129+
Assert.assertTrue(msgs.size() <= 2);
130+
SimpleQueueMessage msg = msgs.get(0);
131+
Assert.assertTrue(msg.getMessageBody().length() > 0);
132+
Assert.assertTrue(msg.getMessageId().length() > 0);
133+
Assert.assertTrue(msg.getMessageHandleId().length() > 0);
134+
ensurePurged();
135+
}
136+
137+
@Test
138+
public void receiveMultipleMessages() {
139+
for (int i = 0; i < 20; i++) {
140+
SendMessageResult sendResult = sendQueueMessage();
141+
Assert.assertNotNull(sendResult);
142+
Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus());
143+
Assert.assertNotEquals("", sendResult.getMessageId());
144+
}
145+
sleep(1000);
146+
List<SimpleQueueMessage> msgs = queue.getMessages(new MessageQueueOptions(){{
147+
setWaitTimeout(10);
148+
setMaxNumberOfMessages(10);
149+
}});
150+
Assert.assertTrue(msgs.size() >= 5); // fewer messages might be returned)
151+
SimpleQueueMessage msg = msgs.get(0);
152+
Assert.assertTrue(msg.getMessageBody().length() > 0);
153+
Assert.assertTrue(msg.getMessageId().length() > 0);
154+
Assert.assertTrue(msg.getMessageHandleId().length() > 0);
155+
}
156+
157+
@Test
158+
public void receiveMessagesWithAtributes() {
107159
SendMessageResult sendResult = sendQueueMessage();
108160
Assert.assertNotNull(sendResult);
109161
Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus());
110162
Assert.assertNotEquals("", sendResult.getMessageId());
111163

112164
List<SimpleQueueMessage> msgs = queue.getMessages(new MessageQueueOptions());
113-
Assert.assertNotEquals(0, msgs.size());
165+
Assert.assertTrue(msgs.size() > 0);
166+
SimpleQueueMessage msg = msgs.get(0);
167+
Assert.assertTrue(msg.getMessageBody().length() > 0);
168+
Assert.assertTrue(msg.getMessageId().length() > 0);
169+
Assert.assertTrue(msg.getMessageHandleId().length() > 0);
170+
Assert.assertTrue(msg.getMessageAttributes().count() > 1);
171+
Assert.assertTrue(msg.getMessageAttributes().count() < 5);
172+
173+
MessageQueueOptions opts = new MessageQueueOptions() {{
174+
setReceiveMessageAttributes(true);
175+
setMaxNumberOfMessages(5);
176+
setDelaySeconds(2);
177+
setTimetoLive(2);
178+
setWaitTimeout(3);
179+
}};
180+
181+
sendQueueMessage();
182+
183+
msgs = queue.getMessages(opts);
184+
Assert.assertTrue(msgs.size() > 0);
185+
msg = msgs.get(0);
186+
Assert.assertTrue(msg.getMessageBody().length() > 0);
187+
Assert.assertTrue(msg.getMessageId().length() > 0);
188+
Assert.assertTrue(msg.getMessageHandleId().length() > 0);
189+
Assert.assertTrue(msg.getMessageAttributes().count() > 6);
190+
}
191+
192+
@Test
193+
public void deleteMessage() {
194+
SendMessageResult sendResult = sendQueueMessage();
195+
Assert.assertNotNull(sendResult);
196+
Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus());
197+
Assert.assertNotEquals("", sendResult.getMessageId());
198+
Assert.assertNotEquals("", sendResult.getMessageServerId());
199+
200+
sleep(5000);
201+
202+
List<SimpleQueueMessage> msgs = queue.getMessages(new MessageQueueOptions());
203+
Assert.assertTrue(msgs.size() > 0);
204+
DeleteMessageResult deleteMessageResult = queue.deleteMessage(msgs.get(0).getMessageHandleId());
205+
Assert.assertNotNull(deleteMessageResult);
206+
Assert.assertTrue(deleteMessageResult.getMessageId().length() > 0);
207+
Assert.assertEquals(DeleteMessageResult.DELETED, deleteMessageResult.getMessageDeleteStatus());
114208

115209
}
116210

117211
private SendMessageResult sendQueueMessage() {
118212
SimpleQueueMessage msg = new SimpleQueueMessage() {{
119-
setMessageId(java.util.UUID.randomUUID().toString());
213+
setMessageId("gx_" + java.util.UUID.randomUUID().toString());
120214
setMessageBody("messageBody test");
121215
getMessageAttributes().set("att1", "test1");
122216
getMessageAttributes().set("att2", "test2");
217+
getMessageAttributes().set("att3", "test3");
218+
getMessageAttributes().set("att4", "test4");
219+
getMessageAttributes().set("att5", "test5");
123220
}};
124221
return queue.sendMessage(msg);
125222
}

0 commit comments

Comments
 (0)