X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=tests%2Fmem_functions.c;h=9bd9334e6cb297a1caf3772ea853c164c9d88af3;hb=e16d058ca2e62ff93fca263c54a039eddb9dc080;hp=3872ee387768a8372324b160e7e8db39fa71e780;hpb=727bb52db1af1d405c76df285001938eafb67d0a;p=awesomized%2Flibmemcached diff --git a/tests/mem_functions.c b/tests/mem_functions.c index 3872ee38..9bd9334e 100644 --- a/tests/mem_functions.c +++ b/tests/mem_functions.c @@ -3145,6 +3145,8 @@ static test_return_t output_ketama_weighted_keys(memcached_st *trash) char *hostname = memc->hosts[server_idx].hostname; in_port_t port = memc->hosts[server_idx].port; fprintf(fp, "key %s is on host /%s:%u\n", key, hostname, port); + memcached_server_instance_st instance= + memcached_server_instance_by_position(memc, host_index); } fclose(fp); #endif @@ -4423,6 +4425,24 @@ static test_return_t connection_pool_test(memcached_st *memc) test_true(memcached_pool_destroy(pool) == memc); return TEST_SUCCESS; } + +static test_return_t ping_test(memcached_st *memc) +{ + memcached_return_t rc; + memcached_server_instance_st instance= + memcached_server_instance_by_position(memc, 0); + + // Test both the version that returns a code, and the one that does not. + test_true(libmemcached_ping(memcached_server_name(instance), + memcached_server_port(instance), NULL)); + + test_true(libmemcached_ping(memcached_server_name(instance), + memcached_server_port(instance), &rc)); + + test_true(rc == MEMCACHED_SUCCESS); + + return TEST_SUCCESS; +} #endif static test_return_t replication_set_test(memcached_st *memc) @@ -5027,6 +5047,71 @@ static test_return_t memcached_get_MEMCACHED_NOTFOUND(memcached_st *memc) return TEST_SUCCESS; } +/* + Test case adapted from John Gorman + + We are testing the error condition when we connect to a server via memcached_get_by_key() + but find that the server is not available. +*/ +static test_return_t memcached_get_by_key_MEMCACHED_SOME_ERRORS(memcached_st *memc) +{ + (void)memc; + memcached_st *tl_memc_h; + memcached_server_st *servers; + + const char *key= "MemcachedLives"; + size_t len; + uint32_t flags; + memcached_return rc; + char *value; + + // Create a handle. + tl_memc_h= memcached_create(NULL); + servers= memcached_servers_parse("localhost:9898"); // This server should not exist + memcached_server_push(tl_memc_h, servers); + memcached_server_list_free(servers); + + // See if memcached is reachable. + value= memcached_get_by_key(tl_memc_h, key, strlen(key), key, strlen(key), &len, &flags, &rc); + + if (value) + { + free(value); + test_true(value); // Pointer won't be zero so this is fine. + } + + test_true(len == 0); + test_true(rc == MEMCACHED_SOME_ERRORS); + + return TEST_SUCCESS; +} + +/* + We connect to a server which exists, but search for a key that does not exist. +*/ +static test_return_t memcached_get_by_key_MEMCACHED_NOTFOUND(memcached_st *memc) +{ + const char *key= "MemcachedKeyNotEXIST"; + size_t len; + uint32_t flags; + memcached_return rc; + char *value; + + // See if memcached is reachable. + value= memcached_get_by_key(memc, key, strlen(key), key, strlen(key), &len, &flags, &rc); + + if (value) + { + free(value); + test_true(value); // Pointer won't be zero so this is fine. + } + + test_true(len == 0); + test_true(rc == MEMCACHED_NOTFOUND); + + return TEST_SUCCESS; +} + static test_return_t ketama_compatibility_libmemcached(memcached_st *trash) { @@ -5795,6 +5880,34 @@ static test_return_t regression_bug_490486(memcached_st *memc) return TEST_SUCCESS; } +static test_return_t regression_bug_583031(memcached_st *unused) +{ + (void)unused; + + memcached_st *memc= memcached_create(NULL); + assert(memc); + memcached_server_add(memc, "10.2.3.4", 11211); + + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, 1000); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, 1000); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SND_TIMEOUT, 1000); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RCV_TIMEOUT, 1000); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_POLL_TIMEOUT, 1000); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT, 3); + + memcached_return_t rc; + size_t length; + uint32_t flags; + + (void)memcached_get(memc, "dsf", 3, &length, &flags, &rc); + + test_true(rc == MEMCACHED_TIMEOUT); + + memcached_free(memc); + + return TEST_SUCCESS; +} + static void memcached_die(memcached_st* mc, memcached_return error, const char* what, uint32_t it) { fprintf(stderr, "Iteration #%u: ", it); @@ -5995,6 +6108,7 @@ test_st tests[] ={ {"analyzer", 1, (test_callback_fn)analyzer_test}, #ifdef HAVE_LIBMEMCACHEDUTIL {"connectionpool", 1, (test_callback_fn)connection_pool_test }, + {"ping", 1, (test_callback_fn)ping_test }, #endif {"test_get_last_disconnect", 1, (test_callback_fn)test_get_last_disconnect}, {"verbosity", 1, (test_callback_fn)test_verbosity}, @@ -6106,6 +6220,7 @@ test_st regression_tests[]= { {"lp:447342", 1, (test_callback_fn)regression_bug_447342 }, {"lp:463297", 1, (test_callback_fn)regression_bug_463297 }, {"lp:490486", 1, (test_callback_fn)regression_bug_490486 }, + {"lp:583031", 1, (test_callback_fn)regression_bug_583031 }, {"lp:?", 1, (test_callback_fn)regression_bug_ }, {0, 0, (test_callback_fn)0} }; @@ -6192,6 +6307,8 @@ test_st hash_tests[] ={ test_st error_conditions[] ={ {"memcached_get_MEMCACHED_SOME_ERRORS", 0, (test_callback_fn)memcached_get_MEMCACHED_SOME_ERRORS }, {"memcached_get_MEMCACHED_NOTFOUND", 0, (test_callback_fn)memcached_get_MEMCACHED_NOTFOUND }, + {"memcached_get_by_key_MEMCACHED_SOME_ERRORS", 0, (test_callback_fn)memcached_get_by_key_MEMCACHED_SOME_ERRORS }, + {"memcached_get_by_key_MEMCACHED_NOTFOUND", 0, (test_callback_fn)memcached_get_by_key_MEMCACHED_NOTFOUND }, {0, 0, (test_callback_fn)0} };