From f52534522ce447afa6556079ff534a6d859397ae Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 7 Oct 2003 14:43:48 +0000 Subject: [PATCH] test case 508 added to test callback-based POST --- tests/data/Makefile.am | 2 +- tests/data/test508 | 46 +++++++++++++++++++++++++++ tests/libtest/Makefile.am | 7 +++- tests/libtest/lib508.c | 67 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 tests/data/test508 create mode 100644 tests/libtest/lib508.c 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 + + +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 + + + +# Client-side + + +http + +# tool is what to use instead of 'curl' + +lib508 + + + +send HTTP POST using read callback + + +http://%HOSTIP:%HOSTPORT/508 + + + +# +# Verify data after the test has been "shot" + + +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 + + 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; +}