                                  _   _ ____  _     
                              ___| | | |  _ \| |    
                             / __| | | | |_) | |    
                            | (__| |_| |  _ <| |___ 
                             \___|\___/|_| \_\_____|

The cURL Test Suite

Requires:
  perl (and a unix-style shell)
  diff (when a test fail, a diff is shown)
  stunnel (for HTTPS and FTPS tests)
  sshd (for SCP and SFTP tests; OpenSSH ver. 3.8 is known to work)
  ssh (for SOCKS4 and SOCK5 tests; OpenSSH ver. 4.5 is known to work.
       OpenSSH version 3.7 or greater is needed for SOCKS5)

TCP ports used by default:

  - 8990 on localhost for HTTP tests
  - 8991 on localhost for HTTPS tests
  - 8994 on localhost for HTTP IPv6 tests
  - 8992 on localhost for FTP tests
  - 8995 on localhost for FTP (2) tests
  - 8993 on localhost for FTPS tests
  - 8996 on localhost for FTP IPv6 tests
  - 8997 on localhost for TFTP tests
  - 8999 on localhost for SCP/SFTP tests
  - 9000 on localhost for SOCKS tests

  The test suite runs simple FTP, HTTP and TFTP servers on these ports to
  which it makes requests.  For SSL tests, it runs stunnel to handle
  encryption to the regular servers. For SSH, it runs a standard OpenSSH
  server. For SOCKS4/5 tests SSH is used to perform the SOCKS functionality
  and requires a SSH client and server.

  The base port number shown above can be changed using runtests' -b option
  to allow running more than one instance of the test suite simultaneously
  on one machine.

Run:
  'make test'. This invokes the 'runtests.pl' perl script. Edit the top
  variables of that script in case you have some specific needs.

  The script breaks on the first test that doesn't do OK. Use -a to prevent
  the script from abort on the first error. Run the script with -v for more
  verbose output. Use -d to run the test servers with debug output enabled as
  well. Specifying -k keeps all the log files generated by the test intact.

  Use -s for shorter output, or pass test numbers to run specific tests only
  (like "./runtests.pl 3 4" to test 3 and 4 only). It also supports test case
  ranges with 'to', as in "./runtests 3 to 9" which runs the seven tests from
  3 to 9. Any test numbers starting with ! are disabled, as are any test
  numbers found in the file data/DISABLED (one per line).

Memory:
  The test script will check that all allocated memory is freed properly IF
  curl has been built with the CURLDEBUG define set. The script will
  automatically detect if that is the case, and it will use the ../memanalyze
  script to analyze the memory debugging output.

Debug:
  If a test case fails, you can conveniently get the script to invoke the
  debugger (gdb) for you with the server running and the exact same command
  line parameters that failed. Just invoke 'runtests.pl <test number> -g' and
  then just type 'run' in the debugger to perform the command through the
  debugger.

  If a test case causes a core dump, analyze it by running gdb like:

          # gdb ../curl/src core

  ... and get a stack trace with the gdb command:

          (gdb) where

Logs:
  All logs are generated in the logs/ subdirectory (it is emptied first
  in the runtests.pl script). Use runtests.pl -k to keep the temporary files
  after the test run.

Data:
  All test cases are put in the data/ subdirectory. Each test is stored in the
  file named according to the test number.

  See FILEFORMAT for the description of the test case files.


TEST CASE NUMBERS

 So far, I've used this system:

 1   -  99   HTTP
 100 - 199   FTP*
 200 - 299   FILE*
 300 - 399   HTTPS
 400 - 499   FTPS
 500 - 599   libcurl source code tests, not using the curl command tool
 600 - 699   SCP/SFTP
 700 - 799   SOCKS4 (even numbers) and SOCK5 (odd numbers)
 1000 - x    miscellanous*

 Since 30-apr-2003, there's nothing in the system that requires us to keep
 within these number series, and those sections marked with * actually
 contain tests for a variety of protocols. Each test case now specifies
 its own server requirements, independent of test number.

TODO:

  * Add tests for TELNET, LDAP, DICT...
  * SOCKS4/5 test deficiencies - no proxy authentication tests as SSH (the 
    test mechanism) doesn't support them
