*
*/
-#include <config.h>
+#include <mem_config.h>
#include <libtest/test.hpp>
#if defined(HAVE_LIBUUID) && HAVE_LIBUUID
-#include <uuid/uuid.h>
+# include <uuid/uuid.h>
#endif
/*
*/
#include <libmemcached-1.0/memcached.h>
-#include <libmemcached/is.h>
-#include <libmemcached/server_instance.h>
+#include "libmemcached/is.h"
+#include "libmemcached/server_instance.h"
#include <libhashkit-1.0/hashkit.h>
+#include <libtest/memcached.hpp>
+
#include <cerrno>
#include <memory>
#include <pthread.h>
using namespace libtest;
-#include <libmemcached/util.h>
+#include <libmemcachedutil-1.0/util.h>
#include "tests/hash_results.h"
#include "tests/libmemcached-1.0/setup_and_teardowns.h"
#include "tests/print.h"
#include "tests/debug.h"
+#include "tests/memc.hpp"
#define UUID_STRING_MAXLENGTH 36
#include "tests/keys.hpp"
+#include "libmemcached/instance.hpp"
+
static memcached_st * create_single_instance_memcached(const memcached_st *original_memc, const char *options)
{
/*
in_port_t test_ports[TEST_PORT_COUNT];
static memcached_return_t server_display_function(const memcached_st *ptr,
- const memcached_server_st *server,
+ memcached_server_instance_st server,
void *context)
{
/* Do Nothing */
}
static memcached_return_t dump_server_information(const memcached_st *ptr,
- const memcached_server_st *instance,
+ memcached_server_instance_st instance,
void *context)
{
/* Do Nothing */
}
static memcached_return_t server_display_unsort_function(const memcached_st*,
- const memcached_server_st *server,
+ memcached_server_instance_st server,
void *context)
{
/* Do Nothing */
uint32_t x= *((uint32_t *)(context));
- if (! (test_ports[x] == server->port))
+ if (! (test_ports[x] == memcached_server_port(server)))
{
- fprintf(stderr, "%lu -> %lu\n", (unsigned long)test_ports[x], (unsigned long)server->port);
+ fprintf(stderr, "%lu -> %lu\n", (unsigned long)test_ports[x], (unsigned long)memcached_server_port(server));
return MEMCACHED_FAILURE;
}
test_true(memc_clone->flags.buffer_requests == memc->flags.buffer_requests);
test_true(memc_clone->flags.use_sort_hosts == memc->flags.use_sort_hosts);
test_true(memc_clone->flags.verify_key == memc->flags.verify_key);
- test_true(memc_clone->ketama.weighted == memc->ketama.weighted);
+ test_true(memc_clone->ketama.weighted_ == memc->ketama.weighted_);
test_true(memc_clone->flags.binary_protocol == memc->flags.binary_protocol);
test_true(memc_clone->flags.hash_with_namespace == memc->flags.hash_with_namespace);
test_true(memc_clone->flags.reply == memc->flags.reply);
test_literal_param("foo"),
test_literal_param("when we sanitize"),
time_t(0), (uint32_t)0);
- test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, memcached_last_error_message(memc));
+ test_true(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED);
return TEST_SUCCESS;
}
test_compare(value_length, sizeof(uint32_t) * count);
test_compare(MEMCACHED_SUCCESS, rc);
- for (uint32_t counter= count, *ptr= value; counter; counter--)
+ for (uint32_t counter= uint32_t(count), *ptr= value; counter; counter--)
{
test_compare(*ptr, store_list[count - counter]);
ptr++;
for (libtest::vchar_ptr_t::iterator iter= keys.begin();
iter != keys.end();
- iter++)
+ ++iter)
{
test_compare_hint(MEMCACHED_SUCCESS,
memcached_set(memc,
}
else
{
- int which_key= random() %keys.size();
+ int which_key= random() % int(keys.size());
size_t value_length;
uint32_t flags;
memcached_return_t rc;
return TEST_SUCCESS;
}
+test_return_t regression_1067242_TEST(memcached_st *memc)
+{
+ test_compare(MEMCACHED_SUCCESS, memcached_set(memc,
+ test_literal_param(__func__),
+ test_literal_param("-2"),
+ 0, 0));
+
+ memcached_return_t rc;
+ char* value;
+ test_true((value= memcached_get(memc, test_literal_param(__func__), NULL, NULL, &rc)));
+ test_compare(MEMCACHED_SUCCESS, rc);
+ free(value);
+
+ for (size_t x= 0; x < 10; x++)
+ {
+ uint64_t new_number;
+ test_compare(MEMCACHED_CLIENT_ERROR,
+ memcached_increment(memc,
+ test_literal_param(__func__), 1, &new_number));
+ test_compare(MEMCACHED_CLIENT_ERROR, memcached_last_error(memc));
+ test_true((value= memcached_get(memc, test_literal_param(__func__), NULL, NULL, &rc)));
+ test_compare(MEMCACHED_SUCCESS, rc);
+ free(value);
+ }
+
+ return TEST_SUCCESS;
+}
+
/*
Set the value, then quit to make sure it is flushed.
Come back in and test that add fails.
}
static memcached_return_t server_function(const memcached_st *,
- const memcached_server_st *,
+ memcached_server_instance_st,
void *)
{
/* Do Nothing */
size_t string_length;
char *string= memcached_get(memc_clone, key, strlen(key),
&string_length, &flags, &rc);
- test_compare_got(MEMCACHED_NOTFOUND, rc, memcached_strerror(NULL, rc));
+ test_compare(MEMCACHED_NOTFOUND, rc);
test_zero(string_length);
test_false(string);
}
while ((results= memcached_fetch_result(memc, &results_obj, &rc))) { test_true(false); /* We should never see a value returned */ };
test_false(results);
- test_compare_got(MEMCACHED_NOTFOUND, rc, memcached_strerror(NULL, rc));
+ test_compare(MEMCACHED_NOTFOUND, rc);
for (uint32_t x= 0; x < 3; x++)
{
rc= memcached_set(memc, keys[x], key_length[x],
keys[x], key_length[x],
(time_t)50, (uint32_t)9);
- test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, memcached_strerror(NULL, rc));
+ test_true(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED);
}
test_compare(MEMCACHED_SUCCESS,
test_true(results);
}
test_false(results);
- test_compare_got(MEMCACHED_NOTFOUND, rc, memcached_strerror(NULL, rc));
+ test_compare(MEMCACHED_NOTFOUND, rc);
for (uint32_t x= 0; x < 3; x++)
{
rc= memcached_set(memc, keys[x], key_length[x],
keys[x], key_length[x],
(time_t)50, (uint32_t)9);
- test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, memcached_strerror(NULL, rc));
+ test_true(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED);
}
test_compare(MEMCACHED_SUCCESS,
rc= memcached_set(memc, keys[x], key_length[x],
keys[x], key_length[x],
(time_t)50, (uint32_t)9);
- test_true_got(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED, memcached_strerror(NULL, rc));
+ test_true(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED);
}
test_compare(MEMCACHED_SUCCESS,
memcached_mget(memc, keys, key_length, 3));
return TEST_SUCCESS;
}
+test_return_t MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH_TEST(memcached_st *original_memc)
+{
+ test_skip(true, memcached_behavior_get(original_memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL));
+
+ memcached_st *memc= create_single_instance_memcached(original_memc, "--BINARY-PROTOCOL");
+ test_true(memc);
+
+ test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH, 8));
+
+ keys_st keys(20480);
+
+ /* First add all of the items.. */
+ char blob[1024] = {0};
+
+ for (size_t x= 0; x < keys.size(); ++x)
+ {
+ uint64_t query_id= memcached_query_id(memc);
+ memcached_return_t rc= memcached_add(memc,
+ keys.key_at(x), keys.length_at(x),
+ blob, sizeof(blob),
+ 0, 0);
+ test_true(rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED);
+ test_compare(query_id +1, memcached_query_id(memc));
+ }
+
+ /* Try to get all of them with a large multiget */
+ size_t counter= 0;
+ memcached_execute_fn callbacks[]= { &callback_counter };
+ test_compare(MEMCACHED_SUCCESS,
+ memcached_mget_execute(memc,
+ keys.keys_ptr(), keys.lengths_ptr(),
+ keys.size(), callbacks, &counter, 1));
+
+ {
+ uint64_t query_id= memcached_query_id(memc);
+ test_compare(MEMCACHED_SUCCESS,
+ memcached_fetch_execute(memc, callbacks, (void *)&counter, 1));
+ test_compare(query_id, memcached_query_id(memc));
+
+ /* Verify that we got all of the items */
+ test_compare(keys.size(), counter);
+ }
+
+ memcached_free(memc);
+
+ return TEST_SUCCESS;
+}
+
#define REGRESSION_BINARY_VS_BLOCK_COUNT 20480
static pairs_st *global_pairs= NULL;
global_pairs[x].key, global_pairs[x].key_length,
&blob[0], blob.size(),
time_t(0), uint32_t(0));
- test_true_got(rc == MEMCACHED_SUCCESS
- or rc == MEMCACHED_SERVER_MEMORY_ALLOCATION_FAILURE
- or rc == MEMCACHED_MEMORY_ALLOCATION_FAILURE, memcached_strerror(NULL, rc));
+ if (rc == MEMCACHED_MEMORY_ALLOCATION_FAILURE)
+ {
+ Error << memcached_last_error_message(memc);
+ return TEST_SKIPPED;
+ }
+ test_compare(*memc, MEMCACHED_SUCCESS);
+ test_compare(rc, MEMCACHED_SUCCESS);
}
return TEST_SUCCESS;
test_return_t binary_add_regression(memcached_st *memc)
{
test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, true));
- test_return_t rc= block_add_regression(memc);
-
- return rc;
+ return block_add_regression(memc);
}
test_return_t get_stats_keys(memcached_st *memc)
return TEST_SUCCESS;
}
+test_return_t regression_1048945_TEST(memcached_st*)
+{
+ memcached_return status;
+
+ memcached_server_st* list= memcached_server_list_append_with_weight(NULL, "a", 11211, 0, &status);
+ test_compare(status, MEMCACHED_SUCCESS);
+
+ list= memcached_server_list_append_with_weight(list, "b", 11211, 0, &status);
+ test_compare(status, MEMCACHED_SUCCESS);
+
+ list= memcached_server_list_append_with_weight(list, "c", 11211, 0, &status);
+ test_compare(status, MEMCACHED_SUCCESS);
+
+ memcached_st* memc= memcached_create(NULL);
+
+ status= memcached_server_push(memc, list);
+ memcached_server_list_free(list);
+ test_compare(status, MEMCACHED_SUCCESS);
+
+ memcached_server_instance_st server= memcached_server_by_key(memc, test_literal_param(__func__), &status);
+ test_true(server);
+ test_compare(status, MEMCACHED_SUCCESS);
+
+ memcached_free(memc);
+
+ return TEST_SUCCESS;
+}
+
test_return_t memcached_fetch_result_NOT_FOUND(memcached_st *memc)
{
memcached_return_t rc;
memcached_result_st *result= memcached_fetch_result(memc, NULL, &rc);
test_null(result);
- test_compare_got(MEMCACHED_NOTFOUND, rc, memcached_strerror(NULL, rc));
+ test_compare(MEMCACHED_NOTFOUND, rc);
memcached_result_free(result);
count++;
}
test_zero(count);
- test_compare_got(MEMCACHED_NOTFOUND, rc, memcached_strerror(NULL, rc));
+ test_compare(MEMCACHED_NOTFOUND, rc);
for (uint32_t x= 0; x < test_array_length(keys); x++)
{
&value[0], value.size(),
0, 0);
- test_true_got((rc == MEMCACHED_SUCCESS or rc == MEMCACHED_WRITE_FAILURE or rc == MEMCACHED_BUFFERED or rc == MEMCACHED_TIMEOUT or rc == MEMCACHED_CONNECTION_FAILURE
- or rc == MEMCACHED_SERVER_TEMPORARILY_DISABLED),
- memcached_strerror(NULL, rc));
+ test_true((rc == MEMCACHED_SUCCESS or rc == MEMCACHED_WRITE_FAILURE or rc == MEMCACHED_BUFFERED or rc == MEMCACHED_TIMEOUT or rc == MEMCACHED_CONNECTION_FAILURE
+ or rc == MEMCACHED_SERVER_TEMPORARILY_DISABLED));
if (rc == MEMCACHED_WRITE_FAILURE or rc == MEMCACHED_TIMEOUT)
{
test_compare(string_length, current_length);
char buffer[1024];
snprintf(buffer, sizeof(buffer), "%u", uint32_t(string_length));
- test_memcmp_hint(string, &value[0], string_length, buffer);
+ test_memcmp(string, &value[0], string_length);
free(string);
}
/* Check the return sizes on FLAGS to make sure it stores 32bit unsigned values correctly */
test_return_t user_supplied_bug16(memcached_st *memc)
{
- test_compare_hint(MEMCACHED_SUCCESS, memcached_set(memc, test_literal_param("mykey"),
- NULL, 0,
- (time_t)0, UINT32_MAX),
- memcached_last_error_message(memc));
+ test_compare(MEMCACHED_SUCCESS, memcached_set(memc, test_literal_param("mykey"),
+ NULL, 0,
+ (time_t)0, UINT32_MAX));
size_t length;
memcached_st *memc= memcached(test_literal_param("--server=localhost:11311/?100 --server=localhost:11312/?100"));
- const memcached_server_st *server= memcached_server_by_key(memc, "a", 1, &res);
+ memcached_server_instance_st server= memcached_server_by_key(memc, "a", 1, &res);
test_true(server);
memcached_free(memc);
*/
/* sighandler_t function that always asserts false */
-static void fail(int)
+static __attribute__((noreturn)) void fail(int)
{
fatal_assert(0);
}
return TEST_SUCCESS;
}
+test_return_t comparison_operator_memcached_st_and__memcached_return_t_TEST(memcached_st *)
+{
+ test::Memc memc_;
+
+ memcached_st *memc= &memc_;
+
+ ASSERT_EQ(memc, MEMCACHED_SUCCESS);
+ test_compare(memc, MEMCACHED_SUCCESS);
+
+ ASSERT_NEQ(memc, MEMCACHED_FAILURE);
+
+ return TEST_SUCCESS;
+}
+
+test_return_t ketama_TEST(memcached_st *)
+{
+ test::Memc memc("--server=10.0.1.1:11211 --server=10.0.1.2:11211");
+
+ test_compare(MEMCACHED_SUCCESS,
+ memcached_behavior_set(&memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, true));
+
+ test_compare(memcached_behavior_get(&memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED), uint64_t(1));
+
+ test_compare(memcached_behavior_set(&memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5), MEMCACHED_SUCCESS);
+
+ test_compare(memcached_behavior_get(&memc, MEMCACHED_BEHAVIOR_KETAMA_HASH), MEMCACHED_HASH_MD5);
+
+ test_compare(memcached_behavior_set_distribution(&memc, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY), MEMCACHED_SUCCESS);
+
+
+ return TEST_SUCCESS;
+}
+
test_return_t output_ketama_weighted_keys(memcached_st *)
{
memcached_st *memc= memcached_create(NULL);
test_return_t enable_cas(memcached_st *memc)
{
- unsigned int set= 1;
-
if (libmemcached_util_version_check(memc, 1, 2, 4))
{
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, set);
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, true);
return TEST_SUCCESS;
}
for (size_t x= 0; x < 100; ++x)
{
char key[MEMCACHED_MAXIMUM_INTEGER_DISPLAY_LENGTH +1];
- int check_length= (size_t)snprintf(key, sizeof(key), "%lu", (unsigned long)x);
+ int check_length= snprintf(key, sizeof(key), "%lu", (unsigned long)x);
test_false((size_t)check_length >= sizeof(key) || check_length < 0);
size_t len= (size_t)check_length;
{
char key[10];
- int check_length= (size_t)snprintf(key, sizeof(key), "%lu", (unsigned long)x);
+ int check_length= snprintf(key, sizeof(key), "%lu", (unsigned long)x);
test_false((size_t)check_length >= sizeof(key) || check_length < 0);
test_return_t util_version_test(memcached_st *memc)
{
- test_compare_hint(MEMCACHED_SUCCESS, memcached_version(memc), memcached_last_error_message(memc));
+ test_compare(memcached_version(memc), MEMCACHED_SUCCESS);
test_true(libmemcached_util_version_check(memc, 0, 0, 0));
bool if_successful= libmemcached_util_version_check(memc, 9, 9, 9);
}
static memcached_return_t ping_each_server(const memcached_st*,
- const memcached_server_st *instance,
+ memcached_server_instance_st instance,
void*)
{
// Test both the version that returns a code, and the one that does not.
#endif
}
+test_return_t murmur3_TEST(hashkit_st *)
+{
+ test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_MURMUR3));
+
+#ifdef WORDS_BIGENDIAN
+ (void)murmur3_values;
+ return TEST_SKIPPED;
+#else
+ uint32_t x;
+ const char **ptr;
+
+ for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
+ {
+ test_compare(murmur3_values[x],
+ memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_MURMUR3));
+ }
+
+ return TEST_SUCCESS;
+#endif
+}
+
test_return_t jenkins_run (memcached_st *)
{
uint32_t x;
*/
memcached_server_instance_st instance_one= memcached_server_instance_by_position(memc, 0);
memcached_server_instance_st instance_two= memcached_server_instance_by_position(memc, 2);
- in_port_t port0= instance_one->port;
- in_port_t port2= instance_two->port;
+ in_port_t port0= instance_one->port();
+ in_port_t port2= instance_two->port();
- ((memcached_server_write_instance_st)instance_one)->port= 0;
- ((memcached_server_write_instance_st)instance_two)->port= 0;
+ ((memcached_server_write_instance_st)instance_one)->port(0);
+ ((memcached_server_write_instance_st)instance_two)->port(0);
test_compare(MEMCACHED_SUCCESS,
memcached_mget(memc,
test_compare(counter, keys.size());
/* restore the memc handle */
- ((memcached_server_write_instance_st)instance_one)->port= port0;
- ((memcached_server_write_instance_st)instance_two)->port= port2;
+ ((memcached_server_write_instance_st)instance_one)->port(port0);
+ ((memcached_server_write_instance_st)instance_two)->port(port2);
memcached_quit(memc);
}
memcached_quit(memc);
- ((memcached_server_write_instance_st)instance_one)->port= 0;
- ((memcached_server_write_instance_st)instance_two)->port= 0;
+ ((memcached_server_write_instance_st)instance_one)->port(0);
+ ((memcached_server_write_instance_st)instance_two)->port(0);
/* now retry the command, this time we should have cache misses */
test_compare(MEMCACHED_SUCCESS,
test_compare(counter, (unsigned int)(keys.size() >> 1));
/* restore the memc handle */
- ((memcached_server_write_instance_st)instance_one)->port= port0;
- ((memcached_server_write_instance_st)instance_two)->port= port2;
+ ((memcached_server_write_instance_st)instance_one)->port(port0);
+ ((memcached_server_write_instance_st)instance_two)->port(port2);
return TEST_SUCCESS;
}
return TEST_SUCCESS;
}
+test_return_t regression_1021819_TEST(memcached_st *original)
+{
+ memcached_st *memc= memcached_clone(NULL, original);
+ test_true(memc);
+
+ test_compare(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SND_TIMEOUT, 2000000), MEMCACHED_SUCCESS);
+ test_compare(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RCV_TIMEOUT, 3000000), MEMCACHED_SUCCESS);
+
+ memcached_return_t rc;
+
+ memcached_get(memc,
+ test_literal_param(__func__),
+ NULL, NULL, &rc);
+
+ test_compare(rc, MEMCACHED_NOTFOUND);
+
+ memcached_free(memc);
+
+ return TEST_SUCCESS;
+}
+
test_return_t regression_bug_583031(memcached_st *)
{
memcached_st *memc= memcached_create(NULL);
test_true(memc);
- test_compare(MEMCACHED_SUCCESS, memcached_server_add(memc, "10.2.3.4", 11211));
+ test_compare(MEMCACHED_SUCCESS, memcached_server_add(memc, "10.2.251.4", 11211));
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, 1000);
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, 3000);
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);
test_false(value);
test_zero(length);
- test_compare_got(MEMCACHED_TIMEOUT, rc, memcached_last_error_message(memc));
+ test_compare(MEMCACHED_TIMEOUT, memc);
memcached_free(memc);
uint64_t cas_value= memcached_result_cas(results);
test_true(cas_value);
+ char* take_value= memcached_result_take_value(results);
+ test_strcmp(__func__, take_value);
+ free(take_value);
+
memcached_result_free(results);
// Bad cas value, sanity check
0, 0));
test_true_got(kill(pid, SIGHUP) == 0, strerror(errno));
- test_compare(MEMCACHED_CONNECTION_FAILURE,
- memcached_set(memc,
- test_literal_param(__func__), // Keys
- test_literal_param(__func__), // Values
- 0, 0));
+ memcached_return_t ret= memcached_set(memc,
+ test_literal_param(__func__), // Keys
+ test_literal_param(__func__), // Values
+ 0, 0);
+ test_compare(ret, MEMCACHED_CONNECTION_FAILURE);
memcached_free(memc);