From c7818b51b52649e1b35b61d8e6e6a855399eba9a Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 29 Mar 2013 15:57:58 +0000 Subject: -renaming for consistency --- src/testzzuf/daemontest_postform.c | 387 ------------------------------------- 1 file changed, 387 deletions(-) delete mode 100644 src/testzzuf/daemontest_postform.c (limited to 'src/testzzuf/daemontest_postform.c') diff --git a/src/testzzuf/daemontest_postform.c b/src/testzzuf/daemontest_postform.c deleted file mode 100644 index 873c7fef..00000000 --- a/src/testzzuf/daemontest_postform.c +++ /dev/null @@ -1,387 +0,0 @@ -/* - This file is part of libmicrohttpd - (C) 2007, 2008 Christian Grothoff - - libmicrohttpd is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your - option) any later version. - - libmicrohttpd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with libmicrohttpd; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -/** - * @file daemontest_post.c - * @brief Testcase for libmicrohttpd POST operations using multipart/postform data - * @author Christian Grothoff - */ - -#include "MHD_config.h" -#include "platform.h" -#include -#include -#include -#include -#include - -#ifndef WINDOWS -#include -#endif - - -#include "socat.c" - -static int oneone; - -struct CBC -{ - char *buf; - size_t pos; - size_t size; -}; - -static size_t -copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx) -{ - struct CBC *cbc = ctx; - - if (cbc->pos + size * nmemb > cbc->size) - return 0; /* overflow */ - memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb); - cbc->pos += size * nmemb; - return size * nmemb; -} - -/** - * Note that this post_iterator is not perfect - * in that it fails to support incremental processing. - * (to be fixed in the future) - */ -static int -post_iterator (void *cls, - enum MHD_ValueKind kind, - const char *key, - const char *filename, - const char *content_type, - const char *transfer_encoding, - const char *value, uint64_t off, size_t size) -{ - int *eok = cls; - - if (key == NULL) - return MHD_YES; -#if 0 - fprintf (stderr, "PI sees %s-%.*s\n", key, size, value); -#endif - if ((0 == strcmp (key, "name")) && - (size == strlen ("daniel")) && (0 == strncmp (value, "daniel", size))) - (*eok) |= 1; - if ((0 == strcmp (key, "project")) && - (size == strlen ("curl")) && (0 == strncmp (value, "curl", size))) - (*eok) |= 2; - return MHD_YES; -} - -static int -ahc_echo (void *cls, - struct MHD_Connection *connection, - const char *url, - const char *method, - const char *version, - const char *upload_data, size_t *upload_data_size, - void **unused) -{ - static int eok; - struct MHD_Response *response; - struct MHD_PostProcessor *pp; - int ret; - - if (0 != strcmp ("POST", method)) - { - return MHD_NO; /* unexpected method */ - } - pp = *unused; - if (pp == NULL) - { - eok = 0; - pp = MHD_create_post_processor (connection, 1024, &post_iterator, &eok); - if (pp == NULL) - return MHD_NO; - *unused = pp; - } - MHD_post_process (pp, upload_data, *upload_data_size); - if ((eok == 3) && (0 == *upload_data_size)) - { - response = MHD_create_response_from_buffer (strlen (url), - (void *) url, - MHD_RESPMEM_MUST_COPY); - ret = MHD_queue_response (connection, MHD_HTTP_OK, response); - MHD_destroy_response (response); - MHD_destroy_post_processor (pp); - *unused = NULL; - return ret; - } - *upload_data_size = 0; - return MHD_YES; -} - -static struct curl_httppost * -make_form () -{ - struct curl_httppost *post = NULL; - struct curl_httppost *last = NULL; - - curl_formadd (&post, &last, CURLFORM_COPYNAME, "name", - CURLFORM_COPYCONTENTS, "daniel", CURLFORM_END); - curl_formadd (&post, &last, CURLFORM_COPYNAME, "project", - CURLFORM_COPYCONTENTS, "curl", CURLFORM_END); - return post; -} - - -static int -testInternalPost () -{ - struct MHD_Daemon *d; - CURL *c; - char buf[2048]; - struct CBC cbc; - int i; - struct curl_httppost *pd; - - cbc.buf = buf; - cbc.size = 2048; - cbc.pos = 0; - d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ , - 11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); - if (d == NULL) - return 1; - zzuf_socat_start (); - for (i = 0; i < LOOP_COUNT; i++) - { - fprintf (stderr, "."); - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - pd = make_form (); - curl_easy_setopt (c, CURLOPT_HTTPPOST, pd); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); - if (oneone) - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - else - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - curl_easy_perform (c); - curl_easy_cleanup (c); - curl_formfree (pd); - } - fprintf (stderr, "\n"); - zzuf_socat_stop (); - MHD_stop_daemon (d); - return 0; -} - -static int -testMultithreadedPost () -{ - struct MHD_Daemon *d; - CURL *c; - char buf[2048]; - struct CBC cbc; - int i; - struct curl_httppost *pd; - - cbc.buf = buf; - cbc.size = 2048; - cbc.pos = 0; - d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ , - 11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); - if (d == NULL) - return 16; - zzuf_socat_start (); - for (i = 0; i < LOOP_COUNT; i++) - { - fprintf (stderr, "."); - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - pd = make_form (); - curl_easy_setopt (c, CURLOPT_HTTPPOST, pd); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); - if (oneone) - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - else - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - curl_easy_perform (c); - curl_easy_cleanup (c); - curl_formfree (pd); - } - fprintf (stderr, "\n"); - zzuf_socat_stop (); - MHD_stop_daemon (d); - return 0; -} - - -static int -testExternalPost () -{ - struct MHD_Daemon *d; - CURL *c; - char buf[2048]; - struct CBC cbc; - CURLM *multi; - CURLMcode mret; - fd_set rs; - fd_set ws; - fd_set es; - int max; - int running; - time_t start; - struct timeval tv; - struct curl_httppost *pd; - int i; - - multi = NULL; - cbc.buf = buf; - cbc.size = 2048; - cbc.pos = 0; - d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ , - 1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); - if (d == NULL) - return 256; - multi = curl_multi_init (); - if (multi == NULL) - { - MHD_stop_daemon (d); - return 512; - } - zzuf_socat_start (); - for (i = 0; i < LOOP_COUNT; i++) - { - fprintf (stderr, "."); - - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - pd = make_form (); - curl_easy_setopt (c, CURLOPT_HTTPPOST, pd); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L); - if (oneone) - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - else - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - - - mret = curl_multi_add_handle (multi, c); - if (mret != CURLM_OK) - { - curl_multi_cleanup (multi); - curl_formfree (pd); - curl_easy_cleanup (c); - zzuf_socat_stop (); - MHD_stop_daemon (d); - return 1024; - } - start = time (NULL); - while ((time (NULL) - start < 5) && (c != NULL)) - { - max = 0; - FD_ZERO (&rs); - FD_ZERO (&ws); - FD_ZERO (&es); - curl_multi_perform (multi, &running); - mret = curl_multi_fdset (multi, &rs, &ws, &es, &max); - if (mret != CURLM_OK) - { - curl_multi_remove_handle (multi, c); - curl_multi_cleanup (multi); - curl_easy_cleanup (c); - zzuf_socat_stop (); - MHD_stop_daemon (d); - curl_formfree (pd); - return 2048; - } - if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max)) - { - curl_multi_remove_handle (multi, c); - curl_multi_cleanup (multi); - curl_easy_cleanup (c); - curl_formfree (pd); - zzuf_socat_stop (); - MHD_stop_daemon (d); - return 4096; - } - tv.tv_sec = 0; - tv.tv_usec = 1000; - select (max + 1, &rs, &ws, &es, &tv); - curl_multi_perform (multi, &running); - if (running == 0) - { - curl_multi_info_read (multi, &running); - curl_multi_remove_handle (multi, c); - curl_easy_cleanup (c); - c = NULL; - } - MHD_run (d); - } - if (c != NULL) - { - curl_multi_remove_handle (multi, c); - curl_easy_cleanup (c); - } - curl_formfree (pd); - } - fprintf (stderr, "\n"); - zzuf_socat_stop (); - - MHD_stop_daemon (d); - return 0; -} - - - -int -main (int argc, char *const *argv) -{ - unsigned int errorCount = 0; - - oneone = NULL != strstr (argv[0], "11"); - if (0 != curl_global_init (CURL_GLOBAL_WIN32)) - return 2; - errorCount += testInternalPost (); - errorCount += testMultithreadedPost (); - errorCount += testExternalPost (); - if (errorCount != 0) - fprintf (stderr, "Error (code: %u)\n", errorCount); - curl_global_cleanup (); - return errorCount != 0; /* 0 == pass */ -} -- cgit v1.2.3