You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2018/10/17 09:13:44 UTC
[camel] 01/03: CAMEL-12884 - Camel-AWS Lambda: Add support for
event source mapping, delete operation
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit d9721263c03d2ccca8f9c4155777a7f758cb9889
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Oct 17 10:42:51 2018 +0200
CAMEL-12884 - Camel-AWS Lambda: Add support for event source mapping, delete operation
---
.../component/aws/lambda/LambdaConstants.java | 1 +
.../component/aws/lambda/LambdaOperations.java | 3 +-
.../camel/component/aws/lambda/LambdaProducer.java | 32 ++++++++++++++++++++++
.../aws/lambda/AmazonLambdaClientMock.java | 5 +++-
.../aws/lambda/LambdaComponentSpringTest.java | 15 ++++++++++
.../component/aws/lambda/LambdaProducerTest.java | 17 ++++++++++++
.../lambda/LambdaComponentSpringTest-context.xml | 5 ++++
7 files changed, 76 insertions(+), 2 deletions(-)
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaConstants.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaConstants.java
index ce64f5d..e1a1259 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaConstants.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaConstants.java
@@ -45,4 +45,5 @@ public interface LambdaConstants {
String SUBNET_IDS = "CamelAwsLambdaSubnetIds";
String EVENT_SOURCE_ARN = "CamelAwsLambdaEventSourceArn";
String EVENT_SOURCE_BATCH_SIZE = "CamelAwsLambdaEventSourceBatchSize";
+ String EVENT_SOURCE_UUID = "CamelAwsLambdaEventSourceUuid";
}
\ No newline at end of file
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
index 23a9491..907c9bf 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
@@ -24,5 +24,6 @@ public enum LambdaOperations {
deleteFunction,
invokeFunction,
updateFunction,
- createEventSourceMapping
+ createEventSourceMapping,
+ deleteEventSourceMapping
}
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
index 8760592..9c7f228 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
@@ -30,6 +30,8 @@ import com.amazonaws.services.lambda.model.CreateEventSourceMappingResult;
import com.amazonaws.services.lambda.model.CreateFunctionRequest;
import com.amazonaws.services.lambda.model.CreateFunctionResult;
import com.amazonaws.services.lambda.model.DeadLetterConfig;
+import com.amazonaws.services.lambda.model.DeleteEventSourceMappingRequest;
+import com.amazonaws.services.lambda.model.DeleteEventSourceMappingResult;
import com.amazonaws.services.lambda.model.DeleteFunctionRequest;
import com.amazonaws.services.lambda.model.DeleteFunctionResult;
import com.amazonaws.services.lambda.model.Environment;
@@ -92,6 +94,9 @@ public class LambdaProducer extends DefaultProducer {
case createEventSourceMapping:
createEventSourceMapping(getEndpoint().getAwsLambdaClient(), exchange);
break;
+ case deleteEventSourceMapping:
+ deleteEventSourceMapping(getEndpoint().getAwsLambdaClient(), exchange);
+ break;
default:
throw new IllegalArgumentException("Unsupported operation");
}
@@ -378,6 +383,33 @@ public class LambdaProducer extends DefaultProducer {
message.setBody(result);
}
+ private void deleteEventSourceMapping(AWSLambda lambdaClient, Exchange exchange) {
+ DeleteEventSourceMappingResult result;
+ try {
+ DeleteEventSourceMappingRequest request = new DeleteEventSourceMappingRequest();
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.EVENT_SOURCE_UUID))) {
+ request.withUUID(exchange.getIn().getHeader(LambdaConstants.EVENT_SOURCE_UUID, String.class));
+ } else {
+ throw new IllegalArgumentException("Event Source Arn must be specified");
+ }
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.SDK_CLIENT_EXECUTION_TIMEOUT))) {
+ Integer timeout = exchange.getIn().getHeader(LambdaConstants.SDK_CLIENT_EXECUTION_TIMEOUT, Integer.class);
+ request.withSdkClientExecutionTimeout(timeout);
+ }
+
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.SDK_REQUEST_TIMEOUT))) {
+ Integer timeout = exchange.getIn().getHeader(LambdaConstants.SDK_REQUEST_TIMEOUT, Integer.class);
+ request.withSdkRequestTimeout(timeout);
+ }
+ result = lambdaClient.deleteEventSourceMapping(request);
+ } catch (AmazonServiceException ase) {
+ LOG.trace("deleteEventSourceMapping command returned the error code {}", ase.getErrorCode());
+ throw ase;
+ }
+ Message message = getMessageForResponse(exchange);
+ message.setBody(result);
+ }
+
private LambdaOperations determineOperation(Exchange exchange) {
LambdaOperations operation = exchange.getIn().getHeader(LambdaConstants.OPERATION, LambdaOperations.class);
if (operation == null) {
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
index 8e6ed76..8398068 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
@@ -157,7 +157,10 @@ public class AmazonLambdaClientMock extends AbstractAWSLambda {
@Override
public DeleteEventSourceMappingResult deleteEventSourceMapping(DeleteEventSourceMappingRequest deleteEventSourceMappingRequest) {
- throw new UnsupportedOperationException();
+ DeleteEventSourceMappingResult result = new DeleteEventSourceMappingResult();
+ result.setUUID("a1239494949382882383");
+ result.setState("Deleting");
+ return result;
}
@Override
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest.java
index 2c9f9fa..fb3412e 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest.java
@@ -20,6 +20,7 @@ import java.io.*;
import com.amazonaws.services.lambda.model.CreateEventSourceMappingResult;
import com.amazonaws.services.lambda.model.CreateFunctionResult;
+import com.amazonaws.services.lambda.model.DeleteEventSourceMappingResult;
import com.amazonaws.services.lambda.model.DeleteFunctionResult;
import com.amazonaws.services.lambda.model.GetFunctionResult;
import com.amazonaws.services.lambda.model.ListFunctionsResult;
@@ -128,6 +129,20 @@ public class LambdaComponentSpringTest extends CamelSpringTestSupport {
CreateEventSourceMappingResult result = exchange.getOut().getBody(CreateEventSourceMappingResult.class);
assertEquals(result.getFunctionArn(), "arn:aws:lambda:eu-central-1:643534317684:function:GetHelloWithName");
}
+
+ @Test
+ public void lambdaDeleteEventSourceMappingTest() throws Exception {
+ Exchange exchange = template.send("direct:deleteEventSourceMapping", ExchangePattern.InOut, new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(LambdaConstants.EVENT_SOURCE_UUID, "a1239494949382882383");
+ }
+ });
+ assertMockEndpointsSatisfied();
+
+ DeleteEventSourceMappingResult result = exchange.getOut().getBody(DeleteEventSourceMappingResult.class);
+ assertTrue(result.getState().equalsIgnoreCase("Deleting"));
+ }
@Override
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
index 32c9896..252a44d 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
@@ -21,6 +21,7 @@ import java.io.FileInputStream;
import com.amazonaws.services.lambda.model.CreateEventSourceMappingResult;
import com.amazonaws.services.lambda.model.CreateFunctionResult;
+import com.amazonaws.services.lambda.model.DeleteEventSourceMappingResult;
import com.amazonaws.services.lambda.model.DeleteFunctionResult;
import com.amazonaws.services.lambda.model.GetFunctionResult;
import com.amazonaws.services.lambda.model.ListFunctionsResult;
@@ -168,6 +169,20 @@ public class LambdaProducerTest extends CamelTestSupport {
CreateEventSourceMappingResult result = exchange.getOut().getBody(CreateEventSourceMappingResult.class);
assertEquals(result.getFunctionArn(), "arn:aws:lambda:eu-central-1:643534317684:function:GetHelloWithName");
}
+
+ @Test
+ public void lambdaDeleteEventSourceMappingTest() throws Exception {
+ Exchange exchange = template.send("direct:deleteEventSourceMapping", ExchangePattern.InOut, new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(LambdaConstants.EVENT_SOURCE_UUID, "a1239494949382882383");
+ }
+ });
+ assertMockEndpointsSatisfied();
+
+ DeleteEventSourceMappingResult result = exchange.getOut().getBody(DeleteEventSourceMappingResult.class);
+ assertTrue(result.getState().equalsIgnoreCase("Deleting"));
+ }
@Override
protected JndiRegistry createRegistry() throws Exception {
@@ -198,6 +213,8 @@ public class LambdaProducerTest extends CamelTestSupport {
from("direct:updateFunction").to("aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=updateFunction").to("mock:result");
from("direct:createEventSourceMapping").to("aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=createEventSourceMapping").to("mock:result");
+
+ from("direct:deleteEventSourceMapping").to("aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=deleteEventSourceMapping").to("mock:result");
}
};
}
diff --git a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest-context.xml b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest-context.xml
index c3211dd..1e7c83e 100644
--- a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest-context.xml
+++ b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest-context.xml
@@ -54,6 +54,11 @@
<from uri="direct:createEventSourceMapping"/>
<to uri="aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=createEventSourceMapping"/>
</route>
+
+ <route>
+ <from uri="direct:deleteEventSourceMapping"/>
+ <to uri="aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=deleteEventSourceMapping"/>
+ </route>
</camelContext>
<bean id="awsLambdaClient" class="org.apache.camel.component.aws.lambda.AmazonLambdaClientMock"/>