From 16660ab72bf748222d662fca6cc7ffec1ac9ee33 Mon Sep 17 00:00:00 2001 From: Steve Pulec Date: Sun, 16 Nov 2014 18:42:53 -0500 Subject: [PATCH] Allow message passing to SQS queues in different regions from SNS. --- moto/sns/models.py | 5 +++-- moto/sqs/responses.py | 5 ++++- tests/test_sns/test_publishing.py | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/moto/sns/models.py b/moto/sns/models.py index 891ccee4308a..60864bc2131a 100644 --- a/moto/sns/models.py +++ b/moto/sns/models.py @@ -9,7 +9,7 @@ from moto.core import BaseBackend from moto.core.utils import iso_8601_datetime -from moto.sqs import sqs_backend +from moto.sqs import sqs_backends from .utils import make_arn_for_topic, make_arn_for_subscription DEFAULT_ACCOUNT_ID = 123456789012 @@ -54,7 +54,8 @@ def __init__(self, topic, endpoint, protocol): def publish(self, message, message_id): if self.protocol == 'sqs': queue_name = self.endpoint.split(":")[-1] - sqs_backend.send_message(queue_name, message) + region = self.endpoint.split(":")[3] + sqs_backends[region].send_message(queue_name, message) elif self.protocol in ['http', 'https']: post_data = self.get_post_data(message, message_id) requests.post(self.endpoint, data=post_data) diff --git a/moto/sqs/responses.py b/moto/sqs/responses.py index 6ab0534839e7..3d0cef2ce72c 100644 --- a/moto/sqs/responses.py +++ b/moto/sqs/responses.py @@ -12,11 +12,12 @@ ) MAXIMUM_VISIBILTY_TIMEOUT = 43200 +SQS_REGION_REGEX = r'://(.+?)\.queue\.amazonaws\.com' class QueuesResponse(BaseResponse): - region_regex = r'://(.+?)\.queue\.amazonaws\.com' + region_regex = SQS_REGION_REGEX @property def sqs_backend(self): @@ -50,6 +51,8 @@ def list_queues(self): class QueueResponse(BaseResponse): + region_regex = SQS_REGION_REGEX + @property def sqs_backend(self): return sqs_backends[self.region] diff --git a/tests/test_sns/test_publishing.py b/tests/test_sns/test_publishing.py index 315e44cba0c5..7566f8d4d5a8 100644 --- a/tests/test_sns/test_publishing.py +++ b/tests/test_sns/test_publishing.py @@ -29,6 +29,26 @@ def test_publish_to_sqs(): message.get_body().should.equal('my message') +@mock_sqs +@mock_sns +def test_publish_to_sqs_in_different_region(): + conn = boto.sns.connect_to_region("us-west-1") + conn.create_topic("some-topic") + topics_json = conn.get_all_topics() + topic_arn = topics_json["ListTopicsResponse"]["ListTopicsResult"]["Topics"][0]['TopicArn'] + + sqs_conn = boto.sqs.connect_to_region("us-west-2") + sqs_conn.create_queue("test-queue") + + conn.subscribe(topic_arn, "sqs", "arn:aws:sqs:us-west-2:123456789012:test-queue") + + conn.publish(topic=topic_arn, message="my message") + + queue = sqs_conn.get_queue("test-queue") + message = queue.read(1) + message.get_body().should.equal('my message') + + @freeze_time("2013-01-01") @mock_sns def test_publish_to_http():