From 56f9409ca995b73870316a2ac4ff1d024b3a5cab Mon Sep 17 00:00:00 2001 From: Chris LaRose Date: Sat, 4 Mar 2017 19:53:14 -0800 Subject: [PATCH] Use request URL to generate SQS queue URLs; fixes #626 (#827) --- moto/sqs/models.py | 5 ++--- moto/sqs/responses.py | 16 ++++++++++------ tests/test_sqs/test_sqs.py | 4 ++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/moto/sqs/models.py b/moto/sqs/models.py index 13b8c34b6..efe9f9517 100644 --- a/moto/sqs/models.py +++ b/moto/sqs/models.py @@ -180,9 +180,8 @@ class Queue(object): result[attribute] = getattr(self, camelcase_to_underscores(attribute)) return result - @property - def url(self): - return "http://sqs.{0}.amazonaws.com/123456789012/{1}".format(self.region, self.name) + def url(self, request_url): + return "{0}://{1}/123456789012/{2}".format(request_url.scheme, request_url.netloc, self.name) @property def messages(self): diff --git a/moto/sqs/responses.py b/moto/sqs/responses.py index 15c067613..6720a09bd 100644 --- a/moto/sqs/responses.py +++ b/moto/sqs/responses.py @@ -1,4 +1,5 @@ from __future__ import unicode_literals +from six.moves.urllib.parse import urlparse from moto.core.responses import BaseResponse from moto.core.utils import camelcase_to_underscores @@ -57,26 +58,29 @@ class SQSResponse(BaseResponse): return status_code, headers, body def create_queue(self): + request_url = urlparse(self.uri) queue_name = self.querystring.get("QueueName")[0] queue = self.sqs_backend.create_queue(queue_name, visibility_timeout=self.attribute.get('VisibilityTimeout'), wait_time_seconds=self.attribute.get('WaitTimeSeconds')) template = self.response_template(CREATE_QUEUE_RESPONSE) - return template.render(queue=queue) + return template.render(queue=queue, request_url=request_url) def get_queue_url(self): + request_url = urlparse(self.uri) queue_name = self.querystring.get("QueueName")[0] queue = self.sqs_backend.get_queue(queue_name) if queue: template = self.response_template(GET_QUEUE_URL_RESPONSE) - return template.render(queue=queue) + return template.render(queue=queue, request_url=request_url) else: return "", dict(status=404) def list_queues(self): + request_url = urlparse(self.uri) queue_name_prefix = self.querystring.get("QueueNamePrefix", [None])[0] queues = self.sqs_backend.list_queues(queue_name_prefix) template = self.response_template(LIST_QUEUES_RESPONSE) - return template.render(queues=queues) + return template.render(queues=queues, request_url=request_url) def change_message_visibility(self): queue_name = self._get_queue_name() @@ -265,7 +269,7 @@ class SQSResponse(BaseResponse): CREATE_QUEUE_RESPONSE = """ - {{ queue.url }} + {{ queue.url(request_url) }} {{ queue.visibility_timeout }} @@ -275,7 +279,7 @@ CREATE_QUEUE_RESPONSE = """ GET_QUEUE_URL_RESPONSE = """ - {{ queue.url }} + {{ queue.url(request_url) }} 470a6f13-2ed9-4181-ad8a-2fdea142988e @@ -285,7 +289,7 @@ GET_QUEUE_URL_RESPONSE = """ LIST_QUEUES_RESPONSE = """ {% for queue in queues %} - {{ queue.url }} + {{ queue.url(request_url) }} {% endfor %} diff --git a/tests/test_sqs/test_sqs.py b/tests/test_sqs/test_sqs.py index 32b026a46..2ad5f1af1 100644 --- a/tests/test_sqs/test_sqs.py +++ b/tests/test_sqs/test_sqs.py @@ -71,7 +71,7 @@ def test_create_queues_in_multiple_region(): list(west1_conn.list_queues()['QueueUrls']).should.have.length_of(1) list(west2_conn.list_queues()['QueueUrls']).should.have.length_of(1) - west1_conn.list_queues()['QueueUrls'][0].should.equal('http://sqs.us-west-1.amazonaws.com/123456789012/blah') + west1_conn.list_queues()['QueueUrls'][0].should.equal('https://us-west-1.queue.amazonaws.com/123456789012/blah') @mock_sqs @@ -85,7 +85,7 @@ def test_get_queue_with_prefix(): queue = conn.list_queues(QueueNamePrefix="test-")['QueueUrls'] queue.should.have.length_of(1) - queue[0].should.equal("http://sqs.us-west-1.amazonaws.com/123456789012/test-queue") + queue[0].should.equal("https://us-west-1.queue.amazonaws.com/123456789012/test-queue") @mock_sqs