1
0
mirror of https://github.com/moparisthebest/curl synced 2025-02-28 09:21:50 -05:00

Add 'timeout' and 'delay' attributes support for the test harness <command> subsection

This commit is contained in:
Yang Tse 2008-04-25 04:19:50 +00:00
parent d0a506661f
commit 113d0937de
4 changed files with 58 additions and 35 deletions

View File

@ -7,9 +7,17 @@
Changelog
Yang Tse (25 Apr 2008)
- Added 'timeout' and 'delay' attributes support for the test harness
<command> subsection.
Daniel Fandrich (24 Apr 2008)
- Made --stderr able to redirect all stderr messages.
Yang Tse (23 Apr 2008)
- Improve synchronization between test harness runtests.pl script
and test harness servers to minimize risk of false test failures.
Daniel Fandrich (22 Apr 2008)
- Added support for running on Symbian OS.

View File

@ -200,7 +200,7 @@ command is run. They are cleared again after the command has been run.
Variables are first substituted as in the <command> section.
</setenv>
<command [option="no-output"]>
<command [option="no-output"] [timeout="secs"] [delay="secs"]>
command line to run, there's a bunch of %variables that get replaced
accordingly.
@ -217,6 +217,19 @@ Set option="no-output" to prevent the test script to slap on the --output
argument that directs the output to a file. The --output is also not added if
the verify/stdout section is used.
Set timeout="secs" to override default server logs advisor read lock timeout.
This timeout is used by the test harness, once that the command has completed
execution, to wait for the test server to write out server side log files and
remove the lock that advised not to read them. The "secs" parameter is the not
negative integer number of seconds for the timeout. This 'timeout' attribute
is documented for completeness sake, but is deep test harness stuff and only
needed for very singular and specific test cases. Avoid using it.
Set delay="secs" to introduce a time delay once that the command has completed
execution and before the <postcheck> section runs. The "secs" parameter is the
not negative integer number of seconds for the delay. This 'delay' attribute
is intended for very specific test cases, and normally not needed.
Available substitute variables include:
%CLIENTIP - IPv4 address of the client running curl
%CLIENT6IP - IPv6 address of the client running curl

View File

@ -17,7 +17,7 @@ ftp
<name>
FTP download with strict timeout and slow CWD
</name>
<command>
<command timeout="1">
ftp://%HOSTIP:%FTPPORT/path/to/file/190 -m %FTPTIME2
</command>
</client>

View File

@ -203,9 +203,8 @@ my $sshdvernum; # for socks server, ssh daemon version number
my $sshdverstr; # for socks server, ssh daemon version string
my $sshderror; # for socks server, ssh daemon version error
my $EXP_big_delay = 300;
my $EXP_max_delay = 0;
my $EXP_max_testn = 0;
my $defserverlogslocktimeout = 20; # timeout to await server logs lock removal
my $defpostcommanddelay = 0; # delay between command and postcheck sections
#######################################################################
# variables the command line options may set
@ -1991,6 +1990,22 @@ sub singletest {
}
}
my $serverlogslocktimeout = $defserverlogslocktimeout;
if($cmdhash{'timeout'}) {
# test is allowed to override default server logs lock timeout
if($cmdhash{'timeout'} =~ /(\d+)/) {
$serverlogslocktimeout = $1 if($1 >= 0);
}
}
my $postcommanddelay = $defpostcommanddelay;
if($cmdhash{'delay'}) {
# test is allowed to specify a delay after command is executed
if($cmdhash{'delay'} =~ /(\d+)/) {
$postcommanddelay = $1 if($1 > 0);
}
}
my $cmdargs;
if(!$tool) {
# run curl, add -v for debug information output
@ -2106,22 +2121,25 @@ sub singletest {
# including server request log files used for protocol verification.
# So, if the lock file exists the script waits here a certain amount
# of time until the server removes it, or the given time expires.
# Test harness ssh server does not have this synchronization mechanism,
# this implies that some ssh server based tests might need a small delay
# in the postcheck section to avoid false test failures.
my $lockretry = ($testnum == 190) ? 10 : $EXP_big_delay ;
while((-f $SERVERLOGS_LOCK) && $lockretry--) {
sleep(1);
}
if($testnum != 190) {
if($EXP_big_delay - $lockretry > $EXP_max_delay) {
$EXP_max_delay = $EXP_big_delay - $lockretry;
$EXP_max_testn = $testnum;
if($serverlogslocktimeout) {
my $lockretry = $serverlogslocktimeout * 4;
while((-f $SERVERLOGS_LOCK) && $lockretry--) {
select(undef, undef, undef, 0.25);
}
if(($lockretry < 0) &&
($serverlogslocktimeout >= $defserverlogslocktimeout)) {
logmsg "Warning: server logs lock timeout ",
"($serverlogslocktimeout seconds) expired\n";
}
}
# Test harness ssh server does not have this synchronization mechanism,
# this implies that some ssh server based tests might need a small delay
# once that the client command has run to avoid false test failures.
sleep($postcommanddelay) if($postcommanddelay);
# run the postcheck command
my @postcheck= getpart("client", "postcheck");
$cmd = $postcheck[0];
@ -2224,22 +2242,8 @@ sub singletest {
}
if(@protocol) {
my @out;
my $retry = 5;
# Verify the sent request. Sometimes, like in test 513 on some hosts,
# curl will return back faster than the server writes down the request
# to its file, so we might need to wait here for a while to see if the
# file gets written a bit later.
while($retry--) {
@out = loadarray($SERVERIN);
if(!$out[0]) {
# nothing there yet, wait a while and try again
sleep(1);
}
}
# Verify the sent request
my @out = loadarray($SERVERIN);
# what to cut off from the live protocol sent by curl
my @strip = getpart("verify", "strip");
@ -3147,8 +3151,6 @@ if($skipped) {
}
}
logmsg "EXPERIMENTAL: lock max delay ($EXP_max_delay seconds) for test # $EXP_max_testn \n";
if($total && ($ok != $total)) {
exit 1;
}