async def test_start_dont_created_another_clock_when_restart(self): self.one_route_fixture["routes"] = [ "asgard/counts", "asgard/counts/errors", ] consumer = Consumer(self.one_route_fixture, *self.connection_parameters) queue_mock = CoroutineMock( consume=CoroutineMock(), connect=CoroutineMock(side_effect=[True, True]), ) with unittest.mock.patch.object(consumer, "keep_runnig", side_effect=[True, False, True, False]): consumer.queue = queue_mock await consumer.start() my_task = consumer.clock_task await consumer.start() # Realizando sleep para devolver o loop para o clock await asyncio.sleep(0.1) self.assertTrue(my_task is consumer.clock_task) await consumer.clock.stop() await asyncio.sleep(0.1)
async def test_start_create_clock_flusher(self): self.one_route_fixture["routes"] = [ "asgard/counts", "asgard/counts/errors", ] consumer = Consumer(self.one_route_fixture, *self.connection_parameters) with unittest.mock.patch.object(consumer, "keep_runnig", side_effect=[True, True, True, False]): queue_mock = CoroutineMock( consume=CoroutineMock(), connection=Mock( connect=CoroutineMock( side_effect=[AioamqpException, True]), has_channel_ready=Mock(side_effect=[True, False, False]), ), ) consumer.queue = queue_mock await consumer.start() # Realizando sleep para devolver o loop para o clock await asyncio.sleep(0.1) self.assertIsNotNone(consumer.clock_task) await consumer.clock.stop() await asyncio.sleep(0.1)
async def test_start_dont_created_clock_when_connection_failed(self): self.one_route_fixture["routes"] = [ "asgard/counts", "asgard/counts/errors", ] consumer = Consumer(self.one_route_fixture, *self.connection_parameters) with unittest.mock.patch.object( consumer, "keep_runnig", side_effect=[True, True, True, False] ): is_connected_mock = mock.PropertyMock( side_effect=[True, False, True] ) queue_mock = CoroutineMock( consume=CoroutineMock(), connect=CoroutineMock(side_effect=[AioamqpException, True]), ) type(queue_mock).is_connected = is_connected_mock consumer.queue = queue_mock await consumer.start() # Realizando sleep para devolver o loop para o clock await asyncio.sleep(0.1) self.assertIsNone(consumer.clock_task) await consumer.clock.stop() await asyncio.sleep(0.1)
async def test_start_always_calls_sleep(self): """ Regression: O sleep deve ser chamado *sempre*, e não apenas quando há tentativa de conexão. Aqui, tentamos reconectar apenas uma vez, mas mesmo assim o sleep é chamado 3x, pois o loop principal roda 3x. """ self.one_route_fixture["route"] = [ "asgard/counts", "asgard/counts/errors", ] consumer = Consumer(self.one_route_fixture, *self.connection_parameters) with unittest.mock.patch.object( consumer, "keep_runnig", side_effect=[True, True, True, False] ), asynctest.patch.object( asyncio, "sleep" ) as sleep_mock, asynctest.patch.object( consumer, "clock_task", side_effect=[True, True] ): is_connected_mock = mock.PropertyMock( side_effect=[False, True, True, True] ) queue_mock = CoroutineMock( consume=CoroutineMock(), connect=CoroutineMock() ) type(queue_mock).is_connected = is_connected_mock consumer.queue = queue_mock await consumer.start() self.assertEqual(3, sleep_mock.await_count)
def test_start_calls_connect_and_consume_for_each_queue(self): self.one_route_fixture['route'] = ["asgard/counts", "asgard/counts/errors"] consumer = Consumer(self.one_route_fixture, *self.connection_parameters) queue_mock = CoroutineMock(consume=CoroutineMock(), connect=CoroutineMock(), is_connected=False) loop = asyncio.get_event_loop() consumer.queue = queue_mock with asynctest.patch.object(consumer, 'keep_runnig', side_effect=[True, False]) as keep_running_mock: loop.run_until_complete(consumer.start()) self.assertEqual(1, queue_mock.connect.await_count) self.assertEqual(2, queue_mock.consume.await_count) self.assertEqual([mock.call(queue_name="asgard/counts"), mock.call(queue_name="asgard/counts/errors")], queue_mock.consume.await_args_list)
def test_start_reconnects_if_connectaion_failed(self): self.one_route_fixture['route'] = ["asgard/counts", "asgard/counts/errors"] consumer = Consumer(self.one_route_fixture, *self.connection_parameters) with unittest.mock.patch.object(consumer, 'keep_runnig', side_effect=[True, True, False]), \ asynctest.patch.object(asyncio, 'sleep') as sleep_mock: is_connected_mock = mock.PropertyMock(side_effect=[False, False, True]) queue_mock = CoroutineMock(consume=CoroutineMock(), connect=CoroutineMock(side_effect=[AioamqpException, True])) type(queue_mock).is_connected = is_connected_mock loop = asyncio.get_event_loop() consumer.queue = queue_mock loop.run_until_complete(consumer.start()) self.assertEqual(1, queue_mock.connect.await_count) self.assertEqual(2, queue_mock.consume.await_count) self.assertEqual([mock.call(queue_name="asgard/counts"), mock.call(queue_name="asgard/counts/errors")], queue_mock.consume.await_args_list) self.assertEqual(2, sleep_mock.await_count)