diff --git a/pom.xml b/pom.xml
index 4eb0bd8..fdb64a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -122,6 +122,11 @@
+
+ software.amazon.awssdk
+ sns
+ 2.13.36
+
software.amazon.awssdk
sqs
@@ -133,9 +138,9 @@
2.13.36
- netty-nio-client
software.amazon.awssdk
- 2.0.0
+ netty-nio-client
+ 2.13.36
diff --git a/src/main/java/cloud/localstack/awssdkv2/TestUtils.java b/src/main/java/cloud/localstack/awssdkv2/TestUtils.java
index 05ff387..a932527 100644
--- a/src/main/java/cloud/localstack/awssdkv2/TestUtils.java
+++ b/src/main/java/cloud/localstack/awssdkv2/TestUtils.java
@@ -4,6 +4,7 @@
import software.amazon.awssdk.utils.*;
import software.amazon.awssdk.http.*;
import software.amazon.awssdk.services.kinesis.*;
+import software.amazon.awssdk.services.sns.*;
import software.amazon.awssdk.services.sqs.*;
import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
@@ -26,8 +27,11 @@ public static SqsAsyncClient getClientSQSAsyncV2() {
return wrapApiClientV2(SqsAsyncClient.builder(), Localstack.INSTANCE.getEndpointSQS()).build();
}
- public static T wrapApiClientV2(
- T builder, String endpointURL) {
+ public static SnsAsyncClient getClientSNSAsyncV2() {
+ return wrapApiClientV2(SnsAsyncClient.builder(), Localstack.INSTANCE.getEndpointSNS()).build();
+ }
+
+ public static T wrapApiClientV2(T builder, String endpointURL) {
try {
return (T) ((software.amazon.awssdk.awscore.client.builder.AwsClientBuilder)builder
.httpClient(NettyNioAsyncHttpClient.builder().buildWithDefaults(
diff --git a/src/test/java/cloud/localstack/awssdkv2/SNSMessagingTest.java b/src/test/java/cloud/localstack/awssdkv2/SNSMessagingTest.java
new file mode 100644
index 0000000..7eb0101
--- /dev/null
+++ b/src/test/java/cloud/localstack/awssdkv2/SNSMessagingTest.java
@@ -0,0 +1,34 @@
+package cloud.localstack.awssdkv2;
+
+import cloud.localstack.LocalstackTestRunner;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.CreateTopicRequest;
+import software.amazon.awssdk.services.sns.model.CreateTopicResponse;
+import software.amazon.awssdk.services.sns.model.PublishRequest;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Test integration of SNS messaging with LocalStack using SDK v2
+ */
+@RunWith(LocalstackTestRunner.class)
+public class SNSMessagingTest {
+ private static final String TOPIC = "topic";
+
+ @Test
+ public void testSendMessage() throws ExecutionException, InterruptedException {
+ final SnsAsyncClient clientSNS = TestUtils.getClientSNSAsyncV2();
+ CreateTopicResponse createTopicResponse = clientSNS.createTopic(CreateTopicRequest.builder().name(TOPIC).build()).get();
+
+ String topicArn = createTopicResponse.topicArn();
+ Assert.assertNotNull(topicArn);
+ PublishRequest publishRequest = PublishRequest.builder().topicArn(topicArn).subject("test subject").message("message test.").build();
+
+ PublishResponse publishResponse = clientSNS.publish(publishRequest).get();
+ Assert.assertNotNull(publishResponse.messageId());
+ }
+}