def test_recover_requeue()

in qpid_tests/broker_0_8/basic.py [0:0]


    def test_recover_requeue(self):
        """
        Test requeing on recovery
        """
        channel = self.channel
        channel.queue_declare(queue="test-requeue", exclusive=True)
        
        subscription = channel.basic_consume(queue="test-requeue", no_ack=False)
        queue = self.client.queue(subscription.consumer_tag)

        channel.basic_publish(routing_key="test-requeue", content=Content("One"))
        channel.basic_publish(routing_key="test-requeue", content=Content("Two"))
        channel.basic_publish(routing_key="test-requeue", content=Content("Three"))
        channel.basic_publish(routing_key="test-requeue", content=Content("Four"))
        channel.basic_publish(routing_key="test-requeue", content=Content("Five"))
                
        msg1 = queue.get(timeout=self.recv_timeout())
        msg2 = queue.get(timeout=self.recv_timeout())
        msg3 = queue.get(timeout=self.recv_timeout())
        msg4 = queue.get(timeout=self.recv_timeout())
        msg5 = queue.get(timeout=self.recv_timeout())
        
        self.assertEqual("One", msg1.content.body)
        self.assertEqual("Two", msg2.content.body)
        self.assertEqual("Three", msg3.content.body)
        self.assertEqual("Four", msg4.content.body)
        self.assertEqual("Five", msg5.content.body)

        channel.basic_ack(delivery_tag=msg2.delivery_tag, multiple=True)  #One & Two
        channel.basic_ack(delivery_tag=msg4.delivery_tag, multiple=False) #Four

        channel.basic_cancel(consumer_tag=subscription.consumer_tag)

        channel.basic_recover(requeue=True)

        subscription2 = channel.basic_consume(queue="test-requeue")
        queue2 = self.client.queue(subscription2.consumer_tag)
        
        msg3b = queue2.get(timeout=self.recv_timeout())
        msg5b = queue2.get(timeout=self.recv_timeout())
        
        self.assertEqual("Three", msg3b.content.body)
        self.assertEqual("Five", msg5b.content.body)

        self.assertEqual(True, msg3b.redelivered)
        self.assertEqual(True, msg5b.redelivered)

        try:
            extra = queue2.get(timeout=self.recv_timeout())
            self.fail("Got unexpected message in second queue: " + extra.content.body)
        except Empty: None
        try:
            extra = queue.get(timeout=self.recv_timeout())
            self.fail("Got unexpected message in original queue: " + extra.content.body)
        except Empty: None