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_filesystem.py 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. from __future__ import absolute_import
  2. import sys
  3. import tempfile
  4. from kombu import Connection, Exchange, Queue, Consumer, Producer
  5. from kombu.tests.case import Case, SkipTest
  6. class test_FilesystemTransport(Case):
  7. def setUp(self):
  8. if sys.platform == 'win32':
  9. raise SkipTest('Needs win32con module')
  10. try:
  11. data_folder_in = tempfile.mkdtemp()
  12. data_folder_out = tempfile.mkdtemp()
  13. except Exception:
  14. raise SkipTest('filesystem transport: cannot create tempfiles')
  15. self.c = Connection(transport='filesystem',
  16. transport_options={
  17. 'data_folder_in': data_folder_in,
  18. 'data_folder_out': data_folder_out,
  19. })
  20. self.p = Connection(transport='filesystem',
  21. transport_options={
  22. 'data_folder_in': data_folder_out,
  23. 'data_folder_out': data_folder_in,
  24. })
  25. self.e = Exchange('test_transport_filesystem')
  26. self.q = Queue('test_transport_filesystem',
  27. exchange=self.e,
  28. routing_key='test_transport_filesystem')
  29. self.q2 = Queue('test_transport_filesystem2',
  30. exchange=self.e,
  31. routing_key='test_transport_filesystem2')
  32. def test_produce_consume_noack(self):
  33. producer = Producer(self.p.channel(), self.e)
  34. consumer = Consumer(self.c.channel(), self.q, no_ack=True)
  35. for i in range(10):
  36. producer.publish({'foo': i},
  37. routing_key='test_transport_filesystem')
  38. _received = []
  39. def callback(message_data, message):
  40. _received.append(message)
  41. consumer.register_callback(callback)
  42. consumer.consume()
  43. while 1:
  44. if len(_received) == 10:
  45. break
  46. self.c.drain_events()
  47. self.assertEqual(len(_received), 10)
  48. def test_produce_consume(self):
  49. producer_channel = self.p.channel()
  50. consumer_channel = self.c.channel()
  51. producer = Producer(producer_channel, self.e)
  52. consumer1 = Consumer(consumer_channel, self.q)
  53. consumer2 = Consumer(consumer_channel, self.q2)
  54. self.q2(consumer_channel).declare()
  55. for i in range(10):
  56. producer.publish({'foo': i},
  57. routing_key='test_transport_filesystem')
  58. for i in range(10):
  59. producer.publish({'foo': i},
  60. routing_key='test_transport_filesystem2')
  61. _received1 = []
  62. _received2 = []
  63. def callback1(message_data, message):
  64. _received1.append(message)
  65. message.ack()
  66. def callback2(message_data, message):
  67. _received2.append(message)
  68. message.ack()
  69. consumer1.register_callback(callback1)
  70. consumer2.register_callback(callback2)
  71. consumer1.consume()
  72. consumer2.consume()
  73. while 1:
  74. if len(_received1) + len(_received2) == 20:
  75. break
  76. self.c.drain_events()
  77. self.assertEqual(len(_received1) + len(_received2), 20)
  78. # compression
  79. producer.publish({'compressed': True},
  80. routing_key='test_transport_filesystem',
  81. compression='zlib')
  82. m = self.q(consumer_channel).get()
  83. self.assertDictEqual(m.payload, {'compressed': True})
  84. # queue.delete
  85. for i in range(10):
  86. producer.publish({'foo': i},
  87. routing_key='test_transport_filesystem')
  88. self.assertTrue(self.q(consumer_channel).get())
  89. self.q(consumer_channel).delete()
  90. self.q(consumer_channel).declare()
  91. self.assertIsNone(self.q(consumer_channel).get())
  92. # queue.purge
  93. for i in range(10):
  94. producer.publish({'foo': i},
  95. routing_key='test_transport_filesystem2')
  96. self.assertTrue(self.q2(consumer_channel).get())
  97. self.q2(consumer_channel).purge()
  98. self.assertIsNone(self.q2(consumer_channel).get())