diff options
| -rw-r--r-- | tests/data/Makefile.am | 2 | ||||
| -rw-r--r-- | tests/data/test1514 | 48 | ||||
| -rw-r--r-- | tests/libtest/Makefile.inc | 6 | ||||
| -rw-r--r-- | tests/libtest/lib1514.c | 80 | 
4 files changed, 134 insertions, 2 deletions
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 5ae85c4d1..8e5f91085 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -123,7 +123,7 @@ test1408 test1409 test1410          test1412 test1413 test1414 test1415 \  test1416 test1417 \  \  test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \ -test1508 test1509 test1510 test1511 test1512 test1513 \ +test1508 test1509 test1510 test1511 test1512 test1513 test1514 \  \  test1900 test1901 test1902 test1903 \  \ diff --git a/tests/data/test1514 b/tests/data/test1514 new file mode 100644 index 000000000..eb5456011 --- /dev/null +++ b/tests/data/test1514 @@ -0,0 +1,48 @@ +<testcase> +<info> +<keywords> +HTTP +HTTP POST +Content-Length +</keywords> +</info> + +# Server-side +<reply> +<data nocheck="yes"> +HTTP/1.1 411 Length Required +Date: Sun, 19 Jan 2014 18:50:58 GMT +Server: test-server/fake swsclose +Connection: close +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<tool> +lib1514 +</tool> +<name> +HTTP POST with read callback and unknown data size +</name> +<command> +http://%HOSTIP:%HTTPPORT/1514 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +# Content-Length header is not present +<protocol> +POST /1514 HTTP/1.1
 +Host: 127.0.0.1:8990
 +Accept: */*
 +Content-Type: application/x-www-form-urlencoded
 +Expect: 100-continue
 +
 +</protocol> +</verify> +</testcase> diff --git a/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc index c74be98be..b4c8907b7 100644 --- a/tests/libtest/Makefile.inc +++ b/tests/libtest/Makefile.inc @@ -21,7 +21,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect                \   lib571 lib572 lib573 lib574 lib575 lib576        lib578 lib579 lib582   \   lib583 lib585 lib586 lib587        lib590 lib591 lib597 lib598 lib599   \   lib1500 lib1501 lib1502 lib1503 lib1504 lib1505 lib1506 lib1507 lib1508 \ - lib1509 lib1510 lib1511 lib1512 lib1513 \ + lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 \   lib1900 \   lib2033 @@ -347,6 +347,10 @@ lib1513_SOURCES = lib1513.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)  lib1513_LDADD = $(TESTUTIL_LIBS)  lib1513_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1513 +lib1514_SOURCES = lib1514.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) +lib1514_LDADD = $(TESTUTIL_LIBS) +lib1514_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1514 +  lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)  lib1900_LDADD = $(TESTUTIL_LIBS)  lib1900_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/tests/libtest/lib1514.c b/tests/libtest/lib1514.c new file mode 100644 index 000000000..b6136efe0 --- /dev/null +++ b/tests/libtest/lib1514.c @@ -0,0 +1,80 @@ +/*************************************************************************** + *                                  _   _ ____  _ + *  Project                     ___| | | |  _ \| | + *                             / __| | | | |_) | | + *                            | (__| |_| |  _ <| |___ + *                             \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +/* + * Make sure libcurl does not send a `Content-Length: -1` header when HTTP POST + * size is unknown. + */ + +#include "test.h" + +#include "memdebug.h" + +static char data[]="dummy"; + +struct WriteThis { +  char *readptr; +  size_t sizeleft; +}; + +static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp) +{ +  struct WriteThis *pooh = (struct WriteThis *)userp; + +  if(size*nmemb < 1) +    return 0; + +  if(pooh->sizeleft) { +    *(char *)ptr = pooh->readptr[0]; /* copy one single byte */ +    pooh->readptr++;                 /* advance pointer */ +    pooh->sizeleft--;                /* less data left */ +    return 1;                        /* we return 1 byte at a time! */ +  } + +  return 0;                         /* no more data left to deliver */ +} + +int test(char *URL) +{ +  CURL *curl; +  CURLcode result = CURLE_OK; +  int res = 0; +  struct WriteThis pooh = { data, strlen(data) }; + +  global_init(CURL_GLOBAL_ALL); + +  easy_init(curl); + +  easy_setopt(curl, CURLOPT_URL, URL); +  easy_setopt(curl, CURLOPT_POST, 1L); +  /* Purposely omit to set CURLOPT_POSTFIELDSIZE */ +  easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); +  easy_setopt(curl, CURLOPT_READDATA, &pooh); + +  result = curl_easy_perform(curl); + +test_cleanup: + +  curl_easy_cleanup(curl); +  curl_global_cleanup(); + +  return (int)result; +}  | 
