]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: cksum: ensure --check handles I/O errors
authoroech3 <79379754+oech3@users.noreply.github.com>
Sun, 11 Jan 2026 18:14:44 +0000 (18:14 +0000)
committerPádraig Brady <P@draigBrady.com>
Sun, 11 Jan 2026 18:16:18 +0000 (18:16 +0000)
* tests/cksum/cksum-c.sh: Use strace to inject EIO upon read(),
and verify it's handled appropriately.
From https://github.com/coreutils/coreutils/pull/167

tests/cksum/cksum-c.sh

index a355bdd63de2fd903a0f6c24d351686623830fbe..2e93ad6e1f4d7bd5b5b87c813107295e3974502c 100755 (executable)
@@ -201,4 +201,22 @@ grep 'the --tag option is meaningless when verifying checksums' err || fail=1
 # an emulation wrapper for legacy *sum utils.
 cksum -a md5 /dev/null | cksum --untagged --check || fail=1
 
+# Ensure I/O errors handled appropriately
+if strace -o /dev/null -P path -e fault=read:error=EIO true; then
+  touch ok eio || framework_failure_
+  cksum -a md5 eio ok > check.md5 || fail=1
+  # Test one of the files being checked returns EIO
+  returns_ 1 strace -o /dev/null -P eio -e fault=read:error=EIO \
+   cksum --check check.md5 2>err >out || fail=1
+
+  printf '%s\n' 'eio: FAILED open or read' 'ok: OK' >exp || framework_failure_
+  compare exp out || fail=1
+
+  # Generate the expected error using cat:
+  strace -o /dev/null -P eio -e fault=read:error=EIO cat eio 2> exp.t
+  sed 's/cat/cksum/' < exp.t > exp && grep eio: exp && echo \
+   'cksum: WARNING: 1 listed file could not be read' >>exp || framework_failure_
+  compare exp err || fail=1
+fi
+
 Exit $fail