coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] tests: avoid reflinks when testing SEEK_DATA logic


From: Pádraig Brady
Subject: [PATCH] tests: avoid reflinks when testing SEEK_DATA logic
Date: Tue, 24 Aug 2021 22:54:16 +0100

This better tests the SEEK_HOLE logic which
replaced the original fiemap hole identification logic.
Also it avoids a false failure in sparse-2.sh
where we try to correlate the file sizes produced
by cp and dd logic.

* tests/cp/sparse-2.sh: s/cp/cp --reflink=never/
* tests/cp/sparse-extents-2.sh: Likewise.
* tests/cp/sparse-extents.sh: Likewise.
* tests/cp/sparse-perf.sh: Likewise.
* tests/cp/sparse.sh: Likewise.

Fixes https://github.com/coreutils/coreutils/issues/54
---
 tests/cp/sparse-2.sh         |  4 ++--
 tests/cp/sparse-extents-2.sh |  3 ++-
 tests/cp/sparse-extents.sh   |  6 +++---
 tests/cp/sparse-perf.sh      |  2 +-
 tests/cp/sparse.sh           | 20 ++++++++++++--------
 5 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/tests/cp/sparse-2.sh b/tests/cp/sparse-2.sh
index e75d232e3..da7503074 100755
--- a/tests/cp/sparse-2.sh
+++ b/tests/cp/sparse-2.sh
@@ -32,7 +32,7 @@ dd bs=1k seek=128 of=k < /dev/null || framework_failure_
 for append in no yes; do
   test $append = yes && printf y >> k
   for i in always never; do
-    cp --sparse=$i k k2 || fail=1
+    cp --reflink=never --sparse=$i k k2 || fail=1
     cmp k k2 || fail=1
   done
 done
@@ -48,7 +48,7 @@ dd bs=1k seek=1 of=k count=255 < /dev/zero || 
framework_failure_
 # Currently, on my F14/ext4 desktop, this K file starts off with size 256KiB,
 # (note that the K in the preceding test starts off with size 4KiB).
 # cp from coreutils-8.9 with --sparse=always reduces the size to 32KiB.
-cp --sparse=always k k2 || fail=1
+cp --reflink=never --sparse=always k k2 || fail=1
 if test $(stat -c %b k2) -ge $(stat -c %b k); then
   # If not sparse, then double check by creating with dd
   # as we're not guaranteed that seek will create a hole.
diff --git a/tests/cp/sparse-extents-2.sh b/tests/cp/sparse-extents-2.sh
index 544b959ef..24c7f6d9d 100755
--- a/tests/cp/sparse-extents-2.sh
+++ b/tests/cp/sparse-extents-2.sh
@@ -74,9 +74,10 @@ for i in $(seq 1 2 21); do
 
     # Note there is an implicit sync performed by cp on Linux kernels
     # before 2.6.39 to work around bugs in EXT4 and BTRFS.
+    # (this was removed in the release after coreutils-8.32).
     # Note also the -s parameter to the filefrag commands below
     # for the same reasons.
-    cp --sparse=always j1 j2 || fail=1
+    cp --reflink=never --sparse=always j1 j2 || fail=1
 
     cmp j1 j2 || fail_ "data loss i=$i j=$j"
     if ! filefrag -vs j1 | grep -F extent >/dev/null; then
diff --git a/tests/cp/sparse-extents.sh b/tests/cp/sparse-extents.sh
index 8f5b68653..eac44ba05 100755
--- a/tests/cp/sparse-extents.sh
+++ b/tests/cp/sparse-extents.sh
@@ -56,7 +56,7 @@ rm space.test
 
 # Ensure we read a large empty file quickly
 fallocate -l 300MiB empty.big || framework_failure_
-timeout 3 cp --sparse=always empty.big cp.test || fail=1
+timeout 3 cp --reflink=never --sparse=always empty.big cp.test || fail=1
 test $(stat -c %s empty.big) = $(stat -c %s cp.test) || fail=1
 rm empty.big cp.test
 fi
