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
{
memcached_return_t rc= MEMCACHED_FAILURE;
memcached_st *memc_clone;
- memcached_server_instance_st instance;
memc_clone= memcached_clone(NULL, memc);
test_true(memc_clone);
// will not toggle protocol on an connection.
memcached_version(memc_clone);
- instance= memcached_server_instance_by_position(memc_clone, 0);
-
- if (instance->major_version >= 1 && instance->minor_version > 2)
+ if (libmemcached_util_version_check(memc_clone, 1, 2, 0))
{
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, 0);
rc = memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);
{
memcached_return_t rc= MEMCACHED_FAILURE;
memcached_st *memc_clone;
- memcached_server_instance_st instance;
memc_clone= memcached_clone(NULL, memc);
test_true(memc_clone);
// will not toggle protocol on an connection.
memcached_version(memc_clone);
- instance= memcached_server_instance_by_position(memc_clone, 0);
-
- if (instance->major_version >= 1 && instance->minor_version > 2)
+ if (libmemcached_util_version_check(memc_clone, 1, 2, 0))
{
rc = memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);
test_true(rc == MEMCACHED_SUCCESS);
{
unsigned int set= 1;
- memcached_server_instance_st instance=
- memcached_server_instance_by_position(memc, 0);
-
- memcached_version(memc);
-
- if ((instance->major_version >= 1 && (instance->minor_version == 2 && instance->micro_version >= 4))
- || instance->minor_version > 2)
+ if (libmemcached_util_version_check(memc, 1, 2, 4))
{
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, set);
if ((instance->major_version >= 1 && (instance->minor_version == 2 && instance->micro_version >= 4))
|| instance->minor_version > 2)
+ {
return TEST_SUCCESS;
+ }
return TEST_SKIPPED;
}
test_true(memcached_pool_destroy(pool) == memc);
return TEST_SUCCESS;
}
+
+static test_return_t util_version_test(memcached_st *memc)
+{
+ bool if_successful;
+
+ if_successful= libmemcached_util_version_check(memc, 0, 0, 0);
+ test_true(if_successful == true);
+
+ if_successful= libmemcached_util_version_check(memc, 9, 9, 9);
+ test_true(if_successful == false);
+
+ memcached_server_instance_st instance=
+ memcached_server_instance_by_position(memc, 0);
+
+ memcached_version(memc);
+
+ // We only use one binary when we test, so this should be just fine.
+ if_successful= libmemcached_util_version_check(memc, instance->major_version, instance->micro_version, instance->minor_version);
+ test_true(if_successful == true);
+
+ if (instance->minor_version > 0)
+ if_successful= libmemcached_util_version_check(memc, instance->major_version, instance->micro_version, instance->minor_version -1);
+ else if (instance->micro_version > 0)
+ if_successful= libmemcached_util_version_check(memc, instance->major_version, instance->micro_version - 1, instance->minor_version);
+ else if (instance->major_version > 0)
+ if_successful= libmemcached_util_version_check(memc, instance->major_version -1, instance->micro_version, instance->minor_version);
+
+ test_true(if_successful == true);
+
+ if (instance->minor_version > 0)
+ if_successful= libmemcached_util_version_check(memc, instance->major_version, instance->micro_version, instance->minor_version +1);
+ else if (instance->micro_version > 0)
+ if_successful= libmemcached_util_version_check(memc, instance->major_version, instance->micro_version +1, instance->minor_version);
+ else if (instance->major_version > 0)
+ if_successful= libmemcached_util_version_check(memc, instance->major_version +1, instance->micro_version, instance->minor_version);
+
+ test_true(if_successful == false);
+
+ 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_util_ping(memcached_server_name(instance),
+ memcached_server_port(instance), NULL));
+
+ test_true(libmemcached_util_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)
test_true(memc_clone != NULL);
test_true(memcached_version(memc_clone) == MEMCACHED_SUCCESS);
- memcached_server_instance_st instance=
- memcached_server_instance_by_position(memc_clone, 0);
- if (instance->major_version > 1 ||
- (instance->major_version == 1 &&
- instance->minor_version > 2))
+ if (libmemcached_util_version_check(memc_clone, 1, 1, 2))
{
/* Binary protocol doesn't support deferred delete */
memcached_st *bin_clone= memcached_clone(NULL, 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);
{"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 },
+ {"util_version", 1, (test_callback_fn)util_version_test },
#endif
{"test_get_last_disconnect", 1, (test_callback_fn)test_get_last_disconnect},
{"verbosity", 1, (test_callback_fn)test_verbosity},
{"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}
};