Example #1
0
 def test_can_watch_dir(self):
     """Can watch a directory and trigger an action
     by creating a file matching the configured filemask"""
     test_filemask = 'testfilemask.txt'
     watch_data = {
         self.setup_test_dir: {
             'name': 'Test watch',
             'filemasks': {
                 test_filemask: {
                     'actions': [
                         self.echo_test_action,
                     ],
                 }
             }
         }
     }
     watcher = Watcher(watch_data, callback_func=self.callback_func)
     self._make_test_file(test_filemask)
     try:
         self.assertEqual(
             test_filemask,
             self.q.get(timeout=30),
             msg="Expected action to be triggered for filemask %s" %
             (test_filemask, ))
     finally:
         watcher.cleanup()
Example #2
0
 def test_delayed_action(self):
     """Test that an action with start_time in the future is not triggered"""
     test_filemask = 'testfilemask.txt'
     test_action = { 'Echo filename and file datestamp' : {
         'cmd': 'echo',
         'start_time' : (datetime.datetime.now() + datetime.timedelta(minutes = 30)).strftime("%H:%M:%S"),
         'end_time' : '23:59:59',
         'args': ['$filename', 'YYYYMMDD'] } }
     watch_data = {
         self.setup_test_dir : {
             'name': 'Test watch',
             'filemasks': {
                 test_filemask : {
                     'actions': [test_action,],
                     }
                 }}}
     watcher = Watcher(watch_data, callback_func = self.callback_func)
     self._make_test_file(test_filemask)
     try:
         result = self.q.get(timeout = 1)
     except Queue.Empty:
         result = None
     try:
         self.assertEqual(None, result,
                          msg = "Got result from action where action has start time in future")
     finally:
         watcher.cleanup()
Example #3
0
 def test_reload(self):
     test_filemask = 'testfilemask.txt'
     watch_data = {
         self.setup_test_dir : {
             'name': 'Test watch',
             'filemasks': {
                 test_filemask : {
                     'actions': [self.echo_test_action,],
                     }
                 }}}
     watcher = Watcher(watch_data, callback_func = self.callback_func)
     new_test_filemask = 'testy.txt'
     new_watch_data = {
         self.setup_test_dir : {
             'name': 'New watch',
             'filemasks': {
                 new_test_filemask : {
                     'actions': [self.echo_test_action,],
                     }
                 }}}
     watcher.update_watchers(new_watch_data)
     self.assertEqual(new_watch_data, watcher.watch_data,
                      msg = "Expected watcher watch data to be the new data we reloaded")
     self._make_test_file(new_test_filemask)
     try:
         self.assertEqual(new_test_filemask, self.q.get(timeout = 1),
                          msg = "Expected action to be triggered for new filemask %s" % (new_test_filemask,))
     finally:
         watcher.cleanup()
Example #4
0
 def test_multiple_actions(self):
     """Can watch a directory and correctly trigger multiple actions for same filemask"""
     test_filemask = 'testfilemask.*'
     watch_data = {
         self.setup_test_dir: {
             'name': 'Test watch',
             'filemasks': {
                 test_filemask: {
                     'actions': [
                         self.echo_test_action,
                     ],
                 }
             }
         }
     }
     _ = Watcher(watch_data, callback_func=self.callback_func)
     (file1, file2) = ('testfilemask.txt', 'testfilemask.pdf')
     for file_to_test in [file1, file2]:
         self._make_test_file(file_to_test)
         self.assertEqual(
             file_to_test,
             self.q.get(timeout=30),
             msg=
             "Expected action to be triggered for filemask %s with file %s"
             % (test_filemask, file_to_test))
Example #5
0
 def test_modified_local_tz(self):
     """Test running action with changed local timezone"""
     # Make local_tz different from TZ we use for time 'now'
     # Action is scheduled for US/Pacific now + 30 minutes which is prior to now at US/Eastern
     # so action should be triggered.
     local_tz = "US/Eastern"
     my_tz = "US/Pacific"
     my_tz = pytz.timezone(my_tz)
     now = datetime.datetime.utcnow()
     now = datetime.datetime(now.year,
                             now.month,
                             now.day,
                             now.hour,
                             now.minute,
                             now.second,
                             tzinfo=pytz.utc)
     now = my_tz.normalize(now.astimezone(my_tz))
     local_tz_obj = pytz.timezone(local_tz)
     local_tz_now = local_tz_obj.normalize(now.astimezone(local_tz_obj))
     now = datetime.datetime(now.year, now.month, now.day, now.hour,
                             now.minute, now.second)
     test_filemask = 'testfilemask.txt'
     test_action = {
         'Echo filename and file datestamp': {
             'cmd':
             'echo',
             'start_time':
             (now + datetime.timedelta(minutes=30)).strftime("%H:%M:%S"),
             'end_time':
             '23:59:59',
             'args': ['$filename', 'YYYYMMDD']
         }
     }
     watch_data = {
         self.setup_test_dir: {
             'name': 'Test watch',
             'local_tz': local_tz,
             'filemasks': {
                 test_filemask: {
                     'actions': [
                         test_action,
                     ],
                 }
             }
         }
     }
     watcher = Watcher(watch_data, callback_func=self.callback_func)
     self._make_test_file(test_filemask)
     self.assertEqual(
         test_filemask,
         self.q.get(timeout=1),
         msg=
         "Expected action to be executed with since start_time of %s is prior to watcher's local time of %s"
         % (
             (now + datetime.timedelta(minutes=30)).strftime("%H:%M:%S"),
             local_tz_now.strftime("%H:%M:%S"),
         ))
