From 53918b01dc591cc732312088712c54ef86386bbe Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 13 Jun 2007 22:09:08 +0000 Subject: splitting testcase --- src/daemon/daemontest.c | 278 ++++++------------------------------------------ 1 file changed, 35 insertions(+), 243 deletions(-) (limited to 'src/daemon/daemontest.c') diff --git a/src/daemon/daemontest.c b/src/daemon/daemontest.c index e110b139..38aadbea 100644 --- a/src/daemon/daemontest.c +++ b/src/daemon/daemontest.c @@ -20,7 +20,7 @@ /** * @file daemontest.c - * @brief Testcase for libmicrohttpd + * @brief Testcase for libmicrohttpd starts and stops * @author Christian Grothoff */ @@ -35,12 +35,9 @@ static int testStartError() { struct MHD_Daemon * d; d = MHD_start_daemon(MHD_USE_DEBUG, 0, NULL, NULL, NULL, NULL); - - if(d == NULL) { - return 0; - } else { - return 1; - } + if (d != NULL) + return 1; + return 0; } static int apc_nothing(void * cls, @@ -64,50 +61,6 @@ static int ahc_nothing(void * cls, return MHD_NO; } -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; -} - -static int ahc_echo(void * cls, - struct MHD_Session * session, - const char * url, - const char * method, - const char * upload_data, - unsigned int * upload_data_size) { - const char * me = cls; - struct MHD_Response * response; - int ret; - - if (0 != strcmp(me, method)) - return MHD_NO; /* unexpected method */ - response = MHD_create_response_from_data(strlen(url), - (void*) url, - MHD_NO, - MHD_YES); - ret = MHD_queue_response(session, - MHD_HTTP_OK, - response); - MHD_destroy_response(response); - return ret; -} - static int testStartStop() { struct MHD_Daemon * d; @@ -117,39 +70,35 @@ static int testStartStop() { NULL, &ahc_nothing, NULL); - if (d == NULL) { - return 1; - } + if (d == NULL) + return 2; MHD_stop_daemon(d); return 0; } -static int testRun() { +static int testExternalRun() { struct MHD_Daemon * d; fd_set read; int maxfd; int i; d = MHD_start_daemon(MHD_USE_IPv4 | MHD_USE_DEBUG, - 1080, + 1081, &apc_all, NULL, &ahc_nothing, NULL); - if(d == NULL) { - return 1; - } - fprintf(stderr, "Testing external select!\n"); + if (d == NULL) + return 4; i = 0; while(i < 15) { - MHD_get_fdset(d, &read, &read, &read, &maxfd); - if(MHD_run(d) == MHD_NO) { - MHD_stop_daemon(d); - return 1; - } - sleep(1); - i++; + MHD_get_fdset(d, &read, &read, &read, &maxfd); + if (MHD_run(d) == MHD_NO) { + MHD_stop_daemon(d); + return 8; + } + i++; } return 0; } @@ -157,205 +106,48 @@ static int testRun() { static int testThread() { struct MHD_Daemon * d; d = MHD_start_daemon(MHD_USE_IPv4 | MHD_USE_DEBUG | MHD_USE_SELECT_INTERNALLY, - 1081, + 1082, &apc_all, NULL, &ahc_nothing, NULL); - if(d == NULL) { - return 1; - } - - fprintf(stderr, "Testing internal select!\n"); - if (MHD_run(d) == MHD_NO) { - return 1; - } else { - sleep(15); - MHD_stop_daemon(d); - } + if (d == NULL) + return 16; + if (MHD_run(d) == MHD_NO) + return 32; + MHD_stop_daemon(d); return 0; } static int testMultithread() { struct MHD_Daemon * d; d = MHD_start_daemon(MHD_USE_IPv4 | MHD_USE_DEBUG | MHD_USE_THREAD_PER_CONNECTION, - 1082, + 1083, &apc_all, NULL, &ahc_nothing, NULL); - if(d == NULL) { - return 1; - } - - fprintf(stderr, "Testing thread per connection!\n"); - if (MHD_run(d) == MHD_NO) { - return 1; - } else { - sleep(15); - MHD_stop_daemon(d); - } - return 0; -} - -static int testInternalGet() { - struct MHD_Daemon * d; - CURL * c; - char buf[2048]; - struct CBC cbc; - - cbc.buf = buf; - cbc.size = 2048; - cbc.pos = 0; - d = MHD_start_daemon(MHD_USE_SELECT_INTERNALLY | MHD_USE_IPv4 | MHD_USE_DEBUG, - 1083, - &apc_all, - NULL, - &ahc_echo, - "GET"); - if (d == NULL) - return 1; - - if(MHD_run(d) == MHD_NO) { - MHD_stop_daemon(d); - return 2; - } - - c = curl_easy_init(); - curl_easy_setopt(c, - CURLOPT_URL, - "http://localhost:1083/hello_world"); - curl_easy_setopt(c, - CURLOPT_WRITEFUNCTION, - ©Buffer); - curl_easy_setopt(c, - CURLOPT_WRITEDATA, - &cbc); - curl_easy_setopt(c, - CURLOPT_FAILONERROR, - 1); - 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); - if (CURLE_OK != curl_easy_perform(c)) - return 3; - - curl_easy_cleanup(c); - - if (cbc.pos != strlen("hello_world")) - return 4; - - if (0 != strncmp("hello_world", - cbc.buf, - strlen("hello_world"))) - return 5; - - MHD_stop_daemon(d); - - return 0; -} - -static int testMultithreadedGet() { - struct MHD_Daemon * d; - CURL * c; - char buf[2048]; - struct CBC cbc; - - cbc.buf = buf; - cbc.size = 2048; - cbc.pos = 0; - d = MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION | MHD_USE_IPv4 | MHD_USE_DEBUG, - 1084, - &apc_all, - NULL, - &ahc_echo, - "GET"); - if (d == NULL) - return 1; - - if(MHD_run(d) == MHD_NO) - return 2; - - - c = curl_easy_init(); - curl_easy_setopt(c, - CURLOPT_URL, - "http://localhost:1084/hello_world"); - curl_easy_setopt(c, - CURLOPT_WRITEFUNCTION, - ©Buffer); - curl_easy_setopt(c, - CURLOPT_WRITEDATA, - &cbc); - curl_easy_setopt(c, - CURLOPT_FAILONERROR, - 1); - 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); - if (CURLE_OK != curl_easy_perform(c)) - return 3; - curl_easy_cleanup(c); - if (cbc.pos != strlen("hello_world")) - return 4; - - if (0 != strncmp("hello_world", - cbc.buf, - strlen("hello_world"))) - return 5; - - MHD_stop_daemon(d); - + if (d == NULL) + return 64; + if (MHD_run(d) == MHD_NO) + return 128; + MHD_stop_daemon(d); return 0; } int main(int argc, char * const * argv) { unsigned int errorCount = 0; - fprintf(stderr, "***testStartError()***\n"); - fprintf(stderr, "***This test verifies the start function responds to bad arguments correctly***\n"); errorCount += testStartError(); - fprintf(stderr, "errorCount is %i\n", errorCount); - fprintf(stderr, "***testStartStop()***\n"); - fprintf(stderr, "***This test verifies that the daemon can be started and stopped normally***\n"); errorCount += testStartStop(); - fprintf(stderr, "errorCount is %i\n", errorCount); - fprintf(stderr, "***testInternalGet()***\n"); - fprintf(stderr, "***This test verifies the functionality of internal select using a canned request***\n"); - errorCount += testInternalGet(); - fprintf(stderr, "errorCount is %i\n", errorCount); - fprintf(stderr, "***testMultithreadedGet()***\n"); - fprintf(stderr, "***This test verifies the functionality of multithreaded connections using a canned request***\n"); - errorCount += testMultithreadedGet(); - fprintf(stderr, "errorCount is %i\n", errorCount); - fprintf(stderr, "***testRun()***\n"); - fprintf(stderr, "***This test verifies the functionality of external select***\n"); - fprintf(stderr, "***The sever will sit on the announced port for 15 seconds and wait for external messages***\n"); - errorCount += testRun(); - fprintf(stderr, "errorCount is %i\n", errorCount); - fprintf(stderr, "***testThread()***\n"); - fprintf(stderr, "***This test verifies the functionality of internal select***\n"); - fprintf(stderr, "***The sever will sit on the announced port for 15 seconds and wait for external messages***\n"); - errorCount += testThread(); - fprintf(stderr, "errorCount is %i\n", errorCount); - fprintf(stderr, "***testMultithread()***\n"); - fprintf(stderr, "***This test verifies the functionality of multithreaded connections***\n"); - fprintf(stderr, "***The sever will sit on the announced port for 15 seconds and wait for external messages***\n"); - errorCount += testMultithread(); - fprintf(stderr, "errorCount is %i\n", errorCount); + errorCount += testExternalRun(); + errorCount += testThread(); + errorCount += testMultithread(); + if (errorCount != 0) + fprintf(stderr, + "Error (code: %u)\n", + errorCount); return errorCount != 0; /* 0 == pass */ } -- cgit v1.2.3