def test_extract_all_overlap(self): assert self.default_archive_type items1 = temp_archive.make_temp_item_list([ ( 'base-1.2.3/foo.txt', 'foo.txt\n' ), ( 'base-1.2.3/bar.txt', 'bar.txt\n' ), ]) items2 = temp_archive.make_temp_item_list([ ( 'base-1.2.3/orange.txt', 'orange.txt\n' ), ( 'base-1.2.3/kiwi.txt', 'kiwi.txt\n' ), ]) tmp_archive1 = self.make_temp_archive_for_reading(items1) tmp_archive2 = self.make_temp_archive_for_reading(items2) tmp_dir = temp_file.make_temp_dir() tmp_archive1.extract_all(tmp_dir) tmp_archive2.extract_all(tmp_dir) actual_files = file_find.find(tmp_dir, relative = True) expected_files = [ 'base-1.2.3/bar.txt', 'base-1.2.3/foo.txt', 'base-1.2.3/kiwi.txt', 'base-1.2.3/orange.txt', ] self.assertEqual( expected_files, actual_files )
def test_combine_conflicts_different_content_with_check(self): a1 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/apple.txt'), 'apple.txt'), (self.native_filename('fruits/durian.txt'), 'durian.txt'), (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'), (self.native_filename('fruits/plum.txt'), '1plum.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a1-') a2 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'), (self.native_filename('fruits/melon.txt'), 'melon.txt'), (self.native_filename('fruits/lemon.txt'), '1lemon.txt'), (self.native_filename('fruits/dragonfruit.txt'), 'dragonfruit.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a2-') a3 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/lemon.txt'), '2lemon.txt'), (self.native_filename('fruits/strawberry.txt'), 'strawberry.txt'), (self.native_filename('fruits/pear.txt'), 'pear.txt'), (self.native_filename('fruits/plum.txt'), '2plum.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a3-') tmp_archive = self.make_temp_file(suffix='.zip') with self.assertRaises(RuntimeError) as ctx: archive_util.combine([a1, a2, a3], tmp_archive, check_content=True)
def test_extract_all_overlap_with_base_dir_and_strip_common_ancestor(self): assert self.default_archive_type items1 = temp_archive.make_temp_item_list([ ( 'base-1.2.3/foo.txt', 'foo.txt\n' ), ( 'base-1.2.3/subdir/bar.txt', 'bar.txt\n' ), ]) items2 = temp_archive.make_temp_item_list([ ( 'notbase-1.2.3/orange.txt', 'orange.txt\n' ), ( 'notbase-1.2.3/subdir/kiwi.txt', 'kiwi.txt\n' ), ]) tmp_archive1 = self.make_temp_archive_for_reading(items1) tmp_archive2 = self.make_temp_archive_for_reading(items2) tmp_dir = temp_file.make_temp_dir() base_dir = 'foo-6.6.6' tmp_archive1.extract_all(tmp_dir, base_dir = base_dir, strip_common_ancestor = True) tmp_archive2.extract_all(tmp_dir, base_dir = base_dir, strip_common_ancestor = True) actual_files = file_find.find(tmp_dir, relative = True) expected_files = [ 'foo-6.6.6/foo.txt', 'foo-6.6.6/orange.txt', 'foo-6.6.6/subdir/bar.txt', 'foo-6.6.6/subdir/kiwi.txt', ] self.assertEqual( expected_files, actual_files )
def test_remove_members(self): items = temp_archive.make_temp_item_list([ (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple.txt'), (self.native_filename('foo-1.2.3/fruits/durian.txt'), 'durian.txt'), (self.native_filename('foo-1.2.3/fruits/kiwi.txt'), 'kiwi.txt'), (self.native_filename('foo-1.2.3/.import/foo.txt'), 'foo.txt'), (self.native_filename('foo-1.2.3/.import/bar.txt'), 'bar.txt'), ]) tmp_archive = temp_archive.make_temp_archive(items, 'zip', delete=not self.DEBUG) self.assertEqual([ 'foo-1.2.3/.import/bar.txt', 'foo-1.2.3/.import/foo.txt', 'foo-1.2.3/fruits/apple.txt', 'foo-1.2.3/fruits/durian.txt', 'foo-1.2.3/fruits/kiwi.txt', ], archiver.members(tmp_archive)) archive_util.remove_members(tmp_archive, ['foo-1.2.3/.import'], debug=self.DEBUG) self.assertEqual([ 'foo-1.2.3/fruits/apple.txt', 'foo-1.2.3/fruits/durian.txt', 'foo-1.2.3/fruits/kiwi.txt', ], archiver.members(tmp_archive))
def test_match_members(self): tmp_archive = temp_archive.make_temp_archive( temp_archive.make_temp_item_list([ (self.native_filename('fruits/apple.pdf'), 'apple.pdf'), (self.native_filename('fruits/durian.pdf'), 'durian.pdf'), (self.native_filename('fruits/plum.pdf'), 'plum.pdf'), (self.native_filename('cheese/brie.txt'), 'brie.txt'), (self.native_filename('cheese/cheddar.txt'), 'cheddar.txt'), (self.native_filename('cheese/fontina.txt'), 'fontina.txt'), ]), 'zip', delete=not self.DEBUG) self.assertEqual([ 'cheese/brie.txt', 'cheese/cheddar.txt', 'cheese/fontina.txt', 'fruits/apple.pdf', 'fruits/durian.pdf', 'fruits/plum.pdf', ], archive_util.match_members(tmp_archive, ['*'])) self.assertEqual([ 'cheese/brie.txt', 'cheese/cheddar.txt', 'cheese/fontina.txt', ], archive_util.match_members(tmp_archive, ['cheese*'])) self.assertEqual([ 'cheese/brie.txt', 'cheese/cheddar.txt', 'cheese/fontina.txt', ], archive_util.match_members(tmp_archive, ['*.txt'])) self.assertEqual([ 'fruits/apple.pdf', 'fruits/durian.pdf', 'fruits/plum.pdf', ], archive_util.match_members(tmp_archive, ['*.pdf']))
def test_create_base_dir(self): self.maxDiff = None items = temp_archive.make_temp_item_list([ ( 'base-1.2.3/foo.txt', 'foo.txt\n' ), ( 'base-1.2.3/bar.txt', 'bar.txt\n' ), ]) tmp_dir = temp_archive.write_temp_items(items) base_dir = 'foo-666' archive = self.make_temp_archive_for_writing() archive.create(tmp_dir, base_dir = base_dir) self.assertTrue( path.isfile(archive.filename) ) tmp_extract_dir = temp_file.make_temp_dir() archive.extract_all(tmp_extract_dir) def _remove_base_dir(f): return file_util.remove_head(f, base_dir) self._compare_dirs(tmp_dir, tmp_extract_dir, transform = _remove_base_dir) file_util.remove([ tmp_dir, tmp_extract_dir])
def test_common_base(self): items = temp_archive.make_temp_item_list([ ( 'base-1.2.3/foo.txt', 'foo.txt\n' ), ( 'base-1.2.3/bar.txt', 'bar.txt\n' ), ( 'base-1.2.3/baz.txt', 'baz.txt\n' ), ]) tmp_archive = self.make_temp_archive_for_reading(items) self.assertEqual( 'base-1.2.3', self.make_temp_archive_for_reading(items).common_base() )
def test_extract_all(self): assert self.default_archive_type items = temp_archive.make_temp_item_list([ ( 'foo.txt', 'foo.txt\n' ), ]) tmp_archive = self.make_temp_archive_for_reading(items) tmp_dir = temp_file.make_temp_dir() tmp_archive.extract_all(tmp_dir) self.assertTrue( path.isfile(path.join(tmp_dir, 'foo.txt')) )
def test_combine_conflicts_different_content_no_check(self): a1 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/apple.txt'), 'apple.txt'), (self.native_filename('fruits/durian.txt'), 'durian.txt'), (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'), (self.native_filename('fruits/plum.txt'), '1plum.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a1-') a2 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'), (self.native_filename('fruits/melon.txt'), 'melon.txt'), (self.native_filename('fruits/lemon.txt'), '1lemon.txt'), (self.native_filename('fruits/dragonfruit.txt'), 'dragonfruit.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a2-') a3 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/lemon.txt'), '2lemon.txt'), (self.native_filename('fruits/strawberry.txt'), 'strawberry.txt'), (self.native_filename('fruits/pear.txt'), 'pear.txt'), (self.native_filename('fruits/plum.txt'), '2plum.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a3-') tmp_archive = self.make_temp_file(suffix='.zip') archive_util.combine([a1, a2, a3], tmp_archive) self.assertEqual([ 'fruits/apple.txt', 'fruits/dragonfruit.txt', 'fruits/durian.txt', 'fruits/kiwi.txt', 'fruits/lemon.txt', 'fruits/melon.txt', 'fruits/pear.txt', 'fruits/plum.txt', 'fruits/strawberry.txt', ], archiver.members(tmp_archive))
def test_extract_member_to_string(self): assert self.default_archive_type items = temp_archive.make_temp_item_list([ ( 'foo/apple.txt', 'apple.txt\n' ), ( 'foo/durian.txt', 'durian.txt\n' ), ( 'foo/kiwi.txt', 'kiwi.txt\n' ), ( 'metadata/db.json', '{}\n' ), ]) tmp_archive = self.make_temp_archive_for_reading(items) self.assertEqual( b'apple.txt\n', tmp_archive.extract_member_to_string('foo/apple.txt') ) self.assertEqual( b'{}\n', tmp_archive.extract_member_to_string('metadata/db.json') )
def test_remove_members_matching_patterns(self): items = temp_archive.make_temp_item_list([ (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple.txt'), (self.native_filename('foo-1.2.3/fruits/durian.txt'), 'durian.txt'), (self.native_filename('foo-1.2.3/fruits/kiwi.txt'), 'kiwi.txt'), (self.native_filename('foo-1.2.3/.import/foo.txt'), 'foo.txt'), (self.native_filename('foo-1.2.3/.import/bar.txt'), 'bar.txt'), (self.native_filename('foo-1.2.3/cheese/brie.jpg'), 'brie.jpg'), (self.native_filename('foo-1.2.3/cheese/halumi.jpg'), 'halumi.jpg'), (self.native_filename('foo-1.2.3/cheese/feta.jpg'), 'feta.jpg'), ]) tmp_archive = temp_archive.make_temp_archive(items, 'zip', delete=not self.DEBUG) archive_util.remove_members_matching_patterns(tmp_archive, ['notfound'], debug=self.DEBUG) self.assertEqual([ 'foo-1.2.3/.import/bar.txt', 'foo-1.2.3/.import/foo.txt', 'foo-1.2.3/cheese/brie.jpg', 'foo-1.2.3/cheese/feta.jpg', 'foo-1.2.3/cheese/halumi.jpg', 'foo-1.2.3/fruits/apple.txt', 'foo-1.2.3/fruits/durian.txt', 'foo-1.2.3/fruits/kiwi.txt', ], archiver.members(tmp_archive)) tmp_archive = temp_archive.make_temp_archive(items, 'zip', delete=not self.DEBUG) archive_util.remove_members_matching_patterns(tmp_archive, ['*.txt'], debug=self.DEBUG) self.assertEqual([ 'foo-1.2.3/cheese/brie.jpg', 'foo-1.2.3/cheese/feta.jpg', 'foo-1.2.3/cheese/halumi.jpg', ], archiver.members(tmp_archive)) tmp_archive = temp_archive.make_temp_archive(items, 'zip', delete=not self.DEBUG) archive_util.remove_members_matching_patterns(tmp_archive, ['*cheese*'], debug=self.DEBUG) self.assertEqual([ 'foo-1.2.3/.import/bar.txt', 'foo-1.2.3/.import/foo.txt', 'foo-1.2.3/fruits/apple.txt', 'foo-1.2.3/fruits/durian.txt', 'foo-1.2.3/fruits/kiwi.txt', ], archiver.members(tmp_archive))
def test_duplicate_members_with_conflicts(self): a1 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple.txt'), (self.native_filename('foo-1.2.3/fruits/durian.txt'), 'durian.txt'), (self.native_filename('foo-1.2.3/fruits/kiwi.txt'), 'kiwi.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a1-') a2 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple2.txt'), (self.native_filename('foo-1.2.3/fruits/durian.txt'), 'durian.txt'), (self.native_filename('foo-1.2.3/fruits/melon.txt'), 'melon.txt'), (self.native_filename('foo-1.2.3/wine/barolo.txt'), 'barolo.txt'), (self.native_filename('foo-1.2.3/cheese/brie.txt'), 'brie.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a2-') a3 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('foo-1.2.3/fruits/strawberry.txt'), 'strawberry.txt'), (self.native_filename('foo-1.2.3/fruits/blueberry.txt'), 'blueberry.txt'), (self.native_filename('foo-1.2.3/fruits/banana.txt'), 'banana.txt'), (self.native_filename('foo-1.2.3/wine/barolo.txt'), 'barolo.txt'), (self.native_filename('foo-1.2.3/cheese/brie.txt'), 'brie2.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a3-') self.assertEqual( { 'foo-1.2.3/cheese/brie.txt': {a2, a3}, 'foo-1.2.3/fruits/apple.txt': {a1, a2}, }, archive_util.duplicate_members([a1, a2, a3], only_content_conficts=True))
def test_extract_all_with_base_dir_and_strip_common_ancestor(self): assert self.default_archive_type base_dir_to_strip = 'base-1.2.3' items = temp_archive.make_temp_item_list([ ( 'foo.txt', 'foo.txt\n' ), ]) items = temp_archive.add_base_dir(items, base_dir_to_strip) base_dir_to_add = 'added-6.6.6' tmp_archive = self.make_temp_archive_for_reading(items) tmp_dir = temp_file.make_temp_dir() tmp_archive.extract_all(tmp_dir, base_dir = base_dir_to_add, strip_common_ancestor = True) self.assertTrue( path.isfile(path.join(tmp_dir, base_dir_to_add, 'foo.txt')) )
def test_has_member(self): assert self.default_archive_type items = temp_archive.make_temp_item_list([ ( 'foo/apple.txt', 'apple.txt\n' ), ( 'foo/durian.txt', 'durian.txt\n' ), ( 'foo/kiwi.txt', 'kiwi.txt\n' ), ( 'metadata/db.json', '{}\n' ), ]) tmp_archive = self.make_temp_archive_for_reading(items) self.assertTrue( self.make_archive(tmp_archive.filename).has_member('foo/apple.txt') ) self.assertFalse( self.make_archive(tmp_archive.filename).has_member('nothere.txt') )
def test_combine_with_base_dir(self): a1 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/apple.txt'), 'apple.txt'), (self.native_filename('fruits/durian.txt'), 'durian.txt'), (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a1-') a2 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/melon.txt'), 'melon.txt'), (self.native_filename('fruits/lemon.txt'), 'lemon.txt'), (self.native_filename('fruits/dragonfruit.txt'), 'dragonfruit.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a2-') a3 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('fruits/strawberry.txt'), 'strawberry.txt'), (self.native_filename('fruits/pear.txt'), 'pear.txt'), (self.native_filename('fruits/plum.txt'), 'plum.txt'), ]), 'zip', delete=not self.DEBUG, prefix='a3-') tmp_archive = self.make_temp_file(suffix='.zip') archive_util.combine([a1, a2, a3], tmp_archive, base_dir='foo-1.2.3') self.assertEqual([ 'foo-1.2.3/fruits/apple.txt', 'foo-1.2.3/fruits/dragonfruit.txt', 'foo-1.2.3/fruits/durian.txt', 'foo-1.2.3/fruits/kiwi.txt', 'foo-1.2.3/fruits/lemon.txt', 'foo-1.2.3/fruits/melon.txt', 'foo-1.2.3/fruits/pear.txt', 'foo-1.2.3/fruits/plum.txt', 'foo-1.2.3/fruits/strawberry.txt', ], archiver.members(tmp_archive))
def test_extract_members(self): assert self.default_archive_type items = temp_archive.make_temp_item_list([ ( 'foo/apple.txt', 'apple.txt\n' ), ( 'foo/durian.txt', 'durian.txt\n' ), ( 'foo/kiwi.txt', 'kiwi.txt\n' ), ( 'metadata/db.json', '{}\n' ), ]) members = [ 'foo/apple.txt', 'foo/durian.txt', ] actual_files = self._test_extract_with_members(items, members) expected_files = members self.assertEqual( expected_files, actual_files )
def test_extract_with_exclude(self): assert self.default_archive_type items = temp_archive.make_temp_item_list([ ( 'foo/apple.txt', 'apple.txt\n' ), ( 'foo/durian.txt', 'durian.txt\n' ), ( 'foo/kiwi.txt', 'kiwi.txt\n' ), ( 'metadata/db.json', '{}\n' ), ]) include = None exclude = [ '*.txt' ] actual_files = self._test_extract_with_include_exclude(items, include, exclude) expected_files = [ 'metadata/db.json', ] self.assertEqual( expected_files, actual_files )
def test_create_with_include_and_exclude(self): self.maxDiff = None items = temp_archive.make_temp_item_list([ ( 'base-1.2.3/foo.txt', 'foo.txt\n' ), ( 'base-1.2.3/bar.txt', 'bar.txt\n' ), ( 'base-1.2.3/baz.png', 'baz.png\n' ), ( 'base-1.2.3/baz2.png', 'baz2.png\n' ), ( 'base-1.2.3/apple.pdf', 'apple.pdf\n' ), ( 'base-1.2.3/kiwi.pdf', 'kiwi.pdf\n' ), ( 'base-1.2.3/durian.pdf', 'durian.pdf\n' ), ]) include = [ '*.pdf' ] exclude = [ '*kiwi.pdf' ] expected_files = [ 'base-1.2.3/apple.pdf', 'base-1.2.3/durian.pdf', ] actual_files = self._test_create_with_include_exclude(items, include, exclude) self.assertEqual( expected_files, actual_files )
def test_member_checksums(self): a = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([ (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple.txt'), (self.native_filename('foo-1.2.3/fruits/durian.txt'), 'durian.txt'), (self.native_filename('foo-1.2.3/fruits/kiwi.txt'), 'kiwi.txt'), ]), 'zip', delete=not self.DEBUG) self.assertEqual( { 'foo-1.2.3/fruits/apple.txt': '7269b27861e2a5ba6947b6279bb5e66b23439d83a65a3c0cf529f5834ed2e7fb', 'foo-1.2.3/fruits/kiwi.txt': 'a7be44d9dda7e951298316b34ce84a1b2da8b5e0bead26118145bda4fbca9329', }, archive_util.member_checksums( a, ['foo-1.2.3/fruits/apple.txt', 'foo-1.2.3/fruits/kiwi.txt']))
def test_extract_all_with_strip_common_ancestor_and_strip_head(self): assert self.default_archive_type items = temp_archive.make_temp_item_list([ ( 'base-1.2.3/foo/apple.txt', 'apple.txt\n' ), ( 'base-1.2.3/foo/durian.txt', 'durian.txt\n' ), ( 'base-1.2.3/foo/kiwi.txt', 'kiwi.txt\n' ), ( 'base-1.2.3/metadata/db.json', '{}\n' ), ]) tmp_archive = self.make_temp_archive_for_reading(items) tmp_dir = temp_file.make_temp_dir() tmp_archive.extract_all(tmp_dir, strip_common_ancestor = True, strip_head = 'foo') actual_files = file_find.find(tmp_dir, relative = True) expected_files = [ 'apple.txt', 'durian.txt', 'kiwi.txt', 'metadata/db.json', ] self.assertEqual( expected_files, actual_files )