Hi Jim, Regarding rev. 94a2bd5b, `tests: improve perl-based tempdir handling', I wonder if it might be worthwhile to add a PID check in the cleanup handler for race avoidance.
I think File::Temp does this internally as well, but it looks like chmod_tree will just warn about the failed chdir and procede to recursively chmod whatever directory it was in at the time if $dir is yanked out from under it. I've included a patch that sets up the signal handler as a closure around a copy of the PID at the time of installation and only cleans up in the original process. Thanks, Bo On Mon, Apr 28, 2008 at 9:48 AM, Jim Meyering <[EMAIL PROTECTED]> wrote: > [I hesitated to post so many small test-only patches all together, > but it's better than not posting at all. Besides, maybe posting > at all will evoke some review feedback. So here goes... ] > > From 6bbbd65d895505c506105ea12e44922433e63574 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Thu, 24 Apr 2008 12:31:13 +0200 > Subject: [PATCH] tests: do define built_programs > > * tests/check.mk (built_programs): Define here, where it's used. > This definition was in now-removed tests/misc/Makefile.am. > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > tests/check.mk | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/tests/check.mk b/tests/check.mk > index cb4373a..978313b 100644 > --- a/tests/check.mk > +++ b/tests/check.mk > @@ -36,6 +36,9 @@ vc_exe_in_TESTS: Makefile > check: vc_exe_in_TESTS > .PHONY: vc_exe_in_TESTS > > +built_programs = \ > + (cd $(top_builddir)/src && MAKEFLAGS= $(MAKE) -s built_programs.list) > + > # Append this, because automake does the same. > TESTS_ENVIRONMENT = \ > abs_top_builddir='$(abs_top_builddir)' \ > -- > 1.5.5.1.68.gbdcd8 > > > From cca6a8d7e525edb232160046d074fff16a76bbb5 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Sun, 27 Apr 2008 21:31:08 +0200 > Subject: [PATCH] tweak HACKING advice > > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > HACKING | 9 +++++++-- > 1 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/HACKING b/HACKING > index d616443..b40ff00 100644 > --- a/HACKING > +++ b/HACKING > @@ -26,11 +26,16 @@ That downloads the entire repository, including revision > control history > dating back to 1991. The repository (the part you download, and which > resides in coreutils/.git) currently weighs in at about 30MB. So you > don't want to download it more often than necessary. Once downloaded, > -you can get incremental updates by running this command from inside > -your new coreutils/ directory: > +you can get incremental updates by running one of these commands from > +inside your new coreutils/ directory: > > +If you have made *no* changes: > git pull > > +If you *have* made changes and committed them to "master", do this: > + git fetch > + git rebase origin > + > > *Before* you commit changes > =========================== > -- > 1.5.5.1.68.gbdcd8 > > > From 8dc387dba567da10e2e90107fd044baaef580145 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Thu, 24 Apr 2008 12:43:20 +0200 > Subject: [PATCH] tests: cp/perm (usually not run) was failing on systems > with SELinux > > * tests/cp/perm: Use stat to get the permission string, not ls. > This test was run only when RUN_VERY_EXPENSIVE_TESTS=yes was set > in the environment. It would fail on SELinux-enable systems > because ls-generated permission strings would not match, e.g., > "test _-rw-r--r--+ = _-rw-r--r--" would fail. > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > tests/cp/perm | 9 +++------ > 1 files changed, 3 insertions(+), 6 deletions(-) > > diff --git a/tests/cp/perm b/tests/cp/perm > index b24221f..b482c17 100755 > --- a/tests/cp/perm > +++ b/tests/cp/perm > @@ -41,9 +41,7 @@ for u in 31 37 2; do > for o_perm in r w x rw wx xr rwx; do > touch src || exit 1 > chmod u=r,g=rx,o= src || exit 1 > - set _ `ls -l src` > - shift > - expected_perms=$1 > + expected_perms=$(stat --format=%A src) > rm -f dest > test $existing_dest = yes && { > touch dest || exit 1 > @@ -52,8 +50,7 @@ for u in 31 37 2; do > $cmd $force src dest || exit 1 > test "$cmd" = mv && test -f src && exit 1 > test "$cmd" = cp && { test -f src || exit 1; } > - set _ `ls -l dest` > - shift > + actual_perms=$(stat --format=%A dest) > > case "$cmd:$force:$existing_dest" in > cp:*:yes) > @@ -68,7 +65,7 @@ for u in 31 37 2; do > expected_perms=`echo $expected_perms|sed > 's/..\(..\).$/--\1-/'` > ;; > esac > - test _$1 = _$expected_perms || exit 1 > + test _$actual_perms = _$expected_perms || exit 1 > # Perform only one iteration when there's no existing destination. > test $existing_dest = no && break 3 > done > -- > 1.5.5.1.68.gbdcd8 > > > From 427f179542e9f7228f77affdd5a4c50a573b4894 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Thu, 24 Apr 2008 12:50:24 +0200 > Subject: [PATCH] tests: move another file (expensive) into test-lib.sh > > * tests/expensive: Remove file. Move contents into ... > * tests/test-lib.sh (expensive_): ...here. New function. > * tests/du/fd-leak: Update caller to use the new function. > * tests/mv/leak-fd: Likewise. > * tests/rm/hash: Likewise. > * tests/tail-2/big-4gb: Likewise. > * tests/Makefile.am (EXTRA_DIST): Remove its name. > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > tests/Makefile.am | 1 - > tests/du/fd-leak | 5 +++-- > tests/expensive | 28 ---------------------------- > tests/mv/leak-fd | 8 ++++---- > tests/rm/hash | 3 +-- > tests/tail-2/big-4gb | 2 +- > tests/test-lib.sh | 13 +++++++++++++ > 7 files changed, 22 insertions(+), 38 deletions(-) > delete mode 100644 tests/expensive > > diff --git a/tests/Makefile.am b/tests/Makefile.am > index 7dfafac..2a16989 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -12,7 +12,6 @@ EXTRA_DIST = \ > README \ > check.mk \ > envvar-check \ > - expensive \ > group-names \ > input-tty \ > lang-default \ > diff --git a/tests/du/fd-leak b/tests/du/fd-leak > index c4080ff..73fe4f8 100755 > --- a/tests/du/fd-leak > +++ b/tests/du/fd-leak > @@ -21,10 +21,11 @@ if test "$VERBOSE" = yes; then > du --version > fi > > +. $top_srcdir/tests/test-lib.sh > + > # Call this an expensive test. It's not that expensive, but command line > # limitations might induce failure on some losing systems. > -. $top_srcdir/tests/expensive > -. $top_srcdir/tests/test-lib.sh > +expensive_ > > # Create 1296 (36^2) files. > # Their names and separating spaces take up 3887 bytes. > diff --git a/tests/expensive b/tests/expensive > deleted file mode 100644 > index c365f70..0000000 > --- a/tests/expensive > +++ /dev/null > @@ -1,28 +0,0 @@ > -# Is a test expensive? > - > -# Copyright (C) 2000, 2004 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 <http://www.gnu.org/licenses/>. > - > -if test "$RUN_EXPENSIVE_TESTS" != yes; then > - cat <<EOF >&2 > -$0: This test is relatively expensive, so it is disabled by default. > -To run it anyway, rerun make check with the RUN_EXPENSIVE_TESTS > -environment variable set to yes. E.g., > - > - env RUN_EXPENSIVE_TESTS=yes make check > - > -EOF > - (exit 77); exit 77 > -fi > diff --git a/tests/mv/leak-fd b/tests/mv/leak-fd > index 549d256..1ecdb20 100755 > --- a/tests/mv/leak-fd > +++ b/tests/mv/leak-fd > @@ -23,15 +23,15 @@ if test "$VERBOSE" = yes; then > mv --version > fi > > -# This test is relatively expensive, and might well evoke a > -# framework-failure on systems with a smaller command-line length > -. $top_srcdir/tests/expensive > - > . $top_srcdir/tests/test-lib.sh > skip_if_root_ > cleanup_() { rm -rf "$other_partition_tmpdir"; } > . "$abs_top_srcdir/tests/other-fs-tmpdir" > > +# This test is relatively expensive, and might well evoke a > +# framework-failure on systems with a smaller command-line length > +expensive_ > + > b="0 1 2 3 4 5 6 7 8 9 > a b c d e f g h i j k l m n o p q r s t u v w x y z > _A _B _C _D _E _F _G _H _I _J _K _L _M _N _O _P _Q _R _S _T _U _V _W _X _Y > _Z" > diff --git a/tests/rm/hash b/tests/rm/hash > index 0b2b6c5..56f96e4 100755 > --- a/tests/rm/hash > +++ b/tests/rm/hash > @@ -18,14 +18,13 @@ > # You should have received a copy of the GNU General Public License > # along with this program. If not, see <http://www.gnu.org/licenses/>. > > -. $top_srcdir/tests/expensive > - > if test "$VERBOSE" = yes; then > set -x > rm --version > fi > > . $top_srcdir/tests/test-lib.sh > +expensive_ > > # Create a hierarchy with 3*26 leaf directories, each at depth 153. > echo "$0: creating 78 trees, each of depth 153; this will take a while..." > >&2 > diff --git a/tests/tail-2/big-4gb b/tests/tail-2/big-4gb > index b7d2528..8b64c6e 100755 > --- a/tests/tail-2/big-4gb > +++ b/tests/tail-2/big-4gb > @@ -22,8 +22,8 @@ if test "$VERBOSE" = yes; then > tail --version > fi > > -. $top_srcdir/tests/expensive > . $top_srcdir/tests/test-lib.sh > +expensive_ > > # Create a file of size exactly 4GB (2^32) with 8 bytes > # at the beginning and another set of 8 bytes at the end. > diff --git a/tests/test-lib.sh b/tests/test-lib.sh > index 8f56ab1..78ac97d 100644 > --- a/tests/test-lib.sh > +++ b/tests/test-lib.sh > @@ -151,6 +151,19 @@ environment variable set to yes. E.g., > fi > } > > +expensive_() > +{ > + if test "$RUN_EXPENSIVE_TESTS" != yes; then > + skip_test_ ' > +This test is relatively expensive, so it is disabled by default. > +To run it anyway, rerun make check with the RUN_EXPENSIVE_TESTS > +environment variable set to yes. E.g., > + > + env RUN_EXPENSIVE_TESTS=yes make check > +' > + fi > +} > + > require_root_() > { > uid_is_privileged_ || skip_test_ "must be run as root" > -- > 1.5.5.1.68.gbdcd8 > > > From 53d8a2c412cccd2ee5ee7760f6fcf1890c5e9e3b Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Thu, 24 Apr 2008 12:58:24 +0200 > Subject: [PATCH] tests: put root-only (usually skipped) tests at the end > > * tests/Makefile.am (TESTS): Don't list root-only tests explicitly. > Instead, just use $(root_tests). > * tests/check.mk (vc_exe_in_TESTS): Now that root_tests are separate, > parse out the union of $(TESTS) and $(root_tests). > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > tests/Makefile.am | 16 ++-------------- > tests/check.mk | 8 ++++++-- > 2 files changed, 8 insertions(+), 16 deletions(-) > > diff --git a/tests/Makefile.am b/tests/Makefile.am > index 2a16989..f340eeb 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -88,7 +88,6 @@ TESTS = \ > rm/empty-inacc \ > rm/empty-name \ > rm/f-1 \ > - rm/fail-2eperm \ > rm/fail-eacces \ > rm/fail-eperm \ > rm/hash \ > @@ -101,8 +100,6 @@ TESTS = \ > rm/interactive-once \ > rm/ir-1 \ > rm/isatty \ > - rm/no-give-up \ > - rm/one-file-system \ > rm/r-1 \ > rm/r-2 \ > rm/r-3 \ > @@ -136,7 +133,6 @@ TESTS = \ > misc/pr \ > misc/df-P \ > misc/pwd-unreadable-parent \ > - misc/chcon \ > misc/chcon-fail \ > misc/selinux \ > misc/cut \ > @@ -218,7 +214,6 @@ TESTS = \ > chmod/thru-dangling \ > chmod/umask-x \ > chmod/usage \ > - chown/basic \ > chown/deref \ > chown/preserve-root \ > chown/separator \ > @@ -228,7 +223,6 @@ TESTS = \ > cp/backup-dir \ > cp/backup-is-src \ > cp/cp-HL \ > - cp/cp-a-selinux \ > cp/cp-deref \ > cp/cp-i \ > cp/cp-mv-backup \ > @@ -251,13 +245,11 @@ TESTS = \ > cp/parent-perm-race \ > cp/perm \ > cp/preserve-2 \ > - cp/preserve-gid \ > cp/proc-zero-len \ > cp/r-vs-symlink \ > cp/same-file \ > cp/slink-2-slink \ > cp/sparse \ > - cp/special-bits \ > cp/special-f \ > cp/src-base-dot \ > cp/symlink-slash \ > @@ -306,7 +298,6 @@ TESTS = \ > ls/infloop \ > ls/inode \ > ls/m-option \ > - ls/nameless-uid \ > ls/no-arg \ > ls/proc-selinux-segfault \ > ls/recursive \ > @@ -328,7 +319,6 @@ TESTS = \ > mkdir/selinux \ > mkdir/special-1 \ > mkdir/t-slash \ > - mkdir/writable-under-readonly \ > mv/acl \ > mv/atomic \ > mv/atomic2 \ > @@ -365,7 +355,6 @@ TESTS = \ > mv/partition-perm \ > mv/perm-1 \ > mv/reply-no \ > - mv/sticky-to-xpart \ > mv/to-symlink \ > mv/trailing-slash \ > mv/update \ > @@ -376,7 +365,6 @@ TESTS = \ > rmdir/fail-perm \ > rmdir/ignore \ > rmdir/t-slash \ > - tail-2/append-only \ > tail-2/assert \ > tail-2/assert-2 \ > tail-2/big-4gb \ > @@ -392,9 +380,9 @@ TESTS = \ > touch/no-create-missing \ > touch/no-rights \ > touch/not-owner \ > - touch/now-owned-by-other \ > touch/obsolescent \ > touch/read-only \ > - touch/relative > + touch/relative \ > + $(root_tests) > > include $(top_srcdir)/tests/check.mk > diff --git a/tests/check.mk b/tests/check.mk > index 978313b..f62661c 100644 > --- a/tests/check.mk > +++ b/tests/check.mk > @@ -18,12 +18,16 @@ > # Collect test names from the line matching /^TESTS = \\$$/ to the following > # one that does not end in '\'. > _v = TESTS > +_w = root_tests > vc_exe_in_TESTS: Makefile > @rm -f t1 t2 > @if test -d $(top_srcdir)/.git && test $(srcdir) = .; then \ > - sed -n '/^$(_v) =[ ]*\\$$/,/[^\]$$/p' \ > + { sed -n '/^$(_v) =[ ]*\\$$/,/[^\]$$/p' \ > $(srcdir)/Makefile.am \ > - | sed 's/^ *//;/^\$$.*/d;/^$(_v) =/d' \ > + | sed 's/^ *//;/^\$$.*/d;/^$(_v) =/d'; \ > + sed -n '/^$(_w) =[ ]*\\$$/,/[^\]$$/p' \ > + $(srcdir)/Makefile.am \ > + | sed 's/^ *//;/^\$$.*/d;/^$(_w) =/d'; } \ > | tr -s '\012\\' ' ' | fmt -1 | sort -u > t1 && \ > for f in `cd $(top_srcdir) && build-aux/vc-list-files $(subdir)`; > do \ > f=`echo $$f|sed 's!^$(subdir)/!!'`; \ > -- > 1.5.5.1.68.gbdcd8 > > > From dfdb532fd3472304da08fb35859cdfee3caaf5c6 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Fri, 25 Apr 2008 09:36:54 +0200 > Subject: [PATCH] tests: reorder some tests in the long list > > * tests/Makefile.am (TESTS): Move some tests that use sleep > "up" in the list so that they don't delay even a little the > completion of "make check". Also run a chmod test early. > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > tests/Makefile.am | 30 +++++++++++++++--------------- > 1 files changed, 15 insertions(+), 15 deletions(-) > > diff --git a/tests/Makefile.am b/tests/Makefile.am > index f340eeb..785e438 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -23,10 +23,9 @@ EXTRA_DIST = \ > sparse-file \ > test-lib.sh > > -## N O T E :: Please do not add new tests/ directories. > -## There are too many already. Put new tests in misc/. > +## N O T E :: Do not add more names to this list. > +## N O T E :: Even these are expected to go away. > SUBDIRS = cut head join pr sort tac tail test tr uniq wc > -## N O T E :: Please do not add new directories. > > root_tests = \ > chown/basic \ > @@ -66,46 +65,52 @@ EXTRA_DIST += $(TESTS) > # will execute the test script rather than the standard utility. > > # Regarding ordering in SUBDIRS, place early in the list the tools that > -# are most commonly used in test scripts. Every test script uses rm > -# and chmod, so they have to be very early. > -# Ordering within misc/ should handle the rest. > +# are most commonly used in test scripts. Nearly every test script uses > +# rm and chmod, so they appear early in the list. > > -# Ordering: > +# Notes on the ordering of these tests: > # help-version comes early because it's a basic sanity test. > # Put seq early, since lots of other tests use it. > +# Put tests that sleep early, but not all together, so in parallel builds > +# they share time with tests that burn CPU, not with others that sleep. > # Put head-elide-tail early, because it's long-running. > > TESTS = \ > misc/help-version \ > - chgrp/basic \ > rm/cycle \ > + chmod/no-x \ > + chgrp/basic \ > rm/dangling-symlink \ > + misc/ls-time \ > rm/deep-1 \ > rm/deep-2 \ > rm/dir-no-w \ > rm/dir-nonrecur \ > rm/dot-rel \ > + rm/isatty \ > rm/empty-inacc \ > rm/empty-name \ > rm/f-1 \ > rm/fail-eacces \ > rm/fail-eperm \ > + tail-2/assert \ > rm/hash \ > rm/i-1 \ > rm/i-never \ > rm/i-no-r \ > + tail-2/infloop-1 \ > rm/ignorable \ > rm/inaccessible \ > rm/interactive-always \ > rm/interactive-once \ > rm/ir-1 \ > - rm/isatty \ > rm/r-1 \ > rm/r-2 \ > rm/r-3 \ > rm/r-4 \ > rm/readdir-bug \ > rm/rm1 \ > + touch/empty-file \ > rm/rm2 \ > rm/rm3 \ > rm/rm4 \ > @@ -122,7 +127,7 @@ TESTS = \ > chgrp/recurse \ > misc/seq \ > misc/head-elide-tail \ > - misc/ls-time \ > + tail-2/tail-n0f \ > misc/ls-misc \ > misc/date \ > misc/ptx-overrun \ > @@ -208,7 +213,6 @@ TESTS = \ > chmod/equal-x \ > chmod/equals \ > chmod/inaccessible \ > - chmod/no-x \ > chmod/octal \ > chmod/setgid \ > chmod/thru-dangling \ > @@ -365,16 +369,12 @@ TESTS = \ > rmdir/fail-perm \ > rmdir/ignore \ > rmdir/t-slash \ > - tail-2/assert \ > tail-2/assert-2 \ > tail-2/big-4gb \ > - tail-2/infloop-1 \ > tail-2/proc-ksyms \ > tail-2/start-middle \ > - tail-2/tail-n0f \ > touch/dangling-symlink \ > touch/dir-1 \ > - touch/empty-file \ > touch/fail-diag \ > touch/fifo \ > touch/no-create-missing \ > -- > 1.5.5.1.68.gbdcd8 > > > From bbafdc3c8f97cc1df1b4cd0f17280ea5f5295cfa Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Fri, 25 Apr 2008 10:41:42 +0200 > Subject: [PATCH] tests: improve perl-based tempdir handling > > Before, upon interrupt, directories would be left behind. > * tests/CuTmpdir.pm: Remove temporary directory on interrupt. > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > tests/CuTmpdir.pm | 65 > ++++++++++++++++++++++++++++++++++------------------ > 1 files changed, 42 insertions(+), 23 deletions(-) > > diff --git a/tests/CuTmpdir.pm b/tests/CuTmpdir.pm > index 60eec90..f9d2c00 100644 > --- a/tests/CuTmpdir.pm > +++ b/tests/CuTmpdir.pm > @@ -1,7 +1,7 @@ > package CuTmpdir; > # create, then chdir into a temporary sub-directory > > -# Copyright (C) 2007 Free Software Foundation, Inc. > +# Copyright (C) 2007-2008 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 > @@ -26,12 +26,44 @@ our $ME = $0 || "<???>"; > > my $dir; > > -sub skip_test > +sub skip_test($) > { > - warn "$ME: skipping test: unsafe working directory name\n"; > + warn "$ME: skipping test: unsafe working directory name: `$_[0]'\n"; > exit 77; > } > > +sub chmod_1 > +{ > + my $name = $_; > + > + # Skip symlinks and non-directories. > + -l $name || !-d _ > + and return; > + > + chmod 0700, $name; > +} > + > +sub chmod_tree > +{ > + chdir $dir > + or warn "$ME: failed to chdir to $dir: $!\n"; > + # Perform the equivalent of find . -type d -print0|xargs -0 chmod -R 700. > + my $options = {untaint => 1, wanted => \&chmod_1}; > + find ($options, '.'); > +} > + > +sub on_sig_remove_tmpdir > +{ > + my ($sig) = @_; > + if (defined $dir) > + { > + chmod_tree; > + File::Temp::cleanup; > + } > + $SIG{$sig} = 'DEFAULT'; > + kill $sig, $$; > +} > + > sub import { > my $prefix = $_[1]; > > @@ -47,35 +79,22 @@ sub import { > > # Untaint for the upcoming mkdir. > $prefix =~ m!^([EMAIL PROTECTED]/]+)$! > - or skip_test; > + or skip_test $prefix; > $prefix = $1; > > + foreach my $sig (qw (INT TERM HUP)) > + { > + $SIG{$sig} = \&on_sig_remove_tmpdir; > + } > + > $dir = File::Temp::tempdir("$prefix.tmp-XXXX", CLEANUP => 1 ); > chdir $dir > or warn "$ME: failed to chdir to $dir: $!\n"; > } > > -sub wanted > -{ > - my $name = $_; > - > - # Skip symlinks and non-directories. > - -l $name || !-d _ > - and return; > - > - chmod 0700, $name; > -} > - > END { > my $saved_errno = $?; > - if (defined $dir) > - { > - chdir $dir > - or warn "$ME: failed to chdir to $dir: $!\n"; > - # Perform the equivalent of find . -type d -print0|xargs -0 chmod -R > 700. > - my $options = {untaint => 1, wanted => \&wanted}; > - find ($options, '.'); > - } > + chmod_tree; > $? = $saved_errno; > } > > -- > 1.5.5.1.68.gbdcd8 > > > From 816e56a3deff5d95c946b52622a60c17d6d74ee4 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Fri, 25 Apr 2008 10:59:47 +0200 > Subject: [PATCH] tests: ensure at least one failure when $built_programs is > empty > > Before, this test and others would pass with empty $built_programs. > * tests/misc/help-version: Fail if built_programs is empty. > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > tests/misc/help-version | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/tests/misc/help-version b/tests/misc/help-version > index 6cbf138..da900a5 100755 > --- a/tests/misc/help-version > +++ b/tests/misc/help-version > @@ -40,6 +40,9 @@ expected_failure_status_vdir=2 > > fail=0 > > +test "$built_programs" \ > + || { echo "$this_test: no programs built!?!" 1>&2; (exit $fail); exit > $fail; } > + > for lang in C fr da; do > for i in $built_programs; do > > -- > 1.5.5.1.68.gbdcd8 > > > From 972e2737abf30c522c029051a13354756413ea46 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Fri, 25 Apr 2008 14:39:38 +0200 > Subject: [PATCH] tests: don't source envvar-check manually, test-lib.sh does > it > > * tests/cp/abuse: Remove ". $top_srcdir/tests/envvar-check". > * tests/cp/parent-perm: Likewise. > * tests/cp/special-f: Likewise. > * tests/ls/proc-selinux-segfault: Likewise. > * tests/misc/help-version: Likewise. > * tests/mkdir/selinux: Likewise. > * tests/mv/sticky-to-xpart: Likewise. > * tests/touch/now-owned-by-other: Likewise. > * tests/sample-test: Remove commented out suggestion. > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > tests/cp/abuse | 1 - > tests/cp/parent-perm | 1 - > tests/cp/special-f | 1 - > tests/ls/proc-selinux-segfault | 1 - > tests/misc/help-version | 1 - > tests/mkdir/selinux | 1 - > tests/mv/sticky-to-xpart | 1 - > tests/sample-test | 1 - > tests/touch/now-owned-by-other | 1 - > 9 files changed, 0 insertions(+), 9 deletions(-) > > diff --git a/tests/cp/abuse b/tests/cp/abuse > index f4f215f..737a3eb 100755 > --- a/tests/cp/abuse > +++ b/tests/cp/abuse > @@ -21,7 +21,6 @@ if test "$VERBOSE" = yes; then > cp --version > fi > > -. $top_srcdir/tests/envvar-check > . $top_srcdir/tests/lang-default > . $top_srcdir/tests/test-lib.sh > > diff --git a/tests/cp/parent-perm b/tests/cp/parent-perm > index d2c2533..77bcf75 100755 > --- a/tests/cp/parent-perm > +++ b/tests/cp/parent-perm > @@ -21,7 +21,6 @@ if test "$VERBOSE" = yes; then > cp --version > fi > > -. $top_srcdir/tests/envvar-check > . $top_srcdir/tests/test-lib.sh > > working_umask_or_skip_ > diff --git a/tests/cp/special-f b/tests/cp/special-f > index cf684e3..a2e67ba 100755 > --- a/tests/cp/special-f > +++ b/tests/cp/special-f > @@ -22,7 +22,6 @@ if test "$VERBOSE" = yes; then > cp --version > fi > > -. $top_srcdir/tests/envvar-check > . $top_srcdir/tests/lang-default > . $top_srcdir/tests/test-lib.sh > > diff --git a/tests/ls/proc-selinux-segfault b/tests/ls/proc-selinux-segfault > index 60cfe55..79ea523 100755 > --- a/tests/ls/proc-selinux-segfault > +++ b/tests/ls/proc-selinux-segfault > @@ -21,7 +21,6 @@ if test "$VERBOSE" = yes; then > ls --version > fi > > -. $top_srcdir/tests/envvar-check > . $top_srcdir/tests/test-lib.sh > > f=/proc/sys > diff --git a/tests/misc/help-version b/tests/misc/help-version > index da900a5..25364df 100755 > --- a/tests/misc/help-version > +++ b/tests/misc/help-version > @@ -25,7 +25,6 @@ test "$VERBOSE" = yes && set -x > test "x$SHELL" = x && SHELL=/bin/sh > export SHELL > > -. $top_srcdir/tests/envvar-check > . $top_srcdir/tests/test-lib.sh > > expected_failure_status_nohup=127 > diff --git a/tests/mkdir/selinux b/tests/mkdir/selinux > index c81669d..f0795b1 100755 > --- a/tests/mkdir/selinux > +++ b/tests/mkdir/selinux > @@ -27,7 +27,6 @@ fi > # mcstrans-0.2.8-1.fc9, the following commands may mistakenly exit > # successfully, in spite of the invalid context string. > > -. $top_srcdir/tests/envvar-check > . $top_srcdir/tests/lang-default > . $top_srcdir/tests/test-lib.sh > > diff --git a/tests/mv/sticky-to-xpart b/tests/mv/sticky-to-xpart > index 1578ae8..940770b 100755 > --- a/tests/mv/sticky-to-xpart > +++ b/tests/mv/sticky-to-xpart > @@ -24,7 +24,6 @@ if test "$VERBOSE" = yes; then > mv --version > fi > > -. $top_srcdir/tests/envvar-check > . $top_srcdir/tests/lang-default > . $top_srcdir/tests/test-lib.sh > require_root_ > diff --git a/tests/sample-test b/tests/sample-test > index c081504..e6ef5b6 100644 > --- a/tests/sample-test > +++ b/tests/sample-test > @@ -21,7 +21,6 @@ if test "$VERBOSE" = yes; then > FIXME --version > fi > > -# FIXME: . $top_srcdir/tests/envvar-check > # FIXME: . $top_srcdir/tests/lang-default > . $top_srcdir/tests/test-lib.sh > # FIXME: skip_if_root_ > diff --git a/tests/touch/now-owned-by-other b/tests/touch/now-owned-by-other > index 7aaa4f3..2f85850 100755 > --- a/tests/touch/now-owned-by-other > +++ b/tests/touch/now-owned-by-other > @@ -21,7 +21,6 @@ if test "$VERBOSE" = yes; then > touch --version > fi > > -. $top_srcdir/tests/envvar-check > . $top_srcdir/tests/test-lib.sh > require_root_ > > -- > 1.5.5.1.68.gbdcd8 > > > From 5a3b0c4805630ab0d509b54987c284cac16d2de5 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Fri, 25 Apr 2008 15:20:19 +0200 > Subject: [PATCH] tests: remove temporary log file upon catchable signal > > * check.mk (am__check_pre): Add signal handler to remove [EMAIL PROTECTED] > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > build-aux/check.mk | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/build-aux/check.mk b/build-aux/check.mk > index be255c4..9d909c6 100644 > --- a/build-aux/check.mk > +++ b/build-aux/check.mk > @@ -104,6 +104,8 @@ am__check_pre = \ > $(SH_E_WORKAROUND); \ > tst=`echo "$$src" | sed 's|^.*/||'`; \ > rm -f [EMAIL PROTECTED]; \ > +trap 'st=$$?; rm -f '\''$(abs_builddir)/[EMAIL PROTECTED]'\''; (exit $$st); > exit $$st' \ > + 1 2 13 15; \ > $(mkdir_p) "$$(echo '$@'|$(_dirname))" || exit; \ > if test -f "./$$src"; then dir=./; \ > elif test -f "$$src"; then dir=; \ > -- > 1.5.5.1.68.gbdcd8 > > > From d6ec836387bc245a17e65f337452c9809bfcdeec Mon Sep 17 00:00:00 2001 > From: Jim Meyering <[EMAIL PROTECTED]> > Date: Sat, 26 Apr 2008 23:40:03 +0200 > Subject: [PATCH] move wc tests from own subdir into a single script > > * configure.ac (AC_CONFIG_FILES): Remove wc/Makefile from the list. > * tests/Makefile.am (SUBDIRS): Remove wc from the list. > (TESTS): Add misc/wc. > * tests/misc/wc: New file, derived from tests/wc/Tests.pm. > * tests/wc/Test.pm: Remove file. > > Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> > --- > configure.ac | 1 - > tests/Makefile.am | 3 +- > tests/misc/wc | 59 ++++++++++++++++++++++++++++++++++++++++++++++ > tests/wc/Test.pm | 68 > ----------------------------------------------------- > 4 files changed, 61 insertions(+), 70 deletions(-) > create mode 100755 tests/misc/wc > delete mode 100644 tests/wc/Test.pm > > diff --git a/configure.ac b/configure.ac > index adf2903..6a7c5a8 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -354,6 +354,5 @@ AC_CONFIG_FILES( > tests/test/Makefile > tests/tr/Makefile > tests/uniq/Makefile > - tests/wc/Makefile > ) > AC_OUTPUT > diff --git a/tests/Makefile.am b/tests/Makefile.am > index 785e438..8dde07e 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -25,7 +25,7 @@ EXTRA_DIST = \ > > ## N O T E :: Do not add more names to this list. > ## N O T E :: Even these are expected to go away. > -SUBDIRS = cut head join pr sort tac tail test tr uniq wc > +SUBDIRS = cut head join pr sort tac tail test tr uniq > > root_tests = \ > chown/basic \ > @@ -141,6 +141,7 @@ TESTS = \ > misc/chcon-fail \ > misc/selinux \ > misc/cut \ > + misc/wc \ > misc/wc-files0-from \ > misc/wc-files0 \ > misc/cat-proc \ > diff --git a/tests/misc/wc b/tests/misc/wc > new file mode 100755 > index 0000000..539b1dd > --- /dev/null > +++ b/tests/misc/wc > @@ -0,0 +1,59 @@ > +#!/bin/sh > +# Basic tests for "wc". > + > +# Copyright (C) 1997, 2003, 2006, 2008 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 <http://www.gnu.org/licenses/>. > + > +: ${srcdir=.} > +. $top_srcdir/tests/require-perl > + > +me=`echo $0|sed 's,.*/,,'` > +exec $PERL -w -I$top_srcdir/tests -MCoreutils -M"CuTmpdir qw($me)" -- - > <<\EOF > +require 5.003; > +use strict; > + > +my $prog = 'wc'; > + > +# Turn off localisation of executable's ouput. > [EMAIL PROTECTED](LANGUAGE LANG LC_ALL)} = ('C') x 3; > + > +my $degenerate = "d41d8cd98f00b204e9800998ecf8427e"; > + > +my @Tests = > + ( > + ['a0', '-c', {IN_PIPE=>''}, {OUT=>"0\n"}], > + ['a1', '-l', {IN_PIPE=>''}, {OUT=>"0\n"}], > + ['a2', '-w', {IN_PIPE=>''}, {OUT=>"0\n"}], > + ['a3', '-c', {IN_PIPE=>'x'}, {OUT=>"1\n"}], > + ['a4', '-w', {IN_PIPE=>'x'}, {OUT=>"1\n"}], > + ['a5', '-w', {IN_PIPE=>"x y\n"}, {OUT=>"2\n"}], > + ['a6', '-w', {IN_PIPE=>"x y\nz"}, {OUT=>"3\n"}], > + # Remember, -l counts *newline* bytes, not logical lines. > + ['a7', '-l', {IN_PIPE=>"x y"}, {OUT=>"0\n"}], > + ['a8', '-l', {IN_PIPE=>"x y\n"}, {OUT=>"1\n"}], > + ['a9', '-l', {IN_PIPE=>"x\ny\n"}, {OUT=>"2\n"}], > + ['b0', '', {IN_PIPE=>""}, {OUT=>" 0 0 > 0\n"}], > + ['b1', '', {IN_PIPE=>"a b\nc\n"}, {OUT=>" 2 3 > 6\n"}], > + ['c0', '-L', {IN_PIPE=>"1\n12\n"}, {OUT=>"2\n"}], > + ['c1', '-L', {IN_PIPE=>"1\n123\n1\n"}, {OUT=>"3\n"}], > + ['c2', '-L', {IN_PIPE=>"\n123456"}, {OUT=>"6\n"}], > + ); > + > +my $save_temps = $ENV{DEBUG}; > +my $verbose = $ENV{VERBOSE}; > + > +my $fail = run_tests ($prog, $prog, [EMAIL PROTECTED], $save_temps, > $verbose); > +exit $fail; > +EOF > diff --git a/tests/wc/Test.pm b/tests/wc/Test.pm > deleted file mode 100644 > index dae08ff..0000000 > --- a/tests/wc/Test.pm > +++ /dev/null > @@ -1,68 +0,0 @@ > -# Test "wc". > - > -# Copyright (C) 1997, 2003, 2006 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 <http://www.gnu.org/licenses/>. > - > -package Test; > -require 5.002; > -use strict; > - > -$Test::input_via_stdin = 1; > - > -my @tv = ( > -# test flags input expected output expected return > code > -['a0', '-c', '', "0\n", 0], > -['a1', '-l', '', "0\n", 0], > -['a2', '-w', '', "0\n", 0], > -['a3', '-c', 'x', "1\n", 0], > -['a4', '-w', 'x', "1\n", 0], > -['a5', '-w', "x y\n", "2\n", 0], > -['a6', '-w', "x y\nz", "3\n", 0], > -# Remember, -l counts *newline* bytes, not logical lines. > -['a7', '-l', "x y", "0\n", 0], > -['a8', '-l', "x y\n", "1\n", 0], > -['a9', '-l', "x\ny\n", "2\n", 0], > -['b0', '', "", "0 0 0\n", 0], > -['b1', '', "a b\nc\n", "2 3 6\n", 0], > -['c0', '-L', "1\n12\n", "2\n", 0], > -['c1', '-L', "1\n123\n1\n", "3\n", 0], > -['c2', '-L', "\n123456", "6\n", 0], > -); > - > -sub test_vector > -{ > - my $t; > - foreach $t (@tv) > - { > - my ($test_name, $flags, $in, $exp, $ret) = @$t; > - # By default, test both stdin-redirection and input from a pipe. > - $Test::input_via{$test_name} = {REDIR => 0, PIPE => 0}; > - > - # But if test name ends with `-file', test only with file arg(s). > - # FIXME: unfortunately, invoking wc like `wc FILE' makes it put > - # FILE in the ouput -- and FILE is different depending on $srcdir. > - $Test::input_via{$test_name} = {FILE => 0} > - if $test_name =~ /-file$/; > - > - # Now that `wc FILE' (note, with no options) produces results > - # different from `cat FILE|wc', disable those two `PIPE' tests. > - $flags eq '' > - and delete $Test::input_via{$test_name}->{PIPE}; > - } > - > - return @tv; > -} > - > -1; > -- > 1.5.5.1.68.gbdcd8 > > > _______________________________________________ > Bug-coreutils mailing list > Bug-coreutils@gnu.org > http://lists.gnu.org/mailman/listinfo/bug-coreutils >
From dd8e78633f60a4a266b870326ac87d9844dab02b Mon Sep 17 00:00:00 2001 From: Bo Borgerson <[EMAIL PROTECTED]> Date: Mon, 28 Apr 2008 10:30:22 -0400 Subject: [PATCH] Only cleanup test dirs from the process that created them. * tests/CuTmpdir.pm (import): Use closure around current PID to avoid cleanup races. Signed-off-by: Bo Borgerson <[EMAIL PROTECTED]> --- tests/CuTmpdir.pm | 27 ++++++++++++++------------- 1 files changed, 14 insertions(+), 13 deletions(-) diff --git a/tests/CuTmpdir.pm b/tests/CuTmpdir.pm index f9d2c00..84312a0 100644 --- a/tests/CuTmpdir.pm +++ b/tests/CuTmpdir.pm @@ -52,18 +52,6 @@ sub chmod_tree find ($options, '.'); } -sub on_sig_remove_tmpdir -{ - my ($sig) = @_; - if (defined $dir) - { - chmod_tree; - File::Temp::cleanup; - } - $SIG{$sig} = 'DEFAULT'; - kill $sig, $$; -} - sub import { my $prefix = $_[1]; @@ -82,9 +70,22 @@ sub import { or skip_test $prefix; $prefix = $1; + my $original_pid = $$; + + my $on_sig_remove_tmpdir = sub { + my ($sig) = @_; + if ($$ == $original_pid and defined $dir) + { + chmod_tree; + File::Temp::cleanup; + } + $SIG{$sig} = 'DEFAULT'; + kill $sig, $$; + }; + foreach my $sig (qw (INT TERM HUP)) { - $SIG{$sig} = \&on_sig_remove_tmpdir; + $SIG{$sig} = $on_sig_remove_tmpdir; } $dir = File::Temp::tempdir("$prefix.tmp-XXXX", CLEANUP => 1 ); -- 1.5.4.3
_______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils