summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--tests/ChangeLog10
-rw-r--r--tests/test_driver.pl35
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 <psmith@gnu.org>
+ * 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.