* Fix some tests.

This commit is contained in:
Paul Smith 1999-09-16 03:43:10 +00:00
parent c800367385
commit 6ec7d1881c
3 changed files with 39 additions and 7 deletions

View file

@ -116,6 +116,7 @@ check-regression:
if $(PERL) -v >/dev/null 2>&1; then \ if $(PERL) -v >/dev/null 2>&1; then \
case `cd $(srcdir); pwd` in `pwd`) : ;; \ case `cd $(srcdir); pwd` in `pwd`) : ;; \
*) test -d tests || mkdir tests; \ *) test -d tests || mkdir tests; \
rm -f srctests; \
if ln -s "$(srcdir)/tests" srctests; then \ if ln -s "$(srcdir)/tests" srctests; then \
for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \ for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \
rm -f tests/$$f; ln -s ../srctests/$$f tests; \ rm -f tests/$$f; ln -s ../srctests/$$f tests; \

View file

@ -1,5 +1,15 @@
1999-09-15 Paul D. Smith <psmith@gnu.org> 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 * scripts/features/parallelism: The second test output could
change depending on how fast some scripts completed; use "sleep" change depending on how fast some scripts completed; use "sleep"
to force the order we want. to force the order we want.

View file

@ -785,19 +785,40 @@ sub remove_directory_tree_inner
return 1; 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 sub touch
{ {
local (@filenames) = @_; local (@filenames) = @_;
local ($now) = time;
local ($file); local ($file);
foreach $file (@filenames) foreach $file (@filenames) {
{ (open(T, ">> $file") && print(T "\n") && close(T))
utime ($now, $now, $file) || &error("Couldn't touch $file: $!\n", 1);
|| (open (TOUCHFD, ">> $file") && close (TOUCHFD))
|| &error ("Couldn't touch $file: $!\n", 1);
} }
return 1;
} }
# open a file, write some stuff to it, and close it. # open a file, write some stuff to it, and close it.