coreutils
[Top][All Lists]
Advanced

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

[PATCH] tests: fix tests/cp/sparse-2.sh false failure on some systems


From: Pádraig Brady
Subject: [PATCH] tests: fix tests/cp/sparse-2.sh false failure on some systems
Date: Sun, 9 May 2021 23:51:22 +0100

* tests/cp/sparse-2.sh: Double check cp --sparse=always,
with dd conv=sparse, in the case where the former didn't
create a sparse file.  Now that this test is being newly run
on macos, we're seeing a failure due to seek() not creating
holes on apfs unless the size is >= 16MiB.
---
 tests/cp/sparse-2.sh | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/tests/cp/sparse-2.sh b/tests/cp/sparse-2.sh
index 05aa7f980..e75d232e3 100755
--- a/tests/cp/sparse-2.sh
+++ b/tests/cp/sparse-2.sh
@@ -17,7 +17,7 @@
 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
-print_ver_ cp
+print_ver_ cp stat dd
 
 touch sparse_chk
 seek_data_capable_ sparse_chk \
@@ -45,10 +45,17 @@ dd bs=1k seek=1 of=k count=255 < /dev/zero || 
framework_failure_
 
 # cp should detect the all-zero blocks and convert some of them to holes.
 # How many it detects/converts currently depends on io_blksize.
-# Currently, on my F14/ext4 desktop, this K starts off with size 256KiB,
+# 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
-test $(stat -c %b k2) -lt $(stat -c %b k) || 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.
+  # apfs on darwin 19.2.0 for example was seen to not to create holes < 16MiB.
+  hole_size=$(stat -c %o k2) || framework_failure_
+  dd if=k of=k2.dd bs=$hole_size conv=sparse || framework_failure_
+  test $(stat -c %b k2) -eq $(stat -c %b k2.dd) || fail=1
+fi
 
 Exit $fail
-- 
2.26.2




reply via email to

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