X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Ftest.c;h=3a8c36572e3b4308c4e7bf6e7e8d811d5193ebd2;hb=42b9680b5b30ed08c47dd7f56b57b714f25446cc;hp=714cd89120223fe01883746486f1f7ab51361263;hpb=d6505b16fb85f77527934510d0395adfcbb66377;p=m6w6%2Flibmemcached diff --git a/tests/test.c b/tests/test.c index 714cd891..3a8c3657 100644 --- a/tests/test.c +++ b/tests/test.c @@ -6,6 +6,19 @@ #include #include #include +#include +#include + +long int timedif(struct timeval a, struct timeval b) +{ + register int us, s; + + us = a.tv_usec - b.tv_usec; + us /= 1000; + s = a.tv_sec - b.tv_sec; + s *= 1000; + return s + us; +} void init_test(memcached_st *not_used) { @@ -484,6 +497,12 @@ void behavior_test(memcached_st *memc) memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, &set); value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_MD5_HASHING); assert(value == 0); + + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE); + assert(value > 0); + + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE); + assert(value > 0); } /* Test case provided by Cal Haldenbrand */ @@ -492,7 +511,7 @@ void user_supplied_bug1(memcached_st *memc) unsigned int setter= 1; unsigned int x; - long total= 0; + unsigned long long total= 0; int size= 0; srand(time(NULL)); char key[10]; @@ -528,6 +547,56 @@ void user_supplied_bug1(memcached_st *memc) assert(rc == MEMCACHED_SUCCESS); } } + +/* Test case provided by Cal Haldenbrand */ +void user_supplied_bug2(memcached_st *memc) +{ + int errors; + unsigned int setter; + unsigned int x; + unsigned long long total; + + + setter= 1; + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &setter); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &setter); +#ifdef NOT_YET + setter = 20 * 1024576; + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE, &setter); + setter = 20 * 1024576; + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE, &setter); + getter = memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE); + getter = memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE); +#endif + + for (x= 0, errors= 0, total= 0 ; total < 20 * 1024576 ; x++) + { + memcached_return rc; + char buffer[SMALL_STRING_LEN]; + uint16_t flags; + size_t val_len; + char *getval; + + snprintf(buffer, SMALL_STRING_LEN, "%u", x); + getval= memcached_get(memc, buffer, strlen(buffer), + &val_len, &flags, &rc); + if (rc != MEMCACHED_SUCCESS) + { + WATCHPOINT_ERROR(rc); + errors++; + if ( errors == 10 ) + { + fprintf(stderr, "last: %s: len %zu flags: %u\n", buffer, val_len, flags); + assert(0); + } + continue; + } + total+= val_len; + errors= 0; + free(getval); + } +} + void add_host_test1(memcached_st *memc) { unsigned int x; @@ -570,8 +639,16 @@ int main(int argc, char *argv[]) { unsigned int x; char *server_list; + char *test_to_run= NULL; + char *wildcard= NULL; memcached_server_st *servers; + if (argc > 2) + test_to_run= argv[1]; + + if (argc == 3) + wildcard= argv[2]; + if (!(server_list= getenv("MEMCACHED_SERVERS"))) server_list= "localhost"; @@ -581,6 +658,16 @@ int main(int argc, char *argv[]) servers= memcached_servers_parse(server_list); assert(servers); + for (x= 0; x < memcached_server_list_count(servers); x++) + { + printf("\t%s : %u\n", servers[x].hostname, servers[x].port); + assert(servers[x].stack_responses == 0); + assert(servers[x].fd == -1); + assert(servers[x].cursor_active == 0); + } + + printf("\n"); + /* Clean the server before beginning testing */ test_st tests[] ={ {"flush", 0, flush_test }, @@ -611,101 +698,175 @@ int main(int argc, char *argv[]) test_st user_tests[] ={ {"user_supplied_bug1", 0, user_supplied_bug1 }, + {"user_supplied_bug2", 0, user_supplied_bug1 }, {0, 0, 0} }; - fprintf(stderr, "\nBlock tests\n\n"); - for (x= 0; tests[x].function_name; x++) + if ((test_to_run && !strcmp(test_to_run, "block")) || !test_to_run) { - memcached_st *memc; - memcached_return rc; - memc= memcached_create(NULL); - assert(memc); - - rc= memcached_server_push(memc, servers); - assert(rc == MEMCACHED_SUCCESS); - - fprintf(stderr, "Testing %s", tests[x].function_name); - tests[x].function(memc); - fprintf(stderr, "\t\t\t\t\t[ ok ]\n"); - assert(memc); - memcached_free(memc); + fprintf(stderr, "\nBlock tests\n\n"); + for (x= 0; tests[x].function_name; x++) + { + if (wildcard) + if (strcmp(wildcard, tests[x].function_name)) + continue; + + memcached_st *memc; + memcached_return rc; + struct timeval start_time, end_time; + + memc= memcached_create(NULL); + assert(memc); + + rc= memcached_server_push(memc, servers); + assert(rc == MEMCACHED_SUCCESS); + + unsigned int loop; + for (loop= 0; loop < memcached_server_list_count(servers); loop++) + { + assert(memc->hosts[loop].stack_responses == 0); + assert(memc->hosts[loop].fd == -1); + assert(memc->hosts[loop].cursor_active == 0); + } + + fprintf(stderr, "Testing %s", tests[x].function_name); + gettimeofday(&start_time, NULL); + tests[x].function(memc); + gettimeofday(&end_time, NULL); + long int load_time= timedif(end_time, start_time); + fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000, + load_time % 1000); + assert(memc); + memcached_free(memc); + } } - fprintf(stderr, "\nNonblock tests\n\n"); - for (x= 0; tests[x].function_name; x++) + if ((test_to_run && !strcmp(test_to_run, "nonblock")) || !test_to_run) { - memcached_st *memc; - memcached_return rc; - memc= memcached_create(NULL); - assert(memc); - - rc= memcached_server_push(memc, servers); - assert(rc == MEMCACHED_SUCCESS); - - fprintf(stderr, "Testing %s", tests[x].function_name); - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL); - tests[x].function(memc); - fprintf(stderr, "\t\t\t\t\t[ ok ]\n"); - assert(memc); - memcached_free(memc); + fprintf(stderr, "\nNonblock tests\n\n"); + for (x= 0; tests[x].function_name; x++) + { + if (wildcard) + if (strcmp(wildcard, tests[x].function_name)) + continue; + + memcached_st *memc; + memcached_return rc; + struct timeval start_time, end_time; + + memc= memcached_create(NULL); + assert(memc); + + rc= memcached_server_push(memc, servers); + assert(rc == MEMCACHED_SUCCESS); + + fprintf(stderr, "Testing %s", tests[x].function_name); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL); + gettimeofday(&start_time, NULL); + tests[x].function(memc); + gettimeofday(&end_time, NULL); + long int load_time= timedif(end_time, start_time); + fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000, + load_time % 1000); + assert(memc); + memcached_free(memc); + } } - fprintf(stderr, "\nTCP Nodelay tests\n\n"); - for (x= 0; tests[x].function_name; x++) + if ((test_to_run && !strcmp(test_to_run, "nodelay")) || !test_to_run) { - memcached_st *memc; - memcached_return rc; - memc= memcached_create(NULL); - assert(memc); - - rc= memcached_server_push(memc, servers); - assert(rc == MEMCACHED_SUCCESS); - - fprintf(stderr, "Testing %s", tests[x].function_name); - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL); - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, NULL); - tests[x].function(memc); - fprintf(stderr, "\t\t\t\t\t[ ok ]\n"); - assert(memc); - memcached_free(memc); + fprintf(stderr, "\nTCP Nodelay tests\n\n"); + for (x= 0; tests[x].function_name; x++) + { + if (wildcard) + if (strcmp(wildcard, tests[x].function_name)) + continue; + + memcached_st *memc; + memcached_return rc; + struct timeval start_time, end_time; + + memc= memcached_create(NULL); + assert(memc); + + rc= memcached_server_push(memc, servers); + assert(rc == MEMCACHED_SUCCESS); + + fprintf(stderr, "Testing %s", tests[x].function_name); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, NULL); + gettimeofday(&start_time, NULL); + tests[x].function(memc); + gettimeofday(&end_time, NULL); + long int load_time= timedif(end_time, start_time); + fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000, + load_time % 1000); + assert(memc); + memcached_free(memc); + } } - fprintf(stderr, "\nMD5 Hashing\n\n"); - for (x= 0; tests[x].function_name; x++) + if ((test_to_run && !strcmp(test_to_run, "md5")) || !test_to_run) { - memcached_st *memc; - memcached_return rc; - memc= memcached_create(NULL); - assert(memc); - - rc= memcached_server_push(memc, servers); - assert(rc == MEMCACHED_SUCCESS); - - fprintf(stderr, "Testing %s", tests[x].function_name); - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, NULL); - tests[x].function(memc); - fprintf(stderr, "\t\t\t\t\t[ ok ]\n"); - assert(memc); - memcached_free(memc); + fprintf(stderr, "\nMD5 Hashing\n\n"); + for (x= 0; tests[x].function_name; x++) + { + if (wildcard) + if (strcmp(wildcard, tests[x].function_name)) + continue; + + memcached_st *memc; + memcached_return rc; + struct timeval start_time, end_time; + + memc= memcached_create(NULL); + assert(memc); + + rc= memcached_server_push(memc, servers); + assert(rc == MEMCACHED_SUCCESS); + + fprintf(stderr, "Testing %s", tests[x].function_name); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, NULL); + gettimeofday(&start_time, NULL); + tests[x].function(memc); + gettimeofday(&end_time, NULL); + long int load_time= timedif(end_time, start_time); + fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000, + load_time % 1000); + assert(memc); + memcached_free(memc); + } } - fprintf(stderr, "\nUser Supplied tests\n\n"); - for (x= 0; user_tests[x].function_name; x++) + if ((test_to_run && !strcmp(test_to_run, "user")) || !test_to_run) { - memcached_st *memc; - memcached_return rc; - memc= memcached_create(NULL); - assert(memc); - - rc= memcached_server_push(memc, servers); - assert(rc == MEMCACHED_SUCCESS); - - fprintf(stderr, "Testing %s", user_tests[x].function_name); - user_tests[x].function(memc); - fprintf(stderr, "\t\t\t\t\t[ ok ]\n"); - assert(memc); - memcached_free(memc); + fprintf(stderr, "\nUser Supplied tests\n\n"); + for (x= 0; user_tests[x].function_name; x++) + { + if (wildcard) + if (strcmp(wildcard, tests[x].function_name)) + continue; + + memcached_st *memc; + memcached_return rc; + struct timeval start_time, end_time; + + memc= memcached_create(NULL); + assert(memc); + + rc= memcached_server_push(memc, servers); + assert(rc == MEMCACHED_SUCCESS); + + fprintf(stderr, "Testing %s", user_tests[x].function_name); + gettimeofday(&start_time, NULL); + user_tests[x].function(memc); + gettimeofday(&end_time, NULL); + long int load_time= timedif(end_time, start_time); + fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000, + load_time % 1000); + assert(memc); + memcached_free(memc); + } } /* Clean up whatever we might have left */