Skip to content

Commit 92f428c

Browse files
committed
LocalStack - Add built in support for KmsClient
1 parent bbba105 commit 92f428c

File tree

4 files changed

+62
-3
lines changed

4 files changed

+62
-3
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@
7676
<scope>provided</scope>
7777
<optional>true</optional>
7878
</dependency>
79+
<dependency>
80+
<groupId>software.amazon.awssdk</groupId>
81+
<artifactId>kms</artifactId>
82+
<version>2.20.154</version>
83+
<scope>provided</scope>
84+
<optional>true</optional>
85+
</dependency>
7986

8087
<dependency>
8188
<groupId>com.amazonaws</groupId>

src/main/java/io/ebean/test/containers/AwsSDKv2.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55
import software.amazon.awssdk.regions.Region;
66
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
77
import software.amazon.awssdk.services.kinesis.KinesisClient;
8+
import software.amazon.awssdk.services.kms.KmsAsyncClient;
9+
import software.amazon.awssdk.services.kms.KmsClient;
810
import software.amazon.awssdk.services.s3.S3Client;
911
import software.amazon.awssdk.services.sns.SnsClient;
1012
import software.amazon.awssdk.services.sqs.SqsClient;
1113

14+
import java.net.URI;
15+
1216
/**
1317
* AWS SDK v1 compatible helper API to provide clients like
1418
* DynamoDbClient, SnsClient, SqsClient, KinesisClient.
@@ -17,6 +21,11 @@
1721
*/
1822
public interface AwsSDKv2 {
1923

24+
/**
25+
* Return the endpoint URI for this container.
26+
*/
27+
URI endpoint();
28+
2029
/**
2130
* Return the DynamoDbClient (V2 SDK) that can be used for this container.
2231
* <p>
@@ -46,6 +55,16 @@ public interface AwsSDKv2 {
4655
*/
4756
S3Client s3Client();
4857

58+
/**
59+
* Return the KmsClient (V2 SDK) for this container.
60+
*/
61+
KmsClient kmsClient();
62+
63+
/**
64+
* Return the KmsAsyncClient (V2 SDK) for this container.
65+
*/
66+
KmsAsyncClient kmsAsyncClient();
67+
4968
/**
5069
* Return SDK 2 Region.
5170
*/

src/main/java/io/ebean/test/containers/LocalstackSdkV2.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import software.amazon.awssdk.regions.Region;
66
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
77
import software.amazon.awssdk.services.kinesis.KinesisClient;
8+
import software.amazon.awssdk.services.kms.KmsAsyncClient;
9+
import software.amazon.awssdk.services.kms.KmsClient;
810
import software.amazon.awssdk.services.s3.S3Client;
911
import software.amazon.awssdk.services.sns.SnsClient;
1012
import software.amazon.awssdk.services.sqs.SqsClient;
@@ -68,6 +70,29 @@ public S3Client s3Client() {
6870
.build();
6971
}
7072

73+
@Override
74+
public URI endpoint() {
75+
return endpoint;
76+
}
77+
78+
@Override
79+
public KmsClient kmsClient() {
80+
return KmsClient.builder()
81+
.credentialsProvider(credentialsProvider())
82+
.endpointOverride(endpoint)
83+
.region(region())
84+
.build();
85+
}
86+
87+
@Override
88+
public KmsAsyncClient kmsAsyncClient() {
89+
return KmsAsyncClient.builder()
90+
.credentialsProvider(credentialsProvider())
91+
.endpointOverride(endpoint)
92+
.region(region())
93+
.build();
94+
}
95+
7196
@Override
7297
public Region region() {
7398
return awsRegion == null ? null : Region.of(awsRegion);

src/test/java/io/ebean/test/containers/LocalstackContainerV2Test.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import software.amazon.awssdk.services.dynamodb.model.*;
77
import software.amazon.awssdk.services.kinesis.KinesisClient;
88
import software.amazon.awssdk.services.kinesis.model.CreateStreamRequest;
9+
import software.amazon.awssdk.services.kms.model.CreateKeyResponse;
910
import software.amazon.awssdk.services.s3.S3Client;
1011
import software.amazon.awssdk.services.s3.model.Bucket;
1112
import software.amazon.awssdk.services.s3.model.CreateBucketResponse;
@@ -29,8 +30,7 @@ class LocalstackContainerV2Test {
2930
void start_viaBuilder() {
3031
Localstack2Container container = Localstack2Container.builder("4.0.3")
3132
.awsRegion("ap-southeast-2")
32-
.services("dynamodb,kinesis,sns,sqs,s3")
33-
//.port(4567)
33+
.services("dynamodb,kinesis,sns,sqs,s3,kms")
3434
.containerName("ut_localstack_dkss2")
3535
.image("localstack/localstack:4.0.3")
3636
.port(4577)
@@ -40,6 +40,14 @@ void start_viaBuilder() {
4040
container.startMaybe();
4141

4242
AwsSDKv2 sdk = container.sdk2();
43+
44+
assertThat(sdk.endpoint()).isNotNull();
45+
assertThat(sdk.kmsClient()).isNotNull();
46+
assertThat(sdk.kmsAsyncClient()).isNotNull();
47+
48+
CreateKeyResponse key = sdk.kmsClient().createKey();
49+
assertThat(key.keyMetadata().keyId()).isNotNull();
50+
4351
var amazonDynamoDB = sdk.dynamoDBClient();
4452
createTable(amazonDynamoDB);
4553

@@ -166,7 +174,7 @@ void randomPort() {
166174
@Test
167175
void start() {
168176

169-
Localstack2Container container = Localstack2Container.builder("0.14.4")
177+
Localstack2Container container = Localstack2Container.builder("4.0.3")
170178
//.setShutdownMode(StopMode.None)
171179
.build();
172180
container.startMaybe();

0 commit comments

Comments
 (0)