Skip to content

Commit

Permalink
Actualize tests.
Browse files Browse the repository at this point in the history
Change endpoints of the queue.clear method
Add reservation_id to the delete and touch methods
Replace get methods with reverse, mark get method as deprecated
  • Loading branch information
sunloverz authored and featalion committed Mar 25, 2015
1 parent a0ceaf6 commit 9f0afea
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 20 deletions.
64 changes: 45 additions & 19 deletions iron_mq.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def info(self):
url = "queues/%s" % (self.name,)
result = self.client.get(url)

return result["body"]
return result["body"]["queue"]

def size(self):
"""Queue size"""
Expand All @@ -50,19 +50,29 @@ def total_messages(self):
def clear(self):
"""Executes an HTTP request to clear all contents of a queue.
"""
url = "queues/%s/clear" % (self.name,)
result = self.client.post(url)
url = "queues/%s/messages" % self.name
result = self.client.delete(url = url,
body = json.dumps({}),
headers={"Content-Type":"application/json"})

return result['body']

def delete(self, message_id):
def delete(self, message_id, reservation_id=None):
"""Execute an HTTP request to delete a message from queue.
Arguments:
message_id -- The ID of the message to be deleted.
reservation_id -- Reservation Id of the message. Reserved message could not be deleted without reservation Id.
"""
url = "queues/%s/messages/%s" % (self.name, message_id)
result = self.client.delete(url)
qitems = {}
if reservation_id is not None:
qitems["reservation_id"] = reservation_id
body = json.dumps(qitems)

result = self.client.delete(url = url,
body = body,
headers={"Content-Type":"application/json"})

return result["body"]

Expand Down Expand Up @@ -98,29 +108,35 @@ def post(self, *messages):
return result['body']

def get(self, max=None, timeout=None, wait=None):
"""Executes an HTTP request to get a message off of a queue.
"""Deprecated. User Queue.reserve() instead. Executes an HTTP request to get a message off of a queue.
Keyword arguments:
max -- The maximum number of messages to pull. Defaults to 1.
"""
url = "queues/%s/messages" % self.name
response = self.reserve(max, timeout)
return response


def reserve(self, max=None, timeout=None):
"""Retrieves Messages from the queue and reserves it.
Arguments:
max -- The maximum number of messages to reserve. Defaults to 1.
timeout -- Timeout in seconds.
"""
url = "queues/%s/reservations" % self.name
qitems = {}
if max is not None:
qitems["n"] = max
if timeout is not None:
qitems["timeout"] = timeout
if wait is not None:
qitems["wait"] = wait
qs = []
for k, v in qitems.items():
qs.append("%s=%s" % (k, v))
qs = "&".join(qs)
if qs != "":
url = "%s?%s" % (url, qs)
body = json.dumps(qitems)

result = self.client.get(url)
response = self.client.post(url, body=body,
headers={"Content-Type":"application/json"})

return response['body']

return result['body']

def get_message_by_id(self, message_id):
url = "queues/%s/messages/%s" % (self.name, message_id)
Expand All @@ -136,10 +152,20 @@ def peek(self, max=None):

return response['body']

def touch(self, message_id):
def touch(self, message_id, reservation_id = None):
"""Touching a reserved message extends its timeout to the duration specified when the message was created.
Arguments:
message_id -- The ID of the message.
reservation_id -- Reservation Id of the message. Reserved message could not be deleted without reservation Id.
"""
url = "queues/%s/messages/%s/touch" % (self.name, message_id)
qitems = {}
if reservation_id is not None:
qitems["reservation_id"] = reservation_id
body = json.dumps(qitems)

response = self.client.post(url, body=json.dumps({}),
response = self.client.post(url, body=body,
headers={"Content-Type":"application/json"})

return response['body']
Expand Down
37 changes: 36 additions & 1 deletion test.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,35 @@ def test_removeAlert(self):
def test_getMessage(self):
msg = "%s" % time.time()
q = self.mq.queue("test_queue")
q.clear()
q.post(msg)
message = q.get()
message = "%s" % message["messages"][0]["body"]
self.assertEqual(msg, message)

def test_reserveMessages(self):
msg = "%s" % time.time()
q = self.mq.queue("test_queue")
q.clear()
ids = q.post(msg + str(0), msg + str(1), msg + str(2))
messages = q.reserve(3)

for idx, val in enumerate(messages["messages"]):
self.assertEqual(msg + str(idx), val["body"])
self.assertEqual(ids["ids"][idx], val["id"])
self.assertTrue(len(val["reservation_id"]) > 0)
self.assertEqual(val["reserved_count"], 1)

def test_reserveMessage(self):
msg = "Test message %s" % time.time()
q = self.mq.queue("test_queue")
q.clear()
id = q.post(msg)
message = q.reserve()
self.assertEqual(msg, message["messages"][0]["body"])
self.assertEqual(id["ids"][0], message["messages"][0]["id"])


def test_getMessageTimeout(self):
msg = "%s" % time.time()
q = self.mq.queue("test_queue")
Expand All @@ -83,6 +107,17 @@ def test_deleteMessage(self):
q.delete(msg["ids"][0])
self.assertEqual(size, q.size())

def test_deleteReservedMessage(self):
msg = "%s" % time.time()
q = self.mq.queue("test_queue")
q.clear()
id = q.post(msg)
message = q.reserve(1, 60)
self.assertEqual(1, q.size())
reservation_id = message["messages"][0]["reservation_id"]
q.delete(id["ids"][0], reservation_id)
self.assertEqual(0, q.size())

def test_clearQueue(self):
q = self.mq.queue("test_queue")

Expand Down Expand Up @@ -126,7 +161,7 @@ def test_getMessageById(self):
q = self.mq.queue("test_queue")
response_post = q.post(body)
message = q.get_message_by_id(response_post["ids"][0])
self.assertEqual(body, message["body"])
self.assertEqual(body, message["message"]["body"])

if __name__ == '__main__':
unittest.main()

0 comments on commit 9f0afea

Please sign in to comment.