in services/sns/src/it/java/software/amazon/awssdk/services/sns/SNSIntegrationTest.java [156:235]
public void testCloudcastOperations() throws Exception {
// Create Topic
CreateTopicResponse createTopicResult = sns
.createTopic(CreateTopicRequest.builder().name("test-topic-" + System.currentTimeMillis()).build());
topicArn = createTopicResult.topicArn();
assertTrue(topicArn.length() > 1);
// List Topics
Thread.sleep(1000 * 5);
ListTopicsResponse listTopicsResult = sns.listTopics(ListTopicsRequest.builder().build());
assertNotNull(listTopicsResult.topics());
assertTopicIsPresent(listTopicsResult.topics(), topicArn);
// Set Topic Attributes
sns.setTopicAttributes(SetTopicAttributesRequest.builder().topicArn(topicArn).attributeName("DisplayName")
.attributeValue("MyTopicName").build());
// Get Topic Attributes
GetTopicAttributesResponse getTopicAttributesResult = sns
.getTopicAttributes(GetTopicAttributesRequest.builder().topicArn(topicArn).build());
assertEquals("MyTopicName", getTopicAttributesResult.attributes().get("DisplayName"));
// Subscribe an SQS queue for notifications
String queueArn = initializeReceivingQueue();
SubscribeResponse subscribeResult = sns
.subscribe(SubscribeRequest.builder().endpoint(queueArn).protocol("sqs").topicArn(topicArn).build());
subscriptionArn = subscribeResult.subscriptionArn();
assertTrue(subscriptionArn.length() > 1);
// List Subscriptions by Topic
Thread.sleep(1000 * 5);
ListSubscriptionsByTopicResponse listSubscriptionsByTopicResult = sns
.listSubscriptionsByTopic(ListSubscriptionsByTopicRequest.builder().topicArn(topicArn).build());
assertSubscriptionIsPresent(listSubscriptionsByTopicResult.subscriptions(), subscriptionArn);
// List Subscriptions
List<Subscription> subscriptions = getAllSubscriptions(sns);
assertSubscriptionIsPresent(subscriptions, subscriptionArn);
// Get Subscription Attributes
Map<String, String> attributes = sns
.getSubscriptionAttributes(GetSubscriptionAttributesRequest.builder().subscriptionArn(subscriptionArn).build())
.attributes();
assertTrue(attributes.size() > 0);
Entry<String, String> entry = attributes.entrySet().iterator().next();
assertNotNull(entry.getKey());
assertNotNull(entry.getValue());
// Set Subscription Attributes
sns.setSubscriptionAttributes(
SetSubscriptionAttributesRequest.builder().subscriptionArn(subscriptionArn).attributeName("DeliveryPolicy")
.attributeValue(DELIVERY_POLICY).build());
// Publish
sns.publish(PublishRequest.builder().topicArn(topicArn).message("Hello SNS World").subject("Subject").build());
// Receive Published Message
String message = receiveMessage();
Map<String, String> messageDetails = parseJSON(message);
assertEquals("Hello SNS World", messageDetails.get("Message"));
assertEquals("Subject", messageDetails.get("Subject"));
assertNotNull(messageDetails.get("MessageId"));
assertNotNull(messageDetails.get("Signature"));
// Verify Message Signature
Certificate certificate = getCertificate(messageDetails.get("SigningCertURL"));
assertTrue(signatureChecker.verifyMessageSignature(message, certificate.getPublicKey()));
// Add/Remove Permissions
sns.addPermission(AddPermissionRequest.builder()
.topicArn(topicArn)
.label("foo")
.actionNames("Publish")
.awsAccountIds("750203240092")
.build());
Thread.sleep(1000 * 5);
sns.removePermission(RemovePermissionRequest.builder().topicArn(topicArn).label("foo").build());
}