@@ -68,12 +68,12 @@ fi
 # is smaller than the size, thus identifying the file as sparse.
 # Note the '-l 1' case is an effective noop, and just checks
 # a file with a trailing hole is copied correctly.
-for sparse_mode in always auto never; do
+for sparse_arg in always auto never; do
   for alloc in '-l 4194304' '-l 1048576 -o 4194304' '-l 1'; do
     dd count=10 if=/dev/urandom iflag=fullblock of=unwritten.withdata
     truncate -s 2MiB unwritten.withdata || framework_failure_
     fallocate $alloc -n unwritten.withdata || framework_failure_
-    cp --sparse=$sparse_mode unwritten.withdata cp.test || fail=1
+    cp --reflink=never --sparse=$sparse_arg unwritten.withdata cp.test || 
fail=1
     test $(stat -c %s unwritten.withdata) = $(stat -c %s cp.test) || fail=1
     cmp unwritten.withdata cp.test || fail=1
     rm unwritten.withdata cp.test || framework_failure_
diff --git a/tests/cp/sparse-perf.sh b/tests/cp/sparse-perf.sh
index a71b854cf..d13415119 100755
--- a/tests/cp/sparse-perf.sh
+++ b/tests/cp/sparse-perf.sh
@@ -28,7 +28,7 @@ timeout 10 truncate -s1T f ||
   skip_ "unable to create a 1 TiB sparse file"
 
 # Nothing can read (much less write) that many bytes in so little time.
-timeout 10 cp f f2 || fail=1
+timeout 10 cp --reflink=never f f2 || fail=1
 
 # Ensure that the sparse file copied through SEEK_DATA has the same size
 # in bytes as the original.
diff --git a/tests/cp/sparse.sh b/tests/cp/sparse.sh
index aa95422e2..9ce02fef6 100755
--- a/tests/cp/sparse.sh
+++ b/tests/cp/sparse.sh
@@ -27,8 +27,12 @@ require_sparse_support_
 size=$(expr 128 \* 1024 + 1)
 dd bs=1 seek=$size of=sparse < /dev/null 2> /dev/null || framework_failure_
 
+# Avoid reflinking. We want to test hole navigation here.
+cp_no_reflink() {
+  cp --reflink=never "$@"
+}
 
-cp --sparse=always sparse copy || fail=1
+cp_no_reflink --sparse=always sparse copy || fail=1
 
 # Ensure that the copy has the same block count as the original.
 test $(stat --printf %b copy) -le $(stat --printf %b sparse) || fail=1
@@ -51,22 +55,22 @@ for pattern in 1 0; do
   for n in 1 2 4 11 32 $maxn; do
     parts=$(expr $maxn / $n)
 
-    rm -f sparse.in
+    rm -f file.in
 
     # Generate non sparse file for copying with alternating
     # hole/data patterns of size n * $hole_size
     for i in $(yes "$pattern" | head -n$parts); do
-      dd iflag=fullblock if=$i of=sparse.in conv=notrunc oflag=append \
+      dd iflag=fullblock if=$i of=file.in conv=notrunc oflag=append \
          bs=$hole_size count=$n status=none || framework_failure_
     done
 
-    cp --sparse=always sparse.in sparse.out   || fail=1 # non sparse input
-    cp --sparse=always sparse.out sparse.out2 || fail=1 # sparse input
+    cp_no_reflink --sparse=always file.in sparse.out || fail=1 # non sparse in
+    cp_no_reflink --sparse=always sparse.out sparse.out2 || fail=1 # sparse in
 
-    cmp sparse.in sparse.out || fail=1
-    cmp sparse.in sparse.out2 || fail=1
+    cmp file.in sparse.out || fail=1
+    cmp file.in sparse.out2 || fail=1
 
-    ls -lsh sparse.*
+    ls -lsh file.in sparse.*
   done
 done
 
-- 
2.26.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]