123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- from __future__ import absolute_import
-
- try:
- import librabbitmq
- except ImportError:
- librabbitmq = None # noqa
- else:
- from kombu.transport import librabbitmq # noqa
-
- from kombu.tests.case import Case, Mock, SkipTest, patch
-
-
- class lrmqCase(Case):
-
- def setUp(self):
- if librabbitmq is None:
- raise SkipTest('librabbitmq is not installed')
-
-
- class test_Message(lrmqCase):
-
- def test_init(self):
- chan = Mock(name='channel')
- message = librabbitmq.Message(
- chan, {'prop': 42}, {'delivery_tag': 337}, 'body',
- )
- self.assertEqual(message.body, 'body')
- self.assertEqual(message.delivery_tag, 337)
- self.assertEqual(message.properties['prop'], 42)
-
-
- class test_Channel(lrmqCase):
-
- def test_prepare_message(self):
- conn = Mock(name='connection')
- chan = librabbitmq.Channel(conn, 1)
- self.assertTrue(chan)
-
- body = 'the quick brown fox...'
- properties = {'name': 'Elaine M.'}
-
- body2, props2 = chan.prepare_message(
- body, properties=properties,
- priority=999,
- content_type='ctype',
- content_encoding='cenc',
- headers={'H': 2},
- )
-
- self.assertEqual(props2['name'], 'Elaine M.')
- self.assertEqual(props2['priority'], 999)
- self.assertEqual(props2['content_type'], 'ctype')
- self.assertEqual(props2['content_encoding'], 'cenc')
- self.assertEqual(props2['headers'], {'H': 2})
- self.assertEqual(body2, body)
-
- body3, props3 = chan.prepare_message(body, priority=777)
- self.assertEqual(props3['priority'], 777)
- self.assertEqual(body3, body)
-
-
- class test_Transport(lrmqCase):
-
- def setUp(self):
- super(test_Transport, self).setUp()
- self.client = Mock(name='client')
- self.T = librabbitmq.Transport(self.client)
-
- def test_driver_version(self):
- self.assertTrue(self.T.driver_version())
-
- def test_create_channel(self):
- conn = Mock(name='connection')
- chan = self.T.create_channel(conn)
- self.assertTrue(chan)
- conn.channel.assert_called_with()
-
- def test_drain_events(self):
- conn = Mock(name='connection')
- self.T.drain_events(conn, timeout=1.33)
- conn.drain_events.assert_called_with(timeout=1.33)
-
- def test_establish_connection_SSL_not_supported(self):
- self.client.ssl = True
- with self.assertRaises(NotImplementedError):
- self.T.establish_connection()
-
- def test_establish_connection(self):
- self.T.Connection = Mock(name='Connection')
- self.T.client.ssl = False
- self.T.client.port = None
- self.T.client.transport_options = {}
-
- conn = self.T.establish_connection()
- self.assertEqual(
- self.T.client.port,
- self.T.default_connection_params['port'],
- )
- self.assertEqual(conn.client, self.T.client)
- self.assertEqual(self.T.client.drain_events, conn.drain_events)
-
- def test_collect__no_conn(self):
- self.T.client.drain_events = 1234
- self.T._collect(None)
- self.assertIsNone(self.client.drain_events)
- self.assertIsNone(self.T.client)
-
- def test_collect__with_conn(self):
- self.T.client.drain_events = 1234
- conn = Mock(name='connection')
- chans = conn.channels = {1: Mock(name='chan1'), 2: Mock(name='chan2')}
- conn.callbacks = {'foo': Mock(name='cb1'), 'bar': Mock(name='cb2')}
- for i, chan in enumerate(conn.channels.values()):
- chan.connection = i
-
- with patch('os.close') as close:
- self.T._collect(conn)
- close.assert_called_with(conn.fileno())
- self.assertFalse(conn.channels)
- self.assertFalse(conn.callbacks)
- for chan in chans.values():
- self.assertIsNone(chan.connection)
- self.assertIsNone(self.client.drain_events)
- self.assertIsNone(self.T.client)
-
- with patch('os.close') as close:
- self.T.client = self.client
- close.side_effect = OSError()
- self.T._collect(conn)
- close.assert_called_with(conn.fileno())
-
- def test_register_with_event_loop(self):
- conn = Mock(name='conn')
- loop = Mock(name='loop')
- self.T.register_with_event_loop(conn, loop)
- loop.add_reader.assert_called_with(
- conn.fileno(), self.T.on_readable, conn, loop,
- )
-
- def test_verify_connection(self):
- conn = Mock(name='connection')
- conn.connected = True
- self.assertTrue(self.T.verify_connection(conn))
-
- def test_close_connection(self):
- conn = Mock(name='connection')
- self.client.drain_events = 1234
- self.T.close_connection(conn)
- self.assertIsNone(self.client.drain_events)
- conn.close.assert_called_with()
|