Esempio n. 1
0
def test_failing_chronos_job_missing_parent(
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters,
    mock_get_services_for_cluster,
    capfd,
):
    fake_service = 'fake-service'
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'
    chronos_spacer = paasta_tools.chronos_tools.INTERNAL_SPACER

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.get_parents.return_value = [
        "{}{}{}".format(fake_service, chronos_spacer, 'parent-1')
    ]
    mock_chronos_job.validate.return_value = (True, [])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', fake_service)
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_get_services_for_cluster.return_value = [(fake_service, fake_instance)
                                                  ]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert not validate_chronos('fake_service_path')

    output, _ = capfd.readouterr()
    expected_output = 'Parent job fake-service.parent-1 could not be found'
    assert invalid_chronos_instance(fake_cluster, fake_instance,
                                    expected_output) in output
Esempio n. 2
0
def test_validate_chronos_valid_instance(
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters,
    mock_get_services_for_cluster,
    capfd,
):
    fake_service = 'fake-service'
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.get_parents.return_value = None
    mock_chronos_job.validate.return_value = (True, [])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', fake_service)
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_get_services_for_cluster.return_value = [(fake_service, fake_instance)
                                                  ]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert validate_chronos('fake_service_path')

    output, _ = capfd.readouterr()
    assert valid_chronos_instance(fake_cluster, fake_instance) in output
Esempio n. 3
0
def test_failing_chronos_job_validate(
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters,
    mock_get_services_for_cluster,
    capfd,
):
    fake_service = 'fake-service'
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.get_parents.return_value = None
    mock_chronos_job.validate.return_value = (False, [
        'something is wrong with the config'
    ])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', fake_service)
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_get_services_for_cluster.return_value = [(fake_service, fake_instance)
                                                  ]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert not validate_chronos('fake_service_path')

    output, _ = capfd.readouterr()
    expected_output = 'something is wrong with the config'
    assert invalid_chronos_instance(fake_cluster, fake_instance,
                                    expected_output) in output
Esempio n. 4
0
def test_failing_chronos_job_self_dependent(
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters,
    mock_get_services_for_cluster,
    capfd,
):
    fake_service = 'fake-service'
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'
    chronos_spacer = paasta_tools.chronos_tools.INTERNAL_SPACER

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.get_parents.return_value = [
        f"{fake_service}{chronos_spacer}{fake_instance}"
    ]
    mock_chronos_job.validate.return_value = (True, [])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', fake_service)
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_get_services_for_cluster.return_value = [(fake_service, fake_instance)
                                                  ]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert not validate_chronos('fake_service_path')

    output, _ = capfd.readouterr()
    expected_output = 'Job fake-service.fake-instance cannot depend on itself'
    assert invalid_chronos_instance(fake_cluster, fake_instance,
                                    expected_output) in output
Esempio n. 5
0
def test_failing_chronos_job_missing_parent(
    mock_stdout,
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters,
    mock_get_services_for_cluster
):
    fake_service = 'fake-service'
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'
    chronos_spacer = paasta_tools.chronos_tools.INTERNAL_SPACER

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.get_parents.return_value = ["%s%s%s" % (fake_service, chronos_spacer, 'parent-1')]
    mock_chronos_job.validate.return_value = (True, [])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', fake_service)
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_get_services_for_cluster.return_value = [(fake_service, fake_instance)]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert not validate_chronos('fake_service_path')

    output = mock_stdout.getvalue()

    expected_output = 'Parent job fake-service.parent-1 could not be found'
    assert invalid_chronos_instance(fake_cluster, fake_instance, expected_output) in output
Esempio n. 6
0
def test_validate_chronos_valid_instance(
    mock_stdout,
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters,
    mock_get_services_for_cluster
):
    fake_service = 'fake-service'
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.get_parents.return_value = None
    mock_chronos_job.validate.return_value = (True, [])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', fake_service)
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_get_services_for_cluster.return_value = [(fake_service, fake_instance)]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert validate_chronos('fake_service_path')

    output = mock_stdout.getvalue()

    assert valid_chronos_instance(fake_cluster, fake_instance) in output
Esempio n. 7
0
def test_validate_chronos_tmp_job(mock_stdout, mock_path_to_soa_dir_service):
    mock_path_to_soa_dir_service.return_value = ("fake_soa_dir", "tmp")
    assert validate_chronos("fake_path/tmp") is False
    assert (
        "Services using scheduled tasks cannot be named tmp, as it clashes"
        " with the identifier used for temporary jobs"
    ) in mock_stdout.getvalue()
