123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- from __future__ import absolute_import
-
- import sys
-
- from itertools import count
-
- try:
- import amqp # noqa
- except ImportError:
- pyamqp = None # noqa
- else:
- from kombu.transport import pyamqp
- from kombu import Connection
- from kombu.five import nextfun
-
- from kombu.tests.case import Case, Mock, SkipTest, mask_modules, patch
-
-
- class MockConnection(dict):
-
- def __setattr__(self, key, value):
- self[key] = value
-
-
- class test_Channel(Case):
-
- def setUp(self):
- if pyamqp is None:
- raise SkipTest('py-amqp not installed')
-
- class Channel(pyamqp.Channel):
- wait_returns = []
-
- def _x_open(self, *args, **kwargs):
- pass
-
- def wait(self, *args, **kwargs):
- return self.wait_returns
-
- def _send_method(self, *args, **kwargs):
- pass
-
- self.conn = Mock()
- self.conn._get_free_channel_id.side_effect = nextfun(count(0))
- self.conn.channels = {}
- self.channel = Channel(self.conn, 0)
-
- def test_init(self):
- self.assertFalse(self.channel.no_ack_consumers)
-
- def test_prepare_message(self):
- self.assertTrue(self.channel.prepare_message(
- 'foobar', 10, 'application/data', 'utf-8',
- properties={},
- ))
-
- def test_message_to_python(self):
- message = Mock()
- message.headers = {}
- message.properties = {}
- self.assertTrue(self.channel.message_to_python(message))
-
- def test_close_resolves_connection_cycle(self):
- self.assertIsNotNone(self.channel.connection)
- self.channel.close()
- self.assertIsNone(self.channel.connection)
-
- def test_basic_consume_registers_ack_status(self):
- self.channel.wait_returns = 'my-consumer-tag'
- self.channel.basic_consume('foo', no_ack=True)
- self.assertIn('my-consumer-tag', self.channel.no_ack_consumers)
-
- self.channel.wait_returns = 'other-consumer-tag'
- self.channel.basic_consume('bar', no_ack=False)
- self.assertNotIn('other-consumer-tag', self.channel.no_ack_consumers)
-
- self.channel.basic_cancel('my-consumer-tag')
- self.assertNotIn('my-consumer-tag', self.channel.no_ack_consumers)
-
-
- class test_Transport(Case):
-
- def setUp(self):
- if pyamqp is None:
- raise SkipTest('py-amqp not installed')
- self.connection = Connection('pyamqp://')
- self.transport = self.connection.transport
-
- def test_create_channel(self):
- connection = Mock()
- self.transport.create_channel(connection)
- connection.channel.assert_called_with()
-
- def test_driver_version(self):
- self.assertTrue(self.transport.driver_version())
-
- def test_drain_events(self):
- connection = Mock()
- self.transport.drain_events(connection, timeout=10.0)
- connection.drain_events.assert_called_with(timeout=10.0)
-
- def test_dnspython_localhost_resolve_bug(self):
-
- class Conn(object):
-
- def __init__(self, **kwargs):
- vars(self).update(kwargs)
-
- self.transport.Connection = Conn
- self.transport.client.hostname = 'localhost'
- conn1 = self.transport.establish_connection()
- self.assertEqual(conn1.host, '127.0.0.1:5672')
-
- self.transport.client.hostname = 'example.com'
- conn2 = self.transport.establish_connection()
- self.assertEqual(conn2.host, 'example.com:5672')
-
- def test_close_connection(self):
- connection = Mock()
- connection.client = Mock()
- self.transport.close_connection(connection)
-
- self.assertIsNone(connection.client)
- connection.close.assert_called_with()
-
- @mask_modules('ssl')
- def test_import_no_ssl(self):
- pm = sys.modules.pop('amqp.connection')
- try:
- from amqp.connection import SSLError
- self.assertEqual(SSLError.__module__, 'amqp.connection')
- finally:
- if pm is not None:
- sys.modules['amqp.connection'] = pm
-
-
- class test_pyamqp(Case):
-
- def setUp(self):
- if pyamqp is None:
- raise SkipTest('py-amqp not installed')
-
- def test_default_port(self):
-
- class Transport(pyamqp.Transport):
- Connection = MockConnection
-
- c = Connection(port=None, transport=Transport).connect()
- self.assertEqual(c['host'],
- '127.0.0.1:%s' % (Transport.default_port, ))
-
- def test_custom_port(self):
-
- class Transport(pyamqp.Transport):
- Connection = MockConnection
-
- c = Connection(port=1337, transport=Transport).connect()
- self.assertEqual(c['host'], '127.0.0.1:1337')
-
- def test_register_with_event_loop(self):
- t = pyamqp.Transport(Mock())
- conn = Mock(name='conn')
- loop = Mock(name='loop')
- t.register_with_event_loop(conn, loop)
- loop.add_reader.assert_called_with(
- conn.sock, t.on_readable, conn, loop,
- )
-
- def test_heartbeat_check(self):
- t = pyamqp.Transport(Mock())
- conn = Mock()
- t.heartbeat_check(conn, rate=4.331)
- conn.heartbeat_tick.assert_called_with(rate=4.331)
-
- def test_get_manager(self):
- with patch('kombu.transport.pyamqp.get_manager') as get_manager:
- t = pyamqp.Transport(Mock())
- t.get_manager(1, kw=2)
- get_manager.assert_called_with(t.client, 1, kw=2)
|