Example #1
0
def test_sensu_message_status_stuck(mock_job_is_stuck,
                                    mock_chronos_job_config):
    fake_schedule = '* 1 * * *'
    chronos_client = None

    fake_job = {
        'name': 'fake_job_id',
        'disabled': False,
        'lastSuccess':
        (datetime.now(pytz.utc) - timedelta(hours=25)).isoformat(),
        'schedule': fake_schedule,
    }
    mock_chronos_job_config.get_schedule_interval_in_seconds.return_value = 60 * 60 * 24
    mock_chronos_job_config.get_schedule.return_value = fake_schedule
    mock_chronos_job_config.get_schedule_time_zone.return_value = 'America/Los_Angeles'

    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        mock_chronos_job_config,
        fake_job,
        chronos_client,
    )
    assert status == pysensu_yelp.Status.CRITICAL
    assert ("Job myservice.myinstance with schedule {}"
            " (America/Los_Angeles)").format(fake_schedule) in output
    assert "paasta logs -s myservice -i myinstance -c mycluster" in output
    assert "and is configured to run every 24h." in output
Example #2
0
def test_sensu_message_status_disabled():
    fake_job_state_pairs = [({'name': 'fake_job_id', 'disabled': True}, chronos_tools.LastRunState.Fail)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        Mock(), 'myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Job myservice.myinstance is disabled - ignoring status."
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK
Example #3
0
def test_sensu_message_status_fail():
    fake_job_id = 'full_job_id'
    fake_job_state_pairs = [({'name': fake_job_id}, chronos_tools.LastRunState.Fail)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs('myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Last run of job myservice.myinstance Failed - job id %s" % fake_job_id
    assert output == expected_output
    assert status == pysensu_yelp.Status.CRITICAL
def test_sensu_message_status_fail():
    fake_job_id = 'full_job_id'
    fake_job_state_pairs = [({'name': fake_job_id}, chronos_tools.LastRunState.Fail)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs('myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Last run of job myservice.myinstance Failed - job id %s" % fake_job_id
    assert output == expected_output
    assert status == pysensu_yelp.Status.CRITICAL
def test_sensu_message_status_disabled():
    fake_job_state_pairs = [({'name': 'fake_job_id', 'disabled': True}, chronos_tools.LastRunState.Fail)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        Mock(), 'myservice', 'myinstance', 'mycluster', fake_job_state_pairs)
    expected_output = "Job myservice.myinstance is disabled - ignoring status."
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK
Example #6
0
def test_sensu_message_status_ok():
    fake_job_state_pairs = [({'name': 'full_job_id', 'disabled': False}, chronos_tools.LastRunState.Success)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        Mock(), 'myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Last run of job myservice.myinstance Succeded"
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK
Example #7
0
def test_sensu_message_status_no_run():
    fake_job_state_pairs = []
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        'myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Warning: myservice.myinstance isn't in chronos at all, which means it may not be deployed yet"
    assert output == expected_output
    assert status == pysensu_yelp.Status.WARNING
def test_sensu_message_status_ok():
    fake_job_state_pairs = [({'name': 'full_job_id', 'disabled': False}, chronos_tools.LastRunState.Success)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        Mock(), 'myservice', 'myinstance', 'cluster', fake_job_state_pairs)
    expected_output = "Last run of job myservice.myinstance Succeded"
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK
def test_sensu_message_status_fail(mock_message_for_status):
    mock_message_for_status.return_value = 'my failure message'
    fake_job_id = 'full_job_id'
    fake_job_state_pairs = [({'name': fake_job_id, 'disabled': False}, chronos_tools.LastRunState.Fail)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        Mock(), 'myservice', 'myinstance', 'mycluster', fake_job_state_pairs)
    assert output == 'my failure message'
    assert status == pysensu_yelp.Status.CRITICAL
def test_sensu_message_status_fail(mock_message_for_status):
    mock_message_for_status.return_value = 'my failure message'
    fake_job_id = 'full_job_id'
    fake_job_state_pairs = [({'name': fake_job_id, 'disabled': False}, chronos_tools.LastRunState.Fail)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        Mock(), 'myservice', 'myinstance', 'mycluster', fake_job_state_pairs)
    assert output == 'my failure message'
    assert status == pysensu_yelp.Status.CRITICAL
def test_sensu_message_status_disabled(mock_chronos_job_config):
    fake_job = {"name": "fake_job_id", "disabled": True}
    chronos_client = None

    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        mock_chronos_job_config, fake_job, chronos_client)
    assert output == "Job myservice.myinstance is disabled - ignoring status."
    assert status == pysensu_yelp.Status.OK
def test_sensu_message_status_for_jobs_too_many():
    fake_job_state_pairs = [({}, chronos_tools.LastRunState.Success), ({}, chronos_tools.LastRunState.Success)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs('myservice', 'myinstance', fake_job_state_pairs)
    expected_output = (
        "Unknown: somehow there was more than one enabled job for myservice.myinstance. "
        "Talk to the PaaSTA team as this indicates a bug"
    )
    assert output == expected_output
    assert status == pysensu_yelp.Status.UNKNOWN
Example #13
0
def test_sensu_message_status_no_run():
    fake_job_state_pairs = []
    with patch('paasta_tools.check_chronos_jobs.load_chronos_job_config', autospec=True,
               return_value=Mock(get_disabled=Mock(return_value=False))):
        output, status = check_chronos_jobs.sensu_message_status_for_jobs(
            Mock(get_disabled=Mock(return_value=False)), 'myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Warning: myservice.myinstance isn't in chronos at all, which means it may not be deployed yet"
    assert output == expected_output
    assert status == pysensu_yelp.Status.WARNING
Example #14
0
def test_sensu_message_status_no_run_disabled():
    fake_job_state_pairs = []
    with patch('paasta_tools.check_chronos_jobs.load_chronos_job_config', autospec=True,
               return_value=Mock(get_disabled=Mock(return_value=True))):
        output, status = check_chronos_jobs.sensu_message_status_for_jobs(
            Mock(), 'myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Job myservice.myinstance is disabled - ignoring status."
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK
def test_sensu_message_status_no_run():
    fake_job_state_pairs = []
    with patch('paasta_tools.check_chronos_jobs.load_chronos_job_config', autospec=True,
               return_value=Mock(get_disabled=Mock(return_value=False))):
        output, status = check_chronos_jobs.sensu_message_status_for_jobs(
            Mock(get_disabled=Mock(return_value=False)), 'myservice', 'myinstance', 'mycluster', fake_job_state_pairs)
    expected_output = "Warning: myservice.myinstance isn't in chronos at all, which means it may not be deployed yet"
    assert output == expected_output
    assert status == pysensu_yelp.Status.WARNING
Example #16
0
def test_sensu_message_status_for_jobs_too_many():
    fake_job_state_pairs = [({}, chronos_tools.LastRunState.Success), ({}, chronos_tools.LastRunState.Success)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs('myservice', 'myinstance', fake_job_state_pairs)
    expected_output = (
        "Unknown: somehow there was more than one enabled job for myservice.myinstance. "
        "Talk to the PaaSTA team as this indicates a bug"
    )
    assert output == expected_output
    assert status == pysensu_yelp.Status.UNKNOWN
def test_sensu_message_status_no_run_disabled():
    fake_job_state_pairs = []
    with patch('paasta_tools.check_chronos_jobs.load_chronos_job_config', autospec=True,
               return_value=Mock(get_disabled=Mock(return_value=True))):
        output, status = check_chronos_jobs.sensu_message_status_for_jobs(
            Mock(), 'myservice', 'myinstance', 'mycluster', fake_job_state_pairs)
    expected_output = "Job myservice.myinstance is disabled - ignoring status."
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK
Example #18
0
def test_sensu_message_rerun_status_ok(mock_job_is_stuck):
    mock_job_is_stuck.return_value = False
    fake_job = {'name': 'tmp-2017-06-13T123738942755 full_job_id',
                'disabled': True,
                'lastSuccess': '2016-07-26T22:02:00+00:00'}
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        Mock(get_schedule_interval_in_seconds=Mock(return_value=1)), 'myservice', 'myinstance', 'cluster', fake_job)
    expected_output = "Last run of job myservice.myinstance Succeded"
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK
Example #19
0
def test_sensu_message_status_fail(mock_message_for_status, mock_job_is_stuck):
    mock_job_is_stuck.return_value = False
    mock_message_for_status.return_value = 'my failure message'
    fake_job = {'name': 'full_job_id',
                'disabled': False,
                'lastError': '2016-07-26T22:03:00+00:00'}
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        Mock(get_schedule_interval_in_seconds=Mock(return_value=1)), 'myservice', 'myinstance', 'mycluster', fake_job)
    assert output == 'my failure message'
    assert status == pysensu_yelp.Status.CRITICAL
Example #20
0
def test_sensu_message_status_disabled():
    fake_job = {'name': 'fake_job_id', 'disabled': True}
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        chronos_job_config=Mock(),
        service='myservice',
        instance='myinstance',
        cluster='mycluster',
        chronos_job=fake_job)
    expected_output = "Job myservice.myinstance is disabled - ignoring status."
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK
def test_sensu_message_status_ok(mock_job_is_stuck, mock_chronos_job_config):
    mock_job_is_stuck.return_value = False
    fake_job = {
        "name": "full_job_id",
        "disabled": False,
        "lastSuccess": "2016-07-26T22:02:00+00:00",
    }
    mock_chronos_job_config.get_schedule_interval_in_seconds.return_value = 1
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        mock_chronos_job_config, fake_job, 0)
    assert output == "Last run of job myservice.myinstance Succeeded"
    assert status == pysensu_yelp.Status.OK
def test_sensu_message_status_no_run_disabled(mock_chronos_job_config):
    fake_job = None
    chronos_client = None

    with patch(
            "paasta_tools.check_chronos_jobs.load_chronos_job_config",
            autospec=True,
            return_value=Mock(get_disabled=Mock(return_value=True)),
    ):
        output, status = check_chronos_jobs.sensu_message_status_for_jobs(
            mock_chronos_job_config, fake_job, chronos_client)
    assert output == "Job myservice.myinstance is disabled - ignoring status."
    assert status == pysensu_yelp.Status.OK
def test_sensu_message_status_fail(mock_message_for_status, mock_job_is_stuck,
                                   mock_chronos_job_config):
    mock_job_is_stuck.return_value = False
    mock_message_for_status.return_value = "my failure message"
    fake_job = {
        "name": "full_job_id",
        "disabled": False,
        "lastError": "2016-07-26T22:03:00+00:00",
    }
    mock_chronos_job_config.get_schedule_interval_in_seconds.return_value = 1
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        mock_chronos_job_config, fake_job, 0)
    assert output == "my failure message"
    assert status == pysensu_yelp.Status.CRITICAL
Example #24
0
def test_sensu_message_rerun_status_ok(mock_job_is_stuck,
                                       mock_chronos_job_config):
    mock_job_is_stuck.return_value = False
    fake_job = {
        'name': 'tmp-2017-06-13T123738942755 full_job_id',
        'disabled': True,
        'lastSuccess': '2016-07-26T22:02:00+00:00',
    }
    mock_chronos_job_config.get_schedule_interval_in_seconds.return_value = 1
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        mock_chronos_job_config,
        fake_job,
        0,
    )
    assert output == "Last run of job myservice.myinstance Succeeded"
    assert status == pysensu_yelp.Status.OK
Example #25
0
def test_sensu_message_status_stuck():
    fake_job = {
        'name': 'fake_job_id',
        'disabled': False,
        'lastSuccess':
        (datetime.now(pytz.utc) - timedelta(hours=4)).isoformat(),
        'schedule': '* * * * *'
    }
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        chronos_job_config=Mock(
            get_schedule_interval_in_seconds=Mock(return_value=60 * 60 * 3),
            get_schedule=Mock(return_value='* * * * *')),
        service='myservice',
        instance='myinstance',
        cluster='mycluster',
        chronos_job=fake_job)
    assert status == pysensu_yelp.Status.CRITICAL
    assert "Job myservice.myinstance with schedule * * * * * hasn't run since " in output
    assert "paasta logs -s myservice -i myinstance -c mycluster" in output
    assert "and is configured to run every 180.0 minutes." in output
Example #26
0
def test_sensu_message_status_fail(
    mock_message_for_status,
    mock_job_is_stuck,
    mock_chronos_job_config,
):
    mock_job_is_stuck.return_value = False
    mock_message_for_status.return_value = 'my failure message'
    fake_job = {
        'name': 'full_job_id',
        'disabled': False,
        'lastError': '2016-07-26T22:03:00+00:00',
    }
    mock_chronos_job_config.get_schedule_interval_in_seconds.return_value = 1
    output, status = check_chronos_jobs.sensu_message_status_for_jobs(
        mock_chronos_job_config,
        fake_job,
        0,
    )
    assert output == 'my failure message'
    assert status == pysensu_yelp.Status.CRITICAL
Example #27
0
def test_sensu_message_status_no_run():
    fake_job_state_pairs = []
    output, status = check_chronos_jobs.sensu_message_status_for_jobs('myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Warning: myservice.myinstance isn't in chronos at all, which means it may not be deployed yet"
    assert output == expected_output
    assert status == pysensu_yelp.Status.WARNING
Example #28
0
def test_sensu_message_status_ok():
    fake_job_state_pairs = [({}, chronos_tools.LastRunState.Success)]
    output, status = check_chronos_jobs.sensu_message_status_for_jobs('myservice', 'myinstance', fake_job_state_pairs)
    expected_output = "Last run of job myservice.myinstance Succeded"
    assert output == expected_output
    assert status == pysensu_yelp.Status.OK