|
|
|
# -*- encoding: utf-8 -*-
|
|
|
|
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
|
|
import unittest
|
|
|
|
import datetime
|
|
|
|
|
|
|
|
from isso.queue import Message, Queue, Full, Empty, Timeout, SAQueue
|
|
|
|
|
|
|
|
|
|
|
|
class TestMessage(unittest.TestCase):
|
|
|
|
|
|
|
|
def test_message(self):
|
|
|
|
a = Message("Foo", None)
|
|
|
|
b = Message("Bar", None)
|
|
|
|
|
|
|
|
self.assertLess(a, b)
|
|
|
|
|
|
|
|
def test_message_delay(self):
|
|
|
|
a = Message("Foo", None, delay=1)
|
|
|
|
b = Message("Bar", None, delay=0)
|
|
|
|
|
|
|
|
self.assertGreater(a, b)
|
|
|
|
|
|
|
|
def test_message_wait(self):
|
|
|
|
a = Message("Foo", None)
|
|
|
|
b = Message("Foo", None)
|
|
|
|
a = Queue.delay(a, 1, delayfunc=lambda i: 0.5)
|
|
|
|
|
|
|
|
self.assertGreater(a, b)
|
|
|
|
|
|
|
|
|
|
|
|
class TestQueue(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.cls = Queue
|
|
|
|
|
|
|
|
def test_queue(self):
|
|
|
|
q = self.cls()
|
|
|
|
msgs = [Message("Foo", None) for _ in range(3)]
|
|
|
|
|
|
|
|
for msg in msgs:
|
|
|
|
q.put(msg)
|
|
|
|
|
|
|
|
self.assertEqual(q.size, 3)
|
|
|
|
|
|
|
|
for msg in msgs:
|
|
|
|
self.assertEqual(q.get(), msg)
|
|
|
|
|
|
|
|
self.assertEqual(q.size, 0)
|
|
|
|
|
|
|
|
def test_data_primitives(self):
|
|
|
|
q = self.cls()
|
|
|
|
m = Message("Foo", {"foo": True, "bar": [2, 3]})
|
|
|
|
|
|
|
|
q.put(m)
|
|
|
|
self.assertEqual(q.get(), m)
|
|
|
|
|
|
|
|
def test_queue_full(self):
|
|
|
|
q = self.cls(maxlen=1)
|
|
|
|
q.put(Message("Foo", None))
|
|
|
|
|
|
|
|
self.assertRaises(Full, q.put, Message("Bar", None))
|
|
|
|
|
|
|
|
def test_queue_empty(self):
|
|
|
|
q = self.cls()
|
|
|
|
msg = Message("Foo", None)
|
|
|
|
|
|
|
|
self.assertRaises(Empty, q.get)
|
|
|
|
q.put(msg)
|
|
|
|
q.get()
|
|
|
|
self.assertRaises(Empty, q.get)
|
|
|
|
|
|
|
|
def test_retry(self):
|
|
|
|
q = self.cls()
|
|
|
|
msg = Message("Foo", None)
|
|
|
|
|
|
|
|
q.retry(msg)
|
|
|
|
self.assertRaises(Empty, q.get)
|
|
|
|
self.assertEqual(q.size, 1)
|
|
|
|
|
|
|
|
def test_retry_timeout(self):
|
|
|
|
q = self.cls(timeout=0)
|
|
|
|
msg = Message("Foo", None)
|
|
|
|
|
|
|
|
self.assertRaises(Timeout, q.retry, msg)
|
|
|
|
|
|
|
|
def test_requeue(self):
|
|
|
|
q = self.cls()
|
|
|
|
msg = Message("Foo", None)
|
|
|
|
|
|
|
|
q.put(msg)
|
|
|
|
q.requeue(q.get(), datetime.timedelta(seconds=1))
|
|
|
|
|
|
|
|
self.assertRaises(Empty, q.get)
|
|
|
|
self.assertEqual(q.size, 1)
|
|
|
|
|
|
|
|
|
|
|
|
class TestSQLite3Queue(TestQueue):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.cls = lambda *x, **z: SAQueue("sqlite:///:memory:", *x, **z)
|