def test_state_input(disp, mocker): stop_side_effect = [True for _ in state_input] stop_side_effect.append(True) # reset state message stop_side_effect.append(False) mocker.patch.object(burlak.LoopSentry, 'should_run', side_effect=stop_side_effect) assert state_input running_apps_list = [] for state, running_list, version in state_input: yield disp.input_queue.put( burlak.StateUpdateMessage(state, version, uuid='')) running_apps_list.append(running_list) yield disp.input_queue.put(burlak.ResetStateMessage()) def info_mock(app, flags=None): info = { app: { 'pool': dict( active=1, idle=1, slaves=dict(a=1, b=2, c=3), ), }, } return make_mock_channel_with(info) disp.node_service.list = mocker.Mock(return_value=make_mock_channel_with( *running_apps_list)) disp.node_service.info = mocker.Mock(side_effect=info_mock) yield disp.process_loop(MockSemaphore()) yield disp.control_queue.get() disp.control_queue.task_done() for state, running_list, version in state_input: if not state: continue command = yield disp.control_queue.get() disp.control_queue.task_done() state_apps = set(state.iterkeys()) running_list_set = set(running_list) assert command.to_stop == running_list_set - state_apps assert command.to_run == state_apps - running_list_set normalized_state = { app: burlak.StateRecord(val['workers'], val['profile']) for app, val in state.iteritems() } assert command.state == normalized_state
def test_state_subscribe_input(acq, mocker): stop_side_effect = [True for _ in states_list] stop_side_effect.append(True) stop_side_effect.append(False) mocker.patch.object(burlak.LoopSentry, 'should_run', side_effect=stop_side_effect) unicorn = mocker.Mock() unicorn.subscribe = mocker.Mock( side_effect=[make_mock_channel_with(*states_list)]) init_state = True # `uuid` first message for state, ver in states_list: yield acq.subscribe_to_state_updates(unicorn) if init_state: inp = yield acq.input_queue.get() acq.input_queue.task_done() assert isinstance(inp, burlak.DumpCommittedState) init_state = False inp = yield acq.input_queue.get() acq.input_queue.task_done() assert isinstance(inp, burlak.StateUpdateMessage) awaited_state = { app: burlak.StateRecord(val['workers'], val['profile']) for app, val in state.iteritems() } assert inp.state == awaited_state assert inp.version == ver
import pytest from tornado import queues from .common import ASYNC_TESTS_TIMEOUT, \ make_logger_mock, make_mock_channel_with, make_mock_channels_list_with to_stop_apps = [ ['app3', 'app4', 'app5', 'app6', 'app7'], ['app2', 'app3'], ['app3'], ] to_run_apps = [ dict(run3=burlak.StateRecord(3, 't1')), dict( run2=burlak.StateRecord(2, 't2'), run3=burlak.StateRecord(3, 't3'), run4=burlak.StateRecord(4, 't4'), ), dict( run3=burlak.StateRecord(3, 't3'), run4=burlak.StateRecord(4, 't4'), run5=burlak.StateRecord(5, 't5'), run6=burlak.StateRecord(6, 't6'), run7=burlak.StateRecord(7, 't7'), ), dict(), ]