From ce2f3e6e2b30d5bd412064922acca468e71a6aea Mon Sep 17 00:00:00 2001 From: Waldemar Hummer Date: Sat, 5 Aug 2017 15:47:40 +1000 Subject: [PATCH] fix receiving of messages from queues with a dot character in their name --- moto/sqs/urls.py | 2 +- tests/test_sqs/test_server.py | 31 +++++++++++++++++++------------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/moto/sqs/urls.py b/moto/sqs/urls.py index 0780615ab..9ec014a80 100644 --- a/moto/sqs/urls.py +++ b/moto/sqs/urls.py @@ -9,5 +9,5 @@ dispatch = SQSResponse().dispatch url_paths = { '{0}/$': dispatch, - '{0}/(?P\d+)/(?P[a-zA-Z0-9\-_]+)': dispatch, + '{0}/(?P\d+)/(?P[a-zA-Z0-9\-_\.]+)': dispatch, } diff --git a/tests/test_sqs/test_server.py b/tests/test_sqs/test_server.py index b7a43ab90..e7f745fd2 100644 --- a/tests/test_sqs/test_server.py +++ b/tests/test_sqs/test_server.py @@ -19,22 +19,29 @@ def test_sqs_list_identities(): res = test_client.get('/?Action=ListQueues') res.data.should.contain(b"ListQueuesResponse") - res = test_client.put('/?Action=CreateQueue&QueueName=testqueue') - res = test_client.put('/?Action=CreateQueue&QueueName=otherqueue') + # Make sure that we can receive messages from queues whose name contains dots (".") + # The AWS API mandates that the names of FIFO queues use the suffix ".fifo" + # See: https://github.com/spulec/moto/issues/866 + + for queue_name in ('testqueue', 'otherqueue.fifo'): + + res = test_client.put('/?Action=CreateQueue&QueueName=%s' % queue_name) + + + res = test_client.put( + '/123/%s?MessageBody=test-message&Action=SendMessage' % queue_name) + + res = test_client.get( + '/123/%s?Action=ReceiveMessage&MaxNumberOfMessages=1' % queue_name) + + message = re.search("(.*?)", + res.data.decode('utf-8')).groups()[0] + message.should.equal('test-message') res = test_client.get('/?Action=ListQueues&QueueNamePrefix=other') + res.data.should.contain(b'otherqueue.fifo') res.data.should_not.contain(b'testqueue') - res = test_client.put( - '/123/testqueue?MessageBody=test-message&Action=SendMessage') - - res = test_client.get( - '/123/testqueue?Action=ReceiveMessage&MaxNumberOfMessages=1') - - message = re.search("(.*?)", - res.data.decode('utf-8')).groups()[0] - message.should.equal('test-message') - def test_messages_polling(): backend = server.create_backend_app("sqs")