X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Ffunction.c;h=7d2de7032d281f8cf439426d5ace817d0d2ffa6a;hb=3bcf5c0efffbf64b6b6eccf140f057d2373fa974;hp=fb21db56e46e93928d167b878f34e1906a925942;hpb=137a6414386ce392447905dab6d11d629a1b381b;p=m6w6%2Flibmemcached diff --git a/tests/function.c b/tests/function.c index fb21db56..7d2de703 100644 --- a/tests/function.c +++ b/tests/function.c @@ -22,23 +22,27 @@ static pairs_st *global_pairs; static char *global_keys[GLOBAL_COUNT]; static size_t global_keys_length[GLOBAL_COUNT]; -void init_test(memcached_st *not_used) +uint8_t init_test(memcached_st *not_used) { memcached_st memc; (void)memcached_create(&memc); memcached_free(&memc); + + return 0; } -void allocation_test(memcached_st *not_used) +uint8_t allocation_test(memcached_st *not_used) { memcached_st *memc; memc= memcached_create(NULL); assert(memc); memcached_free(memc); + + return 0; } -void clone_test(memcached_st *memc) +uint8_t clone_test(memcached_st *memc) { /* All null? */ { @@ -73,17 +77,21 @@ void clone_test(memcached_st *memc) assert(clone); memcached_free(clone); } + + return 0; } -void connection_test(memcached_st *memc) +uint8_t connection_test(memcached_st *memc) { memcached_return rc; rc= memcached_server_add(memc, "localhost", 0); assert(rc == MEMCACHED_SUCCESS); + + return 0; } -void error_test(memcached_st *memc) +uint8_t error_test(memcached_st *memc) { memcached_return rc; @@ -91,9 +99,11 @@ void error_test(memcached_st *memc) { printf("Error %d -> %s\n", rc, memcached_strerror(memc, rc)); } + + return 0; } -void set_test(memcached_st *memc) +uint8_t set_test(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -103,9 +113,11 @@ void set_test(memcached_st *memc) value, strlen(value), (time_t)0, (uint16_t)0); assert(rc == MEMCACHED_SUCCESS); + + return 0; } -void add_test(memcached_st *memc) +uint8_t add_test(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -115,9 +127,11 @@ void add_test(memcached_st *memc) value, strlen(value), (time_t)0, (uint16_t)0); assert(rc == MEMCACHED_NOTSTORED); + + return 0; } -void replace_test(memcached_st *memc) +uint8_t replace_test(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -127,9 +141,11 @@ void replace_test(memcached_st *memc) value, strlen(value), (time_t)0, (uint16_t)0); assert(rc == MEMCACHED_SUCCESS); + + return 0; } -void delete_test(memcached_st *memc) +uint8_t delete_test(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -142,17 +158,21 @@ void delete_test(memcached_st *memc) rc= memcached_delete(memc, key, strlen(key), (time_t)0); assert(rc == MEMCACHED_SUCCESS); + + return 0; } -void flush_test(memcached_st *memc) +uint8_t flush_test(memcached_st *memc) { memcached_return rc; rc= memcached_flush(memc, 0); assert(rc == MEMCACHED_SUCCESS); + + return 0; } -void get_test(memcached_st *memc) +uint8_t get_test(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -169,9 +189,11 @@ void get_test(memcached_st *memc) assert(rc == MEMCACHED_NOTFOUND); assert(string_length == 0); assert(!string); + + return 0; } -void get_test2(memcached_st *memc) +uint8_t get_test2(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -194,9 +216,11 @@ void get_test2(memcached_st *memc) assert(!memcmp(string, value, string_length)); free(string); + + return 0; } -void set_test2(memcached_st *memc) +uint8_t set_test2(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -211,9 +235,11 @@ void set_test2(memcached_st *memc) (time_t)0, (uint16_t)0); assert(rc == MEMCACHED_SUCCESS); } + + return 0; } -void set_test3(memcached_st *memc) +uint8_t set_test3(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -236,9 +262,11 @@ void set_test3(memcached_st *memc) } free(value); + + return 0; } -void get_test3(memcached_st *memc) +uint8_t get_test3(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -270,9 +298,11 @@ void get_test3(memcached_st *memc) free(string); free(value); + + return 0; } -void get_test4(memcached_st *memc) +uint8_t get_test4(memcached_st *memc) { memcached_return rc; char *key= "foo"; @@ -307,20 +337,24 @@ void get_test4(memcached_st *memc) } free(value); + + return 0; } -void stats_servername_test(memcached_st *memc) +uint8_t stats_servername_test(memcached_st *memc) { memcached_return rc; memcached_stat_st stat; rc= memcached_stat_servername(&stat, NULL, "localhost", MEMCACHED_DEFAULT_PORT); + + return 0; } -void increment_test(memcached_st *memc) +uint8_t increment_test(memcached_st *memc) { - unsigned int new_number; + uint64_t new_number; memcached_return rc; char *key= "number"; char *value= "0"; @@ -339,11 +373,13 @@ void increment_test(memcached_st *memc) 1, &new_number); assert(rc == MEMCACHED_SUCCESS); assert(new_number == 2); + + return 0; } -void decrement_test(memcached_st *memc) +uint8_t decrement_test(memcached_st *memc) { - unsigned int new_number; + uint64_t new_number; memcached_return rc; char *key= "number"; char *value= "3"; @@ -362,9 +398,11 @@ void decrement_test(memcached_st *memc) 1, &new_number); assert(rc == MEMCACHED_SUCCESS); assert(new_number == 1); + + return 0; } -void quit_test(memcached_st *memc) +uint8_t quit_test(memcached_st *memc) { memcached_return rc; char *key= "fudge"; @@ -380,9 +418,11 @@ void quit_test(memcached_st *memc) value, strlen(value), (time_t)50, (uint16_t)9); assert(rc == MEMCACHED_SUCCESS); + + return 0; } -void mget_result_test(memcached_st *memc) +uint8_t mget_result_test(memcached_st *memc) { memcached_return rc; char *keys[]= {"fudge", "son", "food"}; @@ -434,9 +474,11 @@ void mget_result_test(memcached_st *memc) } memcached_result_free(&results_obj); + + return 0; } -void mget_result_alloc_test(memcached_st *memc) +uint8_t mget_result_alloc_test(memcached_st *memc) { memcached_return rc; char *keys[]= {"fudge", "son", "food"}; @@ -482,9 +524,11 @@ void mget_result_alloc_test(memcached_st *memc) memcached_result_free(results); x++; } + + return 0; } -void mget_test(memcached_st *memc) +uint8_t mget_test(memcached_st *memc) { memcached_return rc; char *keys[]= {"fudge", "son", "food"}; @@ -535,9 +579,11 @@ void mget_test(memcached_st *memc) free(return_value); x++; } + + return 0; } -void get_stats_keys(memcached_st *memc) +uint8_t get_stats_keys(memcached_st *memc) { char **list; char **ptr; @@ -551,9 +597,11 @@ void get_stats_keys(memcached_st *memc) fflush(stdout); free(list); + + return 0; } -void get_stats(memcached_st *memc) +uint8_t get_stats(memcached_st *memc) { unsigned int x; char **list; @@ -578,9 +626,11 @@ void get_stats(memcached_st *memc) } memcached_stat_free(NULL, stat); + + return 0; } -void add_host_test(memcached_st *memc) +uint8_t add_host_test(memcached_st *memc) { unsigned int x; memcached_server_st *servers; @@ -608,10 +658,12 @@ void add_host_test(memcached_st *memc) assert(rc == MEMCACHED_SUCCESS); memcached_server_list_free(servers); + + return 0; } /* We don't test the behavior itself, we test the switches */ -void behavior_test(memcached_st *memc) +uint8_t behavior_test(memcached_st *memc) { unsigned long long value; unsigned int set= 1; @@ -654,10 +706,12 @@ void behavior_test(memcached_st *memc) value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE); assert(value > 0); + + return 0; } /* Test case provided by Cal Haldenbrand */ -void user_supplied_bug1(memcached_st *memc) +uint8_t user_supplied_bug1(memcached_st *memc) { unsigned int setter= 1; unsigned int x; @@ -699,10 +753,12 @@ void user_supplied_bug1(memcached_st *memc) randomstuff, strlen(randomstuff), 10, 0); assert(rc == MEMCACHED_SUCCESS); } + + return 0; } /* Test case provided by Cal Haldenbrand */ -void user_supplied_bug2(memcached_st *memc) +uint8_t user_supplied_bug2(memcached_st *memc) { int errors; unsigned int setter; @@ -749,11 +805,13 @@ void user_supplied_bug2(memcached_st *memc) errors= 0; free(getval); } + + return 0; } /* Do a large mget() over all the keys we think exist */ #define KEY_COUNT 3000 // * 1024576 -void user_supplied_bug3(memcached_st *memc) +uint8_t user_supplied_bug3(memcached_st *memc) { memcached_return rc; unsigned int setter; @@ -808,9 +866,192 @@ void user_supplied_bug3(memcached_st *memc) for (x= 0; x < KEY_COUNT; x++) free(keys[x]); free(keys); + + return 0; } -void result_static(memcached_st *memc) +/* Make sure we behave properly if server list has no values */ +uint8_t user_supplied_bug4(memcached_st *memc) +{ + memcached_return rc; + char *keys[]= {"fudge", "son", "food"}; + size_t key_length[]= {5, 3, 4}; + unsigned int x; + uint16_t flags; + + /* Here we free everything before running a bunch of mget tests */ + { + memcached_server_list_free(memc->hosts); + memc->hosts= NULL; + memc->number_of_hosts= 0; + } + + char return_key[MEMCACHED_MAX_KEY]; + size_t return_key_length; + char *return_value; + size_t return_value_length; + + /* We need to empty the server before continueing test */ + rc= memcached_flush(memc, 0); + assert(rc == MEMCACHED_NO_SERVERS); + + rc= memcached_mget(memc, keys, key_length, 3); + assert(rc == MEMCACHED_NO_SERVERS); + + while ((return_value= memcached_fetch(memc, return_key, &return_key_length, + &return_value_length, &flags, &rc)) != NULL) + { + assert(return_value); + } + assert(!return_value); + assert(return_value_length == 0); + assert(rc == MEMCACHED_NO_SERVERS); + + for (x= 0; x < 3; x++) + { + rc= memcached_set(memc, keys[x], key_length[x], + keys[x], key_length[x], + (time_t)50, (uint16_t)9); + assert(rc == MEMCACHED_NO_SERVERS); + } + + rc= memcached_mget(memc, keys, key_length, 3); + assert(rc == MEMCACHED_NO_SERVERS); + + x= 0; + while ((return_value= memcached_fetch(memc, return_key, &return_key_length, + &return_value_length, &flags, &rc))) + { + assert(return_value); + assert(rc == MEMCACHED_SUCCESS); + assert(return_key_length == return_value_length); + assert(!memcmp(return_value, return_key, return_value_length)); + free(return_value); + x++; + } + + return 0; +} + +#define VALUE_SIZE_BUG5 1048064 +uint8_t user_supplied_bug5(memcached_st *memc) +{ + memcached_return rc; + char *keys[]= {"036790384900", "036790384902", "036790384904", "036790384906"}; + size_t key_length[]= {strlen("036790384900"), strlen("036790384902"), strlen("036790384904"), strlen("036790384906")}; + char return_key[MEMCACHED_MAX_KEY]; + size_t return_key_length; + char *value; + size_t value_length; + uint16_t flags; + unsigned int count; + unsigned int x; + char insert_data[VALUE_SIZE_BUG5]; + + for (x= 0; x < VALUE_SIZE_BUG5; x++) + insert_data[x]= rand(); + + memcached_flush(memc, 0); + value= memcached_get(memc, keys[0], key_length[0], + &value_length, &flags, &rc); + assert(value == NULL); + rc= memcached_mget(memc, keys, key_length, 4); + + count= 0; + while ((value= memcached_fetch(memc, return_key, &return_key_length, + &value_length, &flags, &rc))) + count++; + assert(count == 0); + + for (x= 0; x < 4; x++) + { + rc= memcached_set(memc, keys[x], key_length[x], + insert_data, VALUE_SIZE_BUG5, + (time_t)0, (uint16_t)0); + assert(rc == MEMCACHED_SUCCESS); + } + + for (x= 0; x < 10; x++) + { + value= memcached_get(memc, keys[0], key_length[0], + &value_length, &flags, &rc); + assert(value); + free(value); + + rc= memcached_mget(memc, keys, key_length, 4); + count= 0; + while ((value= memcached_fetch(memc, return_key, &return_key_length, + &value_length, &flags, &rc))) + { + count++; + free(value); + } + assert(count == 4); + } + + return 0; +} + +uint8_t user_supplied_bug6(memcached_st *memc) +{ + memcached_return rc; + char *keys[]= {"036790384900", "036790384902", "036790384904", "036790384906"}; + size_t key_length[]= {strlen("036790384900"), strlen("036790384902"), strlen("036790384904"), strlen("036790384906")}; + char return_key[MEMCACHED_MAX_KEY]; + size_t return_key_length; + char *value; + size_t value_length; + uint16_t flags; + unsigned int count; + unsigned int x; + char insert_data[VALUE_SIZE_BUG5]; + + for (x= 0; x < VALUE_SIZE_BUG5; x++) + insert_data[x]= rand(); + + memcached_flush(memc, 0); + value= memcached_get(memc, keys[0], key_length[0], + &value_length, &flags, &rc); + assert(value == NULL); + rc= memcached_mget(memc, keys, key_length, 4); + + count= 0; + while ((value= memcached_fetch(memc, return_key, &return_key_length, + &value_length, &flags, &rc))) + count++; + assert(count == 0); + + for (x= 0; x < 4; x++) + { + rc= memcached_set(memc, keys[x], key_length[x], + insert_data, VALUE_SIZE_BUG5, + (time_t)0, (uint16_t)0); + assert(rc == MEMCACHED_SUCCESS); + } + + for (x= 0; x < 10; x++) + { + value= memcached_get(memc, keys[0], key_length[0], + &value_length, &flags, &rc); + assert(value); + free(value); + + rc= memcached_mget(memc, keys, key_length, 4); + count= 3; + /* We test for purge of partial complete fetches */ + for (count= 3; count; count--) + { + value= memcached_fetch(memc, return_key, &return_key_length, + &value_length, &flags, &rc); + free(value); + assert(rc == MEMCACHED_SUCCESS); + } + } + + return 0; +} + +uint8_t result_static(memcached_st *memc) { memcached_result_st result; memcached_result_st *result_ptr; @@ -819,18 +1060,22 @@ void result_static(memcached_st *memc) assert(result.is_allocated == MEMCACHED_NOT_ALLOCATED); assert(result_ptr); memcached_result_free(&result); + + return 0; } -void result_alloc(memcached_st *memc) +uint8_t result_alloc(memcached_st *memc) { memcached_result_st *result; result= memcached_result_create(memc, NULL); assert(result); memcached_result_free(result); + + return 0; } -void string_static_null(memcached_st *memc) +uint8_t string_static_null(memcached_st *memc) { memcached_string_st string; memcached_string_st *string_ptr; @@ -839,35 +1084,43 @@ void string_static_null(memcached_st *memc) assert(string.is_allocated == MEMCACHED_NOT_ALLOCATED); assert(string_ptr); memcached_string_free(&string); + + return 0; } -void string_alloc_null(memcached_st *memc) +uint8_t string_alloc_null(memcached_st *memc) { memcached_string_st *string; string= memcached_string_create(memc, NULL, 0); assert(string); memcached_string_free(string); + + return 0; } -void string_alloc_with_size(memcached_st *memc) +uint8_t string_alloc_with_size(memcached_st *memc) { memcached_string_st *string; string= memcached_string_create(memc, NULL, 1024); assert(string); memcached_string_free(string); + + return 0; } -void string_alloc_with_size_toobig(memcached_st *memc) +uint8_t string_alloc_with_size_toobig(memcached_st *memc) { memcached_string_st *string; string= memcached_string_create(memc, NULL, INT64_MAX); assert(string == NULL); + + return 0; } -void string_alloc_append(memcached_st *memc) +uint8_t string_alloc_append(memcached_st *memc) { unsigned int x; char buffer[SMALL_STRING_LEN]; @@ -886,9 +1139,11 @@ void string_alloc_append(memcached_st *memc) assert(rc == MEMCACHED_SUCCESS); } memcached_string_free(string); + + return 0; } -void string_alloc_append_toobig(memcached_st *memc) +uint8_t string_alloc_append_toobig(memcached_st *memc) { memcached_return rc; unsigned int x; @@ -909,9 +1164,11 @@ void string_alloc_append_toobig(memcached_st *memc) rc= memcached_string_append(string, buffer, INT64_MAX); assert(rc == MEMCACHED_MEMORY_ALLOCATION_FAILURE); memcached_string_free(string); + + return 0; } -void generate_data(memcached_st *memc) +uint8_t generate_data(memcached_st *memc) { unsigned long long x; global_pairs= pairs_generate(GLOBAL_COUNT); @@ -922,9 +1179,11 @@ void generate_data(memcached_st *memc) global_keys[x]= global_pairs[x].key; global_keys_length[x]= global_pairs[x].key_length; } + + return 0; } -void get_read(memcached_st *memc) +uint8_t get_read(memcached_st *memc) { unsigned int x; memcached_return rc; @@ -946,9 +1205,11 @@ void get_read(memcached_st *memc) free(return_value); } } + + return 0; } -void mget_read(memcached_st *memc) +uint8_t mget_read(memcached_st *memc) { memcached_return rc; @@ -970,9 +1231,11 @@ void mget_read(memcached_st *memc) free(return_value); } } + + return 0; } -void mget_read_result(memcached_st *memc) +uint8_t mget_read_result(memcached_st *memc) { memcached_return rc; @@ -993,14 +1256,18 @@ void mget_read_result(memcached_st *memc) memcached_result_free(&results_obj); } + + return 0; } -void free_data(memcached_st *memc) +uint8_t free_data(memcached_st *memc) { pairs_free(global_pairs); + + return 0; } -void add_host_test1(memcached_st *memc) +uint8_t add_host_test1(memcached_st *memc) { unsigned int x; memcached_return rc; @@ -1028,6 +1295,8 @@ void add_host_test1(memcached_st *memc) assert(rc == MEMCACHED_SUCCESS); memcached_server_list_free(servers); + + return 0; } memcached_return pre_nonblock(memcached_st *memc) @@ -1110,6 +1379,22 @@ memcached_return pre_unix_socket(memcached_st *memc) return rc; } +memcached_return pre_udp(memcached_st *memc) +{ + memcached_return rc; + + memcached_server_list_free(memc->hosts); + memc->hosts= NULL; + memc->number_of_hosts= 0; + + if (0) + return MEMCACHED_FAILURE; + + rc= memcached_server_add_udp(memc, "localhost", MEMCACHED_DEFAULT_PORT); + + return rc; +} + memcached_return pre_nodelay(memcached_st *memc) { memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL); @@ -1170,6 +1455,9 @@ 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_bug4", 0, user_supplied_bug4 }, + {"user_supplied_bug5", 1, user_supplied_bug5 }, + {"user_supplied_bug6", 1, user_supplied_bug6 }, {0, 0, 0} }; @@ -1195,6 +1483,7 @@ collection_st collection[] ={ {"ketama", pre_hash_ketama, 0, tests}, {"unix_socket", pre_unix_socket, 0, tests}, {"unix_socket_nodelay", pre_nodelay, 0, tests}, +// {"udp", pre_udp, 0, tests}, {"string", 0, 0, string_tests}, {"result", 0, 0, result_tests}, {"user", 0, 0, user_tests},