async def test_on_service_message_for_other_consumers(loop): with patch('worker.actions.make_service_command', Mock(side_effect=coroutine(lambda msg: "response"))): app = BaseApplication('app', loop=loop, CONFIG='config.tests') app.platforms = {"ubuntu-14.04-x64": 1} msg = ujson.dumps({ "command": "bla bla", "platform": "ubuntu-14.04-x64", "vmmaster_session": 1 }) qc = AsyncQueueConsumer(app) # mocks service_channel = Mock(channel_id=1) qc.get_session_channel_by_id = Mock(return_value=None) qc.get_platform_channel_by_platform = Mock(return_value=None) service_channel.basic_client_nack = Mock(side_effect=coroutine( lambda delivery_tag, multiple, requeue: None )) await qc.on_service_message( service_channel, msg, Mock(delivery_tag='dtag1.2134234'), Mock(correlation_id='6ivtyubhnj') ) assert service_channel.basic_client_nack.called assert app.platforms["ubuntu-14.04-x64"] == 1
async def test_on_session_message(loop): with patch('worker.actions.make_request_for_session', Mock(side_effect=coroutine(lambda msg: "response"))): app = BaseApplication('app', loop=loop, CONFIG='config.tests') app.platforms = {"ubuntu-14.04-x64": 1} msg = ujson.dumps({ "platform": "ubuntu-14.04-x64", "vmmaster_session": 1 }) qc = AsyncQueueConsumer(app) # mocks channel = Mock(channel_id=1) qc.messages["sessions"][1] = {} qc.channels[channel.channel_id] = {"mute": False, "type": "sessions", "channel": channel} channel.basic_client_ack = Mock(side_effect=coroutine( lambda delivery_tag: None )) qc.add_msg_to_queue = Mock(side_effect=coroutine( lambda _channel, correlation_id, queue_name, msg: None )) await qc.on_session_message( channel, msg, Mock(delivery_tag='dtag1.2134234'), Mock(correlation_id='6ivtyubhnj') ) assert channel.basic_client_ack.called assert qc.add_msg_to_queue.called
async def test_disconnect(loop): app = BaseApplication('app', loop=loop, CONFIG='config.tests') app.platforms = {"ubuntu-14.04-x64": 1} qc = AsyncQueueConsumer(app) # mocks qc.connection = Mock(close=Mock(side_effect=coroutine(lambda: None))) qc.transport = Mock(close=Mock(side_effect=coroutine(lambda: None))) await qc.disconnect() assert qc.connection.close.called assert qc.transport.close.called
async def test_on_service_message_with_channel_unmuting(loop): with patch('worker.actions.make_service_command', Mock(side_effect=coroutine(lambda msg: "response"))): app = BaseApplication('app', loop=loop, CONFIG='config.tests') app.platforms = {"ubuntu-14.04-x64": 0} msg = ujson.dumps({ "command": "SESSION_CLOSING", "platform": "ubuntu-14.04-x64", "vmmaster_session": 1 }) qc = AsyncQueueConsumer(app) # mocks service_channel = Mock(channel_id=1) session_channel = Mock(channel_id=2) platforms_channel = Mock(channel_id=3) qc.get_session_channel_by_id = Mock(return_value=session_channel) qc.get_platform_channel_by_platform = Mock(return_value=platforms_channel) qc.messages["sessions"] = {1: {}} qc.channels[service_channel.channel_id] = \ {"mute": False, "type": "services", "channel": service_channel, "consumer_tag": "efwef1234r"} qc.channels[session_channel.channel_id] = \ {"mute": False, "type": "sessions", "channel": session_channel, "consumer_tag": "efwef1234r"} qc.channels[platforms_channel.channel_id] = \ {"mute": True, "type": "platforms", "channel": platforms_channel, "consumer_tag": "efwef1234r"} service_channel.basic_client_ack = Mock(side_effect=coroutine( lambda delivery_tag: None )) qc.delete_queue = Mock(side_effect=coroutine( lambda _channel, queue_name: None )) qc.mute_channel = Mock(side_effect=coroutine( lambda _channel, _ct: None )) qc.unmute_channel = Mock(side_effect=coroutine( lambda _channel, _ct, pl: None )) await qc.on_service_message( service_channel, msg, Mock(delivery_tag='dtag1.2134234'), Mock(correlation_id='6ivtyubhnj') ) assert service_channel.basic_client_ack.called assert qc.mute_channel.called assert qc.delete_queue.called assert app.platforms["ubuntu-14.04-x64"] == 1
async def test_start_consuming_for_platforms(loop): app = BaseApplication('app', loop=loop, CONFIG='config.tests') app.platforms = {"ubuntu-14.04-x64": 1} qc = AsyncQueueConsumer(app) # mocks platform_channel = Mock(channel_id=1) qc.make_channel = Mock(side_effect=coroutine(lambda _type: platform_channel)) qc.channels[platform_channel.channel_id] = { "mute": False, "type": "platforms", "channel": platform_channel } qc.create_queue_and_consume = Mock(side_effect=coroutine( lambda channel, on_message_method, queue_name: ("queue_name", "consumer_tag") )) await qc.start_consuming_for_platforms() assert qc.create_queue_and_consume.called assert qc.channels[platform_channel.channel_id]["consumer_tag"] == "consumer_tag" assert qc.channels[platform_channel.channel_id]["platform"] == "ubuntu-14.04-x64"
async def test_on_platform_message_with_muted_channel(loop): app = BaseApplication('app', loop=loop, CONFIG='config.tests') app.platforms = {"ubuntu-14.04-x64": 0} msg = ujson.dumps({ "platform": "ubuntu-14.04-x64", "vmmaster_session": 1 }) qc = AsyncQueueConsumer(app) # mocks channel = Mock(channel_id=1) qc.messages["platforms"]["ubuntu-14.04-x64"] = {} qc.channels[channel.channel_id] = {"mute": True, "type": "platforms", "channel": channel} channel.basic_client_nack = Mock(side_effect=coroutine( lambda delivery_tag, multiple, requeue: None )) await qc.on_platform_message( channel, msg, Mock(delivery_tag='dtag1.2134234'), Mock(correlation_id='6ivtyubhnj') ) assert channel.basic_client_nack.called
async def test_connect(loop): app = BaseApplication('app', loop=loop, CONFIG='config.tests') app.platforms = {"ubuntu-14.04-x64": 1} qc = AsyncQueueConsumer(app) # mocks qc.make_connection = Mock(side_effect=coroutine( lambda params: (Mock(), Mock()) )) qc.start_consuming_for_commands = Mock(side_effect=coroutine( lambda: "queue_name" )) qc.start_consuming_for_platforms = Mock(side_effect=coroutine( lambda: None )) await qc.connect() assert qc.make_connection.called assert qc.start_consuming_for_platforms.called assert qc.start_consuming_for_commands.called assert qc.service_queue assert qc.transport assert qc.connection