Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_librabbitmq.py 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. from __future__ import absolute_import
  2. try:
  3. import librabbitmq
  4. except ImportError:
  5. librabbitmq = None # noqa
  6. else:
  7. from kombu.transport import librabbitmq # noqa
  8. from kombu.tests.case import Case, Mock, SkipTest, patch
  9. class lrmqCase(Case):
  10. def setUp(self):
  11. if librabbitmq is None:
  12. raise SkipTest('librabbitmq is not installed')
  13. class test_Message(lrmqCase):
  14. def test_init(self):
  15. chan = Mock(name='channel')
  16. message = librabbitmq.Message(
  17. chan, {'prop': 42}, {'delivery_tag': 337}, 'body',
  18. )
  19. self.assertEqual(message.body, 'body')
  20. self.assertEqual(message.delivery_tag, 337)
  21. self.assertEqual(message.properties['prop'], 42)
  22. class test_Channel(lrmqCase):
  23. def test_prepare_message(self):
  24. conn = Mock(name='connection')
  25. chan = librabbitmq.Channel(conn, 1)
  26. self.assertTrue(chan)
  27. body = 'the quick brown fox...'
  28. properties = {'name': 'Elaine M.'}
  29. body2, props2 = chan.prepare_message(
  30. body, properties=properties,
  31. priority=999,
  32. content_type='ctype',
  33. content_encoding='cenc',
  34. headers={'H': 2},
  35. )
  36. self.assertEqual(props2['name'], 'Elaine M.')
  37. self.assertEqual(props2['priority'], 999)
  38. self.assertEqual(props2['content_type'], 'ctype')
  39. self.assertEqual(props2['content_encoding'], 'cenc')
  40. self.assertEqual(props2['headers'], {'H': 2})
  41. self.assertEqual(body2, body)
  42. body3, props3 = chan.prepare_message(body, priority=777)
  43. self.assertEqual(props3['priority'], 777)
  44. self.assertEqual(body3, body)
  45. class test_Transport(lrmqCase):
  46. def setUp(self):
  47. super(test_Transport, self).setUp()
  48. self.client = Mock(name='client')
  49. self.T = librabbitmq.Transport(self.client)
  50. def test_driver_version(self):
  51. self.assertTrue(self.T.driver_version())
  52. def test_create_channel(self):
  53. conn = Mock(name='connection')
  54. chan = self.T.create_channel(conn)
  55. self.assertTrue(chan)
  56. conn.channel.assert_called_with()
  57. def test_drain_events(self):
  58. conn = Mock(name='connection')
  59. self.T.drain_events(conn, timeout=1.33)
  60. conn.drain_events.assert_called_with(timeout=1.33)
  61. def test_establish_connection_SSL_not_supported(self):
  62. self.client.ssl = True
  63. with self.assertRaises(NotImplementedError):
  64. self.T.establish_connection()
  65. def test_establish_connection(self):
  66. self.T.Connection = Mock(name='Connection')
  67. self.T.client.ssl = False
  68. self.T.client.port = None
  69. self.T.client.transport_options = {}
  70. conn = self.T.establish_connection()
  71. self.assertEqual(
  72. self.T.client.port,
  73. self.T.default_connection_params['port'],
  74. )
  75. self.assertEqual(conn.client, self.T.client)
  76. self.assertEqual(self.T.client.drain_events, conn.drain_events)
  77. def test_collect__no_conn(self):
  78. self.T.client.drain_events = 1234
  79. self.T._collect(None)
  80. self.assertIsNone(self.client.drain_events)
  81. self.assertIsNone(self.T.client)
  82. def test_collect__with_conn(self):
  83. self.T.client.drain_events = 1234
  84. conn = Mock(name='connection')
  85. chans = conn.channels = {1: Mock(name='chan1'), 2: Mock(name='chan2')}
  86. conn.callbacks = {'foo': Mock(name='cb1'), 'bar': Mock(name='cb2')}
  87. for i, chan in enumerate(conn.channels.values()):
  88. chan.connection = i
  89. with patch('os.close') as close:
  90. self.T._collect(conn)
  91. close.assert_called_with(conn.fileno())
  92. self.assertFalse(conn.channels)
  93. self.assertFalse(conn.callbacks)
  94. for chan in chans.values():
  95. self.assertIsNone(chan.connection)
  96. self.assertIsNone(self.client.drain_events)
  97. self.assertIsNone(self.T.client)
  98. with patch('os.close') as close:
  99. self.T.client = self.client
  100. close.side_effect = OSError()
  101. self.T._collect(conn)
  102. close.assert_called_with(conn.fileno())
  103. def test_register_with_event_loop(self):
  104. conn = Mock(name='conn')
  105. loop = Mock(name='loop')
  106. self.T.register_with_event_loop(conn, loop)
  107. loop.add_reader.assert_called_with(
  108. conn.fileno(), self.T.on_readable, conn, loop,
  109. )
  110. def test_verify_connection(self):
  111. conn = Mock(name='connection')
  112. conn.connected = True
  113. self.assertTrue(self.T.verify_connection(conn))
  114. def test_close_connection(self):
  115. conn = Mock(name='connection')
  116. self.client.drain_events = 1234
  117. self.T.close_connection(conn)
  118. self.assertIsNone(self.client.drain_events)
  119. conn.close.assert_called_with()