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

The cURL Test Suite

Requires:
  perl

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 to abort on the first error. Run the script with -v for more
  verbose output.

  Use -s fort shorter output, or pass a string with test numbers to run
  specific tests only (like ./runtests.pl "3 4" to test 3 and 4 only)

Memory:
  The test script will check that all allocated memory is freed properly IF
  curl has been built with the MALLOCDEBUG 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.

Logs:
  All logs are generated in the logs/ subdirctory (it is emtpied first
  in the runtests.sh script)

Data:
  All test-data are put in the data/ subdirctory.

  For each tests there exist a few files, all with their own separate and
  special purpose. Replace N with the test number:

    nameN.txt: test description as displayed when run

    commandN.txt: command line options for this test

    protN.txt: the full dump of the protocol communication that curl is
               expected to use when performing this test

    replyN.txt: the full dump the server should reply to curl for this test.
               If the final result that curl should've got is not in this
               file, you can instead name the file replyN0001.txt. This enables
               you to fiddle more. ;-)

    stdoutN.txt: if this file is present, curl's stdout is compared against
               this file to see that they're identical. If this is present,
               curl will not be run with -o but instead all output is compared
               against this file!

    errorN.txt: if this file is present, it should contain the error number
               curl is supposed to return when this test is run.

    uploadN.txt: if this file is present, it should contain the same data as
               the log/upload.N does, after a curl upload has been performed.

    ftpdN.txt: this file may contain instructions how to modify the behaviour
               of the ftp server. It uses a simple syntax that is left to
               describe here!

FIX:

  * Make httpserver.pl work when we PUT without Content-Length:

