def assert_files_cleaned(project,
                         instance_names=[],
                         stateboard=False,
                         logs=None,
                         exp_res_log='OK',
                         log_dir=DEFAULT_LOG_DIR,
                         data_dir=DEFAULT_DATA_DIR,
                         run_dir=DEFAULT_RUN_DIR):
    instance_ids = [
        get_instance_id(project.name, instance_name)
        for instance_name in instance_names
    ]
    if stateboard:
        instance_ids.append(get_stateboard_name(project.name))

    if logs is not None:
        assert_clean_logs(logs, project, instance_names, stateboard,
                          exp_res_log)

    for instance_id in instance_ids:
        instance_files = get_instance_files(project, instance_id, log_dir,
                                            data_dir, run_dir)

        for file_type, path in instance_files.items():
            if file_type in FILES_TO_BE_DELETED:
                assert not os.path.exists(path)
            else:
                assert os.path.exists(path)
def test_log_by_name(start_stop_cli, project_with_patched_init):
    project = project_with_patched_init
    cli = start_stop_cli

    patch_init_to_log_lines(project, LOG_LINES)

    INSTANCE1 = 'instance-1'
    INSTANCE2 = 'instance-2'

    ID1 = get_instance_id(project.name, INSTANCE1)
    ID2 = get_instance_id(project.name, INSTANCE2)
    STATEBOARD_ID = get_stateboard_name(project.name)

    # start instance-1 and instance-2
    cli.start(project, [INSTANCE1, INSTANCE2], stateboard=True, daemonized=True)
    check_instances_running(cli, project, [INSTANCE1, INSTANCE2], stateboard=True, daemonized=True)

    # get logs w/o stateboard
    logs = cli.get_logs(project, [INSTANCE1, INSTANCE2])
    assert len(logs) == 2
    assert_instance_logs(logs, ID1, LOG_LINES)
    assert_instance_logs(logs, ID2, LOG_LINES)

    # get logs w/ stateboard
    logs = cli.get_logs(project, [INSTANCE1, INSTANCE2], stateboard=True)
    assert len(logs) == 3
    assert_instance_logs(logs, ID1, LOG_LINES)
    assert_instance_logs(logs, ID2, LOG_LINES)
    assert_instance_logs(logs, STATEBOARD_ID, LOG_LINES)

    # get logs stateboard-only
    logs = cli.get_logs(project, stateboard_only=True)
    assert len(logs) == 1
    assert_instance_logs(logs, STATEBOARD_ID, LOG_LINES)
def test_log_last_n_lines(start_stop_cli, project_with_patched_init):
    project = project_with_patched_init
    cli = start_stop_cli

    log_lines = ["I am log line number {}".format(i) for i in range(DEFAULT_LAST_N_LINES+5)]

    patch_init_to_log_lines(project, log_lines)

    INSTANCE1 = 'instance-1'
    INSTANCE2 = 'instance-2'

    ID1 = get_instance_id(project.name, INSTANCE1)
    ID2 = get_instance_id(project.name, INSTANCE2)
    STATEBOARD_ID = get_stateboard_name(project.name)

    # start instance-1 and instance-2
    cli.start(project, [INSTANCE1, INSTANCE2], stateboard=True, daemonized=True)
    check_instances_running(cli, project, [INSTANCE1, INSTANCE2], stateboard=True, daemonized=True)

    # get logs w/o -n
    logs = cli.get_logs(project, [INSTANCE1, INSTANCE2], stateboard=True)
    assert len(logs) == 3
    assert_instance_logs(logs, ID1, log_lines[-DEFAULT_LAST_N_LINES:])
    assert_instance_logs(logs, ID2, log_lines[-DEFAULT_LAST_N_LINES:])
    assert_instance_logs(logs, STATEBOARD_ID, log_lines[-DEFAULT_LAST_N_LINES:])

    # get logs w/ -n > log lines count
    logs = cli.get_logs(project, [INSTANCE1, INSTANCE2], stateboard=True, n=len(log_lines)*2)
    assert len(logs) == 3
    assert_instance_logs(logs, ID1, log_lines)
    assert_instance_logs(logs, ID2, log_lines)
    assert_instance_logs(logs, STATEBOARD_ID, log_lines)

    # get logs w/ -n0
    logs = cli.get_logs(project, [INSTANCE1, INSTANCE2], stateboard=True, n=0)
    assert len(logs) == 3
    assert_instance_logs(logs, ID1, log_lines)
    assert_instance_logs(logs, ID2, log_lines)
    assert_instance_logs(logs, STATEBOARD_ID, log_lines)

    # get logs w/ -n1
    logs = cli.get_logs(project, [INSTANCE1, INSTANCE2], stateboard=True, n=1)
    assert len(logs) == 3
    assert_instance_logs(logs, ID1, log_lines[-1:])
    assert_instance_logs(logs, ID2, log_lines[-1:])
    assert_instance_logs(logs, STATEBOARD_ID, log_lines[-1:])

    # get logs w/ -n5
    logs = cli.get_logs(project, [INSTANCE1, INSTANCE2], stateboard=True, n=5)
    assert len(logs) == 3
    assert_instance_logs(logs, ID1, log_lines[-5:])
    assert_instance_logs(logs, ID2, log_lines[-5:])
    assert_instance_logs(logs, STATEBOARD_ID, log_lines[-5:])

    # get logs w/ -n -5
    logs = cli.get_logs(project, [INSTANCE1, INSTANCE2], stateboard=True, n=5)
    assert len(logs) == 3
    assert_instance_logs(logs, ID1, log_lines[-5:])
    assert_instance_logs(logs, ID2, log_lines[-5:])
    assert_instance_logs(logs, STATEBOARD_ID, log_lines[-5:])
