2014-08-27 11:17:06 -04:00
|
|
|
from __future__ import unicode_literals
|
2015-08-10 22:23:17 +02:00
|
|
|
|
2013-03-05 08:14:43 -05:00
|
|
|
import re
|
2013-08-03 17:21:25 -04:00
|
|
|
import sure # noqa
|
2015-08-10 22:23:17 +02:00
|
|
|
import threading
|
|
|
|
import time
|
2013-03-05 08:14:43 -05:00
|
|
|
|
|
|
|
import moto.server as server
|
|
|
|
|
|
|
|
'''
|
|
|
|
Test the different server responses
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
2013-03-23 09:44:53 -04:00
|
|
|
def test_sqs_list_identities():
|
2013-12-28 20:15:37 -05:00
|
|
|
backend = server.create_backend_app("sqs")
|
|
|
|
test_client = backend.test_client()
|
|
|
|
|
2013-03-05 08:14:43 -05:00
|
|
|
res = test_client.get('/?Action=ListQueues')
|
2014-08-26 13:25:50 -04:00
|
|
|
res.data.should.contain(b"ListQueuesResponse")
|
2013-03-05 08:14:43 -05:00
|
|
|
|
2017-08-05 15:47:40 +10:00
|
|
|
# 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)
|
2014-02-20 11:00:08 -08:00
|
|
|
|
2013-03-05 08:14:43 -05:00
|
|
|
|
2017-08-05 15:47:40 +10:00
|
|
|
res = test_client.put(
|
|
|
|
'/123/%s?MessageBody=test-message&Action=SendMessage' % queue_name)
|
2013-03-05 08:14:43 -05:00
|
|
|
|
2017-08-05 15:47:40 +10:00
|
|
|
res = test_client.get(
|
|
|
|
'/123/%s?Action=ReceiveMessage&MaxNumberOfMessages=1' % queue_name)
|
2014-06-20 15:00:36 -05:00
|
|
|
|
2017-08-05 15:47:40 +10:00
|
|
|
message = re.search("<Body>(.*?)</Body>",
|
|
|
|
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')
|
2015-08-10 22:23:17 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_messages_polling():
|
|
|
|
backend = server.create_backend_app("sqs")
|
|
|
|
test_client = backend.test_client()
|
|
|
|
messages = []
|
|
|
|
|
|
|
|
test_client.put('/?Action=CreateQueue&QueueName=testqueue')
|
|
|
|
|
|
|
|
def insert_messages():
|
|
|
|
messages_count = 5
|
|
|
|
while messages_count > 0:
|
|
|
|
test_client.put(
|
|
|
|
'/123/testqueue?MessageBody=test-message&Action=SendMessage'
|
|
|
|
'&Attribute.1.Name=WaitTimeSeconds&Attribute.1.Value=10'
|
|
|
|
)
|
|
|
|
messages_count -= 1
|
|
|
|
time.sleep(.5)
|
|
|
|
|
|
|
|
def get_messages():
|
2015-08-31 11:54:17 -04:00
|
|
|
count = 0
|
|
|
|
while count < 5:
|
|
|
|
msg_res = test_client.get(
|
|
|
|
'/123/testqueue?Action=ReceiveMessage&MaxNumberOfMessages=1&WaitTimeSeconds=5'
|
|
|
|
)
|
2017-02-23 21:37:43 -05:00
|
|
|
new_msgs = re.findall("<Body>(.*?)</Body>",
|
|
|
|
msg_res.data.decode('utf-8'))
|
2015-08-31 11:54:17 -04:00
|
|
|
count += len(new_msgs)
|
|
|
|
messages.append(new_msgs)
|
2015-08-10 22:23:17 +02:00
|
|
|
|
|
|
|
get_messages_thread = threading.Thread(target=get_messages)
|
|
|
|
insert_messages_thread = threading.Thread(target=insert_messages)
|
|
|
|
|
|
|
|
get_messages_thread.start()
|
|
|
|
insert_messages_thread.start()
|
|
|
|
|
|
|
|
get_messages_thread.join()
|
|
|
|
insert_messages_thread.join()
|
|
|
|
|
2017-02-23 21:37:43 -05:00
|
|
|
# got each message in a separate call to ReceiveMessage, despite the long
|
|
|
|
# WaitTimeSeconds
|
2015-08-10 22:23:17 +02:00
|
|
|
assert len(messages) == 5
|