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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 = [({}, 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