| 226 | |
| 227 | |
| 228 | def test_chroot_zip_symlink(): |
| 229 | # type: () -> None |
| 230 | with temporary_dir() as tmp: |
| 231 | chroot = Chroot(os.path.join(tmp, "chroot")) |
| 232 | chroot.write(b"data", "directory/subdirectory/file") |
| 233 | chroot.write(b"data", "directory/subdirectory/file.foo") |
| 234 | chroot.symlink( |
| 235 | os.path.join(chroot.path(), "directory/subdirectory/file"), |
| 236 | "directory/subdirectory/symlinked", |
| 237 | ) |
| 238 | |
| 239 | cwd = os.getcwd() |
| 240 | try: |
| 241 | os.chdir(os.path.join(chroot.path(), "directory/subdirectory")) |
| 242 | chroot.symlink( |
| 243 | "file", |
| 244 | "directory/subdirectory/rel-symlinked", |
| 245 | ) |
| 246 | finally: |
| 247 | os.chdir(cwd) |
| 248 | |
| 249 | chroot.symlink(os.path.join(chroot.path(), "directory"), "symlinked") |
| 250 | zip_dst = os.path.join(tmp, "chroot.zip") |
| 251 | chroot.zip(zip_dst, exclude_file=lambda path: path.endswith(".foo")) |
| 252 | with open_zip(zip_dst) as zip: |
| 253 | assert [ |
| 254 | "directory/", |
| 255 | "directory/subdirectory/", |
| 256 | "directory/subdirectory/file", |
| 257 | "directory/subdirectory/rel-symlinked", |
| 258 | "directory/subdirectory/symlinked", |
| 259 | "symlinked/", |
| 260 | "symlinked/subdirectory/", |
| 261 | "symlinked/subdirectory/file", |
| 262 | "symlinked/subdirectory/rel-symlinked", |
| 263 | "symlinked/subdirectory/symlinked", |
| 264 | ] == sorted(zip.namelist()) |
| 265 | assert b"" == zip.read("directory/") |
| 266 | assert b"" == zip.read("directory/subdirectory/") |
| 267 | assert b"data" == zip.read("directory/subdirectory/file") |
| 268 | assert b"data" == zip.read("directory/subdirectory/rel-symlinked") |
| 269 | assert b"data" == zip.read("directory/subdirectory/symlinked") |
| 270 | assert b"" == zip.read("symlinked/") |
| 271 | assert b"" == zip.read("symlinked/subdirectory/") |
| 272 | assert b"data" == zip.read("symlinked/subdirectory/file") |
| 273 | assert b"data" == zip.read("symlinked/subdirectory/rel-symlinked") |
| 274 | assert b"data" == zip.read("symlinked/subdirectory/symlinked") |
| 275 | |
| 276 | |
| 277 | def test_deterministic_walk(): |