Hash :
07fe4bf9
Author :
Date :
2011-05-01T15:54:46
tests: fix self check spurious failure with older bash versions * tests/self-check-cleanup.test: Add trailing `:' to the test code passed to $SHELL, otherwise older versions of bash (at least 2.05 and 3.2.39) fail to correctly remove the temporary directory in the exit trap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
#! /bin/sh
# Copyright (C) 2011 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 2, 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/>.
# Sanity check for the automake testsuite.
# Check creation/removal of temporary test working directory by `./defs'.
. ./defs || Exit 1
if test x"$sh_errexit_works" != x"yes"; then
echo "$me: the shell can't have a working exit trap with 'set -e'" >&2
Exit 77
fi
# We still need a little hack to make ./defs work outside automake's
# tree `tests' subdirectory. Not a big deal.
sed "s|^testbuilddir=.*|testbuilddir='`pwd`'|" ../defs-static >defs-static
cp ../defs .
have_symlinks=false
ln -s defs foo && have_symlinks=:
export have_symlinks # Is used also by spawned shells.
dir=dummy.dir
# Check that pre-test cleanup works also with directories with
# "null" permissions, and containing broken symlinks.
mkdir $dir $dir/sub
cd $dir
touch file sub/file
if $have_symlinks; then
ln -s file symlink
ln -s none brokenlink
fi
cd ..
chmod 000 $dir/sub/* $dir/file $dir/symlink
chmod 000 $dir/sub $dir
$SHELL -c '. ./defs' dummy.test
test ! -f $dir
test ! -d $dir
test ! -r $dir
# Check that post-test cleanup works also with directories with
# "null" permissions, and containing broken symlinks.
$SHELL -c '
. ./defs || Exit 1
set -e
mkdir dir dir/sub
cd dir
touch file sub/file
if $have_symlinks; then
ln -s file symlink
ln -s none brokenlink
fi
cd ..
chmod 000 dir/sub/* dir/file dir/symlink
chmod 000 dir/sub dir
:
' dummy.test
test ! -f $dir
test ! -d $dir
test ! -r $dir
# Check that pre-test cleanup does not unduly change the permissions of
# files to which symlinks in the temporary test directory point to.
if $have_symlinks; then
mkdir dir
chmod 000 dir
: > file
chmod 000 file
mkdir $dir
cd $dir
ln -s ../dir ../file .
cd ..
$SHELL -c '. ./defs' dummy.test
ls -l # For debugging.
ls -l file | grep "^----------.*file"
ls -ld dir | grep "^d---------.*dir"
$SHELL -c '
ocwd=`pwd` || exit 1
. ./defs || Exit 1
ln -s "$ocwd/dir" "$ocwd/file" .
' dummy.test
ls -l # For debugging.
ls -l file | grep "^----------.*file"
ls -ld dir | grep "^d---------.*dir"
rmdir dir
rm -f file
fi # $have_symlinks
# Check that the cleanup trap does not remove the temporary
# test directory in case of test failure, skip, hard-error,
# or when receiving a signal.
for bailout_command in \
'Exit 1' \
'Exit 2' \
'Exit 10' \
'Exit 77' \
'Exit 99' \
'Exit 126' \
'Exit 127' \
'Exit 255' \
'kill -1 $$' \
'kill -2 $$' \
'kill -9 $$' \
'kill -13 $$' \
'kill -15 $$' \
; do
$SHELL -c ". ./defs; : > foo; $bailout_command" dummy.test && Exit 1
test -f dummy.dir/foo
done
: