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()); + } +}