From 854b7c8fc8c99b8c7f66bedbfd9ba3d8fd3393b9 Mon Sep 17 00:00:00 2001 From: marcoPretelli Date: Fri, 28 Nov 2014 15:58:11 +0100 Subject: [PATCH 1/5] non regression test for download of a empty file --- client/test_client_daemon.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/client/test_client_daemon.py b/client/test_client_daemon.py index 1ccef42..09573f6 100644 --- a/client/test_client_daemon.py +++ b/client/test_client_daemon.py @@ -727,12 +727,16 @@ def update_snapshot_upload(self, body): self.client_path = '/tmp/user_dir' client_daemon.CONFIG_DIR_PATH = self.client_path self.filename = 'test_file_1.txt' + self.empty_file = 'test_empty_file.txt' if not os.path.exists(self.client_path): os.makedirs(self.client_path) httpretty.enable() httpretty.register_uri(httpretty.GET, 'http://localhost/api/v1/files/{}'.format(self.filename), body='this is a test', content_type='text/plain') + httpretty.register_uri(httpretty.GET, 'http://localhost/api/v1/files/{}'.format(self.empty_file), + body='', + content_type='text/plain') self.snapshot_manager = DirSnapshotManager() self.server_com = ServerCommunicator( server_url='http://localhost/api/v1', @@ -769,6 +773,19 @@ def test_write_a_file(self): self.snapshot_manager.upload = False self.event_handler.paths_ignored = [] + #Case: empty file + source_path = '{}/{}'.format(self.client_path, self.empty_file) + self.file_system_op.write_a_file(source_path) + self.assertEqual( + self.snapshot_manager.upload, + {"src_path": source_path}) + #check if source isadded by write_a_file + self.assertEqual([source_path], self.event_handler.paths_ignored) + + #reset variable + self.snapshot_manager.upload = False + self.event_handler.paths_ignored = [] + #Case: file not found on server def download_file(path): return None, None From 4d950e8f0fa207b1e098276a388acfb6dbedc86b Mon Sep 17 00:00:00 2001 From: marcoPretelli Date: Fri, 28 Nov 2014 15:58:32 +0100 Subject: [PATCH 2/5] FIX: download of a empty file --- client/client_daemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/client_daemon.py b/client/client_daemon.py index ab3be5a..5299265 100644 --- a/client/client_daemon.py +++ b/client/client_daemon.py @@ -567,7 +567,7 @@ def write_a_file(self, path): when watchdog see the first event on this path ignore it """ abs_path, content = self.server_com.download_file(path) - if abs_path and content: + if abs_path and content is not False: self.add_event_to_ignore(get_abspath(path)) try: os.makedirs(os.path.split(abs_path)[0], 0755) From 2b91b96e8c39bb8fa3bce6eeb17a274f70e4709b Mon Sep 17 00:00:00 2001 From: marcoPretelli Date: Mon, 1 Dec 2014 11:39:19 +0100 Subject: [PATCH 3/5] FIX: update global_md5 on download --- client/client_daemon.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/client_daemon.py b/client/client_daemon.py index 5299265..f536128 100644 --- a/client/client_daemon.py +++ b/client/client_daemon.py @@ -577,6 +577,7 @@ def write_a_file(self, path): f.write(content) self.snapshot_manager.update_snapshot_upload( {"src_path": get_abspath(abs_path)}) + self.snapshot_manager.save_snapshot() else: logger.error("DOWNLOAD REQUEST for file {} " ", not found on server".format(path)) @@ -859,9 +860,10 @@ def instant_snapshot(self): dir_snapshot[file_md5] = [rel_path] return dir_snapshot - def save_snapshot(self, timestamp): + def save_snapshot(self, timestamp=False): """ save snapshot to file """ - self.last_status['timestamp'] = float(timestamp) + if timestamp is not False: + self.last_status['timestamp'] = float(timestamp) self.last_status['snapshot'] = self.global_md5() with open(self.snapshot_file_path, 'w') as f: From d29eaacebf567a2df1ca341f4fe8a1238b5c434b Mon Sep 17 00:00:00 2001 From: marcoPretelli Date: Mon, 1 Dec 2014 11:39:57 +0100 Subject: [PATCH 4/5] added code line number in print logger --- client/client_daemon.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/client_daemon.py b/client/client_daemon.py index f536128..ba7f042 100644 --- a/client/client_daemon.py +++ b/client/client_daemon.py @@ -1090,6 +1090,9 @@ def logger_init(crash_repo_path, stdout_level, file_level, disabled=False): # create formatter for crash file logging formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") + # create formatter for std-out + formatter_print = logging.Formatter('%(lineno)d %(message)s', '%M:%S') + logger = logging.getLogger() # create file handler which logs even debug messages @@ -1098,9 +1101,12 @@ def logger_init(crash_repo_path, stdout_level, file_level, disabled=False): crash_logger.setLevel(file_level) crash_logger.setFormatter(formatter) logger.addHandler(crash_logger) + # create console handler with a low log level print_logger = logging.StreamHandler() print_logger.setLevel(stdout_level) + print_logger.setFormatter(formatter_print) + # add the handlers to logger logger.addHandler(print_logger) if disabled: From 921743fde30aeb0368f4e10f9784da3c19195b3a Mon Sep 17 00:00:00 2001 From: marcoPretelli Date: Mon, 1 Dec 2014 11:50:58 +0100 Subject: [PATCH 5/5] non regression test for update only snapshot on download --- client/test_client_daemon.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/client/test_client_daemon.py b/client/test_client_daemon.py index 09573f6..89c88ea 100644 --- a/client/test_client_daemon.py +++ b/client/test_client_daemon.py @@ -711,6 +711,7 @@ def __init__(self): self.move = False self.copy = False self.upload = False + self.md5_update = False def update_snapshot_delete(self, body): self.delete = body @@ -724,6 +725,10 @@ def update_snapshot_copy(self, body): def update_snapshot_upload(self, body): self.upload = body + def save_snapshot(self, timestamp=False): + if timestamp is False: + self.md5_update = True + self.client_path = '/tmp/user_dir' client_daemon.CONFIG_DIR_PATH = self.client_path self.filename = 'test_file_1.txt' @@ -769,6 +774,10 @@ def test_write_a_file(self): #check if source isadded by write_a_file self.assertEqual([source_path], self.event_handler.paths_ignored) + #check if gobal md5 is updated + self.assertTrue(self.snapshot_manager.md5_update) + self.snapshot_manager.md5_update = False + #reset variable self.snapshot_manager.upload = False self.event_handler.paths_ignored = [] @@ -1182,6 +1191,7 @@ def test_instant_snapshot(self): def test_save_snapshot(self): test_timestamp = 1234 + #Case: update timestamp and snapshot self.snapshot_manager.save_snapshot(test_timestamp) self.assertEqual(self.snapshot_manager.last_status['timestamp'], test_timestamp) @@ -1192,6 +1202,14 @@ def test_save_snapshot(self): self.assertEqual(expected_conf, new_conf) + #Case: update only snapshot + self.snapshot_manager.save_snapshot() + + expected_conf = {'timestamp': 0.0, 'snapshot': self.md5_snapshot} + new_conf = json.load(open(self.conf_snap_path)) + + self.assertEqual(expected_conf, new_conf) + def test_update_snapshot_upload(self): original_snapshot = copy.deepcopy(self.snapshot_manager.local_full_snapshot) del self.snapshot_manager.local_full_snapshot['fea80f2db003d4ebc4536023814aa885']