diff options
Diffstat (limited to 'tests/touch/empty-file')
-rwxr-xr-x | tests/touch/empty-file | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/touch/empty-file b/tests/touch/empty-file new file mode 100755 index 0000000..b918362 --- /dev/null +++ b/tests/touch/empty-file @@ -0,0 +1,93 @@ +#!/bin/sh +# Make sure touch can set the mtime on an empty file. + +# Copyright (C) 1998, 1999, 2000, 2005, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + + +# Volker Borchert reported that touch 3.16r (and presumably all before that) +# fails to work on SunOS 4.1.3 with `most of the recommended patches' when +# the empty file is on an NFS-mounted 4.2 volume. + +if test "$VERBOSE" = yes; then + set -x + touch --version +fi + +. $srcdir/../envvar-check + +DEFAULT_SLEEP_SECONDS=2 +SLEEP_SECONDS=${SLEEP_SECONDS=$DEFAULT_SLEEP_SECONDS} + +fail=0 + +# FIXME: find writable directories on other partitions +# and run the test in those directories, too. + +: ${TOUCH_DIR_LIST=.} + +framework_failure=0 + +for d in $TOUCH_DIR_LIST; do + rm -rf $d/a $d/b $d/c + > $d/a || framework_failure=1 + test -f $d/a || framework_failure=1 + > $d/b || framework_failure=1 + test -f $d/b || framework_failure=1 + > $d/c || framework_failure=1 + test -f $d/c || framework_failure=1 +done + +if test $framework_failure = 1; then + echo 'failure in testing framework' + exit 1 +fi + +echo sleeping for $SLEEP_SECONDS seconds... +sleep $SLEEP_SECONDS +for d in $TOUCH_DIR_LIST; do + touch $d/a || fail=1 + set x `ls -t $d/a $d/b` + test "$*" = "x $d/a $d/b" || fail=1 +done + +echo sleeping for $SLEEP_SECONDS seconds... +sleep $SLEEP_SECONDS +for d in $TOUCH_DIR_LIST; do + touch $d/b + set x `ls -t $d/a $d/b` + test "$*" = "x $d/b $d/a" || fail=1 + + if touch - 1< $d/c 2> /dev/null; then + set x `ls -t $d/a $d/c` + test "$*" = "x $d/c $d/a" || fail=1 + fi + + rm -rf $d/a $d/b $d/c +done + +if test $fail != 0; then + cat 1>&2 <<EOF +*** This test has just failed. That can happen when the test is run in an +*** NFS-mounted directory on a system whose clock is not well synchronized +*** with that of the NFS server. If you think that is the reason, set the +*** environment variable SLEEP_SECONDS to some number of seconds larger than +*** the default of $DEFAULT_SLEEP_SECONDS and rerun the test. +EOF +fi + +exit $fail |