Пример #1
0
    def test_basic_ack_fail(self):
        client = Connection(self.amqp_url)
        client.connect()
        with client.channel() as channel:
            channel.queue_declare(queue=self.name)
            channel.basic_publish(exchange='', routing_key=self.name,
                                           body='a')

            queue = channel.basic_consume(queue=self.name)

            with self.assertRaises(exceptions.PreconditionFailed):
                channel.tx_select()
                channel.basic_ack(999)
                channel.tx_commit()

        with client.channel() as channel:
            queue = channel.basic_consume(queue=self.name)

            result = queue.get()

            channel.tx_select()
            channel.basic_ack(result.delivery_tag)
            channel.tx_commit()

            with self.assertRaises(exceptions.PreconditionFailed):
                channel.basic_ack(result.delivery_tag)
                channel.tx_commit()

        with client.channel() as channel:
            channel.queue_delete(queue=self.name)
Пример #2
0
    def test_basic_ack_fail(self):
        client = Connection(self.amqp_url)
        client.connect()
        with client.channel() as channel:
            channel.queue_declare(queue=self.name)
            channel.basic_publish(exchange='', routing_key=self.name, body='a')

            queue = channel.basic_consume(queue=self.name)

            with self.assertRaises(exceptions.PreconditionFailed):
                channel.tx_select()
                channel.basic_ack(999)
                channel.tx_commit()

        with client.channel() as channel:
            queue = channel.basic_consume(queue=self.name)

            result = queue.get()

            channel.tx_select()
            channel.basic_ack(result.delivery_tag)
            channel.tx_commit()

            with self.assertRaises(exceptions.PreconditionFailed):
                channel.basic_ack(result.delivery_tag)
                channel.tx_commit()

        with client.channel() as channel:
            channel.queue_delete(queue=self.name)
Пример #3
0
    def test_exclusive_queue(self):
        conn = Connection(self.amqp_url)

        with conn.channel() as channel:
            channel.queue_declare(queue='exclusive-queue', exclusive=True)

        with conn.channel() as channel:
            with self.assertRaises(ResourceLocked):
                channel.queue_declare(queue='exclusive-queue')
Пример #4
0
def amqp_teardown():
    global conn
    conn.close()
    conn2 = Connection(AMQP_URL)
    with conn2.channel() as channel:
        channel.exchange_delete("unit_test_room")
    with conn2.channel() as channel:
        channel.queue_delete(queue='listener1')
    with conn2.channel() as channel:
        channel.queue_delete(queue='listener2')
    conn2.close()
Пример #5
0
def amqp_teardown():
    global conn
    conn.close()
    conn2 = Connection(AMQP_URL)
    with conn2.channel() as channel:
        channel.exchange_delete("unit_test_room")
    with conn2.channel() as channel:
        channel.queue_delete(queue='listener1')
    with conn2.channel() as channel:
        channel.queue_delete(queue='listener2')
    conn2.close()
Пример #6
0
 def wrapper(self, *args, **kwargs):
     client = Connection(self.amqp_url)
     client.connect()
     with client.channel() as channel:
         r = method(self, channel, *args, **kwargs)
     client.close()
     return r
Пример #7
0
    def test_persistent(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)

            channel.basic_publish(exchange='',
                                  routing_key=self.name,
                                  body=self.msg)  # persistence=default

            channel.basic_publish(exchange='',
                                  routing_key=self.name,
                                  body=self.msg,
                                  headers={'delivery_mode': 2})

            channel.basic_publish(exchange='',
                                  routing_key=self.name,
                                  body=self.msg,
                                  headers={'delivery_mode': 1})

            result = channel.basic_get(queue=self.name, no_ack=True)
            self.assertTrue('delivery_mode' not in result.headers)

            result = channel.basic_get(queue=self.name, no_ack=True)
            self.assertTrue('delivery_mode' in result.headers)
            self.assertEquals(result.headers['delivery_mode'], 2)

            result = channel.basic_get(queue=self.name, no_ack=True)
            self.assertTrue('delivery_mode' in result.headers)
            self.assertEquals(result.headers['delivery_mode'], 1)

            channel.queue_delete(queue=self.name)
Пример #8
0
    def test_basic_consume_fail(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            with self.assertRaises(exceptions.NotFound):
                channel.basic_consume(queue='bad_q_name')
Пример #9
0
    def test_basic_cancel(self):
        client = Connection(self.amqp_url)
        client.connect()
        with client.channel() as channel:

            channel.queue_declare(queue=self.name)

            for i in range(2):
                channel.basic_publish(exchange='', routing_key=self.name,
                                               body='a')

            queue = channel.basic_consume(queue=self.name)

            for i in range(2):
                msg1 = queue.get()
                self.assertEqual(msg1.body, 'a')
                channel.basic_ack(msg1.delivery_tag)

            result = channel.basic_cancel(queue.consumer_tag)

            self.assertEqual(result.consumer_tag, queue.consumer_tag)

            channel.basic_publish(exchange='', routing_key=self.name,
                                           body='b')

            with self.assertRaises(Empty):
                queue.get(timeout=0.5)

            channel.queue_delete(queue=self.name)
Пример #10
0
    def test_basic_cancel(self):
        client = Connection(self.amqp_url)
        client.connect()
        with client.channel() as channel:

            channel.queue_declare(queue=self.name)

            for i in range(2):
                channel.basic_publish(exchange='',
                                      routing_key=self.name,
                                      body='a')

            queue = channel.basic_consume(queue=self.name)

            for i in range(2):
                msg1 = queue.get()
                self.assertEqual(msg1.body, 'a')
                channel.basic_ack(msg1.delivery_tag)

            result = channel.basic_cancel(queue.consumer_tag)

            self.assertEqual(result.consumer_tag, queue.consumer_tag)

            channel.basic_publish(exchange='', routing_key=self.name, body='b')

            with self.assertRaises(Empty):
                queue.get(timeout=0.5)

            channel.queue_delete(queue=self.name)
Пример #11
0
    def test_properties(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)

            headers = {
                "content_type": 'a',
                "content_encoding": 'b',
                #"headers":
                "delivery_mode": 2,
                "priority": 1,
                "correlation_id": 'd',
                "reply_to": 'e',
                "expiration": 'f',
                "message_id": 'g',
                "timestamp": 1,
                "type_": 'h',
                "user_id": 'guest',  # that one needs to match real user
                "app_id": 'j',
                "cluster_id": 'k',
                "custom": 'l',
                "blah2": [True, 1, -1, 4611686018427387904L,
                          -4611686018427387904L, [1,2,3,4, {"a":"b", "c":[]}]],
                }

            channel.basic_publish(exchange='', routing_key=self.name,
                                     body='a', headers=headers.copy())

            r = channel.basic_get(queue=self.name, no_ack=True)
            self.assertEqual(r.body, 'a')
            self.assertEqual(headers, r.headers)

            channel.queue_delete(queue=self.name)
Пример #12
0
    def test_queue_delete_not_found(self):
        """NotFound is raised if we delete a queue that doesn't exist."""
        conn = Connection(self.amqp_url)

        with conn.channel() as channel:
            with self.assertRaises(NotFound):
                channel.queue_delete(queue='not_existing_queue')
Пример #13
0
    def test_basic_consume_fail(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            with self.assertRaises(exceptions.NotFound):
                channel.basic_consume(queue='bad_q_name')
Пример #14
0
    def test_queue_bind(self):
        "We can bind and unbind, and the queue receives messages when bound."
        qname = 'test-queue-bind'

        conn = Connection(self.amqp_url)

        with conn.channel() as channel:
            channel.queue_declare(queue=qname)
            channel.exchange_declare(exchange=qname, type='direct')

            channel.basic_publish(exchange=qname, routing_key=qname, body='a')

            channel.queue_bind(exchange=qname, queue=qname, routing_key=qname)

            channel.basic_publish(exchange=qname, routing_key=qname, body='b')

            channel.queue_unbind(exchange=qname,
                                 queue=qname,
                                 routing_key=qname)

            channel.basic_publish(exchange=qname, routing_key=qname, body='c')

            msg = channel.basic_get(queue=qname)
            self.assertEquals(msg.body, 'b')
            self.assertEquals(msg['message_count'], 0)
Пример #15
0
    def test_queue_delete_not_found(self):
        """NotFound is raised if we delete a queue that doesn't exist."""
        conn = Connection(self.amqp_url)

        with conn.channel() as channel:
            with self.assertRaises(NotFound):
                channel.queue_delete(queue='not_existing_queue')
Пример #16
0
    def test_persistent(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)

            channel.basic_publish(exchange='', routing_key=self.name,
                                           body=self.msg)  # persistence=default

            channel.basic_publish(exchange='', routing_key=self.name,
                                           body=self.msg,
                                           headers={'delivery_mode': 2})

            channel.basic_publish(exchange='', routing_key=self.name,
                                           body=self.msg,
                                           headers={'delivery_mode': 1})

            result = channel.basic_get(queue=self.name, no_ack=True)
            self.assertTrue('delivery_mode' not in result.headers)

            result = channel.basic_get(queue=self.name, no_ack=True)
            self.assertTrue('delivery_mode' in result.headers)
            self.assertEquals(result.headers['delivery_mode'], 2)

            result = channel.basic_get(queue=self.name, no_ack=True)
            self.assertTrue('delivery_mode' in result.headers)
            self.assertEquals(result.headers['delivery_mode'], 1)

            channel.queue_delete(queue=self.name)
Пример #17
0
    def test_basic_return2(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.confirm_select()
            channel.queue_declare(queue=self.name)

            channel.basic_publish(exchange='', routing_key=self.name,
                                           mandatory=True, body='')

            with self.assertRaises(exceptions.MessageReturnedNoConsumers):
                channel.basic_publish(exchange='', routing_key=self.name,
                                           immediate=True, body='')

        with client.channel() as channel:
            channel.queue_delete(queue=self.name)
Пример #18
0
 def _epilogue(self, qname, expected):
     conn = Connection(self.amqp_url)
     with conn.channel() as channel:
         q = channel.queue_declare(queue=qname)
         try:
             self.assertEqual(q.message_count, expected)
         finally:
             channel.queue_delete(queue=qname)
Пример #19
0
 def _epilogue(self, qname, expected):
     conn = Connection(self.amqp_url)
     with conn.channel() as channel:
         q = channel.queue_declare(queue=qname)
         try:
             self.assertEqual(q.message_count, expected)
         finally:
             channel.queue_delete(queue=qname)
Пример #20
0
    def test_basic_return(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.confirm_select()
            with self.assertRaises(exceptions.MessageReturnedNoRoute):
                channel.basic_publish(exchange='', routing_key=self.name,
                                               mandatory=True, body='')
Пример #21
0
    def test_properties(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)

            headers = {
                "content_type":
                'a',
                "content_encoding":
                'b',
                #"headers":
                "delivery_mode":
                2,
                "priority":
                1,
                "correlation_id":
                'd',
                "reply_to":
                'e',
                "expiration":
                'f',
                "message_id":
                'g',
                "timestamp":
                1,
                "type_":
                'h',
                "user_id":
                'guest',  # that one needs to match real user
                "app_id":
                'j',
                "cluster_id":
                'k',
                "custom":
                'l',
                "blah2": [
                    True, 1, -1, 4611686018427387904L, -4611686018427387904L,
                    [1, 2, 3, 4, {
                        "a": "b",
                        "c": []
                    }]
                ],
            }

            channel.basic_publish(exchange='',
                                  routing_key=self.name,
                                  body='a',
                                  headers=headers.copy())

            r = channel.basic_get(queue=self.name, no_ack=True)
            self.assertEqual(r.body, 'a')
            self.assertEqual(headers, r.headers)

            channel.queue_delete(queue=self.name)
Пример #22
0
    def test_basic_publish_bad_exchange_publisher_acks(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.confirm_select()
            with self.assertRaises(exceptions.NotFound):
                channel.basic_publish(exchange='invalid_exchange',
                                      routing_key='xxx',
                                      body='')
Пример #23
0
    def test_basic_publish_bad_exchange_publisher_acks(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.confirm_select()
            with self.assertRaises(exceptions.NotFound):
                channel.basic_publish(
                    exchange='invalid_exchange',
                    routing_key='xxx', body='')
Пример #24
0
    def test_basic_return(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.confirm_select()
            with self.assertRaises(exceptions.MessageReturnedNoRoute):
                channel.basic_publish(exchange='',
                                      routing_key=self.name,
                                      mandatory=True,
                                      body='')
Пример #25
0
    def test_basic_return2(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.confirm_select()
            channel.queue_declare(queue=self.name)

            channel.basic_publish(exchange='',
                                  routing_key=self.name,
                                  mandatory=True,
                                  body='')

            with self.assertRaises(exceptions.MessageReturnedNoConsumers):
                channel.basic_publish(exchange='',
                                      routing_key=self.name,
                                      immediate=True,
                                      body='')

        with client.channel() as channel:
            channel.queue_delete(queue=self.name)
Пример #26
0
    def test_queue_redeclare_args(self):
        """We cannot redeclare a queue if we change its arguments."""
        qname = 'test-redeclare-queue-args'

        conn = Connection(self.amqp_url)
        conn.connect()

        with conn.channel() as channel:
            channel.queue_declare(queue=qname, arguments={})

            with self.assertRaises(PreconditionFailed):
                channel.queue_declare(queue=qname,
                                      arguments={'x-expires': 101})
Пример #27
0
def amqp_setup():
    global conn
    conn = Connection(AMQP_URL)
    with conn.channel() as channel:
        channel.exchange_declare("unit_test_room")
        channel.queue_declare(queue='listener1')
        channel.queue_declare(queue='listener2')

        channel.queue_bind(queue="listener1",
            exchange="unit_test_room", routing_key="user1")

        channel.queue_bind(queue="listener2",
            exchange="unit_test_room", routing_key="user2")
Пример #28
0
    def test_queue_redeclare(self):
        """We can redeclare a queue only if we don't change its settings."""
        qname = 'test-redeclare-queue'

        conn = Connection(self.amqp_url)

        with conn.channel() as channel:
            channel.queue_declare(queue=qname, auto_delete=False)

            # Test can redeclare auto_delete queue
            channel.queue_declare(queue=qname, auto_delete=False)

            with self.assertRaises(PreconditionFailed):
                channel.queue_declare(queue=qname, auto_delete=True)
Пример #29
0
    def test_queue_redeclare(self):
        """We can redeclare a queue only if we don't change its settings."""
        qname = 'test-redeclare-queue'

        conn = Connection(self.amqp_url)

        with conn.channel() as channel:
            channel.queue_declare(queue=qname, auto_delete=False)

            # Test can redeclare auto_delete queue
            channel.queue_declare(queue=qname, auto_delete=False)

            with self.assertRaises(PreconditionFailed):
                channel.queue_declare(queue=qname, auto_delete=True)
Пример #30
0
    def test_purge(self):
        client = Connection(self.amqp_url)
        client.connect()
        with client.channel() as channel:
            channel.queue_declare(queue=self.name)
            channel.basic_publish(exchange='',
                                  routing_key=self.name,
                                  body=self.msg)
            r = channel.queue_purge(queue=self.name)
            self.assertEqual(r.message_count, 1)

            r = channel.queue_purge(queue=self.name)
            self.assertEqual(r.message_count, 0)

            channel.queue_delete(queue=self.name)
Пример #31
0
    def test_queue_redeclare_args(self):
        """We cannot redeclare a queue if we change its arguments."""
        qname = 'test-redeclare-queue-args'

        conn = Connection(self.amqp_url)
        conn.connect()

        with conn.channel() as channel:
            channel.queue_declare(queue=qname, arguments={})

            with self.assertRaises(PreconditionFailed):
                channel.queue_declare(
                    queue=qname,
                    arguments={'x-expires': 101}
                )
Пример #32
0
def amqp_setup():
    global conn
    conn = Connection(AMQP_URL)
    with conn.channel() as channel:
        channel.exchange_declare("unit_test_room")
        channel.queue_declare(queue='listener1')
        channel.queue_declare(queue='listener2')

        channel.queue_bind(queue="listener1",
                           exchange="unit_test_room",
                           routing_key="user1")

        channel.queue_bind(queue="listener2",
                           exchange="unit_test_room",
                           routing_key="user2")
Пример #33
0
    def test_consume_queue(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)
            channel.basic_publish(exchange='',
                                  routing_key=self.name,
                                  body=self.msg)

            queue = channel.basic_consume(queue=self.name, no_ack=True)
            result = queue.get()

            self.assertEqual(result.body, self.msg)
            channel.queue_delete(queue=self.name)
Пример #34
0
    def test_broken_ack_on_close(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            decl = channel.queue_declare()
            qname = decl.queue

            channel.basic_publish(exchange='', routing_key=qname, body='a')

            r = channel.basic_get(queue=qname)
            self.assertEquals(r.body, 'a')

            channel.queue_delete(queue=qname)

        client.close()
Пример #35
0
    def test_broken_ack_on_close(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            decl = channel.queue_declare()
            qname = decl.queue

            channel.basic_publish(exchange='', routing_key=qname, body='a')

            r = channel.basic_get(queue=qname)
            self.assertEquals(r.body, 'a')

            channel.queue_delete(queue=qname)

        client.close()
Пример #36
0
    def test_basic_reject_dead_letter_exchange(self):
        client = Connection(self.amqp_url)
        client.connect()

        product = client.server_properties.get('product')
        vstring = client.server_properties.get('version', '')
        version = tuple(int(v) for v in vstring.split('.') if v.isdigit())

        if product != 'RabbitMQ' or version < (2, 8, 0):
            raise SkipTest(
                "Dead letter exchanges are only supported in RabbitMQ 2.8.0 "
                "and later."
            )

        with client.channel() as channel:
            # Set up the dead letter exchange
            channel.exchange_declare(exchange='dead-letter', type='fanout')
            queue = channel.queue_declare(exclusive=True, auto_delete=True)
            dlxqname = queue.queue
            channel.queue_bind(queue=dlxqname, exchange='dead-letter')
            dead = channel.basic_consume(queue=dlxqname)

            # Declare a new queue and publish a message to it
            channel.queue_declare(
                queue='test-dead-letter',
                arguments={'x-dead-letter-exchange': 'dead-letter'}
            )
            channel.basic_publish(
                exchange='',
                routing_key='test-dead-letter',
                body='a'
            )

            # Get the message and reject it
            r = channel.basic_get(queue='test-dead-letter')
            self.assertEqual(r.body, 'a')
            self.assertTrue(not r.redelivered)
            channel.basic_reject(r.delivery_tag, requeue=False)

            # Check that we received it via the dead letter queue
            r = dead.get(timeout=5)
            assert r is not None
            self.assertEqual(r.body, 'a')
            self.assertEqual(r.headers['x-death'][0]['reason'], 'rejected')
            self.assertTrue(not r.redelivered)

            dead.cancel()
Пример #37
0
    def test_basic_reject_no_requeue(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)
            channel.basic_publish(exchange='', routing_key=self.name, body='a')

            r = channel.basic_get(queue=self.name)
            self.assertEqual(r.body, 'a')
            self.assertTrue(not r.redelivered)
            channel.basic_reject(r.delivery_tag, requeue=False)

            r = channel.basic_get(queue=self.name)
            self.assertTrue(r is None)

            channel.queue_delete(queue=self.name)
Пример #38
0
    def test_bug3_wait(self):
        conn = Connection(self.amqp_url)
        qname = 'test-bug3-%s' % random.random()
        with conn.channel() as channel:
            channel.queue_declare(queue=qname)

            for i in range(3):
                channel.basic_publish(routing_key=qname, body='x')

            q = channel.basic_consume(qname)
            for i in range(3):
                msg = q.get()
                channel.basic_ack(msg.delivery_tag)
                self.assertEqual(msg.body, 'x')

            self._epilogue(qname, 0)
        conn.close()
Пример #39
0
    def test_purge(self):
        client = Connection(self.amqp_url)
        client.connect()
        with client.channel() as channel:
            channel.queue_declare(queue=self.name)
            channel.basic_publish(
                exchange='',
                routing_key=self.name,
                body=self.msg
            )
            r = channel.queue_purge(queue=self.name)
            self.assertEqual(r.message_count, 1)

            r = channel.queue_purge(queue=self.name)
            self.assertEqual(r.message_count, 0)

            channel.queue_delete(queue=self.name)
Пример #40
0
    def test_consume_queue(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)
            channel.basic_publish(
                exchange='',
                routing_key=self.name,
                body=self.msg
            )

            queue = channel.basic_consume(queue=self.name, no_ack=True)
            result = queue.get()

            self.assertEqual(result.body, self.msg)
            channel.queue_delete(queue=self.name)
Пример #41
0
    def test_basic_reject_no_requeue(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)
            channel.basic_publish(exchange='', routing_key=self.name,
                                           body='a')

            r = channel.basic_get(queue=self.name)
            self.assertEqual(r.body, 'a')
            self.assertTrue(not r.redelivered)
            channel.basic_reject(r.delivery_tag, requeue=False)

            r = channel.basic_get(queue=self.name)
            self.assertTrue(r is None)

            channel.queue_delete(queue=self.name)
Пример #42
0
def test_sync_diff_connections():
    """We can pass messages between different AMQP connections."""
    # publish a message to the exchange
    message_body = 'test_sync_diff_connections message 2'
    with conn.channel() as channel:
        channel.basic_publish(exchange='unit_test_room',
                              routing_key='user1',
                              body=message_body)

    conn2 = Connection(AMQP_URL)
    with conn2.channel() as channel:
        q = channel.basic_consume(queue='listener1')
        msg = q.get()
        # check that message was correctly published
        eq_(msg.body, message_body)

        # acknowledge the message
        channel.basic_ack(msg.delivery_tag)
Пример #43
0
    def test_basic_reject_dead_letter_exchange(self):
        client = Connection(self.amqp_url)
        client.connect()

        product = client.server_properties.get('product')
        vstring = client.server_properties.get('version', '')
        version = tuple(int(v) for v in vstring.split('.') if v.isdigit())

        if product != 'RabbitMQ' or version < (2, 8, 0):
            raise SkipTest(
                "Dead letter exchanges are only supported in RabbitMQ 2.8.0 "
                "and later.")

        with client.channel() as channel:
            # Set up the dead letter exchange
            channel.exchange_declare(exchange='dead-letter', type='fanout')
            queue = channel.queue_declare(exclusive=True, auto_delete=True)
            dlxqname = queue.queue
            channel.queue_bind(queue=dlxqname, exchange='dead-letter')
            dead = channel.basic_consume(queue=dlxqname)

            # Declare a new queue and publish a message to it
            channel.queue_declare(
                queue='test-dead-letter',
                arguments={'x-dead-letter-exchange': 'dead-letter'})
            channel.basic_publish(exchange='',
                                  routing_key='test-dead-letter',
                                  body='a')

            # Get the message and reject it
            r = channel.basic_get(queue='test-dead-letter')
            self.assertEqual(r.body, 'a')
            self.assertTrue(not r.redelivered)
            channel.basic_reject(r.delivery_tag, requeue=False)

            # Check that we received it via the dead letter queue
            r = dead.get(timeout=5)
            assert r is not None
            self.assertEqual(r.body, 'a')
            self.assertEqual(r.headers['x-death'][0]['reason'], 'rejected')
            self.assertTrue(not r.redelivered)

            dead.cancel()
Пример #44
0
    def test_bug3_wait(self):
        conn = Connection(self.amqp_url)
        qname = 'test-bug3-%s' % random.random()
        with conn.channel() as channel:
            channel.queue_declare(queue=qname)

            for i in range(3):
                channel.basic_publish(
                   routing_key=qname,
                   body='x'
                )

            q = channel.basic_consume(qname)
            for i in range(3):
                msg = q.get()
                channel.basic_ack(msg.delivery_tag)
                self.assertEqual(msg.body, 'x')

            self._epilogue(qname, 0)
        conn.close()
Пример #45
0
def test_sync_diff_connections():
    """We can pass messages between different AMQP connections."""
    # publish a message to the exchange
    message_body = 'test_sync_diff_connections message 2'
    with conn.channel() as channel:
        channel.basic_publish(
            exchange='unit_test_room',
            routing_key='user1',
            body=message_body
        )

    conn2 = Connection(AMQP_URL)
    with conn2.channel() as channel:
        q = channel.basic_consume(queue='listener1')
        msg = q.get()
        # check that message was correctly published
        eq_(msg.body, message_body)

        # acknowledge the message
        channel.basic_ack(msg.delivery_tag)
Пример #46
0
    def test_basic_get_ack(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)

            for i in range(4):
                channel.basic_publish(exchange='', routing_key=self.name,
                                               body=self.msg + str(i))

            msgs = []
            for i in range(4):
                result = channel.basic_get(queue=self.name)
                self.assertEqual(result.body, self.msg + str(i))
                self.assertEqual(result.redelivered, False)
                msgs.append(result)

            result = channel.basic_get(queue=self.name)
            self.assertTrue(result is None)

            channel.queue_delete(queue=self.name)
Пример #47
0
    def test_queue_bind(self):
        "We can bind and unbind, and the queue receives messages when bound."
        qname = 'test-queue-bind'

        conn = Connection(self.amqp_url)

        with conn.channel() as channel:
            channel.queue_declare(queue=qname)
            channel.exchange_declare(exchange=qname, type='direct')

            channel.basic_publish(exchange=qname, routing_key=qname, body='a')

            channel.queue_bind(exchange=qname, queue=qname, routing_key=qname)

            channel.basic_publish(exchange=qname, routing_key=qname, body='b')

            channel.queue_unbind(exchange=qname, queue=qname, routing_key=qname)

            channel.basic_publish(exchange=qname, routing_key=qname, body='c')

            msg = channel.basic_get(queue=qname)
            self.assertEquals(msg.body, 'b')
            self.assertEquals(msg['message_count'], 0)
Пример #48
0
    def test_basic_get_ack(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.queue_declare(queue=self.name)

            for i in range(4):
                channel.basic_publish(exchange='',
                                      routing_key=self.name,
                                      body=self.msg + str(i))

            msgs = []
            for i in range(4):
                result = channel.basic_get(queue=self.name)
                self.assertEqual(result.body, self.msg + str(i))
                self.assertEqual(result.redelivered, False)
                msgs.append(result)

            result = channel.basic_get(queue=self.name)
            self.assertTrue(result is None)

            channel.queue_delete(queue=self.name)
Пример #49
0
 def test_queue_declare(self):
     """We can declare an autodelete queue."""
     conn = Connection(self.amqp_url)
     with conn.channel() as channel:
         resp = channel.queue_declare(auto_delete=True)
     conn.close()
Пример #50
0
 def test_queue_declare(self):
     """We can declare an autodelete queue."""
     conn = Connection(self.amqp_url)
     with conn.channel() as channel:
         resp = channel.queue_declare(auto_delete=True)
     conn.close()
Пример #51
0
    def test_close(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.channel_close()
Пример #52
0
    def test_close(self):
        client = Connection(self.amqp_url)
        client.connect()

        with client.channel() as channel:
            channel.channel_close()