Beispiel #4
0
def test_start_stop_status_run_dir(start_stop_cli, project_with_patched_init):
    project = project_with_patched_init
    cli = start_stop_cli

    INSTANCE1 = 'instance-1'
    INSTANCE2 = 'instance-2'

    ID1 = get_instance_id(project.name, INSTANCE1)
    ID2 = get_instance_id(project.name, INSTANCE2)
    STATEBOARD_ID = get_stateboard_name(project.name)

    RUN_DIR = 'my-run'

    status = cli.get_status(project, [INSTANCE1, INSTANCE2], stateboard=True, run_dir=RUN_DIR)
    assert status.get(ID1) == STATUS_NOT_STARTED
    assert status.get(ID2) == STATUS_NOT_STARTED

    cli.start(project, [INSTANCE1], stateboard=True, daemonized=True, run_dir=RUN_DIR)
    check_instances_running(cli, project, [INSTANCE1], stateboard=True, run_dir=RUN_DIR, daemonized=True)

    status = cli.get_status(project, [INSTANCE1, INSTANCE2], stateboard=True, run_dir=RUN_DIR)
    assert len(status) == 3
    assert status.get(ID1) == STATUS_RUNNING
    assert status.get(ID2) == STATUS_NOT_STARTED
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING

    cli.stop(project, [INSTANCE1], stateboard=True, run_dir=RUN_DIR)
    check_instances_stopped(cli, project, [INSTANCE1], stateboard=True, run_dir=RUN_DIR)

    status = cli.get_status(project, [INSTANCE1, INSTANCE2], stateboard=True, run_dir=RUN_DIR)
    assert len(status) == 3
    assert status.get(ID1) == STATUS_STOPPED
    assert status.get(ID2) == STATUS_NOT_STARTED
    assert status.get(STATEBOARD_ID) == STATUS_STOPPED
