Revert "Update to 7.40.1"
[platform/upstream/curl.git] / tests / FILEFORMAT
index 2684ae3..e484272 100644 (file)
@@ -28,15 +28,18 @@ 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.
+tests. Try to use an already used keyword.  These keywords will be used for
+statistical/informational purposes and for choosing or skipping classes
+of tests.  "Keywords" must begin with an alphabetic character, "-", "["
+or "{" and may actually consist of multiple words separated by spaces
+which are treated together as a single identifier.
 </keywords>
 </info>
 
 <reply>
-<data [nocheck="1"] [sendzero="yes"] [base64="yes"]>
+<data [nocheck="yes"] [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
+safely. Set nocheck="yes" to prevent the test script from verifying the arrival
 of this data.
 
 If the data contains 'swsclose' anywhere within the start and end tag, and
@@ -56,6 +59,12 @@ transfers.
 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").
+
+For FTP file listings, the <data> section will be used *only* if you make sure
+that there has been a CWD done first to a directory named 'test-[num]' where
+[num] is the test case number. Otherwise the ftp server can't know from which
+test file to load the list content.
+
 </data>
 <dataNUM>
 Send back this contents instead of the <data> one. The num is set by:
@@ -64,7 +73,19 @@ 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
+E) If a HTTP request is Basic and num is already >=1000, it adds 1 to num
+
+Dynamically changing num in this way allows the test harness to be used to
+test authentication negotiation where several different requests must be sent
+to complete a transfer. The response to each request is found in its own data
+section.  Validating the entire negotiation sequence can be done by
+specifying a datacheck section.
 </dataNUM>
+<connect>
+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"]>
 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
@@ -87,11 +108,13 @@ wait [secs]
 </postcmd>
 <servercmd>
 Special-commands for the server.
-For FTP, these are supported:
+For FTP/SMTP/POP/IMAP, these are supported:
 
 REPLY [command] [return value] [response string]
  - Changes how the server responds to the [command]. [response string] is
    evaluated as a perl string, so it can contain embedded \r\n, for example.
+   There's a special [command] named "welcome" (without quotes) which is the
+   string sent immediately on connect as a welcome.
 COUNT [command] [num]
  - Do the REPLY change for [command] only [num] times and then go back to the
    built-in approach
@@ -105,17 +128,39 @@ RETRNOSIZE
 NOSAVE
  - Don't actually save what is received
 SLOWDOWN
- - Send FTP responses with 0.1 sec delay between each byte
+ - Send FTP responses with 0.01 sec delay between each byte
 PASVBADIP
  - makes PASV send back an illegal IP in its 227 response
+CAPA [capabilities]
+ - Enables support for and specifies a list of space separated capabilities to
+   return to the client for the IMAP CAPABILITY, POP3 CAPA and SMTP EHLO
+   commands
+AUTH [mechanisms]
+ - Enables support for SASL authentication and specifies a list of space
+   separated mechanisms for IMAP, POP3 and SMTP
 
 For HTTP/HTTPS:
-auth_required - if this is set and a POST/PUT is made without auth, the
+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
+idle            do nothing after receiving the request, just "sit idle"
+stream          continuously send data to the client, never-ending
+writedelay: [secs] delay this amount between reply packets
+pipe: [num]     tell the server to expect this many HTTP requests before
                 sending back anything, to allow pipelining tests
+skip: [num]     instructs the server to ignore reading this many bytes from a PUT
+                or POST request
+
+rtp: part [num] channel [num] size [num]
+               stream a fake RTP packet for the given part on a chosen channel
+               with the given payload size
+
+connection-monitor When used, this will log [DISCONNECT] to the server.input
+               log when the connection is disconnected.
+
+
+For TFTP:
+writedelay: [secs] delay this amount between reply packets (each packet being
+                   512 bytes payload)
 </servercmd>
 </reply>
 
@@ -130,10 +175,18 @@ ftp-ipv6
 ftps
 http
 http-ipv6
+http-proxy
 https
+httptls+srp
+httptls+srp-ipv6
+imap
 none
+pop3
+rtsp
+rtsp-ipv6
 scp
 sftp
+smtp
 socks4
 socks5
 
@@ -145,17 +198,24 @@ 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:
 
+axTLS
 crypto
+debug
 getrlimit
 GnuTLS
 idn
 ipv6
 large_file
 libz
-netrc_debug
+Metalink
 NSS
+NTLM
 OpenSSL
+socks
 SSL
+TLS-SRP
+TrackMemory
+unittest
 
 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
@@ -171,9 +231,9 @@ restart servers.
 
 <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.
+output is displayed by the command or if the return code is non-zero, 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>
@@ -184,7 +244,8 @@ to have failed. Variables are substituted as in the <command> section.
 
 <tool>
 Name of tool to use instead of "curl". This tool must be built and exist
