@Test public void testCreateListDeleteTopic_shouldCreateReturnAndDelete() { mockSns(new MockParameters()); ListTopicsResult listTopicResultBefore = sns.listTopics(); assertEquals("topic list should contain zero items before insert",0,listTopicResultBefore.getTopics().size()); CreateTopicRequest create = new CreateTopicRequest() .withName("major-topic"); CreateTopicResult createResult = sns.createTopic(create); String topicArn = createResult.getTopicArn(); assertNotNull("verify returned topic ARN", topicArn); ListTopicsResult listTopicResult = sns.listTopics(); assertEquals("after insert topic list should contain 1 item",1,listTopicResult.getTopics().size()); assertEquals("after insert topic list should contain before inserted topic arn", topicArn, listTopicResult.getTopics().get(0).getTopicArn()); DeleteTopicResult deleteResult = sns.deleteTopic(topicArn); assertNotNull(deleteResult); ListTopicsResult listTopicsAfterDeletion = sns.listTopics(); assertEquals("topic list should contain zero items after deletion",0,listTopicsAfterDeletion.getTopics().size()); }
/** * * @param email * @return */ public String getOrCreateNotification(String email) { String ret = null; String topicName = getTopicName(email); String nextToken = null; do { ListTopicsResult listTopics = asyncSnsClient.listTopics(nextToken); List<Topic> topics = listTopics.getTopics(); for (Topic s : topics) { if (s.getTopicArn().endsWith(topicName)) { ret = s.getTopicArn(); break; } } nextToken = listTopics.getNextToken(); } while (ret == null && nextToken != null); if (ret == null) { // create the topic and the subscription CreateTopicResult topic = asyncSnsClient.createTopic(topicName); SubscribeRequest req = new SubscribeRequest(topic.getTopicArn(), "email", email); asyncSnsClient.subscribeAsync(req); ret = topic.getTopicArn(); } return ret; }
@Test public void shouldCreateSnsTopicResource_withName() throws Exception { // Given final String name = randomString(); final String topicArn = topicArnForName(name); final List<Topic> topics = Arrays.asList(randomTopic(), randomTopic(), topicForArn(topicArn), randomTopic()); final ListTopicsResult mockListTopicsResult = mock(ListTopicsResult.class); when(mockListTopicsResult.getTopics()).thenReturn(topics); when(mockListTopicsResult.getNextToken()).thenReturn(null); final String nextToken = null; when(mockAmazonSnsClient.listTopics(nextToken)).thenReturn(mockListTopicsResult); final SnsTopicResource mockSnsTopicResource = mock(SnsTopicResource.class); whenNew(SnsTopicResource.class).withArguments(name, topicArn, mockAmazonSnsClient) .thenReturn(mockSnsTopicResource); // When final SnsTopicResource result = factory.createSnsTopicResource(name); // Then assertSame(mockSnsTopicResource, result); }
@Test public void resolveDestination_withExistentTopic_returnsTopicArnFoundWhileListingTopic() throws Exception { // Arrange String topicArn = "arn:aws:sns:eu-west:123456789012:test"; AmazonSNS sns = mock(AmazonSNS.class); when(sns.listTopics(new ListTopicsRequest(null))).thenReturn(new ListTopicsResult().withTopics(new Topic().withTopicArn(topicArn))); DynamicTopicDestinationResolver resolver = new DynamicTopicDestinationResolver(sns); // Act String resolvedDestinationName = resolver.resolveDestination("test"); // Assert assertEquals(topicArn, resolvedDestinationName); }
@Test public void resolveDestination_withExistentTopicAndMarker_returnsTopicArnFoundWhileListingTopic() throws Exception { // Arrange AmazonSNS sns = mock(AmazonSNS.class); when(sns.listTopics(new ListTopicsRequest(null))).thenReturn(new ListTopicsResult().withNextToken("mark")); String topicArn = "arn:aws:sns:eu-west:123456789012:test"; when(sns.listTopics(new ListTopicsRequest("mark"))).thenReturn(new ListTopicsResult().withTopics(new Topic().withTopicArn(topicArn))); DynamicTopicDestinationResolver resolver = new DynamicTopicDestinationResolver(sns); // Act String resolvedDestinationName = resolver.resolveDestination("test"); // Assert assertEquals(topicArn, resolvedDestinationName); }
@Test public void resolveDestination_withResourceIdResolver_shouldCallIt() throws Exception { // Arrange String physicalTopicName = "arn:aws:sns:eu-west:123456789012:myTopic"; String logicalTopicName = "myTopic"; ResourceIdResolver resourceIdResolver = mock(ResourceIdResolver.class); when(resourceIdResolver.resolveToPhysicalResourceId(logicalTopicName)).thenReturn(physicalTopicName); AmazonSNS sns = mock(AmazonSNS.class); when(sns.listTopics(new ListTopicsRequest(null))).thenReturn(new ListTopicsResult().withTopics(new Topic().withTopicArn(physicalTopicName))); DynamicTopicDestinationResolver resolver = new DynamicTopicDestinationResolver(sns, resourceIdResolver); // Assert String resolvedDestinationName = resolver.resolveDestination(logicalTopicName); // Assert assertEquals(physicalTopicName, resolvedDestinationName); }
@Test public void send_validTextMessage_usesTopicChannel() throws Exception { // Arrange AmazonSNS amazonSns = mock(AmazonSNS.class); NotificationMessagingTemplate notificationMessagingTemplate = new NotificationMessagingTemplate(amazonSns); String physicalTopicName = "arn:aws:sns:eu-west:123456789012:test"; when(amazonSns.listTopics(new ListTopicsRequest(null))).thenReturn(new ListTopicsResult().withTopics(new Topic().withTopicArn(physicalTopicName))); notificationMessagingTemplate.setDefaultDestinationName(physicalTopicName); // Act notificationMessagingTemplate.send(MessageBuilder.withPayload("Message content").build()); // Assert verify(amazonSns).publish(new PublishRequest(physicalTopicName, "Message content", null).withMessageAttributes(isNotNull())); }
public String getTopicARN() { try { if (topicANR.isEmpty()) { ListTopicsResult topics = snsClient.listTopics(); for(Topic topic : topics.getTopics()) { String foundArn = topic.getTopicArn(); if (foundArn.contains(TOPIC_NAME)) { logger.info("Found notification topic for SNS, ARN is: " + foundArn); topicANR = foundArn; break; } } } if (topicANR.isEmpty()) { logger.info("Did not find notification topic for SNS, to receive updates create topic: " + TOPIC_NAME); } return topicANR; } catch (AuthorizationErrorException authException) { logger.error("Did not send SNS notification. You may need to update permissions for user via IAM. Exception was " + authException); return ""; } }
@Test public void listTopicsFromEmptyRepository() { final ListTopicsResult result = sns.listTopics(); assertThat(result.getNextToken()).isNull(); assertThat(result.getTopics()).isEmpty(); }
@Test public void listSingleTopic() { sns.createTopic("test"); final ListTopicsResult result = sns.listTopics(); assertThat(result.getNextToken()).isNull(); assertThat(arnValues(result.getTopics())).containsExactly("arn:aws:sns:us-east-1:12345:test"); }
@Test public void listMultiple() { final String[] topics = new String[5]; for (int i = 0; i < 5; i++) topics[i] = sns.createTopic("topic" + i).getTopicArn(); final ListTopicsResult result = sns.listTopics(); assertThat(result.getNextToken()).isNull(); assertThat(arnValues(result.getTopics())).containsExactly(topics); }
@Test public void topicsAreReturnedInChunksOf100() { for (int i = 0; i < 120; i++) sns.createTopic("topic" + i); ListTopicsResult result = sns.listTopics(); final String token = result.getNextToken(); assertThat(token).isNotNull(); assertThat(arnValues(result.getTopics())) .hasSize(100) .contains( "arn:aws:sns:us-east-1:12345:topic0", "arn:aws:sns:us-east-1:12345:topic1", "arn:aws:sns:us-east-1:12345:topic10", "arn:aws:sns:us-east-1:12345:topic100", "arn:aws:sns:us-east-1:12345:topic8", "arn:aws:sns:us-east-1:12345:topic80") .doesNotContain( "arn:aws:sns:us-east-1:12345:topic9"); result = sns.listTopics(token); assertThat(result.getNextToken()).isNull(); assertThat(arnValues(result.getTopics())) .hasSize(20) .contains( "arn:aws:sns:us-east-1:12345:topic81", "arn:aws:sns:us-east-1:12345:topic9", "arn:aws:sns:us-east-1:12345:topic90", "arn:aws:sns:us-east-1:12345:topic99") .doesNotContain( "arn:aws:sns:us-east-1:12345:topic120"); }
@Test public void topicsShouldBeReturnedInOrder() { final String[] topics = new String[4]; topics[1] = sns.createTopic("10").getTopicArn(); topics[0] = sns.createTopic("1").getTopicArn(); topics[3] = sns.createTopic("8").getTopicArn(); topics[2] = sns.createTopic("17").getTopicArn(); final ListTopicsResult result = sns.listTopics(); assertThat(result.getNextToken()).isNull(); assertThat(arnValues(result.getTopics())).containsExactly(topics); }
private String topicArnForName(final String name) { String nextToken = null; String topicArn = null; while (topicArn == null) { final ListTopicsResult listTopicsResult = amazonSnsClient.listTopics(nextToken); topicArn = topicArnForNameInTopics(name, listTopicsResult.getTopics()); nextToken = listTopicsResult.getNextToken(); if (nextToken == null) { break; } } return topicArn; }
private String getTopicResourceName(String marker, String topicName) { ListTopicsResult listTopicsResult = this.amazonSns.listTopics(new ListTopicsRequest(marker)); for (Topic topic : listTopicsResult.getTopics()) { AmazonResourceName resourceName = AmazonResourceName.fromString(topic.getTopicArn()); if (resourceName.getResourceType().equals(topicName)) { return topic.getTopicArn(); } } if (StringUtils.hasText(listTopicsResult.getNextToken())) { return getTopicResourceName(listTopicsResult.getNextToken(), topicName); } else { throw new IllegalArgumentException("No topic found for name :'" + topicName + "'"); } }
@Test public void resolveDestination_withNonExistentTopicAndWithoutMarkerReturnedOnListTopics_shouldThrowIllegalArgumentException() throws Exception { // Arrange this.expectedException.expect(IllegalArgumentException.class); this.expectedException.expectMessage("No topic found for name :'test'"); AmazonSNS sns = mock(AmazonSNS.class); when(sns.listTopics(new ListTopicsRequest(null))).thenReturn(new ListTopicsResult()); DynamicTopicDestinationResolver resolver = new DynamicTopicDestinationResolver(sns); // Act resolver.resolveDestination("test"); }
@Test public void resolveDestination_withNonExistentTopicAndWithMarkerReturnedOnListTopics_shouldCallListMultipleTimeWithMarkerAndThrowIllegalArgumentException() throws Exception { // Arrange this.expectedException.expect(IllegalArgumentException.class); this.expectedException.expectMessage("No topic found for name :'test'"); AmazonSNS sns = mock(AmazonSNS.class); when(sns.listTopics(new ListTopicsRequest(null))).thenReturn(new ListTopicsResult().withNextToken("foo")); when(sns.listTopics(new ListTopicsRequest("foo"))).thenReturn(new ListTopicsResult()); DynamicTopicDestinationResolver resolver = new DynamicTopicDestinationResolver(sns); // Act resolver.resolveDestination("test"); }
@Test public void convertAndSend_withDestinationPayloadAndSubject_shouldSetSubject() throws Exception { // Arrange AmazonSNS amazonSns = mock(AmazonSNS.class); NotificationMessagingTemplate notificationMessagingTemplate = new NotificationMessagingTemplate(amazonSns); String physicalTopicName = "arn:aws:sns:eu-west:123456789012:test"; when(amazonSns.listTopics(new ListTopicsRequest(null))).thenReturn(new ListTopicsResult().withTopics(new Topic().withTopicArn(physicalTopicName))); // Act notificationMessagingTemplate.sendNotification(physicalTopicName, "My message", "My subject"); // Assert verify(amazonSns).publish(new PublishRequest(physicalTopicName, "My message", "My subject").withMessageAttributes(isNotNull())); }
@Test public void convertAndSend_withPayloadAndSubject_shouldSetSubject() throws Exception { // Arrange AmazonSNS amazonSns = mock(AmazonSNS.class); NotificationMessagingTemplate notificationMessagingTemplate = new NotificationMessagingTemplate(amazonSns); String physicalTopicName = "arn:aws:sns:eu-west:123456789012:test"; when(amazonSns.listTopics(new ListTopicsRequest(null))).thenReturn(new ListTopicsResult().withTopics(new Topic().withTopicArn(physicalTopicName))); notificationMessagingTemplate.setDefaultDestinationName(physicalTopicName); // Act notificationMessagingTemplate.sendNotification("My message", "My subject"); // Assert verify(amazonSns).publish(new PublishRequest(physicalTopicName, "My message", "My subject").withMessageAttributes(isNotNull())); }
@Override public ListTopicsResult listTopics() throws AmazonClientException { return new ListTopicsResult(). withTopics(FluentIterable. from(_subscriptionsForTopic.keySet()). transform(NEW_TOPIC). toList()); }
@Override public ListTopicsResult listTopics(ListTopicsRequest listTopicsRequest) throws AmazonServiceException, AmazonClientException { throw new UnsupportedOperationException(); }
@Override public ListTopicsResult listTopics() throws AmazonServiceException, AmazonClientException { throw new UnsupportedOperationException(); }
@Override public ListTopicsResult listTopics(ListTopicsRequest listTopicsRequest) throws AmazonClientException { return listTopics(); }
public static String getTopicArn( final AmazonSNSClient sns, final String queueName, final boolean createOnMissing ) throws Exception { if ( logger.isTraceEnabled() ) { logger.trace( "Looking up Topic ARN: {}", queueName ); } ListTopicsResult listTopicsResult = sns.listTopics(); String topicArn = null; for ( Topic topic : listTopicsResult.getTopics() ) { String arn = topic.getTopicArn(); if ( queueName.equals( arn.substring( arn.lastIndexOf( ':' ) ) ) ) { topicArn = arn; if (logger.isTraceEnabled()) { logger.trace( "Found existing topic arn=[{}] for queue=[{}]", topicArn, queueName ); } } } if ( topicArn == null && createOnMissing ) { if (logger.isTraceEnabled()) { logger.trace("Creating topic for queue=[{}]...", queueName); } CreateTopicResult createTopicResult = sns.createTopic( queueName ); topicArn = createTopicResult.getTopicArn(); if (logger.isTraceEnabled()) { logger.trace("Successfully created topic with name {} and arn {}", queueName, topicArn); } } else { logger.error( "Error looking up topic ARN for queue=[{}] and createOnMissing=[{}]", queueName, createOnMissing ); } if ( logger.isTraceEnabled() ) { logger.trace( "Returning Topic ARN=[{}] for Queue=[{}]", topicArn, queueName ); } return topicArn; }