def test_get_all_when_file_moved(self): self.source.start() block_until_synchronised_files_data_source_started(self.source) move_semaphore = Semaphore(0) deleted = False def on_change(change: FileSystemChange): nonlocal deleted if change == FileSystemChange.DELETE: move_semaphore.release() deleted = True if deleted and change == FileSystemChange.CREATE: move_semaphore.release() self.source.add_listener(on_change) to_move_file_path = glob.glob("%s/*" % self.temp_directory)[0] move_to = "%s_moved" % to_move_file_path shutil.move(to_move_file_path, move_to) move_semaphore.acquire() move_semaphore.acquire() self.assertCountEqual(self.source.get_all(), self.data)
def test_get_all_when_file_deleted(self): self.source.start() block_until_synchronised_files_data_source_started(self.source) change_lock = Lock() change_lock.acquire() def on_change(change: FileSystemChange): if change == FileSystemChange.DELETE: change_lock.release() self.source.add_listener(on_change) to_delete_file_path = glob.glob("%s/*" % self.temp_directory)[0] deleted_data = extract_data_from_file(to_delete_file_path, parser=lambda data: int(data), separator='\n') os.remove(to_delete_file_path) change_lock.acquire() self.assertCountEqual(self.source.get_all(), [x for x in self.data if x not in deleted_data])
def test_get_all_when_folder_containing_files_is_deleted(self): nested_directory_path = self._add_more_data_in_nested_directory()[0] self.source.start() block_until_synchronised_files_data_source_started(self.source) change_lock = Lock() change_lock.acquire() def on_change(change: FileSystemChange): if change == FileSystemChange.DELETE: change_lock.release() self.source.add_listener(on_change) shutil.rmtree(nested_directory_path) change_lock.acquire() self.assertCountEqual(self.source.get_all(), self.data)
def test_get_all_when_file_modified(self): self.source.start() block_until_synchronised_files_data_source_started(self.source) change_lock = Lock() change_lock.acquire() def on_change(change: FileSystemChange): if change == FileSystemChange.MODIFY: change_lock.release() self.source.add_listener(on_change) to_modify_file_path = glob.glob("%s/*" % self.temp_directory)[0] to_modify = extract_data_from_file(to_modify_file_path, parser=lambda data: int(data), separator='\n') modified = to_modify[0: -1] with open(to_modify_file_path, 'w') as file: file.write('\n'.join([str(x) for x in modified])) change_lock.acquire() self.assertCountEqual(self.source.get_all(), [x for x in self.data if x not in to_modify] + modified)
def test_get_all_when_file_created(self): self.source.start() block_until_synchronised_files_data_source_started(self.source) change_trigger = Semaphore(0) def on_change(change: FileSystemChange): if change == FileSystemChange.CREATE: change_trigger.release() self.source.add_listener(on_change) more_data = [i for i in range(50)] write_data_to_files_in_temp_directory(more_data, 10, dir=self.temp_directory, file_prefix=TestSynchronisedFilesDataSource._FILE_PREFIX) even_more_data = self._add_more_data_in_nested_directory(10)[1] triggers = 0 while triggers != 20: change_trigger.acquire() triggers += 1 logging.debug(self.source._origin_mapped_data) self.assertCountEqual(self.source.get_all(), self.data + more_data + even_more_data)