| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | import boto3 | 
					
						
							| 
									
										
										
										
											2017-09-08 03:19:34 +09:00
										 |  |  | import json | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | import sure  # noqa | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-08 03:19:34 +09:00
										 |  |  | from botocore.exceptions import ClientError | 
					
						
							|  |  |  | from nose.tools import assert_raises | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  | from moto import mock_sns | 
					
						
							|  |  |  | from moto.sns.models import DEFAULT_PAGE_SIZE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-26 00:21:07 +01:00
										 |  |  | @mock_sns | 
					
						
							|  |  |  | def test_subscribe_sms(): | 
					
						
							|  |  |  |     client = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     client.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     resp = client.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     arn = resp['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resp = client.subscribe( | 
					
						
							|  |  |  |         TopicArn=arn, | 
					
						
							|  |  |  |         Protocol='sms', | 
					
						
							|  |  |  |         Endpoint='+15551234567' | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     resp.should.contain('SubscriptionArn') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-02 11:30:39 +11:00
										 |  |  | @mock_sns | 
					
						
							|  |  |  | def test_double_subscription(): | 
					
						
							|  |  |  |     client = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     client.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     resp = client.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     arn = resp['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     do_subscribe_sqs = lambda sqs_arn: client.subscribe( | 
					
						
							|  |  |  |         TopicArn=arn, | 
					
						
							|  |  |  |         Protocol='sqs', | 
					
						
							|  |  |  |         Endpoint=sqs_arn | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     resp1 = do_subscribe_sqs('arn:aws:sqs:elasticmq:000000000000:foo') | 
					
						
							|  |  |  |     resp2 = do_subscribe_sqs('arn:aws:sqs:elasticmq:000000000000:foo') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resp1['SubscriptionArn'].should.equal(resp2['SubscriptionArn']) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-26 00:21:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | @mock_sns | 
					
						
							|  |  |  | def test_subscribe_bad_sms(): | 
					
						
							|  |  |  |     client = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     client.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     resp = client.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     arn = resp['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         # Test invalid number | 
					
						
							|  |  |  |         client.subscribe( | 
					
						
							|  |  |  |             TopicArn=arn, | 
					
						
							|  |  |  |             Protocol='sms', | 
					
						
							|  |  |  |             Endpoint='NAA+15551234567' | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     except ClientError as err: | 
					
						
							|  |  |  |         err.response['Error']['Code'].should.equal('InvalidParameter') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  | @mock_sns | 
					
						
							|  |  |  | def test_creating_subscription(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     conn.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     response = conn.list_topics() | 
					
						
							|  |  |  |     topic_arn = response["Topics"][0]['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.subscribe(TopicArn=topic_arn, | 
					
						
							|  |  |  |                    Protocol="http", | 
					
						
							|  |  |  |                    Endpoint="http://example.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     subscriptions = conn.list_subscriptions()["Subscriptions"] | 
					
						
							|  |  |  |     subscriptions.should.have.length_of(1) | 
					
						
							|  |  |  |     subscription = subscriptions[0] | 
					
						
							|  |  |  |     subscription["TopicArn"].should.equal(topic_arn) | 
					
						
							|  |  |  |     subscription["Protocol"].should.equal("http") | 
					
						
							|  |  |  |     subscription["SubscriptionArn"].should.contain(topic_arn) | 
					
						
							|  |  |  |     subscription["Endpoint"].should.equal("http://example.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Now unsubscribe the subscription | 
					
						
							|  |  |  |     conn.unsubscribe(SubscriptionArn=subscription["SubscriptionArn"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # And there should be zero subscriptions left | 
					
						
							|  |  |  |     subscriptions = conn.list_subscriptions()["Subscriptions"] | 
					
						
							|  |  |  |     subscriptions.should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 21:16:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-31 13:37:29 +02:00
										 |  |  | @mock_sns | 
					
						
							|  |  |  | def test_deleting_subscriptions_by_deleting_topic(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     conn.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     response = conn.list_topics() | 
					
						
							|  |  |  |     topic_arn = response["Topics"][0]['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.subscribe(TopicArn=topic_arn, | 
					
						
							|  |  |  |                    Protocol="http", | 
					
						
							|  |  |  |                    Endpoint="http://example.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     subscriptions = conn.list_subscriptions()["Subscriptions"] | 
					
						
							|  |  |  |     subscriptions.should.have.length_of(1) | 
					
						
							|  |  |  |     subscription = subscriptions[0] | 
					
						
							|  |  |  |     subscription["TopicArn"].should.equal(topic_arn) | 
					
						
							|  |  |  |     subscription["Protocol"].should.equal("http") | 
					
						
							|  |  |  |     subscription["SubscriptionArn"].should.contain(topic_arn) | 
					
						
							|  |  |  |     subscription["Endpoint"].should.equal("http://example.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Now delete the topic | 
					
						
							|  |  |  |     conn.delete_topic(TopicArn=topic_arn) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # And there should now be 0 topics | 
					
						
							|  |  |  |     topics_json = conn.list_topics() | 
					
						
							|  |  |  |     topics = topics_json["Topics"] | 
					
						
							|  |  |  |     topics.should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # And there should be zero subscriptions left | 
					
						
							|  |  |  |     subscriptions = conn.list_subscriptions()["Subscriptions"] | 
					
						
							|  |  |  |     subscriptions.should.have.length_of(0) | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 21:16:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  | @mock_sns | 
					
						
							|  |  |  | def test_getting_subscriptions_by_topic(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     conn.create_topic(Name="topic1") | 
					
						
							|  |  |  |     conn.create_topic(Name="topic2") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = conn.list_topics() | 
					
						
							|  |  |  |     topics = response["Topics"] | 
					
						
							|  |  |  |     topic1_arn = topics[0]['TopicArn'] | 
					
						
							|  |  |  |     topic2_arn = topics[1]['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.subscribe(TopicArn=topic1_arn, | 
					
						
							|  |  |  |                    Protocol="http", | 
					
						
							|  |  |  |                    Endpoint="http://example1.com/") | 
					
						
							|  |  |  |     conn.subscribe(TopicArn=topic2_arn, | 
					
						
							|  |  |  |                    Protocol="http", | 
					
						
							|  |  |  |                    Endpoint="http://example2.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     topic1_subscriptions = conn.list_subscriptions_by_topic(TopicArn=topic1_arn)[ | 
					
						
							|  |  |  |         "Subscriptions"] | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  |     topic1_subscriptions.should.have.length_of(1) | 
					
						
							|  |  |  |     topic1_subscriptions[0]['Endpoint'].should.equal("http://example1.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_sns | 
					
						
							|  |  |  | def test_subscription_paging(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     conn.create_topic(Name="topic1") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = conn.list_topics() | 
					
						
							|  |  |  |     topics = response["Topics"] | 
					
						
							|  |  |  |     topic1_arn = topics[0]['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for index in range(DEFAULT_PAGE_SIZE + int(DEFAULT_PAGE_SIZE / 3)): | 
					
						
							|  |  |  |         conn.subscribe(TopicArn=topic1_arn, | 
					
						
							|  |  |  |                        Protocol='email', | 
					
						
							|  |  |  |                        Endpoint='email_' + str(index) + '@test.com') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     all_subscriptions = conn.list_subscriptions() | 
					
						
							|  |  |  |     all_subscriptions["Subscriptions"].should.have.length_of(DEFAULT_PAGE_SIZE) | 
					
						
							|  |  |  |     next_token = all_subscriptions["NextToken"] | 
					
						
							|  |  |  |     next_token.should.equal(str(DEFAULT_PAGE_SIZE)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     all_subscriptions = conn.list_subscriptions(NextToken=next_token) | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     all_subscriptions["Subscriptions"].should.have.length_of( | 
					
						
							|  |  |  |         int(DEFAULT_PAGE_SIZE / 3)) | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  |     all_subscriptions.shouldnt.have("NextToken") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     topic1_subscriptions = conn.list_subscriptions_by_topic( | 
					
						
							|  |  |  |         TopicArn=topic1_arn) | 
					
						
							|  |  |  |     topic1_subscriptions["Subscriptions"].should.have.length_of( | 
					
						
							|  |  |  |         DEFAULT_PAGE_SIZE) | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  |     next_token = topic1_subscriptions["NextToken"] | 
					
						
							|  |  |  |     next_token.should.equal(str(DEFAULT_PAGE_SIZE)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 21:37:43 -05:00
										 |  |  |     topic1_subscriptions = conn.list_subscriptions_by_topic( | 
					
						
							|  |  |  |         TopicArn=topic1_arn, NextToken=next_token) | 
					
						
							|  |  |  |     topic1_subscriptions["Subscriptions"].should.have.length_of( | 
					
						
							|  |  |  |         int(DEFAULT_PAGE_SIZE / 3)) | 
					
						
							| 
									
										
										
										
											2015-08-20 11:12:25 -04:00
										 |  |  |     topic1_subscriptions.shouldnt.have("NextToken") | 
					
						
							| 
									
										
										
										
											2017-09-08 03:19:34 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 19:21:33 +10:00
										 |  |  | @mock_sns | 
					
						
							|  |  |  | def test_creating_subscription_with_attributes(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     conn.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     response = conn.list_topics() | 
					
						
							|  |  |  |     topic_arn = response["Topics"][0]['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     delivery_policy = json.dumps({ | 
					
						
							|  |  |  |         'healthyRetryPolicy': { | 
					
						
							|  |  |  |             "numRetries": 10, | 
					
						
							|  |  |  |             "minDelayTarget": 1, | 
					
						
							|  |  |  |             "maxDelayTarget":2 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     filter_policy = json.dumps({ | 
					
						
							|  |  |  |         "store": ["example_corp"], | 
					
						
							|  |  |  |         "event": ["order_cancelled"], | 
					
						
							|  |  |  |         "encrypted": [False], | 
					
						
							|  |  |  |         "customer_interests": ["basketball", "baseball"] | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.subscribe(TopicArn=topic_arn, | 
					
						
							|  |  |  |                    Protocol="http", | 
					
						
							|  |  |  |                    Endpoint="http://example.com/", | 
					
						
							|  |  |  |                    Attributes={ | 
					
						
							|  |  |  |                        'RawMessageDelivery': 'true', | 
					
						
							|  |  |  |                        'DeliveryPolicy': delivery_policy, | 
					
						
							|  |  |  |                        'FilterPolicy': filter_policy | 
					
						
							|  |  |  |                    }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     subscriptions = conn.list_subscriptions()["Subscriptions"] | 
					
						
							|  |  |  |     subscriptions.should.have.length_of(1) | 
					
						
							|  |  |  |     subscription = subscriptions[0] | 
					
						
							|  |  |  |     subscription["TopicArn"].should.equal(topic_arn) | 
					
						
							|  |  |  |     subscription["Protocol"].should.equal("http") | 
					
						
							|  |  |  |     subscription["SubscriptionArn"].should.contain(topic_arn) | 
					
						
							|  |  |  |     subscription["Endpoint"].should.equal("http://example.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Test the subscription attributes have been set | 
					
						
							|  |  |  |     subscription_arn = subscription["SubscriptionArn"] | 
					
						
							|  |  |  |     attrs = conn.get_subscription_attributes( | 
					
						
							|  |  |  |         SubscriptionArn=subscription_arn | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     attrs['Attributes']['RawMessageDelivery'].should.equal('true') | 
					
						
							|  |  |  |     attrs['Attributes']['DeliveryPolicy'].should.equal(delivery_policy) | 
					
						
							|  |  |  |     attrs['Attributes']['FilterPolicy'].should.equal(filter_policy) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Now unsubscribe the subscription | 
					
						
							|  |  |  |     conn.unsubscribe(SubscriptionArn=subscription["SubscriptionArn"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # And there should be zero subscriptions left | 
					
						
							|  |  |  |     subscriptions = conn.list_subscriptions()["Subscriptions"] | 
					
						
							|  |  |  |     subscriptions.should.have.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # invalid attr name | 
					
						
							|  |  |  |     with assert_raises(ClientError): | 
					
						
							|  |  |  |         conn.subscribe(TopicArn=topic_arn, | 
					
						
							|  |  |  |                        Protocol="http", | 
					
						
							|  |  |  |                        Endpoint="http://example.com/", | 
					
						
							|  |  |  |                        Attributes={ | 
					
						
							|  |  |  |                            'InvalidName': 'true' | 
					
						
							|  |  |  |                        }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-08 03:19:34 +09:00
										 |  |  | @mock_sns | 
					
						
							|  |  |  | def test_set_subscription_attributes(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     conn.create_topic(Name="some-topic") | 
					
						
							|  |  |  |     response = conn.list_topics() | 
					
						
							|  |  |  |     topic_arn = response["Topics"][0]['TopicArn'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.subscribe(TopicArn=topic_arn, | 
					
						
							|  |  |  |                    Protocol="http", | 
					
						
							|  |  |  |                    Endpoint="http://example.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     subscriptions = conn.list_subscriptions()["Subscriptions"] | 
					
						
							|  |  |  |     subscriptions.should.have.length_of(1) | 
					
						
							|  |  |  |     subscription = subscriptions[0] | 
					
						
							|  |  |  |     subscription["TopicArn"].should.equal(topic_arn) | 
					
						
							|  |  |  |     subscription["Protocol"].should.equal("http") | 
					
						
							|  |  |  |     subscription["SubscriptionArn"].should.contain(topic_arn) | 
					
						
							|  |  |  |     subscription["Endpoint"].should.equal("http://example.com/") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     subscription_arn = subscription["SubscriptionArn"] | 
					
						
							|  |  |  |     attrs = conn.get_subscription_attributes( | 
					
						
							|  |  |  |         SubscriptionArn=subscription_arn | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     attrs.should.have.key('Attributes') | 
					
						
							|  |  |  |     conn.set_subscription_attributes( | 
					
						
							|  |  |  |         SubscriptionArn=subscription_arn, | 
					
						
							|  |  |  |         AttributeName='RawMessageDelivery', | 
					
						
							|  |  |  |         AttributeValue='true' | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     delivery_policy = json.dumps({ | 
					
						
							|  |  |  |         'healthyRetryPolicy': { | 
					
						
							|  |  |  |             "numRetries": 10, | 
					
						
							|  |  |  |             "minDelayTarget": 1, | 
					
						
							|  |  |  |             "maxDelayTarget":2 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     conn.set_subscription_attributes( | 
					
						
							|  |  |  |         SubscriptionArn=subscription_arn, | 
					
						
							|  |  |  |         AttributeName='DeliveryPolicy', | 
					
						
							|  |  |  |         AttributeValue=delivery_policy | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2018-03-21 15:49:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     filter_policy = json.dumps({ | 
					
						
							|  |  |  |         "store": ["example_corp"], | 
					
						
							|  |  |  |         "event": ["order_cancelled"], | 
					
						
							|  |  |  |         "encrypted": [False], | 
					
						
							|  |  |  |         "customer_interests": ["basketball", "baseball"] | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     conn.set_subscription_attributes( | 
					
						
							|  |  |  |         SubscriptionArn=subscription_arn, | 
					
						
							|  |  |  |         AttributeName='FilterPolicy', | 
					
						
							|  |  |  |         AttributeValue=filter_policy | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-08 03:19:34 +09:00
										 |  |  |     attrs = conn.get_subscription_attributes( | 
					
						
							|  |  |  |         SubscriptionArn=subscription_arn | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2018-03-21 15:49:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-08 03:19:34 +09:00
										 |  |  |     attrs['Attributes']['RawMessageDelivery'].should.equal('true') | 
					
						
							|  |  |  |     attrs['Attributes']['DeliveryPolicy'].should.equal(delivery_policy) | 
					
						
							| 
									
										
										
										
											2018-03-21 15:49:11 +00:00
										 |  |  |     attrs['Attributes']['FilterPolicy'].should.equal(filter_policy) | 
					
						
							| 
									
										
										
										
											2017-09-08 03:19:34 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # not existing subscription | 
					
						
							|  |  |  |     with assert_raises(ClientError): | 
					
						
							|  |  |  |         conn.set_subscription_attributes( | 
					
						
							|  |  |  |             SubscriptionArn='invalid', | 
					
						
							|  |  |  |             AttributeName='RawMessageDelivery', | 
					
						
							|  |  |  |             AttributeValue='true' | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     with assert_raises(ClientError): | 
					
						
							|  |  |  |         attrs = conn.get_subscription_attributes( | 
					
						
							|  |  |  |             SubscriptionArn='invalid' | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # invalid attr name | 
					
						
							|  |  |  |     with assert_raises(ClientError): | 
					
						
							|  |  |  |         conn.set_subscription_attributes( | 
					
						
							|  |  |  |             SubscriptionArn=subscription_arn, | 
					
						
							|  |  |  |             AttributeName='InvalidName', | 
					
						
							|  |  |  |             AttributeValue='true' | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2017-09-21 21:16:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_sns | 
					
						
							|  |  |  | def test_check_not_opted_out(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     response = conn.check_if_phone_number_is_opted_out(phoneNumber='+447428545375') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response.should.contain('isOptedOut') | 
					
						
							|  |  |  |     response['isOptedOut'].should.be(False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_sns | 
					
						
							|  |  |  | def test_check_opted_out(): | 
					
						
							|  |  |  |     # Phone number ends in 99 so is hardcoded in the endpoint to return opted | 
					
						
							|  |  |  |     # out status | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     response = conn.check_if_phone_number_is_opted_out(phoneNumber='+447428545399') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response.should.contain('isOptedOut') | 
					
						
							|  |  |  |     response['isOptedOut'].should.be(True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_sns | 
					
						
							|  |  |  | def test_check_opted_out_invalid(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Invalid phone number | 
					
						
							|  |  |  |     with assert_raises(ClientError): | 
					
						
							|  |  |  |         conn.check_if_phone_number_is_opted_out(phoneNumber='+44742LALALA') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_sns | 
					
						
							|  |  |  | def test_list_opted_out(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     response = conn.list_phone_numbers_opted_out() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response.should.contain('phoneNumbers') | 
					
						
							|  |  |  |     len(response['phoneNumbers']).should.be.greater_than(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_sns | 
					
						
							|  |  |  | def test_opt_in(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     response = conn.list_phone_numbers_opted_out() | 
					
						
							|  |  |  |     current_len = len(response['phoneNumbers']) | 
					
						
							|  |  |  |     assert current_len > 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.opt_in_phone_number(phoneNumber=response['phoneNumbers'][0]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     response = conn.list_phone_numbers_opted_out() | 
					
						
							|  |  |  |     len(response['phoneNumbers']).should.be.greater_than(0) | 
					
						
							|  |  |  |     len(response['phoneNumbers']).should.be.lower_than(current_len) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_sns | 
					
						
							|  |  |  | def test_confirm_subscription(): | 
					
						
							|  |  |  |     conn = boto3.client('sns', region_name='us-east-1') | 
					
						
							|  |  |  |     response = conn.create_topic(Name='testconfirm') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conn.confirm_subscription( | 
					
						
							|  |  |  |         TopicArn=response['TopicArn'], | 
					
						
							|  |  |  |         Token='2336412f37fb687f5d51e6e241d59b68c4e583a5cee0be6f95bbf97ab8d2441cf47b99e848408adaadf4c197e65f03473d53c4ba398f6abbf38ce2e8ebf7b4ceceb2cd817959bcde1357e58a2861b05288c535822eb88cac3db04f592285249971efc6484194fc4a4586147f16916692', | 
					
						
							|  |  |  |         AuthenticateOnUnsubscribe='true' | 
					
						
							|  |  |  |     ) |