Example #6
0
 def test_can_watch_dir(self):
     """Can watch a directory and trigger an action
     by creating a file matching the configured filemask"""
     test_filemask = 'testfilemask.txt'
     watch_data = {
         self.setup_test_dir : {
             'name': 'Test watch',
             'filemasks': {
                 test_filemask : {
                     'actions': [self.echo_test_action,],
                     }
                 }}}
     watcher = Watcher(watch_data, callback_func = self.callback_func)
     self._make_test_file(test_filemask)
     try:
         self.assertEqual(test_filemask, self.q.get(timeout = 30),
                          msg = "Expected action to be triggered for filemask %s" % (test_filemask,))
     finally:
         watcher.cleanup()
Example #7
0
 def test_delayed_action(self):
     """Test that an action with start_time in the future is not triggered"""
     test_filemask = 'testfilemask.txt'
     test_action = {
         'Echo filename and file datestamp': {
             'cmd':
             'echo',
             'start_time':
             (datetime.datetime.now() +
              datetime.timedelta(minutes=30)).strftime("%H:%M:%S"),
             'end_time':
             '23:59:59',
             'args': ['$filename', 'YYYYMMDD']
         }
     }
     watch_data = {
         self.setup_test_dir: {
             'name': 'Test watch',
             'filemasks': {
                 test_filemask: {
                     'actions': [
                         test_action,
                     ],
                 }
             }
         }
     }
     watcher = Watcher(watch_data, callback_func=self.callback_func)
     self._make_test_file(test_filemask)
     try:
         result = self.q.get(timeout=1)
     except Queue.Empty:
         result = None
     try:
         self.assertEqual(
             None,
             result,
             msg=
             "Got result from action where action has start time in future")
     finally:
         watcher.cleanup()
Example #8
0
 def test_bad_watch_data(self):
     """Test starting a watcher object with various missing required watch data"""
     for data in [
         {},
         {
             self.setup_test_dir: {}
         },
         {
             self.setup_test_dir: {
                 'name': 'Fake'
             }
         },
         {
             self.setup_test_dir: {
                 'name': 'Fake',
                 'filemasks': {}
             }
         },
         {
             self.setup_test_dir: {
                 'name': 'Fake',
                 'filemasks': {
                     'somefilemask': {}
                 }
             }
         },
         {
             self.setup_test_dir: {
                 'name': 'Fake',
                 'filemasks': {
                     'somefilemask': {
                         'actions': []
                     }
                 }
             }
         },
     ]:
         try:
             Watcher(data)
         except SystemExit:
             pass
Example #9
0
 def test_action_start_time_in_past(self):
     """Test that an action with start_time in the past is triggered"""
     test_filemask = 'testfilemask.txt'
     end_time = '23:59:59'
     test_action = {
         'Echo filename and file datestamp': {
             'cmd':
             'echo',
             'start_time':
             (datetime.datetime.now() -
              datetime.timedelta(minutes=30)).strftime("%H:%M:%S"),
             'end_time':
             end_time,
             'args': ['$filename', 'YYYYMMDD']
         }
     }
     watch_data = {
         self.setup_test_dir: {
             'name': 'Test watch',
             'filemasks': {
                 test_filemask: {
                     'actions': [
                         test_action,
                     ],
                 }
             }
         }
     }
     watcher = Watcher(watch_data, callback_func=self.callback_func)
     self._make_test_file(test_filemask)
     self.assertEqual(
         test_filemask,
         self.q.get(timeout=1),
         msg=
         "Expected action with start time in the past and end_time %s to be triggered immediately"
         % (end_time, ))
Example #10
0
 def test_reload(self):
     test_filemask = 'testfilemask.txt'
     watch_data = {
         self.setup_test_dir: {
             'name': 'Test watch',
             'filemasks': {
                 test_filemask: {
                     'actions': [
                         self.echo_test_action,
                     ],
                 }
             }
         }
     }
     watcher = Watcher(watch_data, callback_func=self.callback_func)
     new_test_filemask = 'testy.txt'
     new_watch_data = {
         self.setup_test_dir: {
             'name': 'New watch',
             'filemasks': {
                 new_test_filemask: {
                     'actions': [
                         self.echo_test_action,
                     ],
                 }
             }
         }
     }
     watcher.update_watchers(new_watch_data)
     self.assertEqual(
         new_watch_data,
         watcher.watch_data,
         msg="Expected watcher watch data to be the new data we reloaded")
     self._make_test_file(new_test_filemask)
     try:
         self.assertEqual(
             new_test_filemask,
             self.q.get(timeout=1),
             msg="Expected action to be triggered for new filemask %s" %
             (new_test_filemask, ))
     finally:
         watcher.cleanup()