def test_create_task_quarterly(self): Sched.gen_sched_settings_file( 'foo.json', name='_foo', run_cmd='python _foo.py', schedule='quarterly') s = Sched('foo.json') now = datetime.now() s.schedule_task() task = s.details() self.assertTrue(task) self.assertTrue(s.is_scheduled()) self.assertEqual(task.task_name, '\\_foo') self.assertEqual(task.schedule_type, 'Daily ') self.assertEqual(task.repeat_every, 'Disabled') self.assertEqual(task.days, 'Every 92 day(s)') self.assertEqual( datetime.strptime(task.start_time, "%I:%M:%S %p").time(), now.replace(second=0, microsecond=0).time()) self.assertEqual( datetime.strptime(task.start_date, '%m/%d/%Y').date(), datetime.now().date()) self.assertEqual( datetime.strptime(task.next_run_time, "%m/%d/%Y %I:%M:%S %p"), datetime.now().replace(second=0, microsecond=0) + timedelta(days=92)) s.deschedule_task() self.assertFalse(s.details()) self.assertFalse(s.is_scheduled())
def test_create_task_2_minutes(self): next_minute = datetime.now() + timedelta(minutes=1) Sched.gen_sched_settings_file( 'foo.json', name='_foo', run_cmd='python _foo.py', working_dir='.', start_min=True, start_time=next_minute.strftime("%H:%M"), schedule='minute', modifier=2) s = Sched('foo.json', 'batcave') shutil.copy('_foo.py', 'batcave\\_foo.py') s.schedule_task() task = s.details() self.assertTrue(task) self.assertTrue(s.is_scheduled()) self.assertEqual(task.task_name, '\\_foo') self.assertEqual(task.schedule_type, 'One Time Only, Minute ') self.assertEqual(task.repeat_every, '0 Hour(s), 2 Minute(s)') self.assertEqual( datetime.strptime(task.start_time, "%I:%M:%S %p").time(), next_minute.replace(second=0, microsecond=0).time()) self.assertEqual( datetime.strptime(task.start_date, '%m/%d/%Y').date(), next_minute.date()) s.deschedule_task() self.assertFalse(s.details()) self.assertFalse(s.is_scheduled())
def test_query_tasks_dict(self): top_lv_tasks = Sched._query_tasks_dict() for tname, t in top_lv_tasks.items(): self.assertTrue('\\' not in tname) self.assertEqual(len(t._fields), 28) self.assertTrue('host_name' in t._fields) self.assertTrue('task_name' in t._fields) self.assertTrue('next_run_time' in t._fields) self.assertTrue('status' in t._fields) self.assertTrue('logon_mode' in t._fields) self.assertTrue('last_run_time' in t._fields) self.assertTrue('last_result' in t._fields) self.assertTrue('author' in t._fields) self.assertTrue('task_to_run' in t._fields) self.assertTrue('start_in' in t._fields) self.assertTrue('comment' in t._fields) self.assertTrue('scheduled_task_state' in t._fields) self.assertTrue('idle_time' in t._fields) self.assertTrue('power_management' in t._fields) self.assertTrue('run_as_user' in t._fields) self.assertTrue('delete_task_if_not_rescheduled' in t._fields) self.assertTrue('stop_task_if_runs_x_hours_and_x_mins' in t._fields) self.assertTrue('schedule' in t._fields) self.assertTrue('schedule_type' in t._fields) self.assertTrue('start_time' in t._fields) self.assertTrue('start_date' in t._fields) self.assertTrue('end_date' in t._fields) self.assertTrue('days' in t._fields) self.assertTrue('months' in t._fields) self.assertTrue('repeat_every' in t._fields) self.assertTrue('repeat_until_time' in t._fields) self.assertTrue('repeat_until_duration' in t._fields) self.assertTrue('repeat_stop_if_still_running' in t._fields) self.assertTrue(t.task_name.count('\\') == 1) top_lv_tasks = Sched._query_tasks_dict(top_lv_only=False) for tname, t in top_lv_tasks.items(): self.assertTrue('\\' not in tname) self.assertEqual(len(t._fields), 28) self.assertTrue('host_name' in t._fields) self.assertTrue('task_name' in t._fields) self.assertTrue('next_run_time' in t._fields) self.assertTrue('status' in t._fields) self.assertTrue('logon_mode' in t._fields) self.assertTrue('last_run_time' in t._fields) self.assertTrue('last_result' in t._fields) self.assertTrue('author' in t._fields) self.assertTrue('task_to_run' in t._fields) self.assertTrue('start_in' in t._fields) self.assertTrue('comment' in t._fields) self.assertTrue('scheduled_task_state' in t._fields) self.assertTrue('idle_time' in t._fields) self.assertTrue('power_management' in t._fields) self.assertTrue('run_as_user' in t._fields) self.assertTrue('delete_task_if_not_rescheduled' in t._fields) self.assertTrue('stop_task_if_runs_x_hours_and_x_mins' in t._fields) self.assertTrue('schedule' in t._fields) self.assertTrue('schedule_type' in t._fields) self.assertTrue('start_time' in t._fields) self.assertTrue('start_date' in t._fields) self.assertTrue('end_date' in t._fields) self.assertTrue('days' in t._fields) self.assertTrue('months' in t._fields) self.assertTrue('repeat_every' in t._fields) self.assertTrue('repeat_until_time' in t._fields) self.assertTrue('repeat_until_duration' in t._fields) self.assertTrue('repeat_stop_if_still_running' in t._fields) self.assertTrue(t.task_name.count('\\') >= 1) Sched.gen_sched_settings_file( 'foo.json', name='_foo', run_cmd='python _foo.py', start_time="00:00", schedule='once') s = Sched('foo.json') s.schedule_task() task_foo_dict = Sched._query_tasks_dict('_foo') self.assertTrue(task_foo_dict) self.assertIn('_foo', task_foo_dict) tname, t = '_foo', task_foo_dict['_foo'] self.assertTrue('\\' not in tname) self.assertEqual(len(t._fields), 28) self.assertTrue('host_name' in t._fields) self.assertTrue('task_name' in t._fields) self.assertTrue('next_run_time' in t._fields) self.assertTrue('status' in t._fields) self.assertTrue('logon_mode' in t._fields) self.assertTrue('last_run_time' in t._fields) self.assertTrue('last_result' in t._fields) self.assertTrue('author' in t._fields) self.assertTrue('task_to_run' in t._fields) self.assertTrue('start_in' in t._fields) self.assertTrue('comment' in t._fields) self.assertTrue('scheduled_task_state' in t._fields) self.assertTrue('idle_time' in t._fields) self.assertTrue('power_management' in t._fields) self.assertTrue('run_as_user' in t._fields) self.assertTrue('delete_task_if_not_rescheduled' in t._fields) self.assertTrue('stop_task_if_runs_x_hours_and_x_mins' in t._fields) self.assertTrue('schedule' in t._fields) self.assertTrue('schedule_type' in t._fields) self.assertTrue('start_time' in t._fields) self.assertTrue('start_date' in t._fields) self.assertTrue('end_date' in t._fields) self.assertTrue('days' in t._fields) self.assertTrue('months' in t._fields) self.assertTrue('repeat_every' in t._fields) self.assertTrue('repeat_until_time' in t._fields) self.assertTrue('repeat_until_duration' in t._fields) self.assertTrue('repeat_stop_if_still_running' in t._fields) self.assertTrue(t.task_name.count('\\') >= 1) s.deschedule_task() with self.assertRaises(subprocess.CalledProcessError): try: s._query_tasks_dict('_foo') except subprocess.CalledProcessError as cpe: self.assertEqual(cpe.returncode, 1) self.assertTrue( re.search(r'cannot.*find.*file.*specified', cpe.output, re.I)) raise cpe