X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Fmem_functions.c;h=b5bd08809f4266841826424e6fe95f492de28b1f;hb=bc778a7f8d68db255bb864125fa7d761f200b436;hp=48b254dbfcf921de08f853e0af9cd2d303e04961;hpb=6c2bd52dfa24287c856b0b679270b7f7681333a5;p=m6w6%2Flibmemcached diff --git a/tests/mem_functions.c b/tests/mem_functions.c index 48b254db..b5bd0880 100644 --- a/tests/mem_functions.c +++ b/tests/mem_functions.c @@ -3695,9 +3695,13 @@ static test_return_t pre_nonblock_binary(memcached_st *memc) static test_return_t pre_murmur(memcached_st *memc) { +#ifdef HAVE_MURMUR_HASH memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_MURMUR); - return TEST_SUCCESS; +#else + (void) memc; + return TEST_SKIPPED; +#endif } static test_return_t pre_jenkins(memcached_st *memc) @@ -4859,6 +4863,19 @@ static test_return_t hsieh_avaibility_test (memcached_st *memc) return TEST_SUCCESS; } +static test_return_t murmur_avaibility_test (memcached_st *memc) +{ + memcached_return_t expected_rc= MEMCACHED_FAILURE; +#ifdef HAVE_MURMUR_HASH + expected_rc= MEMCACHED_SUCCESS; +#endif + memcached_return_t rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, + (uint64_t)MEMCACHED_HASH_MURMUR); + test_true(rc == expected_rc); + + return TEST_SUCCESS; +} + static test_return_t one_at_a_time_run (memcached_st *memc) { uint32_t x; @@ -4998,6 +5015,7 @@ static test_return_t hsieh_run (memcached_st *memc) static test_return_t murmur_run (memcached_st *memc) { #ifdef WORDS_BIGENDIAN + (void)murmur_values; return TEST_SKIPPED; #else uint32_t x; @@ -5920,6 +5938,53 @@ static test_return_t wrong_failure_counter_test(memcached_st *memc) return TEST_SUCCESS; } +/* + * This tests ensures expected disconnections (for some behavior changes + * for instance) do not wrongly increase failure counter + */ +static test_return_t wrong_failure_counter_two_test(memcached_st *memc) +{ + memcached_return rc; + + memcached_st *memc_clone; + memc_clone= memcached_clone(NULL, memc); + test_true(memc_clone); + + /* Set value to force connection to the server */ + const char *key= "marmotte"; + const char *value= "milka"; + char *string = NULL; + size_t string_length; + uint32_t flags; + + rc= memcached_set(memc_clone, key, strlen(key), + value, strlen(value), + (time_t)0, (uint32_t)0); + test_true_got(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED, memcached_strerror(NULL, rc)); + + + /* put failure limit to 1 */ + rc= memcached_behavior_set(memc_clone, MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT, 1); + assert(rc == MEMCACHED_SUCCESS); + /* Put a retry timeout to effectively activate failure_limit effect */ + rc= memcached_behavior_set(memc_clone, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, 1); + assert(rc == MEMCACHED_SUCCESS); + /* change behavior that triggers memcached_quit()*/ + rc= memcached_behavior_set(memc_clone, MEMCACHED_BEHAVIOR_TCP_NODELAY, 1); + assert(rc == MEMCACHED_SUCCESS); + + + /* Check if we still are connected */ + string= memcached_get(memc_clone, key, strlen(key), + &string_length, &flags, &rc); + + test_true_got(rc == MEMCACHED_SUCCESS, memcached_strerror(NULL, rc)); + test_true(string); + free(string); + + return TEST_SUCCESS; +} + @@ -6344,6 +6409,7 @@ test_st user_tests[] ={ {"user_supplied_bug20", 1, (test_callback_fn)user_supplied_bug20 }, {"user_supplied_bug21", 1, (test_callback_fn)user_supplied_bug21 }, {"wrong_failure_counter_test", 1, (test_callback_fn)wrong_failure_counter_test}, + {"wrong_failure_counter_two_test", 1, (test_callback_fn)wrong_failure_counter_two_test}, {0, 0, (test_callback_fn)0} }; @@ -6427,6 +6493,11 @@ test_st hsieh_availability[] ={ {0, 0, (test_callback_fn)0} }; +test_st murmur_availability[] ={ + {"murmur_avaibility_test", 0, (test_callback_fn)murmur_avaibility_test}, + {0, 0, (test_callback_fn)0} +}; + #if 0 test_st hash_sanity[] ={ {"hash sanity", 0, (test_callback_fn)hash_sanity_test}, @@ -6468,6 +6539,7 @@ collection_st collection[] ={ {"hash_sanity", 0, 0, hash_sanity}, #endif {"hsieh_availability", 0, 0, hsieh_availability}, + {"murmur_availability", 0, 0, murmur_availability}, {"block", 0, 0, tests}, {"binary", (test_callback_fn)pre_binary, 0, tests}, {"nonblock", (test_callback_fn)pre_nonblock, 0, tests},