-in the libtest/ directory.
+either in the libtest/ directory (if the tool starts with 'lib') or in the
+unit/ directory (if the tool starts with 'unit').
 </tool>
 
 <name>
@@ -200,7 +261,8 @@ 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/no-include"] [timeout="secs"] [delay="secs"]
+         [type="perl"]>
 command line to run, there's a bunch of %variables that get replaced
 accordingly.
 
@@ -209,33 +271,72 @@ 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'.
+If there's no test number found above, the HTTP test server will use the
+number following the last dot in the given hostname (made so that a CONNECT
+can still pass on test number) so that "foo.bar.123" gets treated as test case
+123. Alternatively, if an ipv6-address is provided to CONNECT, the last
+hexadecimal group in the address will be used as the test numer! For example
+the address "[1234::ff]" would be treated as test case 255.
 
-Set 'option=no-output' to prevent the test script to slap on the --output
+Set type="perl" to write the test case as a perl script. It implies that
+there's no memory debugging and valgrind gets shut off for this 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.
+the verify/stdout section is used.
+
+Set option="no-include" to prevent the test script to slap on the --include
+argument.
+
+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:
-%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
+%CLIENT6IP - IPv6 address of the client running curl
+%CLIENTIP  - IPv4 address of the client running curl
+%CURL      - Path to the curl executable
+%FTP2PORT  - Port number of the FTP server 2
 %FTP6PORT  - IPv6 port number of the FTP server
+%FTPPORT   - Port number of the FTP server
 %FTPSPORT  - Port number of the FTPS server
-%FTP2PORT  - Port number of the FTP server 2
 %FTPTIME2  - Timeout in seconds that should be just sufficient to receive
              a response from the test FTP server
-%TFTPPORT  - Port number of the TFTP server
-%TFTP6PORT - IPv6 port number of the TFTP server
-%SSHPORT   - Port number of the SCP/SFTP server
+%FTPTIME3  - Even longer than %FTPTIME2
+%GOPHER6PORT  - IPv6 port number of the Gopher server
+%GOPHERPORT   - Port number of the Gopher server
+%HOST6IP      - IPv6 address of the host running this test
+%HOSTIP       - IPv4 address of the host running this test
+%HTTP6PORT    - IPv6 port number of the HTTP server
+%HTTPPIPEPORT - Port number of the HTTP pipelining server
+%HTTPPORT     - Port number of the HTTP server
+%HTTPSPORT    - Port number of the HTTPS server
+%HTTPTLS6PORT - IPv6 port number of the HTTP TLS server
+%HTTPTLSPORT  - Port number of the HTTP TLS server
+%IMAP6PORT - IPv6 port number of the IMAP server
+%IMAPPORT  - Port number of the IMAP server
+%POP36PORT - IPv6 ort number of the POP3 server
+%POP3PORT  - Port number of the POP3 server
+%PROXYPORT - Port number of the HTTP proxy
+%PWD       - Current directory
+%RTSP6PORT - IPv6 port number of the RTSP server
+%RTSPPORT  - Port number of the RTSP server
+%SMTP6PORT - IPv6 port number of the SMTP server
+%SMTPPORT  - Port number of the SMTP 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
+%SSHPORT   - Port number of the SCP/SFTP server
+%TFTP6PORT - IPv6 port number of the TFTP server
+%TFTPPORT  - Port number of the TFTP server
 %USER      - Login ID of the user running the test
 </command>
 
@@ -246,8 +347,11 @@ Variables are substituted on the contents of the file as in the <command>
 section.
 </file>
 
-<stdin>
+<stdin [nonewline="yes"]>
 Pass this given data on stdin to the tool.
+
+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
 </stdin>
 
 </client>
@@ -267,23 +371,41 @@ changing protocol data such as port numbers or user-agent strings.
 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.
+
+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.  The
+<strip> and <strippart> rules are applied before comparisons are made.
+
 </protocol>
-<stdout [mode="text"]>
-This verifies that this data was passed to stdout.
+
+<proxy [nonewline="yes"]>
+
+The protocol dump curl should transmit to a HTTP proxy (when the http-proxy
+server is used), 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. The <strip> and
+<strippart> rules are applied before comparisons are made.
+
+</proxy>
+
+<stdout [mode="text"] [nonewline="yes"]>
+This verifies that this data was passed to stdout.  Variables are
+substituted as in the <command> section.
 
 Use the mode="text" attribute if the output is in text mode on platforms that
 have a text/binary difference.
+
+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
 </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.
+Variables are substituted as in the <command> section.
 </file>
 <stripfile>
 One perl op per line that operates on the file before being compared. This is