Beispiel #5
0
def test_start_with_timeout(start_stop_cli, project_with_patched_init):
    project = project_with_patched_init
    cli = start_stop_cli

    TIMEOUT_SECONDS = 2

    patch_init_to_send_ready_after_timeout(project, TIMEOUT_SECONDS)
    # patch_init_to_log_signals(project)

    INSTANCE1 = 'instance-1'
    INSTANCE2 = 'instance-2'

    ID1 = get_instance_id(project.name, INSTANCE1)
    ID2 = get_instance_id(project.name, INSTANCE2)
    STATEBOARD_ID = get_stateboard_name(project.name)

    # start w/ timeout > TIMEOUT_SECONDS
    cli.terminate()
    cli.start(
        project, [INSTANCE1, INSTANCE2], daemonized=True, stateboard=True,
        timeout="{}s".format(TIMEOUT_SECONDS+1)
    )
    check_instances_running(cli, project, [INSTANCE1, INSTANCE2], daemonized=True, stateboard=True)

    # start w/ timeout < TIMEOUT_SECONDS
    cli.terminate()
    logs = cli.start(
        project, [INSTANCE1, INSTANCE2], daemonized=True, stateboard=True,
        timeout="{}s".format(TIMEOUT_SECONDS-1),
        capture_output=True, exp_rc=1,
    )
    check_instances_stopped(cli, project, [INSTANCE1, INSTANCE2], stateboard=True)
    for instance_id in [ID1, ID2, STATEBOARD_ID]:
        assert any([re.search(r"%s:.+Timeout was reached" % instance_id, msg) is not None for msg in logs])

    # start w/ timeout 0s
    cli.terminate()
    logs = cli.start(
        project, [INSTANCE1, INSTANCE2], daemonized=True, stateboard=True,
        timeout="{}s".format(0),
        capture_output=True,
    )
    check_instances_running(cli, project, [INSTANCE1, INSTANCE2], daemonized=True, stateboard=True)
    for instance_id in [ID1, ID2, STATEBOARD_ID]:
        assert all([re.search(r"%s:.+Timeout was reached" % instance_id, msg) is None for msg in logs])
def assert_clean_logs(logs,
                      project,
                      instance_names=[],
                      stateboard=False,
                      exp_res='OK'):
    instance_ids = [
        get_instance_id(project.name, instance_name)
        for instance_name in instance_names
    ]
    if stateboard:
        instance_ids.append(get_stateboard_name(project.name))

    assert len(logs) == len(instance_ids)
    assert all([log_line.endswith(exp_res) for log_line in logs])
    assert all([
        any([log_line.startswith(instance_id) for log_line in logs])
        for instance_id in instance_ids
    ])
def assert_files_exists(project,
                        instance_names=[],
                        stateboard=False,
                        log_dir=DEFAULT_LOG_DIR,
                        data_dir=DEFAULT_DATA_DIR,
                        run_dir=DEFAULT_RUN_DIR):
    instance_ids = [
        get_instance_id(project.name, instance_name)
        for instance_name in instance_names
    ]
    if stateboard:
        instance_ids.append(get_stateboard_name(project.name))

    for instance_id in instance_ids:
        instance_files = get_instance_files(project, instance_id, log_dir,
                                            data_dir, run_dir)

        for _, path in instance_files.items():
            assert os.path.exists(path)
def create_instances_files(project,
                           instance_names=[],
                           log_dir=DEFAULT_LOG_DIR,
                           data_dir=DEFAULT_DATA_DIR,
                           run_dir=DEFAULT_RUN_DIR):
    instance_ids = [
        get_instance_id(project.name, instance_name)
        for instance_name in instance_names
    ]
    instance_ids.append(get_stateboard_name(project.name))

    for instance_id in instance_ids:
        instance_files = get_instance_files(project, instance_id, log_dir,
                                            data_dir, run_dir)

        for _, path in instance_files.items():
            if not os.path.exists(path):
                basepath = os.path.dirname(path)
                os.makedirs(basepath, exist_ok=True)
                with open(path, 'w') as f:
                    f.write('')
def get_instances_from_conf(project):
    res = dict()

    with open(os.path.join(project.path, DEFAULT_CFG)) as f:
        conf = yaml.safe_load(f)

    for instance_id, instance_conf in conf.items():
        if instance_id == get_stateboard_name(project.name):
            continue

        id_parts = instance_id.split(".")
        assert len(id_parts) == 2
        assert id_parts[0] == project.name

        assert 'http_port' in instance_conf
        assert 'workdir' in instance_conf
        assert 'advertise_uri' in instance_conf

        assert instance_id not in res
        res[instance_id] = instance_conf

    return res
