X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Ftest.c;h=047ed29a95d31d7528dc88a77c54835ca1adee02;hb=7ef83f5c1f71a8527a5f3001d72772ac692bcf14;hp=8da111b316d627e7627ee8ff202c80ec8ed64236;hpb=d3ef73cd144dfdbcaff41d3373e4458fb351f7af;p=m6w6%2Flibmemcached diff --git a/tests/test.c b/tests/test.c index 8da111b3..047ed29a 100644 --- a/tests/test.c +++ b/tests/test.c @@ -208,6 +208,8 @@ void get_test3(memcached_st *memc) string= memcached_get(memc, key, strlen(key), &string_length, &flags, &rc); + WATCHPOINT_ERRNO(memc->my_errno); + WATCHPOINT_ERROR(rc); assert(rc == MEMCACHED_SUCCESS); assert(string); assert(string_length == value_length); @@ -391,6 +393,7 @@ void get_stats_keys(memcached_st *memc) assert(rc == MEMCACHED_SUCCESS); for (ptr= list; *ptr; ptr++) printf("Found key %s\n", *ptr); + fflush(stdout); free(list); } @@ -452,6 +455,81 @@ void add_host_test(memcached_st *memc) memcached_server_list_free(servers); } +/* We don't test the behavior itself, we test the switches */ +void behavior_test(memcached_st *memc) +{ + unsigned long long value; + unsigned int set= 1; + + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &set); + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NO_BLOCK); + assert(value == 1); + + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &set); + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY); + assert(value == 1); + + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, &set); + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_MD5_HASHING); + assert(value == 1); + + set= 0; + + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &set); + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NO_BLOCK); + assert(value == 0); + + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &set); + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY); + assert(value == 0); + + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, &set); + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_MD5_HASHING); + assert(value == 0); +} + +/* Test case provided by Cal Haldenbrand */ +void user_supplied_bug1(memcached_st *memc) +{ + unsigned int setter= 1; + unsigned int x; + + long total= 0; + int size= 0; + srand(time(NULL)); + char key[10]; + char *randomstuff = (char *)malloc(6 * 1024); + memset(randomstuff, 0, 6 * 1024); + + memcached_return rc; + + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &setter); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &setter); + + + /* add key */ + for (x= 0 ; total < 20 * 1024576 ; x++ ) + { + unsigned int j= 0; + + size= (rand() % ( 5 * 1024 ) ) + 400; + memset(randomstuff, 0, 6 * 1024); + assert(size < 6 * 1024); /* Being safe here */ + + for (j= 0 ; j < size ;j++) + randomstuff[j] = (char) (rand() % 26) + 97; + + total += size; + sprintf(key, "%d", x); + rc = memcached_set(memc, key, strlen(key), + randomstuff, strlen(randomstuff), 10, 0); + /* If we fail, lets try again */ + if (rc != MEMCACHED_SUCCESS) + rc = memcached_set(memc, key, strlen(key), + randomstuff, strlen(randomstuff), 10, 0); + assert(rc == MEMCACHED_SUCCESS); + } +} void add_host_test1(memcached_st *memc) { unsigned int x; @@ -494,16 +572,31 @@ int main(int argc, char *argv[]) { unsigned int x; char *server_list; + char *wildcard= NULL; memcached_server_st *servers; + if (argc == 2) + wildcard= argv[1]; + if (!(server_list= getenv("MEMCACHED_SERVERS"))) server_list= "localhost"; printf("servers %s\n", server_list); + srandom(time(NULL)); 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 }, @@ -528,12 +621,22 @@ int main(int argc, char *argv[]) {"get_stats", 0, get_stats }, {"add_host_test", 0, add_host_test }, {"get_stats_keys", 0, get_stats_keys }, + {"behavior_test", 0, get_stats_keys }, + {0, 0, 0} + }; + + test_st user_tests[] ={ + {"user_supplied_bug1", 0, user_supplied_bug1 }, {0, 0, 0} }; 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; memc= memcached_create(NULL); @@ -542,6 +645,14 @@ int main(int argc, char *argv[]) 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); tests[x].function(memc); fprintf(stderr, "\t\t\t\t\t[ ok ]\n"); @@ -552,6 +663,10 @@ int main(int argc, char *argv[]) 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; memc= memcached_create(NULL); @@ -571,6 +686,10 @@ int main(int argc, char *argv[]) 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; memc= memcached_create(NULL); @@ -591,6 +710,10 @@ int main(int argc, char *argv[]) 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; memc= memcached_create(NULL); @@ -607,6 +730,28 @@ int main(int argc, char *argv[]) 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; + 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); + } + /* Clean up whatever we might have left */ { memcached_st *memc; @@ -615,5 +760,8 @@ int main(int argc, char *argv[]) flush_test(memc); memcached_free(memc); } + + fprintf(stderr, "All tests completed successfully\n\n"); + return 0; }