def test_build_status(): scheduler.schedule_job("good_job", {"k": "v"}, "channel", TS, 0) scheduler.schedule_job("odd_job", {"k": "v"}, "channel", TS, 10) scheduler.schedule_suppression("odd_job", T(-5), T(5)) scheduler.schedule_suppression("good_job", T(5), T(15)) scheduler.reserve_job() status = bot._build_status() assert (status == """ The time is 2019-12-10 11:12:13+00:00 There is 1 running job: * [1] good_job (started at 2019-12-10 11:12:13+00:00) There is 1 scheduled job: * [2] odd_job (starting after 2019-12-10 11:12:23+00:00) There is 1 active suppression: * [1] odd_job (from 2019-12-10 11:12:08+00:00 to 2019-12-10 11:12:18+00:00) There is 1 scheduled suppression: * [2] good_job (from 2019-12-10 11:12:18+00:00 to 2019-12-10 11:12:28+00:00) """.strip())
def test_reserve_job_with_suppression_in_future(freezer): scheduler.schedule_suppression("good_job", T(15), T(20)) scheduler.schedule_job("good_job", {"k": "v"}, "channel", TS, 5) freezer.move_to(T(10)) job_id = scheduler.reserve_job() job = scheduler.get_job(job_id) assert_job_matches(job, "good_job", {"k": "v"}, "channel", T(5), T(10))
def test_reserve_job_with_suppression_in_progress_for_another_job_type(freezer): scheduler.schedule_job("good_job", {"k": "v"}, "channel", TS, 5) scheduler.schedule_suppression("odd_job", T(10), T(20)) freezer.move_to(T(15)) job_id = scheduler.reserve_job() job = scheduler.get_job(job_id) assert_job_matches(job, "good_job", {"k": "v"}, "channel", T(5), T(15))
def test_cancel_suppressions(): scheduler.schedule_suppression("good_job", T(5), T(15)) scheduler.schedule_suppression("odd_job", T(10), T(20)) scheduler.schedule_suppression("good_job", T(20), T(30)) scheduler.cancel_suppressions("good_job") ss = scheduler.get_suppressions() assert len(ss) == 1 assert_suppression_matches(ss[0], "odd_job", T(10), T(20))
def test_schedule_suppression(): scheduler.schedule_suppression("good_job", T(5), T(15)) scheduler.schedule_suppression("odd_job", T(10), T(20)) scheduler.schedule_suppression("good_job", T(20), T(30)) ss = scheduler.get_suppressions() assert len(ss) == 3 assert_suppression_matches(ss[0], "good_job", T(5), T(15)) assert_suppression_matches(ss[1], "odd_job", T(10), T(20)) assert_suppression_matches(ss[2], "good_job", T(20), T(30))
def test_remove_expired_suppressions(freezer): scheduler.schedule_suppression("good_job", T(5), T(15)) scheduler.schedule_suppression("odd_job", T(10), T(20)) scheduler.schedule_suppression("good_job", T(20), T(30)) freezer.move_to(T(17)) scheduler.remove_expired_suppressions() ss = scheduler.get_suppressions() assert len(ss) == 2 assert_suppression_matches(ss[0], "odd_job", T(10), T(20)) assert_suppression_matches(ss[1], "good_job", T(20), T(30))
def test_run_once(): # Because this mock gets used in a subprocess (I think) we can't actually # get any information out of it about how it was used. slack_client = Mock() scheduler.schedule_suppression("test_good_job", T(-15), T(-5)) scheduler.schedule_suppression("test_bad_job", T(-15), T(-5)) scheduler.schedule_suppression("test_really_bad_job", T(-5), T(5)) scheduler.schedule_job("test_good_job", {}, "channel", TS, 0) scheduler.schedule_job("test_bad_job", {}, "channel", TS, 0) scheduler.schedule_job("test_really_bad_job", {}, "channel", TS, 0) processes = run_once(slack_client, config) for p in processes: p.join() assert os.path.exists(build_log_dir("test_good_job")) assert os.path.exists(build_log_dir("test_bad_job")) assert not os.path.exists(build_log_dir("test_really_bad_job"))
def test_reserve_job_with_suppression_in_progress(freezer): scheduler.schedule_job("good_job", {"k": "v"}, "channel", TS, 5) scheduler.schedule_suppression("good_job", T(10), T(20)) freezer.move_to(T(15)) assert not scheduler.reserve_job()