Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Update LocalstackContainer to support both AWS SDK 1 and 2 #105

Merged
merged 2 commits into from
Nov 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 16 additions & 27 deletions src/main/java/io/ebean/test/containers/LocalstackContainer.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
package io.ebean.test.containers;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.kinesis.AmazonKinesis;
import com.amazonaws.services.kinesis.AmazonKinesisClientBuilder;
import com.amazonaws.services.sns.AmazonSNS;
import com.amazonaws.services.sns.AmazonSNSClientBuilder;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;

import java.io.IOException;
import java.lang.System.Logger.Level;
Expand Down Expand Up @@ -148,10 +141,7 @@ private String healthUrl() {
* This should be used AFTER the container is started.
*/
public AmazonDynamoDB dynamoDB() {
return AmazonDynamoDBClientBuilder.standard()
.withCredentials(credentials())
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpointUrl(), awsRegion))
.build();
return sdk1().dynamoDB();
}

/**
Expand All @@ -160,38 +150,37 @@ public AmazonDynamoDB dynamoDB() {
* This should be used AFTER the container is started.
*/
public AmazonKinesis kinesis() {
return AmazonKinesisClientBuilder.standard()
.withCredentials(credentials())
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpointUrl(), awsRegion))
.build();
return sdk1().kinesis();
}

/**
* Return the AmazonSNS (V1 SDK) client for this container.
*/
public AmazonSNS sns() {
return AmazonSNSClientBuilder.standard()
.withCredentials(credentials())
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpointUrl(), awsRegion))
.build();
return sdk1().sns();
}

/**
* Return the AmazonSQS (V1 SDK) client for this container.
*/
public AmazonSQS sqs() {
return AmazonSQSClientBuilder.standard()
.withCredentials(credentials())
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpointUrl(), awsRegion))
.build();
return sdk1().sqs();
}

/**
* Return SDK 1 AWSStaticCredentialsProvider.
* Return the AWS v2 SDK compatible helper that provides API for
* DynamoDB client, SNSClient, SQQClient etc.
*/
@Deprecated
public AWSStaticCredentialsProvider credentials() {
return new AWSStaticCredentialsProvider(new BasicAWSCredentials("localstack", "localstack"));
public AwsSDKv2 sdk2() {
return new LocalstackSdkV2(awsRegion, endpoint());
}

/**
* Return the AWS v1 SDK compatible helper that provides API for
* AmazonDynamoDB client, AmazonSNS, AmazonSQS etc.
*/
public AwsSDKv1 sdk1() {
return new LocalstackSdkV1(awsRegion, endpointUrl());
}

public URI endpoint() {
Expand Down
29 changes: 26 additions & 3 deletions src/main/java/io/ebean/test/containers/YugabyteContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public YugabyteContainer start() {
return this;
}

protected final YugabyteContainer.Builder builder;

/**
* Create a builder for YugabyteContainer.
*/
Expand All @@ -31,12 +33,31 @@ public static Builder newBuilder(String version) {

public static class Builder extends BaseDbBuilder<YugabyteContainer, Builder> {

int port9042 = 9042;
int port9000 = 9000;
int port7000 = 7000;

private Builder(String version) {
super("yugabyte", 6433, 5433, version);
this.image = "yugabytedb/yugabyte:" + version;
this.adminUsername = "postgres";
}

public YugabyteContainer.Builder port7000(int port7000) {
this.port7000 = port7000;
return self();
}

public YugabyteContainer.Builder port9000(int port9000) {
this.port9000 = port9000;
return self();
}

public YugabyteContainer.Builder port9042(int port9042) {
this.port9042 = port9042;
return self();
}

@Override
protected String buildJdbcUrl() {
return "jdbc:postgresql://" + getHost() + ":" + getPort() + "/" + getDbName();
Expand All @@ -60,6 +81,7 @@ public YugabyteContainer start() {

private YugabyteContainer(Builder builder) {
super(builder);
this.builder = builder;
}

@Override
Expand All @@ -73,11 +95,12 @@ protected ProcessBuilder runProcess() {
args.add("-p");
args.add(config.getPort() + ":" + config.getInternalPort());
args.add("-p");
args.add("7000:7000");
args.add(builder.port7000 + ":7000");
args.add("-p");
args.add("9000:9000");
args.add(builder.port9000 + ":9000");
args.add("-p");
args.add("9042:9042");
args.add(builder.port9042 +":9042");

// if (dbConfig.isInMemory() && dbConfig.getTmpfs() != null) {
// args.add("--tmpfs");
// args.add(dbConfig.getTmpfs());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ void start_viaBuilder() {
useSnsSqs(container);
useKinesis(container);

assertThat(container.credentials()).isNotNull();
assertThat(container.endpointUrl()).isNotNull();
assertThat(container.awsRegion()).isEqualTo("ap-southeast-2");

Expand Down