From d6c4c8e003ff7ea733bf4750f75d420cf5eff984 Mon Sep 17 00:00:00 2001 From: msailes Date: Thu, 8 Jul 2021 19:56:30 +0100 Subject: [PATCH 1/3] RabbitMQEvent and Test support. --- .../lambda/runtime/events/RabbitMQEvent.java | 57 +++++++++++++++++++ .../lambda/runtime/tests/EventLoader.java | 4 ++ .../lambda/runtime/tests/EventLoaderTest.java | 26 +++++++++ .../src/test/resources/rabbitmq_event.json | 51 +++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java create mode 100644 aws-lambda-java-tests/src/test/resources/rabbitmq_event.json diff --git a/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java b/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java new file mode 100644 index 00000000..9c973a01 --- /dev/null +++ b/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java @@ -0,0 +1,57 @@ +package com.amazonaws.services.lambda.runtime.events; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * Represents a Rabbit MQ event sent to Lambda + * Onboarding Amazon MQ as event source to Lambda + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder(setterPrefix = "with") +public class RabbitMQEvent { + + private String eventSource; + private String eventSourceArn; + private Map> rmqMessagesByQueue; + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder(setterPrefix = "with") + public static class RabbitMessage { + private BasicProperties basicProperties; + private boolean redelivered; + private String data; + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder(setterPrefix = "with") + public static class BasicProperties { + + private String contentType; + private String contentEncoding; + private Map headers; + private int deliveryMode; + private int priority; + private String correlationId; + private String replyTo; + private int expiration; + private String messageId; +// private DateTime timestamp; + private String type; + private String userId; + private String appId; + private String clusterId; + private int bodySize; + } +} diff --git a/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java b/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java index 0216d5e3..68cd37d3 100644 --- a/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java +++ b/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java @@ -105,6 +105,10 @@ public static SQSEvent loadSQSEvent(String filename) { return loadEvent(filename, SQSEvent.class); } + public static RabbitMQEvent loadRabbitMQEvent(String filename) { + return loadEvent(filename, RabbitMQEvent.class); + } + public static T loadEvent(String filename, Class targetClass) { if (!filename.endsWith("json")) { diff --git a/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java b/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java index aecd0c6a..5bcc79af 100644 --- a/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java +++ b/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java @@ -301,4 +301,30 @@ public void testLoadSecretsManagerRotationEvent() { .returns("arn:aws:secretsmanager:eu-central-1:123456789012:secret:/powertools/secretparam-xBPaJ5", from(SecretsManagerRotationEvent::getSecretId)) .returns("CreateSecret", from(SecretsManagerRotationEvent::getStep)); } + + @Test + public void testLoadRabbitMQEvent() { + RabbitMQEvent event = EventLoader.loadRabbitMQEvent("rabbitmq_event.json"); + assertThat(event).isNotNull(); + assertThat(event) + .returns("aws:rmq", from(RabbitMQEvent::getEventSource)) + .returns("arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", from(RabbitMQEvent::getEventSourceArn)); + + Map> messagesByQueue = event.getRmqMessagesByQueue(); + assertThat(messagesByQueue).isNotEmpty(); + List messages = messagesByQueue.get("test::/"); + assertThat(messages).hasSize(1); + RabbitMQEvent.RabbitMessage firstMessage = messages.get(0); + assertThat(firstMessage) + .returns(false, RabbitMQEvent.RabbitMessage::getRedelivered) + .returns("eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==", RabbitMQEvent.RabbitMessage::getData); + + assertThat(firstMessage.getBasicProperties()) + .returns("text/plain", from(RabbitMQEvent.BasicProperties::getContentType)) + .returns(1, from(RabbitMQEvent.BasicProperties::getDeliveryMode)) + .returns(34, from(RabbitMQEvent.BasicProperties::getPriority)) + .returns(60000, from(RabbitMQEvent.BasicProperties::getExpiration)) + .returns("AIDACKCEVSQ6C2EXAMPLE", from(RabbitMQEvent.BasicProperties::getUserId)) + .returns(80, from(RabbitMQEvent.BasicProperties::getBodySize)); + } } diff --git a/aws-lambda-java-tests/src/test/resources/rabbitmq_event.json b/aws-lambda-java-tests/src/test/resources/rabbitmq_event.json new file mode 100644 index 00000000..1f57c53a --- /dev/null +++ b/aws-lambda-java-tests/src/test/resources/rabbitmq_event.json @@ -0,0 +1,51 @@ +{ + "eventSource": "aws:rmq", + "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", + "rmqMessagesByQueue": { + "test::/": [ + { + "basicProperties": { + "contentType": "text/plain", + "contentEncoding": null, + "headers": { + "header1": { + "bytes": [ + 118, + 97, + 108, + 117, + 101, + 49 + ] + }, + "header2": { + "bytes": [ + 118, + 97, + 108, + 117, + 101, + 50 + ] + }, + "numberInHeader": 10 + }, + "deliveryMode": 1, + "priority": 34, + "correlationId": null, + "replyTo": null, + "expiration": "60000", + "messageId": null, + "timestamp": "Jan 1, 1970, 12:33:41 AM", + "type": null, + "userId": "AIDACKCEVSQ6C2EXAMPLE", + "appId": null, + "clusterId": null, + "bodySize": 80 + }, + "redelivered": false, + "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" + } + ] + } +} \ No newline at end of file From e6fa021f9104d701fc464d837d857449db43fb9c Mon Sep 17 00:00:00 2001 From: msailes Date: Mon, 12 Jul 2021 16:22:38 +0100 Subject: [PATCH 2/3] added timestamp as a string --- .../services/lambda/runtime/events/RabbitMQEvent.java | 2 +- .../services/lambda/runtime/tests/EventLoaderTest.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java b/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java index 9c973a01..24fe946c 100644 --- a/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java +++ b/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java @@ -47,7 +47,7 @@ public static class BasicProperties { private String replyTo; private int expiration; private String messageId; -// private DateTime timestamp; + private String timestamp; private String type; private String userId; private String appId; diff --git a/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java b/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java index 5bcc79af..0dbdce32 100644 --- a/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java +++ b/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java @@ -325,6 +325,7 @@ public void testLoadRabbitMQEvent() { .returns(34, from(RabbitMQEvent.BasicProperties::getPriority)) .returns(60000, from(RabbitMQEvent.BasicProperties::getExpiration)) .returns("AIDACKCEVSQ6C2EXAMPLE", from(RabbitMQEvent.BasicProperties::getUserId)) - .returns(80, from(RabbitMQEvent.BasicProperties::getBodySize)); + .returns(80, from(RabbitMQEvent.BasicProperties::getBodySize)) + .returns("Jan 1, 1970, 12:33:41 AM", from(RabbitMQEvent.BasicProperties::getTimestamp)); } } From f44c0b6a4878c572444dbf8640a17632b819aa17 Mon Sep 17 00:00:00 2001 From: msailes Date: Thu, 29 Jul 2021 20:17:40 +0100 Subject: [PATCH 3/3] adding header tests --- .../lambda/runtime/tests/EventLoaderTest.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java b/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java index 0dbdce32..ac491346 100644 --- a/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java +++ b/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java @@ -319,13 +319,20 @@ public void testLoadRabbitMQEvent() { .returns(false, RabbitMQEvent.RabbitMessage::getRedelivered) .returns("eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==", RabbitMQEvent.RabbitMessage::getData); - assertThat(firstMessage.getBasicProperties()) + RabbitMQEvent.BasicProperties basicProperties = firstMessage.getBasicProperties(); + assertThat(basicProperties) .returns("text/plain", from(RabbitMQEvent.BasicProperties::getContentType)) .returns(1, from(RabbitMQEvent.BasicProperties::getDeliveryMode)) - .returns(34, from(RabbitMQEvent.BasicProperties::getPriority)) - .returns(60000, from(RabbitMQEvent.BasicProperties::getExpiration)) - .returns("AIDACKCEVSQ6C2EXAMPLE", from(RabbitMQEvent.BasicProperties::getUserId)) - .returns(80, from(RabbitMQEvent.BasicProperties::getBodySize)) - .returns("Jan 1, 1970, 12:33:41 AM", from(RabbitMQEvent.BasicProperties::getTimestamp)); + .returns(34, from(RabbitMQEvent.BasicProperties::getPriority)) + .returns(60000, from(RabbitMQEvent.BasicProperties::getExpiration)) + .returns("AIDACKCEVSQ6C2EXAMPLE", from(RabbitMQEvent.BasicProperties::getUserId)) + .returns(80, from(RabbitMQEvent.BasicProperties::getBodySize)) + .returns("Jan 1, 1970, 12:33:41 AM", from(RabbitMQEvent.BasicProperties::getTimestamp)); + + Map headers = basicProperties.getHeaders(); + assertThat(headers).hasSize(3); + Map> header1 = (Map>) headers.get("header1"); + assertThat(header1.get("bytes")).contains(118, 97, 108, 117, 101, 49); + assertThat((Integer) headers.get("numberInHeader")).isEqualTo(10); } }