summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Hoersken <info@marc-hoersken.de>2020-03-04 11:44:49 +0100
committerMarc Hoersken <info@marc-hoersken.de>2020-03-04 15:31:42 +0100
commit9aaca09044de4d4116822f25d2cf9c780d7465ce (patch)
tree143fcfc746a42c8b045f14f61ffc73a676e143fc
parent1eecb0e022423b92c79e8d946c78dcfc20ab56af (diff)
downloadcurl-9aaca09044de4d4116822f25d2cf9c780d7465ce.tar.gz
tests: try to make sleeping portable by avoiding select
select does not support just waiting on Windows: https://perldoc.perl.org/perlport.html#select Reviewed-By: Daniel Stenberg Closes #5035
-rw-r--r--tests/ftp.pm33
-rwxr-xr-xtests/ftpserver.pl6
-rwxr-xr-xtests/runtests.pl6
3 files changed, 37 insertions, 8 deletions
diff --git a/tests/ftp.pm b/tests/ftp.pm
index f4a4acedd..f7298bce6 100644
--- a/tests/ftp.pm
+++ b/tests/ftp.pm
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -20,6 +20,14 @@
#
###########################################################################
+BEGIN {
+ # portable sleeping needs Time::HiRes
+ eval {
+ no warnings "all";
+ require Time::HiRes;
+ }
+}
+
use strict;
use warnings;
@@ -30,6 +38,27 @@ use serverhelp qw(
);
#######################################################################
+# portable_sleep uses Time::HiRes::sleep if available and falls back
+# to the classic approach of using select(undef, undef, undef, ...).
+# even though that one is not portable due to being implemented using
+# select on Windows: https://perldoc.perl.org/perlport.html#select
+# On Windows it also just uses full-second sleep for waits >1 second.
+#
+sub portable_sleep {
+ my ($seconds) = @_;
+
+ if($Time::HiRes::VERSION) {
+ Time::HiRes::sleep($seconds);
+ }
+ elsif ($seconds > 1 && ($^O eq 'MSWin32' || $^O eq 'msys')) {
+ sleep($seconds);
+ }
+ else {
+ select(undef, undef, undef, $seconds);
+ }
+}
+
+#######################################################################
# pidfromfile returns the pid stored in the given pidfile. The value
# of the returned pid will never be a negative value. It will be zero
# on any file related error or if a pid can not be extracted from the
@@ -216,7 +245,7 @@ sub killpid {
}
}
last if(not scalar(@signalled));
- select(undef, undef, undef, 0.05);
+ portable_sleep(0.05);
}
}
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index 63dc3342c..431bd2586 100755
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -493,7 +493,7 @@ sub sendcontrol {
for(@a) {
sockfilt $_;
- select(undef, undef, undef, 0.01);
+ portable_sleep(0.01);
}
}
my $log;
@@ -530,7 +530,7 @@ sub senddata {
# pause between each byte
for (split(//,$l)) {
sockfiltsecondary $_;
- select(undef, undef, undef, 0.01);
+ portable_sleep(0.01);
}
}
}
@@ -3199,7 +3199,7 @@ while(1) {
logmsg("Sleep for $delay seconds\n");
my $twentieths = $delay * 20;
while($twentieths--) {
- select(undef, undef, undef, 0.05) unless($got_exit_signal);
+ portable_sleep(0.05) unless($got_exit_signal);
}
}
diff --git a/tests/runtests.pl b/tests/runtests.pl
index 3306de397..7a5f8a504 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -482,7 +482,7 @@ sub startnew {
logmsg "startnew: failed to write fake $pidfile with pid=$child\n";
}
# could/should do a while connect fails sleep a bit and loop
- sleep $timeout;
+ portable_sleep($timeout);
if (checkdied($child)) {
logmsg "startnew: child process has failed to start\n" if($verbose);
return (-1,-1);
@@ -3823,7 +3823,7 @@ sub singletest {
if($serverlogslocktimeout) {
my $lockretry = $serverlogslocktimeout * 20;
while((-f $SERVERLOGS_LOCK) && $lockretry--) {
- select(undef, undef, undef, 0.05);
+ portable_sleep(0.05);
}
if(($lockretry < 0) &&
($serverlogslocktimeout >= $defserverlogslocktimeout)) {
@@ -3840,7 +3840,7 @@ sub singletest {
# based tests might need a small delay once that the client command has
# run to avoid false test failures.
- sleep($postcommanddelay) if($postcommanddelay);
+ portable_sleep($postcommanddelay) if($postcommanddelay);
# timestamp removal of server logs advisor read lock
$timesrvrlog{$testnum} = Time::HiRes::time();