def test_garbage_collection(self): log_file = self.get_resource('crashplan_backup_files.log') new_file = u'foo.txt' newer_file = u'/my/crashplan/backups/vms/finn/finn-2018-08-15_00-09-00/finn-5-s004.vmdk' older_file = u'/my/crashplan/backups/vms/gabarolas/gabarolas-2018-08-02_16-07-17/gabarolas-s067.vmdk' with CrashPlanFS(log_file=log_file.strpath) as fs: assert not fs.exists(new_file) assert fs.exists(newer_file) assert fs.exists(older_file) older_file_remote_mtime = fs.getdetails(older_file).modified # Create a mock transfer area from fs.memoryfs import MemoryFS transfer_area = MemoryFS() # Populate the transfer area transfer_area.appendtext(new_file, u'This file is new') transfer_area.makedirs(os.path.split(newer_file)[0]) transfer_area.appendtext(newer_file, u'This file has been modified locally') transfer_area.makedirs(os.path.split(older_file)[0]) transfer_area.appendtext(older_file, u'This file is up-to-date') transfer_area.settimes(older_file, modified=older_file_remote_mtime) assert transfer_area.getdetails( older_file).modified <= older_file_remote_mtime # Pass the transfer area to crashplanfs fs = CrashPlanFS(log_file=log_file.strpath, transfer_area=transfer_area) # The new file should not be listed, as it only exists in the transfer area assert not fs.exists(new_file) # The newer file should be listed, with the remote modification time assert fs.exists(newer_file) assert transfer_area.getdetails(new_file).modified > fs.getdetails( newer_file).modified # The older file should be deleted from the transfer area assert not transfer_area.exists(older_file)