From: oech3 <79379754+oech3@users.noreply.github.com> Date: Sat, 27 Dec 2025 12:45:31 +0000 (+0000) Subject: tests: consolidate csplit-io-err tests X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b467784fb7fc9d29ef9fb7a4e7866383339e304;p=thirdparty%2Fcoreutils.git tests: consolidate csplit-io-err tests * tests/csplit/csplit-io-err.sh: Replace this LD_PRELOAD test with... * tests/csplit/csplit-io-err-2.sh: This more general test, that leverages /dev/full. * tests/local.mk: Remove tests/csplit/csplit-io-err-2.sh. --- diff --git a/tests/csplit/csplit-io-err-2.sh b/tests/csplit/csplit-io-err-2.sh deleted file mode 100755 index 358d937ce8..0000000000 --- a/tests/csplit/csplit-io-err-2.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# Ensure we handle i/o errors correctly in csplit via /dev/full - -# Copyright (C) 2025 Free Software Foundation, Inc. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src -print_ver_ csplit - -cp -sf /dev/full xx01 || skip_ '/dev/full is required' - -# Get the wording of the OS-dependent ENOSPC message -returns_ 1 seq 1 >/dev/full 2>msgt || framework_failure_ -sed 's/seq: write error: //' msgt > msg || framework_failure_ - -# Create the expected error message -{ printf "%s" "csplit: xx01: " ; cat msg ; } > exp || framework_failure_ - -# the 'csplit' command should fail with exit code 1 -seq 2 | returns_ 1 csplit - 1 2> err || fail=1 -# csplit should cleanup broken files -test -e xx01 && fail=1 - -# Ensure we got the expected error message -compare exp err || fail=1 - -Exit $fail diff --git a/tests/csplit/csplit-io-err.sh b/tests/csplit/csplit-io-err.sh index 2cb06efd12..358d937ce8 100755 --- a/tests/csplit/csplit-io-err.sh +++ b/tests/csplit/csplit-io-err.sh @@ -1,7 +1,7 @@ #!/bin/sh -# Ensure we handle i/o errors correctly in csplit +# Ensure we handle i/o errors correctly in csplit via /dev/full -# Copyright (C) 2015-2025 Free Software Foundation, Inc. +# Copyright (C) 2025 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,75 +18,22 @@ . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src print_ver_ csplit -require_gcc_shared_ -if ! test -w /dev/full || ! test -c /dev/full; then - skip_ '/dev/full is required' -fi - -# Ensure error messages are in English -LC_ALL=C -export LC_ALL - -# Replace fwrite and ferror, always returning an error -cat > k.c <<'EOF' || framework_failure_ -#include -#include - -#undef fwrite -#undef fwrite_unlocked - -size_t -fwrite (const void *ptr, size_t size, size_t nitems, FILE *stream) -{ - if (stream == stderr) - { - /* Perform the normal operation of fwrite. */ - const char *p = ptr; - size_t count = size * nitems; - size_t i; - for (i = 0; i < count; i++) - if (putc ((unsigned char) *p++, stream) == EOF) - break; - return i / size; - } - else - { - fclose (fopen ("preloaded","w")); /* marker for preloaded interception */ - errno = ENOSPC; - return 0; - } -} - -size_t -fwrite_unlocked (const void *ptr, size_t size, size_t nitems, FILE *stream) -{ - return fwrite (ptr, size, nitems, stream); -} -EOF +cp -sf /dev/full xx01 || skip_ '/dev/full is required' # Get the wording of the OS-dependent ENOSPC message returns_ 1 seq 1 >/dev/full 2>msgt || framework_failure_ sed 's/seq: write error: //' msgt > msg || framework_failure_ # Create the expected error message -{ printf "%s" "csplit: write error for 'xx01': " ; cat msg ; } > exp \ - || framework_failure_ - -# compile/link the interception shared library: -gcc_shared_ k.c k.so \ - || skip_ 'failed to build forced-fwrite-failure shared library' +{ printf "%s" "csplit: xx01: " ; cat msg ; } > exp || framework_failure_ -# Split the input, and force fwrite() failure - # the 'csplit' command should fail with exit code 1 -# (checked with 'returns_ 1 ... || fail=1') -seq 10 | -(export LD_PRELOAD=$LD_PRELOAD:./k.so - returns_ 1 csplit - 1 4 2>out) || fail=1 - -test -e preloaded || skip_ 'LD_PRELOAD interception failed' +seq 2 | returns_ 1 csplit - 1 2> err || fail=1 +# csplit should cleanup broken files +test -e xx01 && fail=1 # Ensure we got the expected error message -compare exp out || fail=1 +compare exp err || fail=1 Exit $fail diff --git a/tests/local.mk b/tests/local.mk index f75f8bf75a..56a37c5242 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -317,7 +317,6 @@ all_tests = \ tests/csplit/csplit-1000.sh \ tests/csplit/csplit-heap.sh \ tests/csplit/csplit-io-err.sh \ - tests/csplit/csplit-io-err-2.sh \ tests/csplit/csplit-suppress-matched.pl \ tests/date/date-debug.sh \ tests/date/date-ethiopia.sh \