Skip to content
This repository was archived by the owner on Apr 6, 2026. It is now read-only.

Commit 4c4859f

Browse files
authored
test(sns): add Subscribe idempotency compatibility test (#38)
Verifies that subscribing the same topic+protocol+endpoint twice returns the same ARN and does not create a duplicate subscription.
1 parent d4a07ac commit 4c4859f

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

sdk-test-java/src/main/java/com/floci/test/tests/SnsTests.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,49 @@ public void run(TestContext ctx) {
353353
ctx.check("SNS FIFO content-based dedup", false, e);
354354
}
355355

356+
// 14. Subscribe idempotency - same topic+protocol+endpoint returns same ARN
357+
try {
358+
String idempTopicName = "sns-idempotent-" + System.currentTimeMillis();
359+
String idempTopicArn = sns.createTopic(CreateTopicRequest.builder()
360+
.name(idempTopicName)
361+
.build()).topicArn();
362+
363+
String idempQueueName = "sns-idempotent-queue-" + System.currentTimeMillis();
364+
String idempQueueUrl = sqs.createQueue(CreateQueueRequest.builder()
365+
.queueName(idempQueueName)
366+
.build()).queueUrl();
367+
String idempQueueArn = sqs.getQueueAttributes(GetQueueAttributesRequest.builder()
368+
.queueUrl(idempQueueUrl)
369+
.attributeNames(QueueAttributeName.QUEUE_ARN)
370+
.build())
371+
.attributes().get(QueueAttributeName.QUEUE_ARN);
372+
373+
String firstSubArn = sns.subscribe(SubscribeRequest.builder()
374+
.topicArn(idempTopicArn)
375+
.protocol("sqs")
376+
.endpoint(idempQueueArn)
377+
.build()).subscriptionArn();
378+
379+
String secondSubArn = sns.subscribe(SubscribeRequest.builder()
380+
.topicArn(idempTopicArn)
381+
.protocol("sqs")
382+
.endpoint(idempQueueArn)
383+
.build()).subscriptionArn();
384+
385+
ctx.check("SNS Subscribe idempotent - same ARN", firstSubArn.equals(secondSubArn));
386+
387+
int subCount = sns.listSubscriptionsByTopic(ListSubscriptionsByTopicRequest.builder()
388+
.topicArn(idempTopicArn)
389+
.build()).subscriptions().size();
390+
ctx.check("SNS Subscribe idempotent - single subscription", subCount == 1);
391+
392+
sns.unsubscribe(UnsubscribeRequest.builder().subscriptionArn(firstSubArn).build());
393+
sns.deleteTopic(DeleteTopicRequest.builder().topicArn(idempTopicArn).build());
394+
sqs.deleteQueue(DeleteQueueRequest.builder().queueUrl(idempQueueUrl).build());
395+
} catch (Exception e) {
396+
ctx.check("SNS Subscribe idempotent", false, e);
397+
}
398+
356399
} catch (Exception e) {
357400
ctx.check("SNS Client", false, e);
358401
}

0 commit comments

Comments
 (0)