|
@@ -173,7 +173,7 @@ class test_QoS(unittest.TestCase):
|
|
|
def qos(self, prefetch_size=0, prefetch_count=0, apply_global=False):
|
|
|
self.prefetch_count = prefetch_count
|
|
|
|
|
|
- def test_decrement(self):
|
|
|
+ def test_increment_decrement(self):
|
|
|
consumer = self.MockConsumer()
|
|
|
qos = QoS(consumer, 10, app_or_default().log.get_default_logger())
|
|
|
qos.update()
|
|
@@ -186,6 +186,13 @@ class test_QoS(unittest.TestCase):
|
|
|
self.assertEqual(int(qos.value), 8)
|
|
|
self.assertEqual(consumer.prefetch_count, 9)
|
|
|
|
|
|
+ # Does not decrement 0 value
|
|
|
+ qos.value._value = 0
|
|
|
+ qos.decrement()
|
|
|
+ self.assertEqual(int(qos.value), 0)
|
|
|
+ qos.increment()
|
|
|
+ self.assertEqual(int(qos.value), 0)
|
|
|
+
|
|
|
|
|
|
class test_Consumer(unittest.TestCase):
|
|
|
|
|
@@ -198,6 +205,18 @@ class test_Consumer(unittest.TestCase):
|
|
|
def tearDown(self):
|
|
|
self.eta_schedule.stop()
|
|
|
|
|
|
+ def test_info(self):
|
|
|
+ l = MyKombuConsumer(self.ready_queue, self.eta_schedule, self.logger,
|
|
|
+ send_events=False)
|
|
|
+ l.qos = QoS(l.task_consumer, 10, l.logger)
|
|
|
+ info = l.info
|
|
|
+ self.assertEqual(info["prefetch_count"], 10)
|
|
|
+ self.assertFalse(info["broker"])
|
|
|
+
|
|
|
+ l.connection = app_or_default().broker_connection()
|
|
|
+ info = l.info
|
|
|
+ self.assertTrue(info["broker"])
|
|
|
+
|
|
|
def test_connection(self):
|
|
|
l = MyKombuConsumer(self.ready_queue, self.eta_schedule, self.logger,
|
|
|
send_events=False)
|
|
@@ -205,6 +224,12 @@ class test_Consumer(unittest.TestCase):
|
|
|
l.reset_connection()
|
|
|
self.assertIsInstance(l.connection, BrokerConnection)
|
|
|
|
|
|
+ l._state = RUN
|
|
|
+ l.event_dispatcher = None
|
|
|
+ l.stop_consumers(close=False)
|
|
|
+ self.assertTrue(l.connection)
|
|
|
+
|
|
|
+ l._state = RUN
|
|
|
l.stop_consumers()
|
|
|
self.assertIsNone(l.connection)
|
|
|
self.assertIsNone(l.task_consumer)
|
|
@@ -323,6 +348,94 @@ class test_Consumer(unittest.TestCase):
|
|
|
self.assertEqual(in_bucket.execute(), 2 * 4 * 8)
|
|
|
self.assertTrue(self.eta_schedule.empty())
|
|
|
|
|
|
+ def test_start_connection_error(self):
|
|
|
+
|
|
|
+ class MockConsumer(MainConsumer):
|
|
|
+ iterations = 0
|
|
|
+
|
|
|
+ def consume_messages(self):
|
|
|
+ if not self.iterations:
|
|
|
+ self.iterations = 1
|
|
|
+ raise KeyError("foo")
|
|
|
+ raise SyntaxError("bar")
|
|
|
+
|
|
|
+ l = MockConsumer(self.ready_queue, self.eta_schedule, self.logger,
|
|
|
+ send_events=False)
|
|
|
+ l.connection_errors = (KeyError, )
|
|
|
+ self.assertRaises(SyntaxError, l.start)
|
|
|
+ l.heart.stop()
|
|
|
+
|
|
|
+ def test_consume_messages(self):
|
|
|
+ app = app_or_default()
|
|
|
+
|
|
|
+ class Connection(app.broker_connection().__class__):
|
|
|
+ obj = None
|
|
|
+
|
|
|
+ def drain_events(self, **kwargs):
|
|
|
+ self.obj.connection = None
|
|
|
+
|
|
|
+ class Consumer(object):
|
|
|
+ consuming = False
|
|
|
+ prefetch_count = 0
|
|
|
+
|
|
|
+ def consume(self):
|
|
|
+ self.consuming = True
|
|
|
+
|
|
|
+ def qos(self, prefetch_size=0, prefetch_count=0,
|
|
|
+ apply_global=False):
|
|
|
+ self.prefetch_count = prefetch_count
|
|
|
+
|
|
|
+ l = MyKombuConsumer(self.ready_queue, self.eta_schedule, self.logger,
|
|
|
+ send_events=False)
|
|
|
+ l.connection = Connection()
|
|
|
+ l.connection.obj = l
|
|
|
+ l.task_consumer = Consumer()
|
|
|
+ l.broadcast_consumer = Consumer()
|
|
|
+ l.qos = QoS(l.task_consumer, 10, l.logger)
|
|
|
+
|
|
|
+ l.consume_messages()
|
|
|
+ l.consume_messages()
|
|
|
+ self.assertTrue(l.task_consumer.consuming)
|
|
|
+ self.assertTrue(l.broadcast_consumer.consuming)
|
|
|
+ self.assertEqual(l.task_consumer.prefetch_count, 10)
|
|
|
+
|
|
|
+ l.qos.decrement()
|
|
|
+ l.consume_messages()
|
|
|
+ self.assertEqual(l.task_consumer.prefetch_count, 9)
|
|
|
+
|
|
|
+ def test_maybe_conn_error(self):
|
|
|
+
|
|
|
+ def raises(error):
|
|
|
+
|
|
|
+ def fun():
|
|
|
+ raise error
|
|
|
+
|
|
|
+ return fun
|
|
|
+
|
|
|
+ l = MyKombuConsumer(self.ready_queue, self.eta_schedule, self.logger,
|
|
|
+ send_events=False)
|
|
|
+ l.connection_errors = (KeyError, )
|
|
|
+ l.channel_errors = (SyntaxError, )
|
|
|
+ l.maybe_conn_error(raises(AttributeError("foo")))
|
|
|
+ l.maybe_conn_error(raises(KeyError("foo")))
|
|
|
+ l.maybe_conn_error(raises(SyntaxError("foo")))
|
|
|
+ self.assertRaises(IndexError, l.maybe_conn_error,
|
|
|
+ raises(IndexError("foo")))
|
|
|
+
|
|
|
+
|
|
|
+ def test_apply_eta_task(self):
|
|
|
+ from celery.worker import state
|
|
|
+ l = MyKombuConsumer(self.ready_queue, self.eta_schedule, self.logger,
|
|
|
+ send_events=False)
|
|
|
+ l.qos = QoS(None, 10, l.logger)
|
|
|
+
|
|
|
+ task = object()
|
|
|
+ qos = l.qos.next
|
|
|
+ l.apply_eta_task(task)
|
|
|
+ self.assertIn(task, state.reserved_requests)
|
|
|
+ self.assertEqual(l.qos.next, qos - 1)
|
|
|
+ self.assertIs(self.ready_queue.get_nowait(), task)
|
|
|
+
|
|
|
def test_receieve_message_eta_isoformat(self):
|
|
|
|
|
|
class MockConsumer(object):
|