diff options
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test508 | 46 | ||||
-rw-r--r-- | tests/libtest/Makefile.am | 7 | ||||
-rw-r--r-- | tests/libtest/lib508.c | 67 |
4 files changed, 120 insertions, 2 deletions
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 723095f02..8883c57d2 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -24,4 +24,4 @@ test62 test63 test64 test65 test66 test144 test145 test67 test68 test41 \ test40 test42 test69 test70 test71 test72 test73 test146 test505 \ test74 test75 test76 test77 test78 test147 test148 test506 test79 test80 \ test81 test82 test83 test84 test85 test86 test87 test507 test149 test88 \ -test89 test90 +test89 test90 test508 diff --git a/tests/data/test508 b/tests/data/test508 new file mode 100644 index 000000000..77f841233 --- /dev/null +++ b/tests/data/test508 @@ -0,0 +1,46 @@ +# +# Server-side +<reply> +<data> +HTTP/1.1 200 OK +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake swsclose +Connection: close +Content-Type: text/html + +hello +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +# tool is what to use instead of 'curl' +<tool> +lib508 +</tool> + + <name> +send HTTP POST using read callback + </name> + <command> +http://%HOSTIP:%HOSTPORT/508 +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +POST /508 HTTP/1.1
+Host: 127.0.0.1:8999
+Pragma: no-cache
+Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
+Content-Length: 45
+Content-Type: application/x-www-form-urlencoded
+
+this is what we post to the silly web server +</protocol> +</verify> diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index 99d7d8cf5..52f9e6e57 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -11,7 +11,8 @@ LIBDIR = ../../lib SUPPORTFILES = first.c test.h # here are all tools used for running libcurl tests -noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 +noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \ + lib508 lib500_SOURCES = lib500.c $(SUPPORTFILES) lib500_LDADD = $(LIBDIR)/libcurl.la @@ -44,3 +45,7 @@ lib506_DEPENDENCIES = $(LIBDIR)/libcurl.la lib507_SOURCES = lib507.c $(SUPPORTFILES) lib507_LDADD = $(LIBDIR)/libcurl.la lib507_DEPENDENCIES = $(LIBDIR)/libcurl.la + +lib508_SOURCES = lib508.c $(SUPPORTFILES) +lib508_LDADD = $(LIBDIR)/libcurl.la +lib508_DEPENDENCIES = $(LIBDIR)/libcurl.la diff --git a/tests/libtest/lib508.c b/tests/libtest/lib508.c new file mode 100644 index 000000000..e6798da2e --- /dev/null +++ b/tests/libtest/lib508.c @@ -0,0 +1,67 @@ +#include "test.h" + +static char data[]="this is what we post to the silly web server\n"; + +struct WriteThis { + char *readptr; + int 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 -1; /* no more data left to deliver */ +} + +CURLcode test(char *URL) +{ + CURL *curl; + CURLcode res=CURLE_OK; + + struct WriteThis pooh; + + pooh.readptr = data; + pooh.sizeleft = strlen(data); + + curl = curl_easy_init(); + if(curl) { + /* First set the URL that is about to receive our POST. */ + curl_easy_setopt(curl, CURLOPT_URL, URL); + + /* Now specify we want to POST data */ + curl_easy_setopt(curl, CURLOPT_POST, TRUE); + + /* Set the expected POST size */ + curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, pooh.sizeleft); + + /* we want to use our own read function */ + curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); + + /* pointer to pass to our read function */ + curl_easy_setopt(curl, CURLOPT_INFILE, &pooh); + + /* get verbose debug output please */ + curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); + + /* include headers in the output */ + curl_easy_setopt(curl, CURLOPT_HEADER, TRUE); + + /* Perform the request, res will get the return code */ + res = curl_easy_perform(curl); + + /* always cleanup */ + curl_easy_cleanup(curl); + } + return res; +} |