From 6ec7d1881c0be453c7ece03a7dcc51681c514778 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Thu, 16 Sep 1999 03:43:10 +0000 Subject: * Fix some tests. --- Makefile.am | 1 + tests/ChangeLog | 10 ++++++++++ tests/test_driver.pl | 35 ++++++++++++++++++++++++++++------- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Makefile.am b/Makefile.am index bb613c3..1319654 100644 --- a/Makefile.am +++ b/Makefile.am @@ -116,6 +116,7 @@ check-regression: if $(PERL) -v >/dev/null 2>&1; then \ case `cd $(srcdir); pwd` in `pwd`) : ;; \ *) test -d tests || mkdir tests; \ + rm -f srctests; \ if ln -s "$(srcdir)/tests" srctests; then \ for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \ rm -f tests/$$f; ln -s ../srctests/$$f tests; \ diff --git a/tests/ChangeLog b/tests/ChangeLog index ee4b4a3..dd763b1 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,15 @@ 1999-09-15 Paul D. Smith + * test_driver.pl (touch): Rewrite this function. Previously it + used to use utime() to hard-set the time based on the current + local clock. This fails badly on networked filesystems where the + FS server clock is skewed from the local clock: normally modifying + a file causes it to get a mod time based on the _server's_ clock. + Hard-setting it based on the _local_ clock causes gratuitous + errors and makes the tests unreliable except on local filesystems. + The new function will simply modify the file, allowing the + filesystem to set the mod time as it sees fit. + * scripts/features/parallelism: The second test output could change depending on how fast some scripts completed; use "sleep" to force the order we want. diff --git a/tests/test_driver.pl b/tests/test_driver.pl index 7dd7fda..001d247 100644 --- a/tests/test_driver.pl +++ b/tests/test_driver.pl @@ -785,19 +785,40 @@ sub remove_directory_tree_inner return 1; } +# We used to use this behavior for this function: +# +#sub touch +#{ +# local (@filenames) = @_; +# local ($now) = time; +# local ($file); +# +# foreach $file (@filenames) +# { +# utime ($now, $now, $file) +# || (open (TOUCHFD, ">> $file") && close (TOUCHFD)) +# || &error ("Couldn't touch $file: $!\n", 1); +# } +# return 1; +#} +# +# But this behaves badly on networked filesystems where the time is +# skewed, because it sets the time of the file based on the _local_ +# host. Normally when you modify a file, it's the _remote_ host that +# determines the modtime, based on _its_ clock. So, instead, now we open +# the file and write something into it to force the remote host to set +# the modtime correctly according to its clock. +# + sub touch { local (@filenames) = @_; - local ($now) = time; local ($file); - foreach $file (@filenames) - { - utime ($now, $now, $file) - || (open (TOUCHFD, ">> $file") && close (TOUCHFD)) - || &error ("Couldn't touch $file: $!\n", 1); + foreach $file (@filenames) { + (open(T, ">> $file") && print(T "\n") && close(T)) + || &error("Couldn't touch $file: $!\n", 1); } - return 1; } # open a file, write some stuff to it, and close it. -- cgit v1.2.3