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:])
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
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
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
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