def test_abs_symlink(tmpdir): cas_dir = os.path.join(str(tmpdir), "cas") cas_cache = CASCache(cas_dir, log_directory=os.path.join(str(tmpdir), "logs")) try: d = CasBasedDirectory(cas_cache) Content_to_check = "two step file" test_dir = os.path.join(str(tmpdir), "importfrom") filesys_discription = [ ("a", "D", ""), ("a/l", "S", "/target"), ("target", "D", ""), ("target/file", "F", Content_to_check), ] generate_import_root(test_dir, filesys_discription) d.import_files(test_dir) digest = d.descend("a", "l", follow_symlinks=True).index["file"].get_digest() with open(cas_cache.objpath(digest)) as fp: content = fp.read() assert Content_to_check == content finally: cas_cache.release_resources()
def test_bad_symlinks(tmpdir): cas_dir = os.path.join(str(tmpdir), "cas") cas_cache = CASCache(cas_dir, log_directory=os.path.join(str(tmpdir), "logs")) try: d = CasBasedDirectory(cas_cache) test_dir = os.path.join(str(tmpdir), "importfrom") filesys_discription = [("a", "D", ""), ("a/l", "S", "../target"), ("target", "F", "You got me")] generate_import_root(test_dir, filesys_discription) d.import_files(test_dir) exp_reason = "not-a-directory" with pytest.raises(VirtualDirectoryError) as error: d.descend("a", "l", follow_symlinks=True) assert error.reason == exp_reason with pytest.raises(VirtualDirectoryError) as error: d.descend("a", "l") assert error.reason == exp_reason with pytest.raises(VirtualDirectoryError) as error: d.descend("a", "f") assert error.reason == exp_reason finally: cas_cache.release_resources()
def create_new_casdir(root_number, cas_cache, tmpdir): d = CasBasedDirectory(cas_cache) d.import_files(os.path.join(tmpdir, "content", "root{}".format(root_number)), properties=["mtime"]) digest = d._get_digest() assert digest.hash != empty_hash_ref return d
def test_descend(tmpdir): cas_dir = os.path.join(str(tmpdir), "cas") cas_cache = CASCache(cas_dir, log_directory=os.path.join(str(tmpdir), "logs")) try: d = CasBasedDirectory(cas_cache) Content_to_check = "You got me" test_dir = os.path.join(str(tmpdir), "importfrom") filesys_discription = [("a", "D", ""), ("a/l", "D", ""), ("a/l/g", "F", Content_to_check)] generate_import_root(test_dir, filesys_discription) d.import_files(test_dir) digest = d.descend("a", "l").index["g"].get_digest() with open(cas_cache.objpath(digest)) as fp: content = fp.read() assert Content_to_check == content finally: cas_cache.release_resources()
def test_bad_sym_escape(tmpdir): cas_dir = os.path.join(str(tmpdir), "cas") cas_cache = CASCache(cas_dir, log_directory=os.path.join(str(tmpdir), "logs")) try: d = CasBasedDirectory(cas_cache) test_dir = os.path.join(str(tmpdir), "importfrom") filesys_discription = [ ("jail", "D", ""), ("jail/a", "D", ""), ("jail/a/l", "S", "../../target"), ("target", "D", ""), ("target/file", "F", "two step file"), ] generate_import_root(test_dir, filesys_discription) d.import_files(os.path.join(test_dir, "jail")) with pytest.raises(VirtualDirectoryError) as error: d.descend("a", "l", follow_symlinks=True) assert error.reason == "directory-not-found" finally: cas_cache.release_resources()