X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Ftest.c;h=ab0e90971ca01b66fd9c22415292ce19d2ebda5e;hb=03f069ae2f50dd6de7ee5f466b0101cccbea4293;hp=258feb441234877b50fbea9b7169744e7cdd4ef1;hpb=b662f45011eb691eab9fdf8e8e683c42c1e5694f;p=m6w6%2Flibmemcached diff --git a/tests/test.c b/tests/test.c index 258feb44..ab0e9097 100644 --- a/tests/test.c +++ b/tests/test.c @@ -7,6 +7,9 @@ #include #include #include +#include +#include +#include #include #include "../lib/common.h" @@ -37,6 +40,43 @@ void allocation_test(memcached_st *not_used) memcached_free(memc); } +void clone_test(memcached_st *memc) +{ + /* All null? */ + { + memcached_st *clone; + clone= memcached_clone(NULL, NULL); + assert(clone); + memcached_free(clone); + } + + /* Can we init from null? */ + { + memcached_st *clone; + clone= memcached_clone(NULL, memc); + assert(clone); + memcached_free(clone); + } + + /* Can we init from struct? */ + { + memcached_st declared_clone; + memcached_st *clone; + clone= memcached_clone(&declared_clone, NULL); + assert(clone); + memcached_free(clone); + } + + /* Can we init from struct? */ + { + memcached_st declared_clone; + memcached_st *clone; + clone= memcached_clone(&declared_clone, memc); + assert(clone); + memcached_free(clone); + } +} + void connection_test(memcached_st *memc) { memcached_return rc; @@ -572,9 +612,11 @@ void user_supplied_bug2(memcached_st *memc) 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++) +#endif + + for (x= 0, errors= 0, total= 0 ; total < 24576 ; x++) { memcached_return rc= MEMCACHED_SUCCESS; char buffer[SMALL_STRING_LEN]; @@ -683,7 +725,7 @@ void string_alloc_with_size_toobig(memcached_st *memc) { memcached_string_st *string; - string= memcached_string_create(memc, UINT64_MAX); + string= memcached_string_create(memc, INT64_MAX); assert(string == NULL); } @@ -726,7 +768,7 @@ void string_alloc_append_toobig(memcached_st *memc) rc= memcached_string_append(memc, string, buffer, SMALL_STRING_LEN); assert(rc == MEMCACHED_SUCCESS); } - rc= memcached_string_append(memc, string, buffer, UINT64_MAX); + rc= memcached_string_append(memc, string, buffer, INT64_MAX); assert(rc == MEMCACHED_MEMORY_ALLOCATION_FAILURE); memcached_string_free(memc, string); } @@ -761,20 +803,50 @@ void add_host_test1(memcached_st *memc) memcached_server_list_free(servers); } -void pre_nonblock(memcached_st *memc) +memcached_return pre_nonblock(memcached_st *memc) { memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL); + + return MEMCACHED_SUCCESS; } -void pre_md5(memcached_st *memc) +memcached_return pre_md5(memcached_st *memc) { memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, NULL); + + return MEMCACHED_SUCCESS; +} + +memcached_return pre_crc(memcached_st *memc) +{ + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_CRC_HASHING, NULL); + + return MEMCACHED_SUCCESS; } -void pre_nodelay(memcached_st *memc) +memcached_return pre_unix_socket(memcached_st *memc) +{ + memcached_return rc; + struct stat buf; + + memcached_server_list_free(memc->hosts); + memc->hosts= NULL; + memc->number_of_hosts= 0; + + if (stat("/tmp/memcached.socket", &buf)) + return MEMCACHED_FAILURE; + + rc= memcached_server_add_unix_socket(memc, "/tmp/memcached.socket"); + + return rc; +} + +memcached_return pre_nodelay(memcached_st *memc) { memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL); memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, NULL); + + return MEMCACHED_SUCCESS; } typedef struct collection_st collection_st; @@ -788,8 +860,8 @@ struct test_st { struct collection_st { char *name; - void (*pre)(memcached_st *memc); - void (*post)(memcached_st *memc); + memcached_return (*pre)(memcached_st *memc); + memcached_return (*post)(memcached_st *memc); test_st *tests; }; @@ -832,6 +904,7 @@ int main(int argc, char *argv[]) {"flush", 0, flush_test }, {"init", 0, init_test }, {"allocation", 0, allocation_test }, + {"clone_test", 0, clone_test }, {"error", 0, error_test }, {"set", 0, set_test }, {"set2", 0, set_test2 }, @@ -867,7 +940,7 @@ int main(int argc, char *argv[]) test_st user_tests[] ={ {"user_supplied_bug1", 0, user_supplied_bug1 }, {"user_supplied_bug2", 0, user_supplied_bug2 }, -// {"user_supplied_bug3", 0, user_supplied_bug3 }, + {"user_supplied_bug3", 0, user_supplied_bug3 }, {0, 0, 0} }; @@ -877,15 +950,14 @@ int main(int argc, char *argv[]) {"nonblock", pre_nonblock, 0, tests}, {"nodelay", pre_nodelay, 0, tests}, {"md5", pre_md5, 0, tests}, + {"crc", pre_crc, 0, tests}, + {"unix_socket", pre_unix_socket, 0, tests}, + {"unix_socket_nodelay", pre_nodelay, 0, tests}, {"string", 0, 0, string_tests}, {"user", 0, 0, user_tests}, {0, 0, 0, 0} }; - /* - unsigned int next; - for (next= 0; collection[next].name; next++) -*/ collection_st *next; for (next= collection; next->name; next++) { @@ -927,7 +999,16 @@ int main(int argc, char *argv[]) } if (next->pre) - next->pre(memc); + { + memcached_return rc; + rc= next->pre(memc); + + if (rc != MEMCACHED_SUCCESS) + { + fprintf(stderr, "\t\t\t\t\t [ skipping ]\n"); + goto error; + } + } gettimeofday(&start_time, NULL); run->function(memc); @@ -937,9 +1018,10 @@ int main(int argc, char *argv[]) load_time % 1000); if (next->post) - next->post(memc); + (void)next->post(memc); assert(memc); +error: memcached_free(memc); } }