@@ -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