def test_08(self):
        '''Random files, simulate partly transferred files'''

        folder = self.gen_tempfolder()

        src_dir = os.path.join(folder, "src")
        dst_dir = os.path.join(folder, "dst")
        os.makedirs(src_dir)
        os.makedirs(dst_dir)

        rnd = random.Random()
        rnd.seed(332093199)
        src_files = gen_random_files(rnd, src_dir, 50)
        files_to_sync = src_files[-30:]
        for file_ in files_to_sync:
            shutil.copyfile(
                os.path.join(src_dir, file_),
                os.path.join(dst_dir, file_))

        files_to_truncate = []
        files_to_truncate.append(os.path.join(dst_dir, files_to_sync[-1]))
        files_to_truncate.append(os.path.join(dst_dir, files_to_sync[-2]))
        files_to_truncate.append(os.path.join(dst_dir, files_to_sync[-3]))

        for entry in files_to_truncate:
            with open(entry, mode="r+") as file_:
                new_size = os.path.getsize(entry)
                file_.truncate(new_size)

        copy_duplicity_backups.sync_files(src_dir, dst_dir, files_to_sync, False, 0)

        self.assertTrue(cmp_src_dst_files(src_dir, dst_dir, files_to_sync))
        shutil.rmtree(folder)
    def test_09(self):
        '''File size limit'''

        folder = self.gen_tempfolder()

        src_dir = os.path.join(folder, "src")
        dst_dir = os.path.join(folder, "dst")
        os.makedirs(src_dir)
        os.makedirs(dst_dir)

        gen_dummy_file(os.path.join(src_dir, "file1"), 20)
        gen_dummy_file(os.path.join(src_dir, "file2"), 30)
        gen_dummy_file(os.path.join(src_dir, "file3"), 20)

        max_size = 60

        copy_duplicity_backups.sync_files(
            src_dir, dst_dir,
            ["file1", "file2", "file3"],
            False, max_size)
        dst_files = os.listdir(dst_dir)

        self.assertEqual(len(dst_files), 2)
        dst_size = 0
        for file_ in dst_files:
            dst_size = dst_size + os.path.getsize(os.path.join(dst_dir, file_))
        self.assertTrue(dst_size <= max_size)

        shutil.rmtree(folder)
    def test_06(self):
        '''Same two files in source and destination, both in list,
        one differs in size'''

        folder = self.gen_tempfolder()

        src_dir = os.path.join(folder, "src")
        dst_dir = os.path.join(folder, "dst")
        os.makedirs(src_dir)
        os.makedirs(dst_dir)

        with open(os.path.join(src_dir, "nonempty_file"), mode="w") as file_:
            file_.write("new content")
        with open(os.path.join(src_dir, "empty_file"), mode="w"):
            pass
        with open(os.path.join(dst_dir, "nonempty_file"), mode="w") as file_:
            file_.write("old content, old size")
        with open(os.path.join(dst_dir, "empty_file"), mode="w"):
            pass

        copy_duplicity_backups.sync_files(
            src_dir, dst_dir,
            ["nonempty_file", "empty_file"], False, 0)
        dst_files = os.listdir(dst_dir)
        self.assertEqual(len(dst_files), 2)
        self.assertIn("nonempty_file", dst_files)
        self.assertIn("empty_file", dst_files)
        self.assertEqual(
            os.path.getsize(os.path.join(src_dir, "nonempty_file")),
            os.path.getsize(os.path.join(dst_dir, "nonempty_file")))
        self.assertEqual(
            os.path.getsize(os.path.join(src_dir, "empty_file")),
            os.path.getsize(os.path.join(dst_dir, "empty_file")))

        shutil.rmtree(folder)
    def test_05(self):
        '''Same two files in source and destination, list only one file'''
        folder = self.gen_tempfolder()

        src_dir = os.path.join(folder, "src")
        dst_dir = os.path.join(folder, "dst")
        os.makedirs(src_dir)
        os.makedirs(dst_dir)

        with open(os.path.join(src_dir, "empty_file1"), mode="wb"):
            pass
        with open(os.path.join(src_dir, "empty_file2"), mode="wb"):
            pass
        with open(os.path.join(dst_dir, "empty_file1"), mode="wb"):
            pass
        with open(os.path.join(dst_dir, "empty_file2"), mode="wb"):
            pass

        copy_duplicity_backups.sync_files(
            src_dir, dst_dir, ["empty_file1"],
            False, 0)
        dst_files = os.listdir(dst_dir)
        self.assertEqual(len(dst_files), 1)
        self.assertIn("empty_file1", dst_files)

        shutil.rmtree(folder)
    def test_01(self):
        '''Empty folders, empty list'''
        folder = self.gen_tempfolder()

        src_dir = os.path.join(folder, "src")
        dst_dir = os.path.join(folder, "dst")
        os.makedirs(src_dir)
        os.makedirs(dst_dir)

        copy_duplicity_backups.sync_files(src_dir, dst_dir, [], False, 0)
        self.assertEqual(len(os.listdir(dst_dir)), 0)

        shutil.rmtree(folder)
    def test_02(self):
        '''Empty source folder, file present in dst, list empty'''
        folder = self.gen_tempfolder()

        src_dir = os.path.join(folder, "src")
        dst_dir = os.path.join(folder, "dst")
        os.makedirs(src_dir)
        os.makedirs(dst_dir)

        with open(os.path.join(dst_dir, "empty_file"), mode="wb"):
            pass

        copy_duplicity_backups.sync_files(src_dir, dst_dir, [], False, 0)
        self.assertEqual(len(os.listdir(dst_dir)), 0)

        shutil.rmtree(folder)
    def test_07(self):
        '''Random files, some files available at destination'''
        folder = self.gen_tempfolder()

        src_dir = os.path.join(folder, "src")
        dst_dir = os.path.join(folder, "dst")
        os.makedirs(src_dir)
        os.makedirs(dst_dir)

        rnd = random.Random()
        rnd.seed(28373332)
        src_files = gen_random_files(rnd, src_dir, 50)
        files_to_sync = src_files[-30:]
        for file_ in files_to_sync[:10]:
            shutil.copyfile(
                os.path.join(src_dir, file_),
                os.path.join(dst_dir, file_))

        copy_duplicity_backups.sync_files(src_dir, dst_dir, files_to_sync, False, 0)

        self.assertTrue(cmp_src_dst_files(src_dir, dst_dir, files_to_sync))
        shutil.rmtree(folder)