Beispiel #10
0
def test_status_from_conf(start_stop_cli, project_with_patched_init):
    project = project_with_patched_init
    cli = start_stop_cli

    INSTANCE1 = 'instance-1'
    INSTANCE2 = 'instance-2'

    ID1 = get_instance_id(project.name, INSTANCE1)
    ID2 = get_instance_id(project.name, INSTANCE2)
    STATEBOARD_ID = get_stateboard_name(project.name)

    write_conf(os.path.join(project.path, DEFAULT_CFG), {
        ID1: {},
        ID2: {},
    })

    # get status w/o stateboard
    status = cli.get_status(project)
    assert len(status) == 2
    assert status.get(ID1) == STATUS_NOT_STARTED
    assert status.get(ID2) == STATUS_NOT_STARTED

    # get status w/ stateboard
    status = cli.get_status(project, stateboard=True)
    assert len(status) == 3
    assert status.get(ID1) == STATUS_NOT_STARTED
    assert status.get(ID2) == STATUS_NOT_STARTED
    assert status.get(STATEBOARD_ID) == STATUS_NOT_STARTED

    # get status stateboard-only
    status = cli.get_status(project, stateboard_only=True)
    assert len(status) == 1
    assert status.get(STATEBOARD_ID) == STATUS_NOT_STARTED

    # start instance-1 and stateboard
    cli.start(project, [INSTANCE1], stateboard=True, daemonized=True)
    check_instances_running(cli, project, [INSTANCE1], stateboard=True, daemonized=True)

    # get status w/o stateboard
    status = cli.get_status(project)
    assert len(status) == 2
    assert status.get(ID1) == STATUS_RUNNING
    assert status.get(ID2) == STATUS_NOT_STARTED

    # get status w/ stateboard
    status = cli.get_status(project, stateboard=True)
    assert len(status) == 3
    assert status.get(ID1) == STATUS_RUNNING
    assert status.get(ID2) == STATUS_NOT_STARTED
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING

    # get status stateboard-only
    status = cli.get_status(project, stateboard_only=True)
    assert len(status) == 1
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING

    # stop instance-1
    cli.stop(project, [INSTANCE1])

    # get status w/o stateboard
    status = cli.get_status(project)
    assert len(status) == 2
    assert status.get(ID1) == STATUS_STOPPED
    assert status.get(ID2) == STATUS_NOT_STARTED

    # get status w/ stateboard
    status = cli.get_status(project, stateboard=True)
    assert len(status) == 3
    assert status.get(ID1) == STATUS_STOPPED
    assert status.get(ID2) == STATUS_NOT_STARTED
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING

    # get status stateboard-only
    status = cli.get_status(project, stateboard_only=True)
    assert len(status) == 1
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING
Beispiel #11
0
def test_status_by_id(cartridge_cmd, project_with_patched_init):
    project = project_with_patched_init
    cli = Cli(cartridge_cmd)

    ID1 = get_instance_id(project.name, 'instance-1')
    # ID2 = get_instance_id(project.name, 'instance-2')
    STATEBOARD_ID = get_stateboard_name(project.name)

    # get status w/o stateboard
    status = cli.get_status(project, [ID1])
    assert len(status) == 1
    assert status.get(ID1) == STATUS_NOT_STARTED
    # assert status.get(ID2) == STATUS_NOT_STARTED

    # get status w/ stateboard
    status = cli.get_status(project, [ID1], stateboard=True)
    assert len(status) == 2
    assert status.get(ID1) == STATUS_NOT_STARTED
    assert status.get(STATEBOARD_ID) == STATUS_NOT_STARTED

    # get status stateboard-only
    status = cli.get_status(project, stateboard_only=True)
    assert len(status) == 1
    assert status.get(STATEBOARD_ID) == STATUS_NOT_STARTED

    # start instance-1 and stateboard
    cli.start(project, [ID1], stateboard=True, daemonized=True)
    wait_instances(cli, project, [ID1], stateboard=True)

    # get status w/o stateboard
    status = cli.get_status(project, [ID1])
    assert len(status) == 1
    assert status.get(ID1) == STATUS_RUNNING

    # get status w/ stateboard
    status = cli.get_status(project, [ID1], stateboard=True)
    assert len(status) == 2
    assert status.get(ID1) == STATUS_RUNNING
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING

    # get status stateboard-only
    status = cli.get_status(project, stateboard_only=True)
    assert len(status) == 1
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING

    # stop instance-1
    cli.stop(project, [ID1])

    # get status w/o stateboard
    status = cli.get_status(project, [ID1])
    assert len(status) == 1
    assert status.get(ID1) == STATUS_STOPPED

    # get status w/ stateboard
    status = cli.get_status(project, [ID1], stateboard=True)
    assert len(status) == 2
    assert status.get(ID1) == STATUS_STOPPED
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING

    # get status stateboard-only
    status = cli.get_status(project, stateboard_only=True)
    assert len(status) == 1
    assert status.get(STATEBOARD_ID) == STATUS_RUNNING