 The test suite's file format is very simple and extensible, closely
resembling XML. All data for a single test case resides in a single
ASCII file. Labels mark the beginning and the end of all sections, and each
label must be written in its own line.  Comments are either XML-style
(enclosed with <!-- and -->) or C-style (beginning with #) and must appear
on their own lines and not alongside actual test data.  Most test data files
are syntactically valid XML, although a few files are not (lack of
support for character entities and the preservation of CR/LF characters at
the end of lines are the biggest differences).

 The file begins with a 'testcase' tag, which encompasses the remainder of
the file.

<testcase>

 Each file is split up in three main sections: reply, client and verify. The
reply section is used for the server to know what to send as a reply for the
requests curl sends, the client section defines how the client should behave
while the verify section defines how to verify that the data stored after a
command has been run ended up correctly.

 Each main section has a number of available subsections that can be
specified, that will be checked/used if specified. This document includes all
the subsections currently supported.

Main sections are 'info', 'reply', 'client' and 'verify'.

<info>
<keywords>
A newline-separated list of keywords describing what this test case uses and
tests. Try to use an already used keyword. These keywords will be used for
statistical/informational purposes.
</keywords>
</info>

<reply>
<data [nocheck="1"] [sendzero="yes"] [base64="yes"]>
data to be sent to the client on its request and later verified that it arrived
safely. Set the nocheck=1 to prevent the test script to verify the arrival
of this data.

If the data contains 'swsclose' anywhere within the start and end tag, and
this is a HTTP test, then the connection will be closed by the server after
this response is sent. If not, the connection will be kept persistent.

If the data contains 'swsbounce' anywhere within the start and end tag, the
HTTP server will detect if this is a second request using the same test and
part number and will then increase the part number with one. This is useful
for auth tests and similar.

'sendzero' set to yes means that the (FTP) server will "send" the data even if
the size is zero bytes. Used to verify curl's behaviour on zero bytes
transfers.

'base64' set to yes means that the data provided in the test-file is a chunk
of data encoded with base64. It is the only way a test case can contain binary
data. (This attribute can in fact be used on any section, but it doesn't make
much sense for other sections than "data").
</data>
<dataNUM>
Send back this contents instead of the <data> one. The num is set by:
A) The test number in the request line is >10000 and this is the remainder
of [test case number]%10000.
B) The request was HTTP and included digest details, which adds 1000 to NUM
C) If a HTTP request is NTLM type-1, it adds 1001 to num
D) If a HTTP request is NTLM type-3, it adds 1002 to num
</dataNUM>
<datacheck [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
</datacheck>
<size>
number to return on a ftp SIZE command (set to -1 to make this command fail)
</size>
<mdtm>
what to send back if the client sends a (FTP) MDTM command, set to -1 to
have it return that the file doesn't exist
</mdtm>
<postcmd>
special purpose server-command to control its behavior *after* the
reply is sent
For HTTP/HTTPS, these are supported:

wait [secs]
 - Pause for the given time
</postcmd>
<servercmd>
Special-commands for the server.
For FTP, these are supported:

REPLY [command] [return value] [response string]
 - Changes how the server responds to the [command]
COUNT [command] [num]
 - Do the REPLY change for [command] only [num] times and then go back to the
   built-in approach
DELAY [command] [secs]
 - Delay responding to this command for the given time
RETRWEIRDO
 - Enable the "weirdo" RETR case when multiple response lines appear at once
   when a file is transfered
RETRNOSIZE
 - Make sure the RETR response doesn't contain the size of the file
NOSAVE
 - Don't actually save what is received
SLOWDOWN
 - Send FTP responses with 0.1 sec delay between each byte
PASVBADIP
 - makes PASV send back an illegal IP in its 227 response

For HTTP/HTTPS:
auth_required - if this is set and a POST/PUT is made without auth, the
                server will NOT wait for the full request body to get sent
idle -          do nothing after receiving the request, just "sit idle"
stream -        continuously send data to the client, never-ending
pipe: [num] -   tell the server to expect this many HTTP requests before
                sending back anything, to allow pipelining tests
</servercmd>
</reply>

<client>

<server>
What server(s) this test case requires/uses:

file
ftp
ftp-ipv6
ftps
http
http-ipv6
https
none
scp
sftp
socks4
socks5

Give only one per line.  This subsection is mandatory.
</server>

<features>
A list of features that MUST be present in the client/library for this test to
be able to run (if these features are not present, the test will be
SKIPPED). Features testable here are:

crypto
getrlimit
GnuTLS
idn
ipv6
large_file
libz
netrc_debug
NSS
OpenSSL
SSL

as well as each protocol that curl supports.  A protocol only needs to be
specified if it is different from the server (useful when the server
is 'none').
</features>

<killserver>
Using the same syntax as in <server> but when mentioned here these servers
are explicitly KILLED when this test case is completed. Only use this if there
is no other alternatives. Using this of course requires subsequent tests to
restart servers.
</killserver>

<precheck>
A command line that if set gets run by the test script before the test. If an
output is displayed by the command, the test will be skipped and the
(single-line) output will be displayed as reason for not running the test.
Variables are substituted as in the <command> section.
</precheck>

<postcheck>
A command line that if set gets run by the test script after the test. If
the command exists with a non-zero status code, the test will be considered
to have failed. Variables are substituted as in the <command> section.
</postcheck>

<tool>
Name of tool to use instead of "curl". This tool must be built and exist
in the libtest/ directory.
</tool>

<name>
test case description
</name>

<setenv>
variable1=contents1
variable2=contents2

Set the given environment variables to the specified value before the actual
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 line to run, there's a bunch of %variables that get replaced
accordingly.

Note that the URL that gets passed to the server actually controls what data
that is returned. The last slash in the URL must be followed by a number. That
number (N) will be used by the test-server to load test case N and return the
data that is defined within the <reply><data></data></reply> section.

If a CONNECT is used to the server (to emulate HTTPS etc over proxy), the port
number given in the CONNECT request will be used to identify which test that
is being run, if the proxy host name is said to start with 'test'.

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 client/stdout section is used.

Available substitute variables include:
%HOSTIP    - IPv6 address of the host running this test
%HOSTPORT  - Port number of the HTTP server
%HOST6IP   - IPv6 address of the host running this test
%HOST6PORT - IPv6 port number of the HTTP server
%HTTPSPORT - Port number of the HTTPS server
%FTPPORT   - Port number of the FTP server
%FTP6PORT  - IPv6 port number of the FTP server
%FTPSPORT  - Port number of the FTPS server
%FTP2PORT  - Port number of the FTP server 2
%TFTPPORT  - Port number of the TFTP server
%TFTP6PORT - IPv6 port number of the TFTP server
%SSHPORT   - Port number of the SCP/SFTP server
%SOCKSPORT - Port number of the SOCKS4/5 server
%SRCDIR    - Full path to the source dir
%PWD       - Current directory
%CURL      - Path to the curl executable
%USER      - Login ID of the user running the test
</command>

<file name="log/filename">
This creates the named file with this content before the test case is run,
which is useful if the test case needs a file to act on.
Variables are substituted on the contents of the file as in the <command>
section.
</file>

<stdin>
Pass this given data on stdin to the tool.
</stdin>

</client>

<verify>
<errorcode>
numerical error code curl is supposed to return. Specify a list of accepted
error codes by separating multiple numbers with comma. See test 237 for an
example.
</errorcode>
<strip>
One regex per line that is removed from the protocol dumps before the
comparison is made. This is very useful to remove dependencies on dynamically
changing protocol data such as port numbers or user-agent strings.
</strip>
<strippart>
One perl op per line that operates on the protocol dump. This is pretty
advanced. Example: "s/^EPRT .*/EPRT stripped/"
</strippart>
<protocol [nonewline="yes"]>
the protocol dump curl should transmit, if 'nonewline' is set, we will cut
off the trailing newline of this given data before comparing with the one
actually sent by the client
Variables are substituted as in the <command> section.
</protocol>
<stdout [mode="text"]>
This verifies that this data was passed to stdout.

Use the mode="text" attribute if the output is in text mode on platforms that
have a text/binary difference.
</stdout>
<file name="log/filename" [mode="text"]>
The file's contents must be identical to this after the test is complete.

Use the mode="text" attribute if the output is in text mode on platforms that
have a text/binary difference.
</file>
<stripfile>
One perl op per line that operates on the file before being compared. This is
pretty advanced. Example: "s/^EPRT .*/EPRT stripped/"
</stripfile>
<upload>
the contents of the upload data curl should have sent
</upload>
<valgrind>
disable - disables the valgrind log check for this test
</valgrind>
</verify>

</testcase>
