def acknack(reservation_uuid): returncode = 200 returnmsg = '' hq = HotQueue(host="localhost", port=6379, db=0) msg = None nack = False if 'nack' in request.path: nack = True if 'PUT' in request.method: nack = True if nack: msg = hq.nack(reservation_uuid) else: msg = hq.ack(reservation_uuid) if msg: hqmessage = HQMessage() hqmessage = msg returnmsg = hqmessage.to_json() else: returncode = 400 return returnmsg, returncode
class HotQueueTestCase(unittest.TestCase): def setUp(self): """Create the queue instance before the test.""" self.queue = HotQueue('testqueue') def tearDown(self): """Clear the queue after the test.""" self.queue.clear() def test_arguments(self): """Test that HotQueue.__init__ accepts arguments correctly, and that the Redis key is correctly formed. """ kwargs = { 'name': "testqueue", 'serializer': DummySerializer, 'host': "localhost", 'port': 6379, 'db': 0 } # Instantiate the HotQueue instance: self.queue = HotQueue(**kwargs) # Ensure that the properties of the instance are as expected: self.assertEqual(self.queue.name, kwargs['name']) self.assertEqual(self.queue.key, "hotqueue:%s" % kwargs['name']) self.assertEqual(self.queue.serializer, kwargs['serializer']) # Instantiate a HotQueue instance with only the required args: self.queue = HotQueue(kwargs['name']) # Ensure that the properties of the instance are as expected: self.assertEqual(self.queue.name, kwargs['name']) self.assertEqual(self.queue.key, "hotqueue:%s" % kwargs['name']) self.assertTrue(self.queue.serializer is pickle) # Defaults to cPickle # or pickle, depending # on the platform. def test_consume(self): """Test the consume generator method.""" nums = [1, 2, 3, 4, 5, 6, 7, 8] # Test blocking with timeout: nums_added = self.queue.put(*nums) msgs = [] for msg in self.queue.consume(timeout=1): msgs.append(msg) self.assertEqual(msgs, nums_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) # Test non-blocking: nums_added = self.queue.put(*nums) msgs = [] for msg in self.queue.consume(block=False): msgs.append(msg) self.assertEqual(msgs, nums_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) def test_nack(self): """Test the consume generator method.""" nums_added = self.queue.put("1") msg = self.queue.get() #1 self.assertEqual(msg, nums_added[0]) self.queue.nack(msg.get_reservationId()) msg = self.queue.get() #2 self.assertEqual(msg, nums_added[0]) self.queue.nack(msg.get_reservationId()) msg = self.queue.get() #3 if msg: self.assertEqual(msg, nums_added[0]) self.queue.ack(msg.get_reservationId()) self.assertEqual(msg, nums_added[0]) self.assertEqual(len(self.queue), 0) self.assertEqual(msg.get_deliveryCount(), 3) #3 def test_cleared(self): """Test for correct behaviour if the Redis list does not exist.""" self.assertEqual(len(self.queue), 0) self.assertEqual(self.queue.get(), None) def test_get_order(self): """Test that messages are get in the same order they are put.""" alphabet = ['abc', 'def', 'ghi', 'jkl', 'mno'] msg_added = [] msg_added.extend(self.queue.put(alphabet[0], alphabet[1], alphabet[2])) msg_added.extend(self.queue.put(alphabet[3])) msg_added.extend(self.queue.put(alphabet[4])) msgs = [] msgs.append(self.queue.get()) msgs.append(self.queue.get()) msgs.append(self.queue.get()) msgs.append(self.queue.get()) msgs.append(self.queue.get()) self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) def test_length(self): """Test that the length of a queue is returned correctly.""" self.queue.put('a message') self.queue.put('another message') self.assertEqual(len(self.queue), 2) def test_worker(self): """Test the worker decorator.""" colors = ['blue', 'green', 'red', 'pink', 'black'] # Test blocking with timeout: msg_added = self.queue.put(*colors) msgs = [] @self.queue.worker(timeout=1) def appender(msg): msgs.append(msg) appender() self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) # Test non-blocking: msg_added = self.queue.put(*colors) msgs = [] @self.queue.worker(block=False) def appender(msg): msgs.append(msg) appender() self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) # Test decorating a class method: msg_added = self.queue.put(*colors) msgs = [] class MyClass(object): @self.queue.worker(block=False) def appender(self, msg): msgs.append(msg) my_instance = MyClass() my_instance.appender() self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) def test_threaded(self): """Threaded test of put and consume methods.""" msgs = [] msg_added = [] def put(): for num in range(3): msg_added.extend(self.queue.put('message %d' % num)) sleep(0.1) def consume(): for msg in self.queue.consume(timeout=1): msgs.append(msg) putter = threading.Thread(target=put) consumer = threading.Thread(target=consume) putter.start() consumer.start() for thread in [putter, consumer]: thread.join() self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId())
class HotQueueTestCase(unittest.TestCase): def setUp(self): """Create the queue instance before the test.""" self.queue = HotQueue('testqueue') def tearDown(self): """Clear the queue after the test.""" self.queue.clear() def test_arguments(self): """Test that HotQueue.__init__ accepts arguments correctly, and that the Redis key is correctly formed. """ kwargs = { 'name': "testqueue", 'serializer': DummySerializer, 'host': "localhost", 'port': 6379, 'db': 0} # Instantiate the HotQueue instance: self.queue = HotQueue(**kwargs) # Ensure that the properties of the instance are as expected: self.assertEqual(self.queue.name, kwargs['name']) self.assertEqual(self.queue.key, "hotqueue:%s" % kwargs['name']) self.assertEqual(self.queue.serializer, kwargs['serializer']) # Instantiate a HotQueue instance with only the required args: self.queue = HotQueue(kwargs['name']) # Ensure that the properties of the instance are as expected: self.assertEqual(self.queue.name, kwargs['name']) self.assertEqual(self.queue.key, "hotqueue:%s" % kwargs['name']) self.assertTrue(self.queue.serializer is pickle) # Defaults to cPickle # or pickle, depending # on the platform. def test_consume(self): """Test the consume generator method.""" nums = [1, 2, 3, 4, 5, 6, 7, 8] # Test blocking with timeout: nums_added = self.queue.put(*nums) msgs = [] for msg in self.queue.consume(timeout=1): msgs.append(msg) self.assertEqual(msgs, nums_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) # Test non-blocking: nums_added = self.queue.put(*nums) msgs = [] for msg in self.queue.consume(block=False): msgs.append(msg) self.assertEqual(msgs, nums_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) def test_nack(self): """Test the consume generator method.""" nums_added = self.queue.put("1") msg = self.queue.get() #1 self.assertEqual(msg, nums_added[0]) self.queue.nack(msg.get_reservationId()) msg = self.queue.get() #2 self.assertEqual(msg, nums_added[0]) self.queue.nack(msg.get_reservationId()) msg = self.queue.get() #3 if msg: self.assertEqual(msg, nums_added[0]) self.queue.ack(msg.get_reservationId()) self.assertEqual(msg, nums_added[0]) self.assertEqual(len(self.queue), 0) self.assertEqual(msg.get_deliveryCount(),3) #3 def test_cleared(self): """Test for correct behaviour if the Redis list does not exist.""" self.assertEqual(len(self.queue), 0) self.assertEqual(self.queue.get(), None) def test_get_order(self): """Test that messages are get in the same order they are put.""" alphabet = ['abc', 'def', 'ghi', 'jkl', 'mno'] msg_added = [] msg_added.extend(self.queue.put(alphabet[0], alphabet[1], alphabet[2])) msg_added.extend(self.queue.put(alphabet[3])) msg_added.extend(self.queue.put(alphabet[4])) msgs = [] msgs.append(self.queue.get()) msgs.append(self.queue.get()) msgs.append(self.queue.get()) msgs.append(self.queue.get()) msgs.append(self.queue.get()) self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) def test_length(self): """Test that the length of a queue is returned correctly.""" self.queue.put('a message') self.queue.put('another message') self.assertEqual(len(self.queue), 2) def test_worker(self): """Test the worker decorator.""" colors = ['blue', 'green', 'red', 'pink', 'black'] # Test blocking with timeout: msg_added = self.queue.put(*colors) msgs = [] @self.queue.worker(timeout=1) def appender(msg): msgs.append(msg) appender() self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) # Test non-blocking: msg_added = self.queue.put(*colors) msgs = [] @self.queue.worker(block=False) def appender(msg): msgs.append(msg) appender() self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) # Test decorating a class method: msg_added = self.queue.put(*colors) msgs = [] class MyClass(object): @self.queue.worker(block=False) def appender(self, msg): msgs.append(msg) my_instance = MyClass() my_instance.appender() self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId()) def test_threaded(self): """Threaded test of put and consume methods.""" msgs = [] msg_added = [] def put(): for num in range(3): msg_added.extend(self.queue.put('message %d' % num)) sleep(0.1) def consume(): for msg in self.queue.consume(timeout=1): msgs.append(msg) putter = threading.Thread(target=put) consumer = threading.Thread(target=consume) putter.start() consumer.start() for thread in [putter, consumer]: thread.join() self.assertEqual(msgs, msg_added) for msg in msgs: self.queue.ack(msg.get_reservationId())