test: cover -x cross-device skip without root; harden OneFileSystem tests
CI / lint (pull_request) Failing after 20s
CI / build-and-test (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / lint (pull_request) Failing after 20s
CI / build-and-test (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
Add a rootless unit test that reaches the actual st_dev skip branch in both the sequential and parallel (-m) scanners: a symlink nested under the scan root points at a directory on /dev/shm (a different device than the build fs) and, under --copy-links semantics, -x must drop that subtree while a plain scan includes it. Skips only when no cross-device target exists. Integration OneFileSystem test now cleans both dest dirs up front and reports a busy test mountpoint instead of ignoring the umount result. RSYNC_COMPAT.md notes that cross-filesystem mount-point subdirectories are dropped entirely (rsync parity).
This commit is contained in:
@@ -1064,6 +1064,8 @@ class TestOneFileSystem:
|
||||
dest_plain = os.path.join(TEST_DATA_DIR, "ofs_mnt_plain_dst")
|
||||
mountpoint = os.path.join(source, "external")
|
||||
clean_dir(source)
|
||||
clean_dir(dest)
|
||||
clean_dir(dest_plain)
|
||||
os.makedirs(mountpoint)
|
||||
os.makedirs(os.path.join(source, "nested"))
|
||||
with open(os.path.join(source, "root.txt"), "wb") as f:
|
||||
@@ -1071,6 +1073,7 @@ class TestOneFileSystem:
|
||||
with open(os.path.join(source, "nested", "inner.txt"), "wb") as f:
|
||||
f.write(b"inner")
|
||||
mounted = False
|
||||
unmount_error = ""
|
||||
try:
|
||||
mount = subprocess.run(["mount", "-t", "tmpfs", "tmpfs", mountpoint],
|
||||
capture_output=True, text=True)
|
||||
@@ -1093,4 +1096,8 @@ class TestOneFileSystem:
|
||||
"without -x the mounted subtree must be transferred"
|
||||
finally:
|
||||
if mounted:
|
||||
subprocess.run(["umount", mountpoint], capture_output=True, text=True)
|
||||
umount = subprocess.run(["umount", mountpoint], capture_output=True, text=True)
|
||||
if umount.returncode != 0:
|
||||
unmount_error = umount.stderr.strip()
|
||||
if unmount_error:
|
||||
pytest.fail(f"test mountpoint {mountpoint} still mounted after umount: {unmount_error}")
|
||||
|
||||
Reference in New Issue
Block a user