Skip to content

Commit cced9dc

Browse files
msailescarlzogh
andauthored
RabbitMQEvent and Test support. (#256)
Co-authored-by: Carl Zogheib <[email protected]>
1 parent da59325 commit cced9dc

File tree

4 files changed

+146
-0
lines changed

4 files changed

+146
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.amazonaws.services.lambda.runtime.events;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
/**
12+
* Represents a Rabbit MQ event sent to Lambda
13+
* <a href="https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html">Onboarding Amazon MQ as event source to Lambda</a>
14+
*/
15+
@Data
16+
@NoArgsConstructor
17+
@AllArgsConstructor
18+
@Builder(setterPrefix = "with")
19+
public class RabbitMQEvent {
20+
21+
private String eventSource;
22+
private String eventSourceArn;
23+
private Map<String, List<RabbitMessage>> rmqMessagesByQueue;
24+
25+
@Data
26+
@NoArgsConstructor
27+
@AllArgsConstructor
28+
@Builder(setterPrefix = "with")
29+
public static class RabbitMessage {
30+
private BasicProperties basicProperties;
31+
private boolean redelivered;
32+
private String data;
33+
}
34+
35+
@Data
36+
@NoArgsConstructor
37+
@AllArgsConstructor
38+
@Builder(setterPrefix = "with")
39+
public static class BasicProperties {
40+
41+
private String contentType;
42+
private String contentEncoding;
43+
private Map<String, Object> headers;
44+
private int deliveryMode;
45+
private int priority;
46+
private String correlationId;
47+
private String replyTo;
48+
private int expiration;
49+
private String messageId;
50+
private String timestamp;
51+
private String type;
52+
private String userId;
53+
private String appId;
54+
private String clusterId;
55+
private int bodySize;
56+
}
57+
}

aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java

+4
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ public static SQSEvent loadSQSEvent(String filename) {
105105
return loadEvent(filename, SQSEvent.class);
106106
}
107107

108+
public static RabbitMQEvent loadRabbitMQEvent(String filename) {
109+
return loadEvent(filename, RabbitMQEvent.class);
110+
}
111+
108112
public static <T> T loadEvent(String filename, Class<T> targetClass) {
109113

110114
if (!filename.endsWith("json")) {

aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java

+34
Original file line numberDiff line numberDiff line change
@@ -304,4 +304,38 @@ public void testLoadSecretsManagerRotationEvent() {
304304
.returns("arn:aws:secretsmanager:eu-central-1:123456789012:secret:/powertools/secretparam-xBPaJ5", from(SecretsManagerRotationEvent::getSecretId))
305305
.returns("CreateSecret", from(SecretsManagerRotationEvent::getStep));
306306
}
307+
308+
@Test
309+
public void testLoadRabbitMQEvent() {
310+
RabbitMQEvent event = EventLoader.loadRabbitMQEvent("rabbitmq_event.json");
311+
assertThat(event).isNotNull();
312+
assertThat(event)
313+
.returns("aws:rmq", from(RabbitMQEvent::getEventSource))
314+
.returns("arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", from(RabbitMQEvent::getEventSourceArn));
315+
316+
Map<String, List<RabbitMQEvent.RabbitMessage>> messagesByQueue = event.getRmqMessagesByQueue();
317+
assertThat(messagesByQueue).isNotEmpty();
318+
List<RabbitMQEvent.RabbitMessage> messages = messagesByQueue.get("test::/");
319+
assertThat(messages).hasSize(1);
320+
RabbitMQEvent.RabbitMessage firstMessage = messages.get(0);
321+
assertThat(firstMessage)
322+
.returns(false, RabbitMQEvent.RabbitMessage::getRedelivered)
323+
.returns("eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==", RabbitMQEvent.RabbitMessage::getData);
324+
325+
RabbitMQEvent.BasicProperties basicProperties = firstMessage.getBasicProperties();
326+
assertThat(basicProperties)
327+
.returns("text/plain", from(RabbitMQEvent.BasicProperties::getContentType))
328+
.returns(1, from(RabbitMQEvent.BasicProperties::getDeliveryMode))
329+
.returns(34, from(RabbitMQEvent.BasicProperties::getPriority))
330+
.returns(60000, from(RabbitMQEvent.BasicProperties::getExpiration))
331+
.returns("AIDACKCEVSQ6C2EXAMPLE", from(RabbitMQEvent.BasicProperties::getUserId))
332+
.returns(80, from(RabbitMQEvent.BasicProperties::getBodySize))
333+
.returns("Jan 1, 1970, 12:33:41 AM", from(RabbitMQEvent.BasicProperties::getTimestamp));
334+
335+
Map<String, Object> headers = basicProperties.getHeaders();
336+
assertThat(headers).hasSize(3);
337+
Map<String, List<Integer>> header1 = (Map<String, List<Integer>>) headers.get("header1");
338+
assertThat(header1.get("bytes")).contains(118, 97, 108, 117, 101, 49);
339+
assertThat((Integer) headers.get("numberInHeader")).isEqualTo(10);
340+
}
307341
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
{
2+
"eventSource": "aws:rmq",
3+
"eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8",
4+
"rmqMessagesByQueue": {
5+
"test::/": [
6+
{
7+
"basicProperties": {
8+
"contentType": "text/plain",
9+
"contentEncoding": null,
10+
"headers": {
11+
"header1": {
12+
"bytes": [
13+
118,
14+
97,
15+
108,
16+
117,
17+
101,
18+
49
19+
]
20+
},
21+
"header2": {
22+
"bytes": [
23+
118,
24+
97,
25+
108,
26+
117,
27+
101,
28+
50
29+
]
30+
},
31+
"numberInHeader": 10
32+
},
33+
"deliveryMode": 1,
34+
"priority": 34,
35+
"correlationId": null,
36+
"replyTo": null,
37+
"expiration": "60000",
38+
"messageId": null,
39+
"timestamp": "Jan 1, 1970, 12:33:41 AM",
40+
"type": null,
41+
"userId": "AIDACKCEVSQ6C2EXAMPLE",
42+
"appId": null,
43+
"clusterId": null,
44+
"bodySize": 80
45+
},
46+
"redelivered": false,
47+
"data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
48+
}
49+
]
50+
}
51+
}

0 commit comments

Comments
 (0)