X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Ffunction.c;h=dfb47b4e26cc7279211bd5eeabd49d7e6cdc656c;hb=6a9308726c72cb3df8a6fd8ac968f382d100a214;hp=620ecc9d7370dbb46d9925c7b9372f13fb14bda5;hpb=c9be02d1b2212b6f82d460f9a57a759ffb79bf7c;p=m6w6%2Flibmemcached diff --git a/tests/function.c b/tests/function.c index 620ecc9d..dfb47b4e 100644 --- a/tests/function.c +++ b/tests/function.c @@ -24,8 +24,9 @@ #include "test.h" -#define GLOBAL_COUNT 100000 -#define GLOBAL2_COUNT 1000 +#define GLOBAL_COUNT 10000 +#define GLOBAL2_COUNT 100 +#define SERVERS_TO_CREATE 5 static uint32_t global_count; static pairs_st *global_pairs; @@ -116,9 +117,12 @@ test_return server_sort2_test(memcached_st *ptr) rc= memcached_server_add(local_memc, "MEMCACHED_BEHAVIOR_SORT_HOSTS", 43043); assert(rc == MEMCACHED_SUCCESS); + assert(local_memc->hosts[0].port == 43043); rc= memcached_server_add(local_memc, "MEMCACHED_BEHAVIOR_SORT_HOSTS", 43042); assert(rc == MEMCACHED_SUCCESS); + assert(local_memc->hosts[0].port == 43042); + assert(local_memc->hosts[1].port == 43043); callbacks[0]= server_display_function; memcached_server_cursor(local_memc, callbacks, (void *)&bigger, 1); @@ -500,7 +504,7 @@ test_return add_test(memcached_st *memc) if (setting_value) assert(rc == MEMCACHED_NOTSTORED || rc == MEMCACHED_STORED); else - assert(rc == MEMCACHED_NOTSTORED); + assert(rc == MEMCACHED_NOTSTORED || rc == MEMCACHED_DATA_EXISTS); return 0; } @@ -626,6 +630,16 @@ test_return bad_key_test(memcached_st *memc) assert(rc == MEMCACHED_BAD_KEY_PROVIDED); } + /* Make sure zero length keys are marked as bad */ + set= 1; + rc= memcached_behavior_set(clone, MEMCACHED_BEHAVIOR_VERIFY_KEY, set); + assert(rc == MEMCACHED_SUCCESS); + string= memcached_get(clone, key, 0, + &string_length, &flags, &rc); + assert(rc == MEMCACHED_BAD_KEY_PROVIDED); + assert(string_length == 0); + assert(!string); + memcached_free(clone); return 0; @@ -1292,8 +1306,8 @@ test_return callback_test(memcached_st *memc) /* We don't test the behavior itself, we test the switches */ test_return behavior_test(memcached_st *memc) { - unsigned long long value; - unsigned int set= 1; + uint64_t value; + uint32_t set= 1; memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, set); value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NO_BLOCK); @@ -2073,6 +2087,34 @@ test_return user_supplied_bug16(memcached_st *memc) return 0; } +/* Check the validity of chinese key*/ +test_return user_supplied_bug17(memcached_st *memc) +{ + memcached_return rc; + char *key= "豆瓣"; + char *value="我们在炎热抑郁的夏天无法停止豆瓣"; + char *value2; + size_t length; + uint32_t flags; + + rc= memcached_set(memc, key, strlen(key), + value, strlen(value), + (time_t)0, 0); + + assert(rc == MEMCACHED_SUCCESS); + + value2= memcached_get(memc, key, strlen(key), + &length, &flags, &rc); + + assert(length==strlen(value)); + assert(rc == MEMCACHED_SUCCESS); + assert(memcmp(value, value2, length)==0); + free(value2); + + return 0; +} + + test_return result_static(memcached_st *memc) { memcached_result_st result; @@ -2234,6 +2276,27 @@ test_return generate_data(memcached_st *memc) return 0; } +test_return generate_data_with_stats(memcached_st *memc) +{ + memcached_stat_st *stat_p; + memcached_return rc; + uint32_t host_index= 0; + execute_set(memc, global_pairs, global_count); + + //TODO: hosts used size stats + stat_p= memcached_stat(memc, NULL, &rc); + assert(stat_p); + + for (host_index= 0; host_index < SERVERS_TO_CREATE; host_index++) + { + printf("\nserver %u|%s|%u bytes: %llu\n", host_index, (memc->hosts)[host_index].hostname, (memc->hosts)[host_index].port, (unsigned long long)(stat_p + host_index)->bytes); + } + + memcached_stat_free(NULL, stat_p); + + + return 0; +} test_return generate_buffer_data(memcached_st *memc) { int latch= 0; @@ -2518,6 +2581,47 @@ memcached_return pre_behavior_ketama(memcached_st *memc) return MEMCACHED_SUCCESS; } +memcached_return pre_behavior_ketama_weighted(memcached_st *memc) +{ + memcached_return rc; + uint64_t value; + + rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1); + assert(rc == MEMCACHED_SUCCESS); + + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED); + assert(value == 1); + + rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5); + assert(rc == MEMCACHED_SUCCESS); + + value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH); + assert(value == MEMCACHED_HASH_MD5); + return MEMCACHED_SUCCESS; +} + +memcached_return pre_binary(memcached_st *memc) +{ + memcached_return rc= MEMCACHED_FAILURE; + memcached_st *clone; + + clone= memcached_clone(NULL, memc); + assert(clone); + // The memcached_version needs to be done on a clone, because the server + // will not toggle protocol on an connection. + memcached_version(clone); + + if (clone->hosts[0].major_version >= 1 && clone->hosts[0].minor_version > 2) + { + rc = memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); + assert(rc == MEMCACHED_SUCCESS); + assert(memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL) == 1); + } + + memcached_free(clone); + return rc; +} + void my_free(memcached_st *ptr, void *mem) { free(mem); @@ -2636,23 +2740,6 @@ memcached_return set_memory_alloc(memcached_st *memc) return MEMCACHED_SUCCESS; } -memcached_return enable_wheel(memcached_st *memc) -{ - memcached_server_distribution value= MEMCACHED_DISTRIBUTION_CONSISTENT_WHEEL; - memcached_hash hash; - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, value); - pre_hsieh(memc); - - value= (memcached_server_distribution)memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION); - assert(value == MEMCACHED_DISTRIBUTION_CONSISTENT_WHEEL); - - hash= (memcached_hash)memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_HASH); - assert(hash == MEMCACHED_HASH_HSIEH); - - - return MEMCACHED_SUCCESS; -} - memcached_return enable_consistent(memcached_st *memc) { memcached_server_distribution value= MEMCACHED_DISTRIBUTION_CONSISTENT; @@ -2676,9 +2763,8 @@ memcached_return enable_cas(memcached_st *memc) memcached_version(memc); - if (memc->hosts[0].major_version >= 1 && - memc->hosts[0].minor_version >= 2 && - memc->hosts[0].micro_version >= 4) + if ((memc->hosts[0].major_version >= 1 && (memc->hosts[0].minor_version == 2 && memc->hosts[0].micro_version >= 4)) + || memc->hosts[0].minor_version > 2) { memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, set); @@ -2692,9 +2778,8 @@ memcached_return check_for_1_2_3(memcached_st *memc) { memcached_version(memc); - if (memc->hosts[0].major_version >= 1 && - memc->hosts[0].minor_version >= 2 && - memc->hosts[0].micro_version >= 4) + if ((memc->hosts[0].major_version >= 1 && (memc->hosts[0].minor_version == 2 && memc->hosts[0].micro_version >= 4)) + || memc->hosts[0].minor_version > 2) return MEMCACHED_SUCCESS; return MEMCACHED_FAILURE; @@ -2741,6 +2826,14 @@ memcached_return pre_nodelay(memcached_st *memc) return MEMCACHED_SUCCESS; } +memcached_return pre_settimer(memcached_st *memc) +{ + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SND_TIMEOUT, 1000); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RCV_TIMEOUT, 1000); + + return MEMCACHED_SUCCESS; +} + memcached_return poll_timeout(memcached_st *memc) { int32_t timeout; @@ -2846,6 +2939,7 @@ test_st user_tests[] ={ {"user_supplied_bug14", 1, user_supplied_bug14 }, {"user_supplied_bug15", 1, user_supplied_bug15 }, {"user_supplied_bug16", 1, user_supplied_bug16 }, + {"user_supplied_bug17", 1, user_supplied_bug17 }, {0, 0, 0} }; @@ -2876,10 +2970,20 @@ test_st consistent_tests[] ={ {0, 0, 0} }; +test_st consistent_weighted_tests[] ={ + {"generate_pairs", 1, generate_pairs }, + {"generate_data", 1, generate_data_with_stats }, + {"get_read", 0, get_read_count }, + {"cleanup", 1, cleanup_pairs }, + {0, 0, 0} +}; + collection_st collection[] ={ {"block", 0, 0, tests}, + {"binary", pre_binary, 0, tests}, {"nonblock", pre_nonblock, 0, tests}, {"nodelay", pre_nodelay, 0, tests}, + {"settimer", pre_settimer, 0, tests}, {"md5", pre_md5, 0, tests}, {"crc", pre_crc, 0, tests}, {"hsieh", pre_hsieh, 0, tests}, @@ -2893,7 +2997,6 @@ collection_st collection[] ={ {"poll_timeout", poll_timeout, 0, tests}, {"gets", enable_cas, 0, tests}, {"consistent", enable_consistent, 0, tests}, - {"wheel", enable_wheel, 0, tests}, {"memory_allocators", set_memory_alloc, 0, tests}, {"prefix", set_prefix, 0, tests}, // {"udp", pre_udp, 0, tests}, @@ -2911,7 +3014,7 @@ collection_st collection[] ={ {"generate_nonblock", pre_nonblock, 0, generate_tests}, {"consistent_not", 0, 0, consistent_tests}, {"consistent_ketama", pre_behavior_ketama, 0, consistent_tests}, - {"consistent_wheel", enable_wheel, 0, consistent_tests}, + {"consistent_ketama_weighted", pre_behavior_ketama_weighted, 0, consistent_weighted_tests}, {0, 0, 0, 0} };