diff options
| author | Pádraig Brady <P@draigBrady.com> | 2023-07-11 13:28:53 +0100 |
|---|---|---|
| committer | Pádraig Brady <P@draigBrady.com> | 2023-07-17 11:28:30 +0100 |
| commit | ef47b928d0b4fb96c8d458450c941fe1eb487542 (patch) | |
| tree | 6f3af223e1e6d6e49d32a7af952bf66ee01c283f /tests/misc/write-errors.sh | |
| parent | cksum: improve problematic_chars function (diff) | |
| download | coreutils-ef47b928d0b4fb96c8d458450c941fe1eb487542.tar.gz coreutils-ef47b928d0b4fb96c8d458450c941fe1eb487542.zip | |
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.
Diffstat (limited to 'tests/misc/write-errors.sh')
| -rwxr-xr-x | tests/misc/write-errors.sh | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/misc/write-errors.sh b/tests/misc/write-errors.sh new file mode 100755 index 000000000..8cda6a769 --- /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 <https://www.gnu.org/licenses/>. + +. "${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 |
