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_exchange.py 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. from __future__ import absolute_import
  2. from kombu import Connection
  3. from kombu.transport.virtual import exchange
  4. from kombu.tests.case import Case, Mock
  5. from kombu.tests.mocks import Transport
  6. class ExchangeCase(Case):
  7. type = None
  8. def setUp(self):
  9. if self.type:
  10. self.e = self.type(Connection(transport=Transport).channel())
  11. class test_Direct(ExchangeCase):
  12. type = exchange.DirectExchange
  13. table = [('rFoo', None, 'qFoo'),
  14. ('rFoo', None, 'qFox'),
  15. ('rBar', None, 'qBar'),
  16. ('rBaz', None, 'qBaz')]
  17. def test_lookup(self):
  18. self.assertListEqual(
  19. self.e.lookup(self.table, 'eFoo', 'rFoo', None),
  20. ['qFoo', 'qFox'],
  21. )
  22. self.assertListEqual(
  23. self.e.lookup(self.table, 'eMoz', 'rMoz', 'DEFAULT'),
  24. [],
  25. )
  26. self.assertListEqual(
  27. self.e.lookup(self.table, 'eBar', 'rBar', None),
  28. ['qBar'],
  29. )
  30. class test_Fanout(ExchangeCase):
  31. type = exchange.FanoutExchange
  32. table = [(None, None, 'qFoo'),
  33. (None, None, 'qFox'),
  34. (None, None, 'qBar')]
  35. def test_lookup(self):
  36. self.assertListEqual(
  37. self.e.lookup(self.table, 'eFoo', 'rFoo', None),
  38. ['qFoo', 'qFox', 'qBar'],
  39. )
  40. def test_deliver_when_fanout_supported(self):
  41. self.e.channel = Mock()
  42. self.e.channel.supports_fanout = True
  43. message = Mock()
  44. self.e.deliver(message, 'exchange', 'rkey')
  45. self.e.channel._put_fanout.assert_called_with(
  46. 'exchange', message, 'rkey',
  47. )
  48. def test_deliver_when_fanout_unsupported(self):
  49. self.e.channel = Mock()
  50. self.e.channel.supports_fanout = False
  51. self.e.deliver(Mock(), 'exchange', None)
  52. self.assertFalse(self.e.channel._put_fanout.called)
  53. class test_Topic(ExchangeCase):
  54. type = exchange.TopicExchange
  55. table = [
  56. ('stock.#', None, 'rFoo'),
  57. ('stock.us.*', None, 'rBar'),
  58. ]
  59. def setUp(self):
  60. super(test_Topic, self).setUp()
  61. self.table = [(rkey, self.e.key_to_pattern(rkey), queue)
  62. for rkey, _, queue in self.table]
  63. def test_prepare_bind(self):
  64. x = self.e.prepare_bind('qFoo', 'eFoo', 'stock.#', {})
  65. self.assertTupleEqual(x, ('stock.#', r'^stock\..*?$', 'qFoo'))
  66. def test_lookup(self):
  67. self.assertListEqual(
  68. self.e.lookup(self.table, 'eFoo', 'stock.us.nasdaq', None),
  69. ['rFoo', 'rBar'],
  70. )
  71. self.assertTrue(self.e._compiled)
  72. self.assertListEqual(
  73. self.e.lookup(self.table, 'eFoo', 'stock.europe.OSE', None),
  74. ['rFoo'],
  75. )
  76. self.assertListEqual(
  77. self.e.lookup(self.table, 'eFoo', 'stockxeuropexOSE', None),
  78. [],
  79. )
  80. self.assertListEqual(
  81. self.e.lookup(self.table, 'eFoo',
  82. 'candy.schleckpulver.snap_crackle', None),
  83. [],
  84. )
  85. def test_deliver(self):
  86. self.e.channel = Mock()
  87. self.e.channel._lookup.return_value = ('a', 'b')
  88. message = Mock()
  89. self.e.deliver(message, 'exchange', 'rkey')
  90. expected = [(('a', message), {}),
  91. (('b', message), {})]
  92. self.assertListEqual(self.e.channel._put.call_args_list, expected)
  93. class test_ExchangeType(ExchangeCase):
  94. type = exchange.ExchangeType
  95. def test_lookup(self):
  96. with self.assertRaises(NotImplementedError):
  97. self.e.lookup([], 'eFoo', 'rFoo', None)
  98. def test_prepare_bind(self):
  99. self.assertTupleEqual(
  100. self.e.prepare_bind('qFoo', 'eFoo', 'rFoo', {}),
  101. ('rFoo', None, 'qFoo'),
  102. )
  103. def test_equivalent(self):
  104. e1 = dict(
  105. type='direct',
  106. durable=True,
  107. auto_delete=True,
  108. arguments={},
  109. )
  110. self.assertTrue(
  111. self.e.equivalent(e1, 'eFoo', 'direct', True, True, {}),
  112. )
  113. self.assertFalse(
  114. self.e.equivalent(e1, 'eFoo', 'topic', True, True, {}),
  115. )
  116. self.assertFalse(
  117. self.e.equivalent(e1, 'eFoo', 'direct', False, True, {}),
  118. )
  119. self.assertFalse(
  120. self.e.equivalent(e1, 'eFoo', 'direct', True, False, {}),
  121. )
  122. self.assertFalse(
  123. self.e.equivalent(e1, 'eFoo', 'direct', True, True,
  124. {'expires': 3000}),
  125. )
  126. e2 = dict(e1, arguments={'expires': 3000})
  127. self.assertTrue(
  128. self.e.equivalent(e2, 'eFoo', 'direct', True, True,
  129. {'expires': 3000}),
  130. )
  131. self.assertFalse(
  132. self.e.equivalent(e2, 'eFoo', 'direct', True, True,
  133. {'expires': 6000}),
  134. )