Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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(),
]