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 2020/09/11 16:30:33 UTC

[camel] 02/03: Camel-AWS2-SNS: Adding tests with localstack and Testcontainers

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 55cc3205c9c6bc6b45aa3544603c72b3bf104f6b
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Sep 11 18:28:33 2020 +0200

    Camel-AWS2-SNS: Adding tests with localstack and Testcontainers
---
 .../aws2/ec2/localstack/Aws2EC2BaseTest.java       | 76 +++++++++++++++++++
 .../ec2/localstack/EC2ComponentLocalstackTest.java | 88 ++++++++++++++++++++++
 2 files changed, 164 insertions(+)

diff --git a/components/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/localstack/Aws2EC2BaseTest.java b/components/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/localstack/Aws2EC2BaseTest.java
new file mode 100644
index 0000000..024db7a
--- /dev/null
+++ b/components/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/localstack/Aws2EC2BaseTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.aws2.ec2.localstack;
+
+import java.net.URI;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.aws2.ec2.AWS2EC2Component;
+import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport;
+import org.apache.camel.test.testcontainers.junit5.Wait;
+import org.junit.jupiter.api.TestInstance;
+import org.testcontainers.containers.GenericContainer;
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.ec2.Ec2Client;
+
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+public class Aws2EC2BaseTest extends ContainerAwareTestSupport {
+
+    public static final String CONTAINER_IMAGE = "localstack/localstack:0.11.4";
+    public static final String CONTAINER_NAME = "ec2";
+
+    @Override
+    protected GenericContainer<?> createContainer() {
+        return localstackContainer();
+    }
+
+    public static GenericContainer localstackContainer() {
+        return new GenericContainer(CONTAINER_IMAGE)
+                .withNetworkAliases(CONTAINER_NAME)
+                .withEnv("SERVICES", "ec2")
+                .withExposedPorts(4566)
+                .waitingFor(Wait.forListeningPort())
+                .waitingFor(Wait.forLogMessageContaining("Ready.", 1));
+    }
+
+    public String getS3Url() {
+        return String.format(
+                "%s:%d",
+                getContainerHost(CONTAINER_NAME),
+                getContainerPort(CONTAINER_NAME, 4566));
+    }
+
+    public Ec2Client getEc2Client() {
+        Ec2Client sqsClient = Ec2Client
+                .builder()
+                .endpointOverride(URI.create("http://" + getS3Url()))
+                .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("xxx", "yyy")))
+                .region(Region.EU_WEST_1)
+                .build();
+        return sqsClient;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        AWS2EC2Component ec2 = context.getComponent("aws2-ec2", AWS2EC2Component.class);
+        ec2.getConfiguration().setAmazonEc2Client(getEc2Client());
+        return context;
+    }
+}
diff --git a/components/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/localstack/EC2ComponentLocalstackTest.java b/components/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/localstack/EC2ComponentLocalstackTest.java
new file mode 100644
index 0000000..592dd35
--- /dev/null
+++ b/components/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/localstack/EC2ComponentLocalstackTest.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.aws2.ec2.localstack;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.aws2.ec2.AWS2EC2Constants;
+import org.apache.camel.component.aws2.ec2.AWS2EC2Operations;
+import org.junit.jupiter.api.Test;
+import software.amazon.awssdk.services.ec2.model.InstanceType;
+
+public class EC2ComponentLocalstackTest extends Aws2EC2BaseTest {
+
+    @Test
+    public void createAndRunInstancesTest() {
+
+        template.send("direct:createAndRun", new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(AWS2EC2Constants.IMAGE_ID, "ami-fd65ba94");
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_TYPE, InstanceType.T2_MICRO);
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_MIN_COUNT, 1);
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_MAX_COUNT, 1);
+            }
+        });
+    }
+
+    @Test
+    public void createAndRunInstancesWithSecurityGroupsTest() {
+
+        template.send("direct:createAndRun", new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(AWS2EC2Constants.IMAGE_ID, "ami-fd65ba94");
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_TYPE, InstanceType.T2_MICRO);
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_MIN_COUNT, 1);
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_MAX_COUNT, 1);
+                Collection<String> secGroups = new ArrayList<>();
+                secGroups.add("secgroup-1");
+                secGroups.add("secgroup-2");
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_SECURITY_GROUPS, secGroups);
+            }
+        });
+    }
+
+    @Test
+    public void ec2CreateAndRunTestWithKeyPair() throws Exception {
+
+        template.request("direct:createAndRun", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(AWS2EC2Constants.OPERATION, AWS2EC2Operations.createAndRunInstances);
+                exchange.getIn().setHeader(AWS2EC2Constants.IMAGE_ID, "ami-fd65ba94");
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_TYPE, InstanceType.T2_MICRO);
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_MIN_COUNT, 1);
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCE_MAX_COUNT, 1);
+                exchange.getIn().setHeader(AWS2EC2Constants.INSTANCES_KEY_PAIR, "keypair-1");
+            }
+        });
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:createAndRun")
+                        .to("aws2-ec2://TestDomain?operation=createAndRunInstances");
+            }
+        };
+    }
+}