Ejemplo n.º 1
0
def test_chronos_rerun_main_with_independent_job(
    mock_load_system_paasta_config,
    mock_load_chronos_config,
    mock_get_chronos_client,
    mock_read_chronos_jobs_for_service,
    mock_read_services_configuration,
    mock_load_deployments_json,
    mock_create_complete_config,
    mock_remove_parents,
    mock_get_job_type,
    mock_clone_job,
    cluster,
    service,
    instance,
    run_all_related_jobs,
    is_dependent_job,
):
    mock_load_system_paasta_config.return_value.get_cluster.return_value = cluster

    generic_config_dict = {
        'bounce_method': 'graceful',
        'cmd': '/bin/sleep 40',
        'epsilon': 'PT30M',
        'retries': 5,
        'cpus': 5.5,
        'mem': 1024.4,
        'disk': 1234.5,
        'disabled': False,
        'schedule_time_zone': 'Zulu',
        'monitoring': {
            'fake_monitoring_info': 'fake_monitoring_value'
        },
    }

    def gen_scheduled_job():
        return dict(schedule='R/2015-03-25T19:36:35Z/PT5M',
                    **generic_config_dict)

    def gen_dependent_job(service, instance):
        return dict(parents='{}.{}'.format(service, instance),
                    **generic_config_dict)

    mock_read_services_configuration.return_value = [service]
    mock_read_chronos_jobs_for_service.return_value = {
        'test_independent_instance_1':
        gen_scheduled_job(),
        'test_dependent_instance_1':
        gen_scheduled_job(),
        'test_dependent_instance_2':
        gen_dependent_job(service, 'test_dependent_instance_1'),
    }

    mock_load_deployments_json.return_value.get_branch_dict.side_effect = lambda service, *args, **kwargs: {
        'desired_state': 'start',
        'docker_image': 'paasta-{}-{}'.format(service, cluster),
    }

    if is_dependent_job:
        mock_get_job_type.return_value = chronos_tools.JobType.Dependent
    else:
        mock_get_job_type.return_value = chronos_tools.JobType.Scheduled

    execution_date = datetime.datetime.now().replace(microsecond=0)

    testargs = ['chronos_rerun']
    if run_all_related_jobs:
        testargs.append('--run-all-related-jobs')
    testargs.extend(
        ['{} {}'.format(service, instance),
         execution_date.isoformat()])

    with mock.patch.object(sys, 'argv', testargs):
        chronos_rerun.main()

    if not run_all_related_jobs:
        # remove_parents should not be called if the job is not a dependent job
        assert mock_remove_parents.call_count == (1 if is_dependent_job else 0)
        assert mock_get_chronos_client.return_value.add.call_count == 1
    else:
        assert mock_remove_parents.call_count == 0
        assert mock_get_chronos_client.return_value.add.call_count == 2
Ejemplo n.º 2
0
def test_chronos_rerun_main_with_independent_job(
    mock_load_system_paasta_config,
    mock_load_chronos_config,
    mock_get_chronos_client,
    mock_read_chronos_jobs_for_service,
    mock_read_services_configuration,
    mock_load_v2_deployments_json,
    mock_create_complete_config,
    mock_remove_parents,
    mock_get_job_type,
    mock_modify_command_for_date,
    mock_clone_job,
    cluster,
    service,
    instance,
    run_all_related_jobs,
    is_dependent_job,
):
    mock_load_system_paasta_config.return_value.get_cluster.return_value = cluster

    generic_config_dict = {
        "bounce_method": "graceful",
        "cmd": "/bin/sleep 40",
        "epsilon": "PT30M",
        "retries": 5,
        "cpus": 5.5,
        "mem": 1024.4,
        "disk": 1234.5,
        "disabled": False,
        "schedule_time_zone": "Zulu",
        "monitoring": {
            "fake_monitoring_info": "fake_monitoring_value"
        },
    }

    def gen_scheduled_job():
        return dict(schedule="R/2015-03-25T19:36:35Z/PT5M",
                    **generic_config_dict)

    def gen_dependent_job(service, instance):
        return dict(parents=f"{service}.{instance}", **generic_config_dict)

    mock_read_services_configuration.return_value = [service]
    mock_read_chronos_jobs_for_service.return_value = {
        "test_independent_instance_1":
        gen_scheduled_job(),
        "test_dependent_instance_1":
        gen_scheduled_job(),
        "test_dependent_instance_2":
        gen_dependent_job(service, "test_dependent_instance_1"),
    }

    mock_load_v2_deployments_json.return_value.get_branch_dict.side_effect = lambda service, *args, **kwargs: {
        "desired_state": "start",
        "docker_image": f"paasta-{service}-{cluster}",
    }

    if is_dependent_job:
        mock_get_job_type.return_value = chronos_tools.JobType.Dependent
    else:
        mock_get_job_type.return_value = chronos_tools.JobType.Scheduled

    execution_date = datetime.datetime.now().replace(microsecond=0)

    testargs = ["chronos_rerun"]
    if run_all_related_jobs:
        testargs.append("--run-all-related-jobs")
    testargs.extend([f"{service} {instance}", execution_date.isoformat()])

    with mock.patch.object(sys, "argv", testargs):
        chronos_rerun.main()

    if not run_all_related_jobs:
        # remove_parents should not be called if the job is not a dependent job
        assert mock_remove_parents.call_count == (1 if is_dependent_job else 0)
        assert mock_get_chronos_client.return_value.add.call_count == 1
    else:
        assert mock_remove_parents.call_count == 0
        assert mock_get_chronos_client.return_value.add.call_count == 2