From: Pádraig Brady Date: Tue, 11 Jul 2023 12:28:53 +0000 (+0100) Subject: tests: ensure utilties exit promptly upon write error X-Git-Tag: v9.4~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef47b928d0b4fb96c8d458450c941fe1eb487542;p=thirdparty%2Fcoreutils.git tests: ensure utilties exit promptly upon write error * tests/local.mk: Reference the new test. * tests/misc/write-errors.sh: A new test to ensure utilities exit promptly upon writing to /dev/full. --- diff --git a/tests/local.mk b/tests/local.mk index cc65fe6560..f35728229e 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -174,6 +174,7 @@ all_tests = \ tests/cp/no-ctx.sh \ tests/tty/tty-eof.pl \ tests/misc/read-errors.sh \ + tests/misc/write-errors.sh \ tests/tail/inotify-hash-abuse.sh \ tests/tail/inotify-hash-abuse2.sh \ tests/tail/F-vs-missing.sh \ diff --git a/tests/misc/write-errors.sh b/tests/misc/write-errors.sh new file mode 100755 index 0000000000..8cda6a7691 --- /dev/null +++ b/tests/misc/write-errors.sh @@ -0,0 +1,70 @@ +#!/bin/sh +# Make sure all of these programs promptly diagnose write errors. + +# Copyright (C) 2023 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_ timeout + +if ! test -w /dev/full || ! test -c /dev/full; then + skip_ '/dev/full is required' +fi + +# Writers that may output data indefinitely +# First word in command line is checked against built programs +echo "\ +cat /dev/zero +# TODO: comm -z /dev/zero /dev/zero +# TODO: cut -z -c1- /dev/zero +dd if=/dev/zero +expand /dev/zero +# TODO: avoid double error from expand +factor --version; yes 1 | factor +# TODO: avoid double error from factor +# TODO: fmt /dev/zero +# TODO: fold -b /dev/zero +head -z -n-1 /dev/zero +# TODO: join -a 1 -z /dev/zero /dev/null +# TODO: nl --version; yes | nl +# TODO: numfmt --version; yes 1 | numfmt +# TODO: od -v /dev/zero +paste /dev/zero +# TODO: avoid double error from paste +# TODO: pr /dev/zero +seq inf +# TODO: avoid double error from shuf +tail -n+1 -z /dev/zero +tee < /dev/zero +tr . . < /dev/zero +# TODO: avoid double error from tr +unexpand /dev/zero +# TODO: avoid double error from unexpand +# TODO: uniq -z -D /dev/zero +yes +" | +sort -k 1b,1 > all_writers || framework_failure_ + +printf '%s\n' $built_programs | +sort -k 1b,1 > built_programs || framework_failure_ + +join all_writers built_programs > built_writers || framework_failure_ + +while read writer; do + timeout 10 $SHELL -c "$writer > /dev/full" + test $? = 124 && { fail=1; echo "$writer: failed to exit" >&2; } +done < built_writers + +Exit $fail