def assert_chroot_perms(copyfn): with temporary_dir() as src: one = os.path.join(src, "one") touch(one) two = os.path.join(src, "two") touch(two) chmod_plus_x(two) with temporary_dir() as dst: chroot = Chroot(dst) copyfn(chroot, one, "one") copyfn(chroot, two, "two") assert extract_perms(one) == extract_perms( os.path.join(chroot.path(), "one")) assert extract_perms(two) == extract_perms( os.path.join(chroot.path(), "two")) zip_path = os.path.join(src, "chroot.zip") chroot.zip(zip_path) with temporary_dir() as extract_dir: with contextlib.closing(PermPreservingZipFile(zip_path)) as zf: zf.extractall(extract_dir) assert extract_perms(one) == extract_perms( os.path.join(extract_dir, "one")) assert extract_perms(two) == extract_perms( os.path.join(extract_dir, "two"))
def test_perm_preserving_zipfile_extractall(): with zip_fixture() as (zip_file, extract_dir, one, two): with contextlib.closing(PermPreservingZipFile(zip_file)) as zf: zf.extractall(extract_dir) assert extract_perms(one) == extract_perms(os.path.join(extract_dir, 'one')) assert extract_perms(two) == extract_perms(os.path.join(extract_dir, 'two'))
def test_perm_preserving_zipfile_extract(): # type: () -> None with zip_fixture() as (zip_file, extract_dir, one, two): with contextlib.closing(PermPreservingZipFile(zip_file)) as zf: zf.extract("one", path=extract_dir) zf.extract("two", path=extract_dir) assert extract_perms(one) == extract_perms(os.path.join(extract_dir, "one")) assert extract_perms(two) == extract_perms(os.path.join(extract_dir, "two"))
def zip_fixture(): with temporary_dir() as target_dir: one = os.path.join(target_dir, "one") touch(one) two = os.path.join(target_dir, "two") touch(two) chmod_plus_x(two) assert extract_perms(one) != extract_perms(two) zip_file = os.path.join(target_dir, "test.zip") with contextlib.closing(PermPreservingZipFile(zip_file, "w")) as zf: zf.write(one, "one") zf.write(two, "two") yield zip_file, os.path.join(target_dir, "extract"), one, two
def zip_fixture(): with temporary_dir() as target_dir: one = os.path.join(target_dir, 'one') touch(one) two = os.path.join(target_dir, 'two') touch(two) chmod_plus_x(two) assert extract_perms(one) != extract_perms(two) zip_file = os.path.join(target_dir, 'test.zip') with contextlib.closing(PermPreservingZipFile(zip_file, 'w')) as zf: zf.write(one, 'one') zf.write(two, 'two') yield zip_file, os.path.join(target_dir, 'extract'), one, two