runtests.pl: simplify the datacheck read section

Also, document that numbered datacheck sections are possible.
This commit is contained in:
Dan Fandrich 2017-05-06 09:04:00 +02:00
parent 6dc3422d48
commit ba5fa1c7a8
2 changed files with 17 additions and 28 deletions

View File

@ -86,11 +86,18 @@ The connect section is used instead of the 'data' for all CONNECT
requests. The remainder of the rules for the data section then apply but with
a connect prefix.
</connect>
<datacheck [nonewline="yes"]>
<datacheck [mode="text"] [nonewline="yes"]>
if the data is sent but this is what should be checked afterwards. If
'nonewline' is set, we will cut off the trailing newline of this given data
before comparing with the one actually received by the client
before comparing with the one actually received by the client.
Use the mode="text" attribute if the output is in text mode on platforms that
have a text/binary difference.
</datacheck>
<datacheckNUM [nonewline="yes"] [mode="text"]>
The contents of numbered datacheck sections are appended to the non-numbered
one.
</datacheckNUM>
<size>
number to return on a ftp SIZE command (set to -1 to make this command fail)
</size>
@ -176,6 +183,7 @@ ftp-ipv6
ftps
http
http-ipv6
http-pipe
http-proxy
http-unix
https

View File

@ -3333,31 +3333,12 @@ sub singletest {
}
logmsg sprintf("test %04d...", $testnum) if(!$automakestyle);
# extract the reply data
my @reply = getpart("reply", "data");
my @replycheck = getpart("reply", "datacheck");
my %replyattr = getpartattr("reply", "data");
my %replycheckattr = getpartattr("reply", "datacheck");
if (@replycheck) {
# we use this file instead to check the final output against
# get the mode attribute
my $filemode=$replycheckattr{'mode'};
if($filemode && ($filemode eq "text") && $has_textaware) {
# text mode when running on windows: fix line endings
map s/\r\n/\n/g, @replycheck;
map s/\n/\r\n/g, @replycheck;
}
if($replycheckattr{'nonewline'}) {
# Yes, we must cut off the final newline from the final line
# of the datacheck
chomp($replycheck[$#replycheck]);
}
for my $partsuffix (('1', '2', '3', '4')) {
my @reply;
if (partexists("reply", "datacheck")) {
for my $partsuffix (('', '1', '2', '3', '4')) {
my @replycheckpart = getpart("reply", "datacheck".$partsuffix);
if(@replycheckpart || partexists("reply", "datacheck".$partsuffix) ) {
if(@replycheckpart) {
my %replycheckpartattr = getpartattr("reply", "datacheck".$partsuffix);
# get the mode attribute
my $filemode=$replycheckpartattr{'mode'};
@ -3371,13 +3352,13 @@ sub singletest {
# of the datacheck
chomp($replycheckpart[$#replycheckpart]);
}
push(@replycheck, @replycheckpart);
push(@reply, @replycheckpart);
}
}
@reply=@replycheck;
}
else {
# check against the data section
@reply = getpart("reply", "data");
# get the mode attribute
my $filemode=$replyattr{'mode'};
if($filemode && ($filemode eq "text") && $has_textaware) {