Esempio n. 8
0
def test_failing_chronos_job_validate(
    mock_stdout,
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters,
    mock_get_services_for_cluster
):
    fake_service = 'fake-service'
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.get_parents.return_value = None
    mock_chronos_job.validate.return_value = (False, ['something is wrong with the config'])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', fake_service)
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_get_services_for_cluster.return_value = [(fake_service, fake_instance)]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert not validate_chronos('fake_service_path')

    output = mock_stdout.getvalue()

    expected_output = 'something is wrong with the config'
    assert invalid_chronos_instance(fake_cluster, fake_instance, expected_output) in output
Esempio n. 9
0
def test_failing_chronos_job_self_dependent(
    mock_stdout,
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters,
    mock_get_services_for_cluster,
):
    fake_service = "fake-service"
    fake_instance = "fake-instance"
    fake_cluster = "penguin"
    chronos_spacer = paasta_tools.chronos_tools.INTERNAL_SPACER

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.get_parents.return_value = ["%s%s%s" % (fake_service, chronos_spacer, fake_instance)]
    mock_chronos_job.validate.return_value = (True, [])

    mock_path_to_soa_dir_service.return_value = ("fake_soa_dir", fake_service)
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_get_services_for_cluster.return_value = [(fake_service, fake_instance)]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert not validate_chronos("fake_service_path")

    output = mock_stdout.getvalue()

    expected_output = "Job fake-service.fake-instance cannot depend on itself"
    assert invalid_chronos_instance(fake_cluster, fake_instance, expected_output) in output
Esempio n. 10
0
def test_validate_chronos_tmp_job(mock_path_to_soa_dir_service, capfd):
    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', 'tmp')
    assert validate_chronos('fake_path/tmp') is False
    assert (
        "Services using scheduled tasks cannot be named tmp, as it clashes"
        " with the identifier used for temporary jobs"
    ) in \
        capfd.readouterr()[0]
Esempio n. 11
0
def test_validate_chronos_tmp_job(
    mock_stdout,
    mock_path_to_soa_dir_service,
):
    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', 'tmp')
    assert validate_chronos('fake_path/tmp') is False
    assert ("Services using scheduled tasks cannot be named tmp, as it clashes"
            " with the identifier used for temporary jobs") in \
        mock_stdout.getvalue().decode('utf-8')
Esempio n. 12
0
def test_validate_chronos_invalid_instance(
    mock_stdout,
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters
):
    fake_service = 'test-service'
    fake_instance = 'fake-instance'
    fake_job_name = 'test'
    fake_cluster = 'penguin'
    fake_monitoring_info = {'fake_monitoring_info': 'fake_monitoring_value'}
    fake_config_dict = {
        'bounce_method': 'graceful',
        'cmd': '/bin/sleep 40',
        'epsilon': 'PT30M',
        'retries': 5,
        'cpus': 5.5,
        'mem': 1024.4,
        'disabled': True,
        'schedule': 'P1DT09:00:00',
        'schedule_time_zone': 'Zulu',
        'monitoring': fake_monitoring_info,
    }
    fake_branch_dict = {
        'desired_state': 'start',
        'docker_image': 'paasta-%s-%s' % (fake_service, fake_cluster),
    }
    fake_chronos_job_config = ChronosJobConfig(fake_service,
                                               fake_job_name,
                                               fake_config_dict,
                                               fake_branch_dict)

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', 'fake_service')
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_load_chronos_job_config.return_value = fake_chronos_job_config

    assert validate_chronos('fake_service_path') == 1

    output = mock_stdout.getvalue()

    expected_output = 'The specified schedule "%s" is invalid' % \
        fake_config_dict['schedule']
    assert invalid_chronos_instance(fake_cluster, fake_instance, expected_output) in output
Esempio n. 13
0
def test_validate_chronos_valid_instance(
    mock_stdout,
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters
):
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.validate.return_value = (True, [])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', 'fake_service')
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert validate_chronos('fake_service_path') == 0

    output = mock_stdout.getvalue()

    assert valid_chronos_instance(fake_cluster, fake_instance) in output
Esempio n. 14
0
def test_failing_chronos_job_validate(
    mock_stdout,
    mock_path_to_soa_dir_service,
    mock_load_chronos_job_config,
    mock_list_all_instances_for_service,
    mock_list_clusters
):
    fake_instance = 'fake-instance'
    fake_cluster = 'penguin'

    mock_chronos_job = mock.Mock(autospec=True)
    mock_chronos_job.validate.return_value = (False, ['something is wrong with the config'])

    mock_path_to_soa_dir_service.return_value = ('fake_soa_dir', 'fake_service')
    mock_list_clusters.return_value = [fake_cluster]
    mock_list_all_instances_for_service.return_value = [fake_instance]
    mock_load_chronos_job_config.return_value = mock_chronos_job

    assert validate_chronos('fake_service_path') == 1

    output = mock_stdout.getvalue()

    expected_output = 'something is wrong with the config'
    assert invalid_chronos_instance(fake_cluster, fake_instance, expected_output) in output