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
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