Esempio n. 1
0
 def tearDown(self):
    dammit.keep_fkn_trying(self.remove_all_json)
    dammit.keep_fkn_trying(self.remove_batcave)
    dammit.keep_fkn_trying(self.remove_foo_txt)
    try:
       Sched.deschedule_task_with_taskname('_foo')
    except subprocess.CalledProcessError as cpe:
       if cpe.returncode == 1:
          pass
Esempio n. 2
0
   def test_ctor(self):
      next_minute = time.strftime("%H:%M", time.localtime(time.time() + 60))
      Sched.gen_sched_settings_file(
         'foo.json',
         name='_foo',
         run_cmd='python _foo.py',
         working_dir='.',
         start_min=True,
         start_time=next_minute,
         schedule='once')
      sched = Sched('foo.json', 'batcave')
      self.assertTrue(os.path.isdir('batcave'))

      sched = Sched('foo.json', 'batcave/batcave1/batcave2')
      self.assertTrue(os.path.isdir('batcave/batcave1/batcave2'))

      with self.assertRaises(InvalidSettingError):
         Sched.gen_sched_settings_file(
            'foo.json',
            name='_foo',
            run_cmd='python _foo.py',
            working_dir='.',
            start_min=False,
            start_time=next_minute,
            schedule='oncee')
         sched = Sched('foo.json', 'batcave')
Esempio n. 3
0
   def test_create_task_once_long(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=False,
         start_time=next_minute.strftime("%H:%M"),
         schedule='once')
      s = Sched('foo.json', 'batcave')
      shutil.copy('_foo.py', 'batcave\\_foo.py')
      s.schedule_task()

      self.block_until_complete(next_minute.replace(second=0),
         lambda: os.path.isfile('batcave\\_foo.txt'), extra_timeout=15)

      self.assertEqual(len(glob('batcave\\_foo*.txt')), 1)

      with open('batcave\\_foo.txt', 'r') as txt:
         buf = txt.readlines()
         self.assertEqual(len(buf), 1)
         self.assertEqual(
            buf[0], 'running out of {}'.format(os.path.realpath('batcave')))
Esempio n. 4
0
   def test_gen_sched_settings_file(self):
      Sched.gen_sched_settings_file(
         'foo.json',
         name='_foo',
         run_cmd='python _foo.py',
         working_dir='.',
         start_min=True,
         start_time='00:00',
         schedule='once',
         days=['MON','TUE'],
         months=['JAN','MAR'],
         modifier=2)
      self.assertTrue(os.path.isfile('foo.json'))
      with open('foo.json', 'r') as foo:
         settings = json.load(foo)
         self.assertEqual(settings['name'], '_foo')
         self.assertEqual(settings['run_cmd'], 'python _foo.py')
         self.assertEqual(settings['working_dir'], '.')
         self.assertEqual(settings['start_min'], True)
         self.assertEqual(settings['start_time'], '00:00')
         self.assertEqual(settings['schedule'], 'once')
         self.assertEqual(settings['modifier'], 2)
         self.assertEqual(settings['days'], ['MON','TUE'])
         self.assertEqual(settings['months'], ['JAN','MAR'])

      Sched.gen_sched_settings_file(
         'foo.json',
         name='_foo',
         run_cmd='python _foo.py',
         start_time='00:00',
         schedule='once')
      self.assertTrue(os.path.isfile('foo.json'))
      with open('foo.json', 'r') as foo:
         settings = json.load(foo)
         self.assertEqual(settings['name'], '_foo')
         self.assertEqual(settings['run_cmd'], 'python _foo.py')
         self.assertEqual(settings['start_time'], '00:00')
         self.assertEqual(settings['schedule'], 'once')
Esempio n. 5
0
   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())
Esempio n. 6
0
   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
Esempio n. 7
0
   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())
Esempio n. 8
0
   def test_create_bat(self):
      Sched.gen_sched_settings_file(
         'foo.json',
         name='_foo',
         run_cmd='python _foo.py',
         working_dir='.',
         start_min=True,
         start_time='00:00',
         schedule='once')
      s = Sched('foo.json', 'batcave')
      batpath = s._create_bat()
      self.assertEqual(
         batpath,
         os.path.realpath(os.path.join(os.getcwd(), 'batcave', '_foo.bat')))

      with open("batcave\\_foo.bat", 'r') as foobat:
         buf = [l.rstrip() for l in foobat.readlines()]
         self.assertEqual(buf[0], '@echo off')
         self.assertEqual(buf[1], 'cd /d %~dp0')
         self.assertEqual(buf[2], 'start /min python _foo.py')
         self.assertEqual(len(buf), 3)

      Sched.gen_sched_settings_file(
         'foo.json',
         name='_foo',
         run_cmd='python _foo.py',
         working_dir=os.environ['USERPROFILE'],
         start_min=False,
         start_time='00:00',
         schedule='once')
      s = Sched('foo.json', 'batcave')
      s._create_bat()

      with open("batcave/_foo.bat", 'r') as foobat:
         buf = [l.rstrip() for l in foobat.readlines()]
         self.assertEqual(buf[0], '@echo off')
         self.assertEqual(buf[1], "cd /d {}".format(os.environ['USERPROFILE']))
         self.assertEqual(buf[2], 'python _foo.py')
         self.assertEqual(len(buf), 3)