public void testCloudcastOperations()

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