You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2020/11/18 19:13:56 UTC
[camel] branch master updated: Added test infra for AWS v2 Cloud
Watch (#4626)
This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 501eae5 Added test infra for AWS v2 Cloud Watch (#4626)
501eae5 is described below
commit 501eae53faabd92283e8ad5018984cca9fa83976
Author: Otavio Rodolfo Piske <or...@users.noreply.github.com>
AuthorDate: Wed Nov 18 20:13:31 2020 +0100
Added test infra for AWS v2 Cloud Watch (#4626)
Also migrates the camel-aws2-cw tests to the new test infra
---
components/camel-aws2-cw/pom.xml | 22 +++-
.../aws2/cw/localstack/Aws2CwBaseTest.java | 54 ++-------
test-infra/camel-test-infra-aws-v2/pom.xml | 6 +
.../test/infra/aws2/clients/AWSSDKClientUtils.java | 129 +++++++++------------
...ava => AWSCloudWatchLocalContainerService.java} | 11 +-
.../services/AWSKinesisLocalContainerService.java | 5 +
.../infra/aws2/services/AWSServiceFactory.java | 69 ++++-------
.../camel/test/infra/aws2/services/Service.java | 3 +-
8 files changed, 122 insertions(+), 177 deletions(-)
diff --git a/components/camel-aws2-cw/pom.xml b/components/camel-aws2-cw/pom.xml
index 0bc9a8d..ebae6b0 100644
--- a/components/camel-aws2-cw/pom.xml
+++ b/components/camel-aws2-cw/pom.xml
@@ -67,9 +67,29 @@
<artifactId>log4j-slf4j-impl</artifactId>
<scope>test</scope>
</dependency>
+
+ <!-- test infra -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test-infra-common</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test-infra-aws-common</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
<dependency>
<groupId>org.apache.camel</groupId>
- <artifactId>camel-testcontainers-junit5</artifactId>
+ <artifactId>camel-test-infra-aws-v2</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/components/camel-aws2-cw/src/test/java/org/apache/camel/component/aws2/cw/localstack/Aws2CwBaseTest.java b/components/camel-aws2-cw/src/test/java/org/apache/camel/component/aws2/cw/localstack/Aws2CwBaseTest.java
index 255ac23..cf9ec2d 100644
--- a/components/camel-aws2-cw/src/test/java/org/apache/camel/component/aws2/cw/localstack/Aws2CwBaseTest.java
+++ b/components/camel-aws2-cw/src/test/java/org/apache/camel/component/aws2/cw/localstack/Aws2CwBaseTest.java
@@ -16,61 +16,25 @@
*/
package org.apache.camel.component.aws2.cw.localstack;
-import java.net.URI;
-
import org.apache.camel.CamelContext;
import org.apache.camel.component.aws2.cw.Cw2Component;
-import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport;
-import org.apache.camel.test.testcontainers.junit5.Wait;
+import org.apache.camel.test.infra.aws.common.services.AWSService;
+import org.apache.camel.test.infra.aws2.clients.AWSSDKClientUtils;
+import org.apache.camel.test.infra.aws2.services.AWSServiceFactory;
+import org.apache.camel.test.junit5.CamelTestSupport;
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.cloudwatch.CloudWatchClient;
+import org.junit.jupiter.api.extension.RegisterExtension;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
-public class Aws2CwBaseTest extends ContainerAwareTestSupport {
-
- public static final String CONTAINER_IMAGE = "localstack/localstack:0.12.2";
- public static final String CONTAINER_NAME = "cloudwatch";
-
- @Override
- protected GenericContainer<?> createContainer() {
- return localstackContainer();
- }
-
- public static GenericContainer localstackContainer() {
- return new GenericContainer(CONTAINER_IMAGE)
- .withNetworkAliases(CONTAINER_NAME)
- .withEnv("SERVICES", "cloudwatch")
- .withExposedPorts(4566)
- .waitingFor(Wait.forListeningPort())
- .waitingFor(Wait.forLogMessageContaining("Ready.", 1));
- }
-
- public String getEventbridgeUrl() {
- return String.format(
- "%s:%d",
- getContainerHost(CONTAINER_NAME),
- getContainerPort(CONTAINER_NAME, 4566));
- }
-
- public CloudWatchClient getCwClient() {
- CloudWatchClient eventbridgeClient = CloudWatchClient
- .builder()
- .endpointOverride(URI.create("http://" + getEventbridgeUrl()))
- .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("xxx", "yyy")))
- .region(Region.EU_WEST_1)
- .build();
- return eventbridgeClient;
- }
+public class Aws2CwBaseTest extends CamelTestSupport {
+ @RegisterExtension
+ public static AWSService service = AWSServiceFactory.createCloudWatchService();
@Override
protected CamelContext createCamelContext() throws Exception {
CamelContext context = super.createCamelContext();
Cw2Component cwComponent = context.getComponent("aws2-cw", Cw2Component.class);
- cwComponent.getConfiguration().setAmazonCwClient(getCwClient());
+ cwComponent.getConfiguration().setAmazonCwClient(AWSSDKClientUtils.newCloudWatchClient());
return context;
}
}
diff --git a/test-infra/camel-test-infra-aws-v2/pom.xml b/test-infra/camel-test-infra-aws-v2/pom.xml
index 383284f..cb63c9d 100644
--- a/test-infra/camel-test-infra-aws-v2/pom.xml
+++ b/test-infra/camel-test-infra-aws-v2/pom.xml
@@ -78,6 +78,12 @@
<dependency>
<groupId>software.amazon.awssdk</groupId>
+ <artifactId>cloudwatch</artifactId>
+ <version>${aws-java-sdk2-version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>software.amazon.awssdk</groupId>
<artifactId>apache-client</artifactId>
<version>${aws-java-sdk2-version}</version>
</dependency>
diff --git a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/clients/AWSSDKClientUtils.java b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/clients/AWSSDKClientUtils.java
index 82f985e..fac841c 100644
--- a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/clients/AWSSDKClientUtils.java
+++ b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/clients/AWSSDKClientUtils.java
@@ -19,21 +19,21 @@ package org.apache.camel.test.infra.aws2.clients;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.function.Supplier;
import org.apache.camel.test.infra.aws.common.AWSConfigs;
import org.apache.camel.test.infra.aws2.common.SystemPropertiesAWSCredentialsProvider;
import org.apache.camel.test.infra.aws2.common.TestAWSCredentialsProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder;
+import software.amazon.awssdk.core.SdkClient;
import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.cloudwatch.CloudWatchClient;
import software.amazon.awssdk.services.kinesis.KinesisClient;
-import software.amazon.awssdk.services.kinesis.KinesisClientBuilder;
import software.amazon.awssdk.services.s3.S3Client;
-import software.amazon.awssdk.services.s3.S3ClientBuilder;
import software.amazon.awssdk.services.sns.SnsClient;
-import software.amazon.awssdk.services.sns.SnsClientBuilder;
import software.amazon.awssdk.services.sqs.SqsClient;
-import software.amazon.awssdk.services.sqs.SqsClientBuilder;
public final class AWSSDKClientUtils {
private static final Logger LOG = LoggerFactory.getLogger(AWSSDKClientUtils.class);
@@ -60,12 +60,25 @@ public final class AWSSDKClientUtils {
return awsInstanceType == null || awsInstanceType.equals("local-aws-container");
}
- public static KinesisClient newKinesisClient() {
- LOG.debug("Creating a new AWS v2 Kinesis client");
-
- String awsInstanceType = System.getProperty("aws-service.kinesis.instance.type");
-
- KinesisClientBuilder clientBuilder = KinesisClient.builder();
+ /**
+ * Generic AWS v2 client builder
+ *
+ * @param property the system property used to figure out if it's local service or not
+ * @param name the service name
+ * @param clientBuilderSupplier A supplier type for creating the builder class
+ * @param yClass The client type to be generated
+ * @param <T>
+ * @param <Y>
+ * @return A new client of the given type
+ */
+ private static <T extends AwsClientBuilder, Y extends SdkClient> Y newClient(
+ String property, String name,
+ Supplier<T> clientBuilderSupplier, Class<Y> yClass) {
+ T clientBuilder = clientBuilderSupplier.get();
+
+ LOG.debug("Creating a new AWS v2 {} client", name);
+
+ String awsInstanceType = System.getProperty(property);
clientBuilder.region(Region.US_EAST_1);
@@ -82,80 +95,48 @@ public final class AWSSDKClientUtils {
clientBuilder.credentialsProvider(new SystemPropertiesAWSCredentialsProvider());
}
- return clientBuilder.build();
- }
-
- public static SqsClient newSQSClient() {
- LOG.debug("Creating a new AWS v2 SQS client");
-
- String awsInstanceType = System.getProperty("aws-service.instance.type");
-
- SqsClientBuilder clientBuilder = SqsClient.builder();
-
- clientBuilder.region(Region.US_EAST_1);
-
- URI endpoint = getEndpoint();
-
- if (isLocalContainer(awsInstanceType) || endpoint != null) {
- clientBuilder.endpointOverride(endpoint);
+ Object o = clientBuilder.build();
+ if (yClass.isInstance(o)) {
+ return (Y) o;
}
- if (isLocalContainer(awsInstanceType)) {
- clientBuilder.credentialsProvider(TestAWSCredentialsProvider.CONTAINER_LOCAL_DEFAULT_PROVIDER);
-
- } else {
- clientBuilder.credentialsProvider(new SystemPropertiesAWSCredentialsProvider());
- }
-
- return clientBuilder.build();
+ throw new UnsupportedOperationException("Invalid class type for AWS client");
}
- public static S3Client newS3Client() {
- LOG.debug("Creating a new S3 client");
- S3ClientBuilder clientBuilder = S3Client.builder();
-
- String awsInstanceType = System.getProperty("aws-service.instance.type");
-
- clientBuilder.region(Region.US_EAST_1);
-
- URI endpoint = getEndpoint();
-
- if (isLocalContainer(awsInstanceType) || endpoint != null) {
- clientBuilder.endpointOverride(endpoint);
- }
+ /**
+ * Generic AWS v2 client builder
+ *
+ * @param name the service name
+ * @param clientBuilderSupplier A supplier type for creating the builder class
+ * @param yClass The client type to be generated
+ * @param <T>
+ * @param <Y>
+ * @return A new client of the given type
+ */
+ private static <T extends AwsClientBuilder, Y extends SdkClient> Y newClient(
+ String name,
+ Supplier<T> clientBuilderSupplier, Class<Y> yClass) {
+ return newClient("aws-service.instance.type", name, clientBuilderSupplier, yClass);
+ }
- if (isLocalContainer(awsInstanceType)) {
- clientBuilder.credentialsProvider(TestAWSCredentialsProvider.CONTAINER_LOCAL_DEFAULT_PROVIDER);
+ public static KinesisClient newKinesisClient() {
+ return newClient("aws-service.kinesis.instance.type", "Kinesis", KinesisClient::builder,
+ KinesisClient.class);
+ }
- } else {
- clientBuilder.credentialsProvider(new SystemPropertiesAWSCredentialsProvider());
- }
+ public static SqsClient newSQSClient() {
+ return newClient("SQS", SqsClient::builder, SqsClient.class);
+ }
- return clientBuilder.build();
+ public static S3Client newS3Client() {
+ return newClient("S3", S3Client::builder, S3Client.class);
}
public static SnsClient newSNSClient() {
- LOG.debug("Creating a new SNS client");
-
- String awsInstanceType = System.getProperty("aws-service.instance.type");
-
- SnsClientBuilder clientBuilder = SnsClient.builder();
-
- clientBuilder.region(Region.US_EAST_1);
-
- URI endpoint = getEndpoint();
-
- if (isLocalContainer(awsInstanceType) || endpoint != null) {
- clientBuilder.endpointOverride(endpoint);
- }
-
- if (isLocalContainer(awsInstanceType)) {
- clientBuilder.credentialsProvider(TestAWSCredentialsProvider.CONTAINER_LOCAL_DEFAULT_PROVIDER);
-
- } else {
- clientBuilder.credentialsProvider(new SystemPropertiesAWSCredentialsProvider());
- }
+ return newClient("SNS", SnsClient::builder, SnsClient.class);
+ }
- return clientBuilder.build();
+ public static CloudWatchClient newCloudWatchClient() {
+ return newClient("Cloud Watch", CloudWatchClient::builder, CloudWatchClient.class);
}
}
diff --git a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerService.java b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSCloudWatchLocalContainerService.java
similarity index 72%
copy from test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerService.java
copy to test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSCloudWatchLocalContainerService.java
index 6dfac7c..0f5f8bf 100644
--- a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerService.java
+++ b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSCloudWatchLocalContainerService.java
@@ -17,13 +17,8 @@
package org.apache.camel.test.infra.aws2.services;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AWSKinesisLocalContainerService extends AWSLocalContainerService {
- private static final Logger LOG = LoggerFactory.getLogger(AWSKinesisLocalContainerService.class);
-
- public AWSKinesisLocalContainerService() {
- super(Service.KINESIS);
+public class AWSCloudWatchLocalContainerService extends AWSLocalContainerService {
+ public AWSCloudWatchLocalContainerService() {
+ super(Service.CLOUD_WATCH);
}
}
diff --git a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerService.java b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerService.java
index 6dfac7c..3e5506e 100644
--- a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerService.java
+++ b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerService.java
@@ -19,10 +19,15 @@ package org.apache.camel.test.infra.aws2.services;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import software.amazon.awssdk.core.SdkSystemSetting;
public class AWSKinesisLocalContainerService extends AWSLocalContainerService {
private static final Logger LOG = LoggerFactory.getLogger(AWSKinesisLocalContainerService.class);
+ static {
+ System.setProperty(SdkSystemSetting.CBOR_ENABLED.property(), "false");
+ }
+
public AWSKinesisLocalContainerService() {
super(Service.KINESIS);
}
diff --git a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSServiceFactory.java b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSServiceFactory.java
index b757c91..9a34090 100644
--- a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSServiceFactory.java
+++ b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/AWSServiceFactory.java
@@ -17,10 +17,11 @@
package org.apache.camel.test.infra.aws2.services;
+import java.util.function.Supplier;
+
import org.apache.camel.test.infra.aws.common.services.AWSService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import software.amazon.awssdk.core.SdkSystemSetting;
public final class AWSServiceFactory {
private static final Logger LOG = LoggerFactory.getLogger(AWSServiceFactory.class);
@@ -33,15 +34,13 @@ public final class AWSServiceFactory {
return awsInstanceType == null ? "default" : awsInstanceType;
}
- public static AWSService createKinesisService() {
- String awsInstanceType = System.getProperty("aws-service.kinesis.instance.type");
- LOG.info("Creating a {} AWS kinesis instance", getInstanceTypeName(awsInstanceType));
+ private static <
+ T extends AWSLocalContainerService> AWSService createService(String property, String name, Supplier<T> supplier) {
+ String awsInstanceType = System.getProperty(property);
+ LOG.info("Creating a {} {} instance", name, getInstanceTypeName(awsInstanceType));
if (awsInstanceType == null || awsInstanceType.equals("local-aws-container")) {
-
- System.setProperty(SdkSystemSetting.CBOR_ENABLED.property(), "false");
-
- return new AWSKinesisLocalContainerService();
+ return supplier.get();
}
if (awsInstanceType.equals("remote")) {
@@ -53,54 +52,28 @@ public final class AWSServiceFactory {
throw new UnsupportedOperationException("Invalid AWS instance type");
}
- public static AWSService createSQSService() {
- String awsInstanceType = System.getProperty("aws-service.instance.type");
- LOG.info("Creating a {} AWS SQS instance", getInstanceTypeName(awsInstanceType));
-
- if (awsInstanceType == null || awsInstanceType.equals("local-aws-container")) {
- return new AWSSQSLocalContainerService();
- }
+ private static <T extends AWSLocalContainerService> AWSService createService(String name, Supplier<T> supplier) {
+ return createService("aws-service.instance.type", name, supplier);
+ }
- if (awsInstanceType.equals("remote")) {
- return new AWSRemoteService();
- }
+ public static AWSService createKinesisService() {
+ return createService("aws-service.kinesis.instance.type", "AWS Kinesis",
+ AWSKinesisLocalContainerService::new);
+ }
- LOG.error("Invalid AWS instance type: {}. Must be either 'remote' or 'local-aws-container'",
- awsInstanceType);
- throw new UnsupportedOperationException("Invalid AWS instance type");
+ public static AWSService createSQSService() {
+ return createService("AWS SQS", AWSSQSLocalContainerService::new);
}
public static AWSService createS3Service() {
- String awsInstanceType = System.getProperty("aws-service.instance.type");
- LOG.info("Creating a {} AWS S3 instance", awsInstanceType);
-
- if (awsInstanceType == null || awsInstanceType.equals("local-aws-container")) {
- return new AWSS3LocalContainerService();
- }
-
- if (awsInstanceType.equals("remote")) {
- return new AWSRemoteService();
- }
-
- LOG.error("Invalid AWS instance type: {}. Must be either 'remote' or 'local-aws-container'",
- awsInstanceType);
- throw new UnsupportedOperationException("Invalid AWS instance type");
+ return createService("AWS S3", AWSS3LocalContainerService::new);
}
public static AWSService createSNSService() {
- String awsInstanceType = System.getProperty("aws-service.instance.type");
- LOG.info("Creating a {} AWS SNS instance", awsInstanceType);
-
- if (awsInstanceType == null || awsInstanceType.equals("local-aws-container")) {
- return new AWSSNSLocalContainerService();
- }
-
- if (awsInstanceType.equals("remote")) {
- return new AWSRemoteService();
- }
+ return createService("AWS SNS", AWSSNSLocalContainerService::new);
+ }
- LOG.error("Invalid AWS instance type: {}. Must be either 'remote' or 'local-aws-container'",
- awsInstanceType);
- throw new UnsupportedOperationException("Invalid AWS instance type");
+ public static AWSService createCloudWatchService() {
+ return createService("AWS Cloud Watch", AWSCloudWatchLocalContainerService::new);
}
}
diff --git a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/Service.java b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/Service.java
index 1145399..7458de6 100644
--- a/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/Service.java
+++ b/test-infra/camel-test-infra-aws-v2/src/test/java/org/apache/camel/test/infra/aws2/services/Service.java
@@ -21,7 +21,8 @@ public enum Service {
KINESIS("kinesis"),
SQS("sqs"),
S3("s3"),
- SNS("sns");
+ SNS("sns"),
+ CLOUD_WATCH("cloudwatch");
private final String serviceName;