From e707c8a875eda329578b5cda879215d3c9129137 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sun, 7 Feb 2010 12:22:58 +0100 Subject: [PATCH] tests: add the help-version sanity tests from coreutils * tests/help-version: New file, from coreutils. * Makefile.am (TESTS): Add it. --- Makefile.am | 1 + tests/help-version | 237 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100755 tests/help-version diff --git a/Makefile.am b/Makefile.am index f285e68..816e9f4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -104,6 +104,7 @@ check-local: $(FILES_TO_CHECK) $(bin_PROGRAMS) gzip.doc.gz TESTS = \ tests/helin-segv \ + tests/help-version \ tests/hufts \ tests/memcpy-abuse \ tests/mixed \ diff --git a/tests/help-version b/tests/help-version new file mode 100755 index 0000000..ebdc69a --- /dev/null +++ b/tests/help-version @@ -0,0 +1,237 @@ +#! /bin/sh +# Make sure all these programs work properly +# when invoked with --help or --version. + +# Copyright (C) 2000-2010 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 . + +test "$VERBOSE" = yes && set -x + +# Ensure that $SHELL is set to *some* value and exported. +# This is required for dircolors, which would fail e.g., when +# invoked via debuild (which removes SHELL from the environment). +test "x$SHELL" = x && SHELL=/bin/sh +export SHELL + +: ${srcdir=.} +. "$srcdir/tests/init.sh" + +expected_failure_status_chroot=125 +expected_failure_status_env=125 +expected_failure_status_nice=125 +expected_failure_status_nohup=125 +expected_failure_status_stdbuf=125 +expected_failure_status_su=125 +expected_failure_status_timeout=125 +expected_failure_status_printenv=2 +expected_failure_status_tty=3 +expected_failure_status_sort=2 +expected_failure_status_expr=3 +expected_failure_status_lbracket=2 +expected_failure_status_dir=2 +expected_failure_status_ls=2 +expected_failure_status_vdir=2 + +expected_failure_status_cmp=2 +expected_failure_status_zcmp=2 +expected_failure_status_sdiff=2 +expected_failure_status_diff3=2 +expected_failure_status_diff=2 +expected_failure_status_zdiff=2 +expected_failure_status_zgrep=2 +expected_failure_status_zegrep=2 +expected_failure_status_zfgrep=2 + +test "$built_programs" \ + || { echo "$this_test: no programs built!?!" 1>&2; Exit 1; } + +for lang in C fr da; do + for i in $built_programs; do + + # Skip `test'; it doesn't accept --help or --version. + test $i = test && continue; + + # false fails even when invoked with --help or --version. + if test $i = false; then + env LC_MESSAGES=$lang $i --help >/dev/null && fail=1 + env LC_MESSAGES=$lang $i --version >/dev/null && fail=1 + continue + fi + + # The just-built install executable is always named `ginstall'. + test $i = install && i=ginstall + + # Make sure they exit successfully, under normal conditions. + env $i --help > h-$i || fail=1 + env $i --version >/dev/null || fail=1 + + # Make sure they mention the bug-reporting address in --help output. + grep "$PACKAGE_BUGREPORT" h-$i > /dev/null || fail=1 + rm -f h-$i + + # Make sure they fail upon `disk full' error. + if test -w /dev/full && test -c /dev/full; then + env $i --help >/dev/full 2>/dev/null && fail=1 + env $i --version >/dev/full 2>/dev/null && fail=1 + status=$? + test $i = [ && prog=lbracket || prog=$i + eval "expected=\$expected_failure_status_$prog" + test x$expected = x && expected=1 + if test $status = $expected; then + : # ok + else + fail=1 + echo "*** $i: bad exit status \`$status' (expected $expected)," 1>&2 + echo " with --help or --version output redirected to /dev/full" 1>&2 + fi + fi + done +done + +bigZ_in=bigZ-in.Z +zin=zin.gz +zin2=zin2.gz + +tmp=tmp-$$ +tmp_in=in-$$ +tmp_in2=in2-$$ +tmp_dir=dir-$$ +tmp_out=out-$$ +mkdir $tmp || fail=1 +cd $tmp || fail=1 + +comm_args="$tmp_in $tmp_in" +csplit_args="$tmp_in //" +cut_args='-f 1' +join_args="$tmp_in $tmp_in" +tr_args='a a' + +chmod_args="a+x $tmp_in" +# Punt on these. +chgrp_args=--version +chown_args=--version +mkfifo_args=--version +mknod_args=--version +# Punt on uptime, since it fails (e.g., failing to get boot time) +# on some systems, and we shouldn't let that stop `make check'. +uptime_args=--version + +# Create a file in the current directory, not in $TMPDIR. +mktemp_args=mktemp.XXXX + +cmp_args="$tmp_in $tmp_in2" + +# Tell dd not to print the line with transfer rate and total. +# The transfer rate would vary between runs. +dd_args=status=noxfer + +zdiff_args="$zin $zin2" +zcmp_args="$zin $zin2" +zcat_args=$zin +gunzip_args=$zin +zmore_args=$zin +zless_args=$zin +znew_args=$bigZ_in +zforce_args=$zin +zgrep_args="z $zin" +zegrep_args="z $zin" +zfgrep_args="z $zin" +gzexe_args=$tmp_in + +diff_args="$tmp_in $tmp_in2" +sdiff_args="$tmp_in $tmp_in2" +diff3_args="$tmp_in $tmp_in2 $tmp_in2" +cp_args="$tmp_in $tmp_in2" +ln_args="$tmp_in ln-target" +ginstall_args="$tmp_in $tmp_in2" +mv_args="$tmp_in $tmp_in2" +mkdir_args=$tmp_dir/subdir +rmdir_args=$tmp_dir +rm_args=$tmp_in +shred_args=$tmp_in +touch_args=$tmp_in2 +truncate_args="--reference=$tmp_in $tmp_in2" + +basename_args=$tmp_in +dirname_args=$tmp_in +expr_args=foo + +# Punt, in case GNU `id' hasn't been installed yet. +groups_args=--version + +pathchk_args=$tmp_in +yes_args=--version +logname_args=--version +nohup_args=--version +printf_args=foo +seq_args=10 +sleep_args=0 +su_args=--version +stdbuf_args="-oL true" +timeout_args=--version + +# I'd rather not run sync, since it spins up disks that I've +# deliberately caused to spin down (but not unmounted). +sync_args=--version + +test_args=foo + +# This is necessary in the unusual event that there is +# no valid entry in /etc/mtab. +df_args=/ + +# This is necessary in the unusual event that getpwuid (getuid ()) fails. +id_args=-u + +# Use env to avoid invoking built-in sleep of Solaris 11's /bin/sh. +env sleep 10m & +kill_args=$! + +link_args="$tmp_in link-target" +unlink_args=$tmp_in + +ln -s . slink +readlink_args=slink + +stat_args=$tmp_in +unlink_args=$tmp_in +lbracket_args=": ]" + +# Ensure that each program "works" (exits successfully) when doing +# something more than --help or --version. +for i in $built_programs; do + # Skip these. + case $i in chroot|stty|tty|false|chcon|runcon) continue;; esac + + rm -rf $tmp_in $tmp_in2 $tmp_dir $tmp_out $bigZ_in $zin $zin2 + echo z |gzip > $zin + cp $zin $zin2 + cp $zin $bigZ_in + echo > $tmp_in + echo > $tmp_in2 + mkdir $tmp_dir + # echo ================== $i + test $i = [ && prog=lbracket || prog=$i + eval "args=\$${prog}_args" + if env $i $args < $tmp_in > $tmp_out; then + : # ok + else + echo FAIL: $i + fail=1 + fi + rm -rf $tmp_in $tmp_in2 $tmp_out $tmp_dir +done + +Exit $fail -- 2.47.2