X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Ffunction.c;h=5b598003e54a44cd7fa911498fbd7881a89f6516;hb=3108ba67a2cb6230cb43d24608187f7201951822;hp=771178267b1d06c2fe29506605597f0b425cb39b;hpb=e1944ccd4d1e65f4192783fa9c564c9b747bb618;p=m6w6%2Flibmemcached diff --git a/tests/function.c b/tests/function.c index 77117826..5b598003 100644 --- a/tests/function.c +++ b/tests/function.c @@ -15,6 +15,14 @@ #include "../src/generator.h" #include "../src/execute.h" +#ifndef INT64_MAX +#define INT64_MAX LONG_MAX +#endif +#ifndef INT32_MAX +#define INT32_MAX INT_MAX +#endif + + #include "test.h" #define GLOBAL_COUNT 100000 @@ -32,6 +40,23 @@ uint8_t init_test(memcached_st *not_used) return 0; } +uint8_t server_list_null_test(memcached_st *ptr) +{ + memcached_server_st *server_list; + memcached_return rc; + + server_list= memcached_server_list_append(NULL, NULL, 0, NULL); + assert(server_list == NULL); + + server_list= memcached_server_list_append(NULL, "localhost", 0, NULL); + assert(server_list == NULL); + + server_list= memcached_server_list_append(NULL, NULL, 0, &rc); + assert(server_list == NULL); + + return 0; +} + uint8_t allocation_test(memcached_st *not_used) { memcached_st *memc; @@ -111,7 +136,7 @@ uint8_t set_test(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); return 0; @@ -123,24 +148,24 @@ uint8_t append_test(memcached_st *memc) char *key= "fig"; char *value= "we"; size_t value_length; - uint16_t flags; + uint32_t flags; rc= memcached_flush(memc, 0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_append(memc, key, strlen(key), " the", strlen(" the"), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_append(memc, key, strlen(key), " people", strlen(" people"), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); value= memcached_get(memc, key, strlen(key), @@ -161,7 +186,7 @@ uint8_t append_binary_test(memcached_st *memc) unsigned int store_list[] = { 23, 56, 499, 98, 32847, 0 }; char *value; size_t value_length; - uint16_t flags; + uint32_t flags; unsigned int x; rc= memcached_flush(memc, 0); @@ -170,7 +195,7 @@ uint8_t append_binary_test(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), NULL, 0, - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); for (x= 0; store_list[x] ; x++) @@ -178,7 +203,7 @@ uint8_t append_binary_test(memcached_st *memc) rc= memcached_append(memc, key, strlen(key), (char *)&store_list[x], sizeof(unsigned int), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); } @@ -220,7 +245,7 @@ uint8_t cas2_test(memcached_st *memc) { rc= memcached_set(memc, keys[x], key_length[x], keys[x], key_length[x], - (time_t)50, (uint16_t)9); + (time_t)50, (uint32_t)9); assert(rc == MEMCACHED_SUCCESS); } @@ -261,7 +286,7 @@ uint8_t cas_test(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_mget(memc, &key, &key_length, 1); @@ -288,24 +313,24 @@ uint8_t prepend_test(memcached_st *memc) char *key= "fig"; char *value= "people"; size_t value_length; - uint16_t flags; + uint32_t flags; rc= memcached_flush(memc, 0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_prepend(memc, key, strlen(key), "the ", strlen("the "), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_prepend(memc, key, strlen(key), "we ", strlen("we "), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); value= memcached_get(memc, key, strlen(key), @@ -330,17 +355,27 @@ uint8_t add_test(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); memcached_quit(memc); rc= memcached_add(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_NOTSTORED); return 0; } +uint8_t add_wrapper(memcached_st *memc) +{ + unsigned int x; + + for (x= 0; x < 10000; x++) + add_test(memc); + + return 0; +} + uint8_t replace_test(memcached_st *memc) { memcached_return rc; @@ -349,7 +384,7 @@ uint8_t replace_test(memcached_st *memc) rc= memcached_replace(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); return 0; @@ -363,7 +398,7 @@ uint8_t delete_test(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_delete(memc, key, strlen(key), (time_t)0); @@ -388,7 +423,7 @@ uint8_t get_test(memcached_st *memc) char *key= "foo"; char *string; size_t string_length; - uint16_t flags; + uint32_t flags; rc= memcached_delete(memc, key, strlen(key), (time_t)0); assert(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_NOTFOUND); @@ -410,11 +445,11 @@ uint8_t get_test2(memcached_st *memc) char *value= "when we sanitize"; char *string; size_t string_length; - uint16_t flags; + uint32_t flags; rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); string= memcached_get(memc, key, strlen(key), @@ -442,7 +477,7 @@ uint8_t set_test2(memcached_st *memc) { rc= memcached_set(memc, key, strlen(key), value, value_length, - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); } @@ -467,7 +502,7 @@ uint8_t set_test3(memcached_st *memc) { rc= memcached_set(memc, key, strlen(key), value, value_length, - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); } @@ -484,7 +519,7 @@ uint8_t get_test3(memcached_st *memc) size_t value_length= 8191; char *string; size_t string_length; - uint16_t flags; + uint32_t flags; int x; value = (char*)malloc(value_length); @@ -495,7 +530,7 @@ uint8_t get_test3(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, value_length, - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); string= memcached_get(memc, key, strlen(key), @@ -520,7 +555,7 @@ uint8_t get_test4(memcached_st *memc) size_t value_length= 8191; char *string; size_t string_length; - uint16_t flags; + uint32_t flags; int x; value = (char*)malloc(value_length); @@ -531,7 +566,7 @@ uint8_t get_test4(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, value_length, - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); for (x= 0; x < 10; x++) @@ -572,7 +607,7 @@ uint8_t increment_test(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_increment(memc, key, strlen(key), @@ -597,7 +632,7 @@ uint8_t decrement_test(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); rc= memcached_decrement(memc, key, strlen(key), @@ -621,13 +656,13 @@ uint8_t quit_test(memcached_st *memc) rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)10, (uint16_t)3); + (time_t)10, (uint32_t)3); assert(rc == MEMCACHED_SUCCESS); memcached_quit(memc); rc= memcached_set(memc, key, strlen(key), value, strlen(value), - (time_t)50, (uint16_t)9); + (time_t)50, (uint32_t)9); assert(rc == MEMCACHED_SUCCESS); return 0; @@ -667,7 +702,7 @@ uint8_t mget_result_test(memcached_st *memc) { rc= memcached_set(memc, keys[x], key_length[x], keys[x], key_length[x], - (time_t)50, (uint16_t)9); + (time_t)50, (uint32_t)9); assert(rc == MEMCACHED_SUCCESS); } @@ -717,7 +752,7 @@ uint8_t mget_result_alloc_test(memcached_st *memc) { rc= memcached_set(memc, keys[x], key_length[x], keys[x], key_length[x], - (time_t)50, (uint16_t)9); + (time_t)50, (uint32_t)9); assert(rc == MEMCACHED_SUCCESS); } @@ -746,7 +781,7 @@ uint8_t mget_test(memcached_st *memc) char *keys[]= {"fudge", "son", "food"}; size_t key_length[]= {5, 3, 4}; unsigned int x; - uint16_t flags; + uint32_t flags; char return_key[MEMCACHED_MAX_KEY]; size_t return_key_length; @@ -773,7 +808,7 @@ uint8_t mget_test(memcached_st *memc) { rc= memcached_set(memc, keys[x], key_length[x], keys[x], key_length[x], - (time_t)50, (uint16_t)9); + (time_t)50, (uint32_t)9); assert(rc == MEMCACHED_SUCCESS); } @@ -994,7 +1029,7 @@ uint8_t user_supplied_bug2(memcached_st *memc) { memcached_return rc= MEMCACHED_SUCCESS; char buffer[SMALL_STRING_LEN]; - uint16_t flags= 0; + uint32_t flags= 0; size_t val_len= 0; char *getval; @@ -1063,7 +1098,7 @@ uint8_t user_supplied_bug3(memcached_st *memc) size_t return_key_length; char *return_value; size_t return_value_length; - uint16_t flags; + uint32_t flags; while ((return_value= memcached_fetch(memc, return_key, &return_key_length, &return_value_length, &flags, &rc))) @@ -1088,7 +1123,11 @@ uint8_t user_supplied_bug4(memcached_st *memc) char *keys[]= {"fudge", "son", "food"}; size_t key_length[]= {5, 3, 4}; unsigned int x; - uint16_t flags; + uint32_t flags; + char return_key[MEMCACHED_MAX_KEY]; + size_t return_key_length; + char *return_value; + size_t return_value_length; /* Here we free everything before running a bunch of mget tests */ { @@ -1097,10 +1136,6 @@ uint8_t user_supplied_bug4(memcached_st *memc) 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); @@ -1122,7 +1157,7 @@ uint8_t user_supplied_bug4(memcached_st *memc) { rc= memcached_set(memc, keys[x], key_length[x], keys[x], key_length[x], - (time_t)50, (uint16_t)9); + (time_t)50, (uint32_t)9); assert(rc == MEMCACHED_NO_SERVERS); } @@ -1154,7 +1189,7 @@ uint8_t user_supplied_bug5(memcached_st *memc) size_t return_key_length; char *value; size_t value_length; - uint16_t flags; + uint32_t flags; unsigned int count; unsigned int x; char insert_data[VALUE_SIZE_BUG5]; @@ -1178,7 +1213,7 @@ uint8_t user_supplied_bug5(memcached_st *memc) { rc= memcached_set(memc, keys[x], key_length[x], insert_data, VALUE_SIZE_BUG5, - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); } @@ -1212,7 +1247,7 @@ uint8_t user_supplied_bug6(memcached_st *memc) size_t return_key_length; char *value; size_t value_length; - uint16_t flags; + uint32_t flags; unsigned int count; unsigned int x; char insert_data[VALUE_SIZE_BUG5]; @@ -1239,7 +1274,7 @@ uint8_t user_supplied_bug6(memcached_st *memc) { rc= memcached_set(memc, keys[x], key_length[x], insert_data, VALUE_SIZE_BUG5, - (time_t)0, (uint16_t)0); + (time_t)0, (uint32_t)0); assert(rc == MEMCACHED_SUCCESS); } @@ -1308,7 +1343,7 @@ uint8_t user_supplied_bug7(memcached_st *memc) size_t return_key_length; char *value; size_t value_length; - uint16_t flags; + uint32_t flags; unsigned int x; char insert_data[VALUE_SIZE_BUG5]; @@ -1349,7 +1384,7 @@ uint8_t user_supplied_bug9(memcached_st *memc) char *keys[]= {"UDATA:edevil@sapo.pt", "fudge&*@#", "for^#@&$not"}; size_t key_length[3]; unsigned int x; - uint16_t flags; + uint32_t flags; unsigned count= 0; char return_key[MEMCACHED_MAX_KEY]; @@ -1367,7 +1402,7 @@ uint8_t user_supplied_bug9(memcached_st *memc) { rc= memcached_set(memc, keys[x], key_length[x], keys[x], key_length[x], - (time_t)50, (uint16_t)9); + (time_t)50, (uint32_t)9); assert(rc == MEMCACHED_SUCCESS); } @@ -1379,6 +1414,7 @@ uint8_t user_supplied_bug9(memcached_st *memc) &return_value_length, &flags, &rc)) != NULL) { assert(return_value); + free(return_value); count++; } assert(count == 3); @@ -1386,6 +1422,7 @@ uint8_t user_supplied_bug9(memcached_st *memc) return 0; } +/* We are testing with aggressive timeout to get failures */ uint8_t user_supplied_bug10(memcached_st *memc) { char *key= "foo"; @@ -1396,9 +1433,12 @@ uint8_t user_supplied_bug10(memcached_st *memc) memcached_return rc; unsigned int set= 1; memcached_st *mclone= memcached_clone(NULL, memc); + int32_t timeout; memcached_behavior_set(mclone, MEMCACHED_BEHAVIOR_NO_BLOCK, &set); memcached_behavior_set(mclone, MEMCACHED_BEHAVIOR_TCP_NODELAY, &set); + timeout= 2; + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_POLL_TIMEOUT, &timeout); value = (char*)malloc(value_length * sizeof(char)); @@ -1421,6 +1461,49 @@ uint8_t user_supplied_bug10(memcached_st *memc) return 0; } +/* + We are looking failures in the async protocol +*/ +uint8_t user_supplied_bug11(memcached_st *memc) +{ + char *key= "foo"; + char *value; + size_t value_length= 512; + unsigned int x; + int key_len= 3; + memcached_return rc; + unsigned int set= 1; + int32_t timeout; + memcached_st *mclone= memcached_clone(NULL, memc); + + memcached_behavior_set(mclone, MEMCACHED_BEHAVIOR_NO_BLOCK, &set); + memcached_behavior_set(mclone, MEMCACHED_BEHAVIOR_TCP_NODELAY, &set); + timeout= -1; + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_POLL_TIMEOUT, &timeout); + + timeout= (int32_t)memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_POLL_TIMEOUT); + + assert(timeout == -1); + + value = (char*)malloc(value_length * sizeof(char)); + + for (x= 0; x < value_length; x++) + value[x]= (char) (x % 127); + + for (x= 1; x <= 100000; ++x) + { + rc= memcached_set(mclone, key, key_len,value, value_length, 0, 0); + + WATCHPOINT_IFERROR(rc); + //assert(rc == MEMCACHED_SUCCESS); + } + + free(value); + memcached_free(mclone); + + return 0; +} + uint8_t result_static(memcached_st *memc) { memcached_result_st result; @@ -1568,7 +1651,7 @@ uint8_t get_read(memcached_st *memc) { char *return_value; size_t return_value_length; - uint16_t flags; + uint32_t flags; for (x= 0; x < GLOBAL_COUNT; x++) { @@ -1598,7 +1681,7 @@ uint8_t mget_read(memcached_st *memc) size_t return_key_length; char *return_value; size_t return_value_length; - uint16_t flags; + uint32_t flags; while ((return_value= memcached_fetch(memc, return_key, &return_key_length, &return_value_length, &flags, &rc))) @@ -1637,6 +1720,28 @@ uint8_t mget_read_result(memcached_st *memc) return 0; } +uint8_t delete_generate(memcached_st *memc) +{ + unsigned int x; + + for (x= 0; x < GLOBAL_COUNT; x++) + { + (void)memcached_delete(memc, global_keys[x], global_keys_length[x], (time_t)0); + } + + return 0; +} + +uint8_t mdelete_generate(memcached_st *memc) +{ + memcached_return rc; + + rc= memcached_mdelete(memc, global_keys, global_keys_length, GLOBAL_COUNT, 0); + + return 0; +} + + uint8_t free_data(memcached_st *memc) { pairs_free(global_pairs); @@ -1856,6 +1961,7 @@ test_st tests[] ={ {"flush", 0, flush_test }, {"init", 0, init_test }, {"allocation", 0, allocation_test }, + {"server_list_null_test", 0, server_list_null_test}, {"clone_test", 0, clone_test }, {"error", 0, error_test }, {"set", 0, set_test }, @@ -1882,6 +1988,11 @@ test_st tests[] ={ {0, 0, 0} }; +test_st async_tests[] ={ + {"add", 1, add_wrapper }, + {0, 0, 0} +}; + test_st string_tests[] ={ {"string static with null", 0, string_static_null }, {"string alloc with null", 0, string_alloc_null }, @@ -1918,6 +2029,7 @@ test_st user_tests[] ={ {"user_supplied_bug8", 1, user_supplied_bug8 }, {"user_supplied_bug9", 1, user_supplied_bug9 }, {"user_supplied_bug10", 1, user_supplied_bug10 }, + {"user_supplied_bug11", 1, user_supplied_bug11 }, {0, 0, 0} }; @@ -1926,6 +2038,8 @@ test_st generate_tests[] ={ {"get_read", 0, get_read }, {"mget_read", 0, mget_read }, {"mget_read_result", 0, mget_read_result }, + {"mdelete_generate", 0, mdelete_generate }, + {"delete_generate", 0, delete_generate }, {"cleanup", 0, cleanup_pairs }, {0, 0, 0} }; @@ -1952,6 +2066,7 @@ collection_st collection[] ={ {"version_1_2_3", check_for_1_2_3, 0, version_1_2_3}, {"string", 0, 0, string_tests}, {"result", 0, 0, result_tests}, + {"async", pre_nonblock, 0, async_tests}, {"user", 0, 0, user_tests}, {"generate", 0, 0, generate_tests}, {"generate_hsieh", pre_hsieh, 0, generate_tests},