static char *global_keys[GLOBAL_COUNT];
static size_t global_keys_length[GLOBAL_COUNT];
-uint8_t init_test(memcached_st *not_used)
+test_return init_test(memcached_st *not_used)
{
memcached_st memc;
return 0;
}
-uint8_t server_list_null_test(memcached_st *ptr)
+test_return server_list_null_test(memcached_st *ptr)
{
memcached_server_st *server_list;
memcached_return rc;
return MEMCACHED_SUCCESS;
}
-uint8_t server_sort_test(memcached_st *ptr)
+test_return server_sort_test(memcached_st *ptr)
{
uint8_t x;
uint32_t bigger= 0; /* Prime the value for the assert in server_display_function */
return MEMCACHED_SUCCESS;
}
-uint8_t server_unsort_test(memcached_st *ptr)
+test_return server_unsort_test(memcached_st *ptr)
{
uint8_t x;
uint32_t counter= 0; /* Prime the value for the assert in server_display_function */
return 0;
}
-uint8_t allocation_test(memcached_st *not_used)
+test_return allocation_test(memcached_st *not_used)
{
memcached_st *memc;
memc= memcached_create(NULL);
return 0;
}
-uint8_t clone_test(memcached_st *memc)
+test_return clone_test(memcached_st *memc)
{
/* All null? */
{
return 0;
}
-uint8_t connection_test(memcached_st *memc)
+test_return connection_test(memcached_st *memc)
{
memcached_return rc;
return 0;
}
-uint8_t error_test(memcached_st *memc)
+test_return error_test(memcached_st *memc)
{
memcached_return rc;
return 0;
}
-uint8_t set_test(memcached_st *memc)
+test_return set_test(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-uint8_t append_test(memcached_st *memc)
+test_return append_test(memcached_st *memc)
{
memcached_return rc;
char *key= "fig";
return 0;
}
-uint8_t append_binary_test(memcached_st *memc)
+test_return append_binary_test(memcached_st *memc)
{
memcached_return rc;
char *key= "numbers";
return 0;
}
-uint8_t cas2_test(memcached_st *memc)
+test_return cas2_test(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"fudge", "son", "food"};
return 0;
}
-uint8_t cas_test(memcached_st *memc)
+test_return cas_test(memcached_st *memc)
{
memcached_return rc;
char *key= "fun";
return 0;
}
-uint8_t prepend_test(memcached_st *memc)
+test_return prepend_test(memcached_st *memc)
{
memcached_return rc;
char *key= "fig";
Set the value, then quit to make sure it is flushed.
Come back in and test that add fails.
*/
-uint8_t add_test(memcached_st *memc)
+test_return add_test(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
/* Too many broken OS'es have broken loopback in async, so we can't be sure of the result */
if (setting_value)
- assert(rc == MEMCACHED_NOTSTORED || MEMCACHED_STORED);
+ assert(rc == MEMCACHED_NOTSTORED || rc == MEMCACHED_STORED);
else
assert(rc == MEMCACHED_NOTSTORED);
return 0;
}
-uint8_t add_wrapper(memcached_st *memc)
+test_return add_wrapper(memcached_st *memc)
{
unsigned int x;
return 0;
}
-uint8_t replace_test(memcached_st *memc)
+test_return replace_test(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-uint8_t delete_test(memcached_st *memc)
+test_return delete_test(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-uint8_t flush_test(memcached_st *memc)
+test_return flush_test(memcached_st *memc)
{
memcached_return rc;
return MEMCACHED_SUCCESS;
}
-uint8_t memcached_server_cursor_test(memcached_st *memc)
+test_return memcached_server_cursor_test(memcached_st *memc)
{
char *context= "foo bad";
memcached_server_function callbacks[1];
return 0;
}
-uint8_t bad_key_test(memcached_st *memc)
+test_return bad_key_test(memcached_st *memc)
{
memcached_return rc;
char *key= "foo bad";
return memcached_result_set_value(result, READ_THROUGH_VALUE, strlen(READ_THROUGH_VALUE));
}
-uint8_t read_through(memcached_st *memc)
+test_return read_through(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-memcached_return delete_trigger(memcached_st *ptr, char *key, size_t key_length)
+memcached_return delete_trigger(memcached_st *ptr, const char *key, size_t key_length)
{
assert(key);
return MEMCACHED_SUCCESS;
}
-uint8_t delete_through(memcached_st *memc)
+test_return delete_through(memcached_st *memc)
{
memcached_trigger_delete_key callback;
memcached_return rc;
return 0;
}
-uint8_t get_test(memcached_st *memc)
+test_return get_test(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-uint8_t get_test2(memcached_st *memc)
+test_return get_test2(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-uint8_t set_test2(memcached_st *memc)
+test_return set_test2(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-uint8_t set_test3(memcached_st *memc)
+test_return set_test3(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-uint8_t get_test3(memcached_st *memc)
+test_return get_test3(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
return 0;
}
-uint8_t get_test4(memcached_st *memc)
+test_return get_test4(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
}
/* Do not copy the style of this code, I just access hosts to testthis function */
-uint8_t stats_servername_test(memcached_st *memc)
+test_return stats_servername_test(memcached_st *memc)
{
memcached_return rc;
memcached_stat_st stat;
return 0;
}
-uint8_t increment_test(memcached_st *memc)
+test_return increment_test(memcached_st *memc)
{
uint64_t new_number;
memcached_return rc;
return 0;
}
-uint8_t decrement_test(memcached_st *memc)
+test_return decrement_test(memcached_st *memc)
{
uint64_t new_number;
memcached_return rc;
return 0;
}
-uint8_t quit_test(memcached_st *memc)
+test_return quit_test(memcached_st *memc)
{
memcached_return rc;
char *key= "fudge";
return 0;
}
-uint8_t mget_result_test(memcached_st *memc)
+test_return mget_result_test(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"fudge", "son", "food"};
return 0;
}
-uint8_t mget_result_alloc_test(memcached_st *memc)
+test_return mget_result_alloc_test(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"fudge", "son", "food"};
return 0;
}
-uint8_t mget_result_function(memcached_st *memc)
+test_return mget_result_function(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"fudge", "son", "food"};
return 0;
}
-uint8_t mget_test(memcached_st *memc)
+test_return mget_test(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"fudge", "son", "food"};
return 0;
}
-uint8_t get_stats_keys(memcached_st *memc)
+test_return get_stats_keys(memcached_st *memc)
{
char **list;
char **ptr;
return 0;
}
-uint8_t version_string_test(memcached_st *memc)
+test_return version_string_test(memcached_st *memc)
{
const char *version_string;
return 0;
}
-uint8_t get_stats(memcached_st *memc)
+test_return get_stats(memcached_st *memc)
{
unsigned int x;
char **list;
return 0;
}
-uint8_t add_host_test(memcached_st *memc)
+test_return add_host_test(memcached_st *memc)
{
unsigned int x;
memcached_server_st *servers;
return MEMCACHED_SUCCESS;
}
-uint8_t callback_test(memcached_st *memc)
+test_return callback_test(memcached_st *memc)
{
/* Test User Data */
{
}
/* We don't test the behavior itself, we test the switches */
-uint8_t behavior_test(memcached_st *memc)
+test_return behavior_test(memcached_st *memc)
{
unsigned long long value;
unsigned int set= 1;
}
/* Test case provided by Cal Haldenbrand */
-uint8_t user_supplied_bug1(memcached_st *memc)
+test_return user_supplied_bug1(memcached_st *memc)
{
unsigned int setter= 1;
unsigned int x;
}
/* Test case provided by Cal Haldenbrand */
-uint8_t user_supplied_bug2(memcached_st *memc)
+test_return user_supplied_bug2(memcached_st *memc)
{
int errors;
unsigned int setter;
/* Do a large mget() over all the keys we think exist */
#define KEY_COUNT 3000 // * 1024576
-uint8_t user_supplied_bug3(memcached_st *memc)
+test_return user_supplied_bug3(memcached_st *memc)
{
memcached_return rc;
unsigned int setter;
}
/* Make sure we behave properly if server list has no values */
-uint8_t user_supplied_bug4(memcached_st *memc)
+test_return user_supplied_bug4(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"fudge", "son", "food"};
}
#define VALUE_SIZE_BUG5 1048064
-uint8_t user_supplied_bug5(memcached_st *memc)
+test_return user_supplied_bug5(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"036790384900", "036790384902", "036790384904", "036790384906"};
return 0;
}
-uint8_t user_supplied_bug6(memcached_st *memc)
+test_return user_supplied_bug6(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"036790384900", "036790384902", "036790384904", "036790384906"};
return 0;
}
-uint8_t user_supplied_bug8(memcached_st *memc)
+test_return user_supplied_bug8(memcached_st *memc)
{
memcached_return rc;
memcached_st *mine;
}
/* Test flag store/retrieve */
-uint8_t user_supplied_bug7(memcached_st *memc)
+test_return user_supplied_bug7(memcached_st *memc)
{
memcached_return rc;
char *keys= "036790384900";
return 0;
}
-uint8_t user_supplied_bug9(memcached_st *memc)
+test_return user_supplied_bug9(memcached_st *memc)
{
memcached_return rc;
char *keys[]= {"UDATA:edevil@sapo.pt", "fudge&*@#", "for^#@&$not"};
}
/* We are testing with aggressive timeout to get failures */
-uint8_t user_supplied_bug10(memcached_st *memc)
+test_return user_supplied_bug10(memcached_st *memc)
{
char *key= "foo";
char *value;
/*
We are looking failures in the async protocol
*/
-uint8_t user_supplied_bug11(memcached_st *memc)
+test_return user_supplied_bug11(memcached_st *memc)
{
char *key= "foo";
char *value;
/*
Bug found where incr was not returning MEMCACHED_NOTFOUND when object did not exist.
*/
-uint8_t user_supplied_bug12(memcached_st *memc)
+test_return user_supplied_bug12(memcached_st *memc)
{
memcached_return rc;
uint32_t flags;
Bug found where command total one more than MEMCACHED_MAX_BUFFER
set key34567890 0 0 8169 \r\n is sent followed by buffer of size 8169, followed by 8169
*/
-uint8_t user_supplied_bug13(memcached_st *memc)
+test_return user_supplied_bug13(memcached_st *memc)
{
char key[] = "key34567890";
char *overflow;
set key34567890 0 0 8169 \r\n
is sent followed by buffer of size 8169, followed by 8169
*/
-uint8_t user_supplied_bug14(memcached_st *memc)
+test_return user_supplied_bug14(memcached_st *memc)
{
int setter= 1;
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, setter);
/*
Look for zero length value problems
*/
-uint8_t user_supplied_bug15(memcached_st *memc)
+test_return user_supplied_bug15(memcached_st *memc)
{
uint32_t x;
memcached_return rc;
return 0;
}
-uint8_t result_static(memcached_st *memc)
+/* Check the return sizes on FLAGS to make sure it stores 32bit unsigned values correctly */
+test_return user_supplied_bug16(memcached_st *memc)
+{
+ uint32_t x;
+ memcached_return rc;
+ char *key= "mykey";
+ char *value;
+ size_t length;
+ uint32_t flags;
+
+ rc= memcached_set(memc, key, strlen(key),
+ NULL, 0,
+ (time_t)0, UINT32_MAX);
+
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value= memcached_get(memc, key, strlen(key),
+ &length, &flags, &rc);
+
+ assert(rc == MEMCACHED_SUCCESS);
+ assert(value == NULL);
+ assert(length == 0);
+ assert(flags == UINT32_MAX);
+
+ return 0;
+}
+
+test_return result_static(memcached_st *memc)
{
memcached_result_st result;
memcached_result_st *result_ptr;
return 0;
}
-uint8_t result_alloc(memcached_st *memc)
+test_return result_alloc(memcached_st *memc)
{
memcached_result_st *result;
return 0;
}
-uint8_t string_static_null(memcached_st *memc)
+test_return string_static_null(memcached_st *memc)
{
memcached_string_st string;
memcached_string_st *string_ptr;
return 0;
}
-uint8_t string_alloc_null(memcached_st *memc)
+test_return string_alloc_null(memcached_st *memc)
{
memcached_string_st *string;
return 0;
}
-uint8_t string_alloc_with_size(memcached_st *memc)
+test_return string_alloc_with_size(memcached_st *memc)
{
memcached_string_st *string;
return 0;
}
-uint8_t string_alloc_with_size_toobig(memcached_st *memc)
+test_return string_alloc_with_size_toobig(memcached_st *memc)
{
memcached_string_st *string;
return 0;
}
-uint8_t string_alloc_append(memcached_st *memc)
+test_return string_alloc_append(memcached_st *memc)
{
unsigned int x;
char buffer[SMALL_STRING_LEN];
return 0;
}
-uint8_t string_alloc_append_toobig(memcached_st *memc)
+test_return string_alloc_append_toobig(memcached_st *memc)
{
memcached_return rc;
unsigned int x;
return 0;
}
-uint8_t cleanup_pairs(memcached_st *memc)
+test_return cleanup_pairs(memcached_st *memc)
{
pairs_free(global_pairs);
return 0;
}
-uint8_t generate_pairs(memcached_st *memc)
+test_return generate_pairs(memcached_st *memc)
{
unsigned long long x;
global_pairs= pairs_generate(GLOBAL_COUNT, 400);
return 0;
}
-uint8_t generate_large_pairs(memcached_st *memc)
+test_return generate_large_pairs(memcached_st *memc)
{
unsigned long long x;
global_pairs= pairs_generate(GLOBAL2_COUNT, MEMCACHED_MAX_BUFFER+10);
return 0;
}
-uint8_t generate_data(memcached_st *memc)
+test_return generate_data(memcached_st *memc)
{
execute_set(memc, global_pairs, global_count);
return 0;
}
-uint8_t generate_buffer_data(memcached_st *memc)
+test_return generate_buffer_data(memcached_st *memc)
{
int latch= 0;
return 0;
}
-uint8_t get_read(memcached_st *memc)
+test_return get_read_count(memcached_st *memc)
+{
+ unsigned int x;
+ memcached_return rc;
+ memcached_st *clone;
+
+ clone= memcached_clone(NULL, memc);
+ assert(clone);
+
+ memcached_server_add(clone, "localhost", 6666);
+
+ {
+ char *return_value;
+ size_t return_value_length;
+ uint32_t flags;
+ uint32_t count;
+
+ for (x= count= 0; x < global_count; x++)
+ {
+ return_value= memcached_get(clone, global_keys[x], global_keys_length[x],
+ &return_value_length, &flags, &rc);
+ if (rc == MEMCACHED_SUCCESS)
+ {
+ count++;
+ if (return_value)
+ free(return_value);
+ }
+ }
+ fprintf(stderr, "\t%u -> %u", global_count, count);
+ }
+
+ memcached_free(clone);
+
+ return 0;
+}
+
+test_return get_read(memcached_st *memc)
{
unsigned int x;
memcached_return rc;
return 0;
}
-uint8_t mget_read(memcached_st *memc)
+test_return mget_read(memcached_st *memc)
{
memcached_return rc;
return 0;
}
-uint8_t mget_read_result(memcached_st *memc)
+test_return mget_read_result(memcached_st *memc)
{
memcached_return rc;
return 0;
}
-uint8_t mget_read_function(memcached_st *memc)
+test_return mget_read_function(memcached_st *memc)
{
memcached_return rc;
unsigned int counter;
return 0;
}
-uint8_t delete_generate(memcached_st *memc)
+test_return delete_generate(memcached_st *memc)
{
unsigned int x;
return 0;
}
-uint8_t delete_buffer_generate(memcached_st *memc)
+test_return delete_buffer_generate(memcached_st *memc)
{
int latch= 0;
unsigned int x;
return 0;
}
-uint8_t free_data(memcached_st *memc)
+test_return free_data(memcached_st *memc)
{
pairs_free(global_pairs);
return 0;
}
-uint8_t add_host_test1(memcached_st *memc)
+test_return add_host_test1(memcached_st *memc)
{
unsigned int x;
memcached_return rc;
return MEMCACHED_SUCCESS;
}
-memcached_return pre_hash_ketama(memcached_st *memc)
+memcached_return pre_behavior_ketama(memcached_st *memc)
{
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_KETAMA);
+ memcached_return rc;
+ uint64_t value;
+
+ rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA, 1);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA);
+ assert(value == 1);
return MEMCACHED_SUCCESS;
}
return realloc(mem, size);
}
+memcached_return set_prefix(memcached_st *memc)
+{
+ memcached_return rc;
+ const char *key= "mine";
+ char *value;
+
+ /* Make sure be default none exists */
+ value= memcached_callback_get(memc, MEMCACHED_CALLBACK_PREFIX_KEY, &rc);
+ assert(rc == MEMCACHED_FAILURE);
+
+ /* Test a clean set */
+ rc= memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, (void *)key);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value= memcached_callback_get(memc, MEMCACHED_CALLBACK_PREFIX_KEY, &rc);
+ assert(memcmp(value, key, 4) == 0);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ /* Test that we can turn it off */
+ rc= memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, NULL);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value= memcached_callback_get(memc, MEMCACHED_CALLBACK_PREFIX_KEY, &rc);
+ assert(rc == MEMCACHED_FAILURE);
+
+ /* Now setup for main test */
+ rc= memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, (void *)key);
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value= memcached_callback_get(memc, MEMCACHED_CALLBACK_PREFIX_KEY, &rc);
+ assert(rc == MEMCACHED_SUCCESS);
+ assert(memcmp(value, key, 4) == 0);
+
+ return MEMCACHED_SUCCESS;
+}
+
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;
{"user_supplied_bug13", 1, user_supplied_bug13 },
{"user_supplied_bug14", 1, user_supplied_bug14 },
{"user_supplied_bug15", 1, user_supplied_bug15 },
+ {"user_supplied_bug16", 1, user_supplied_bug16 },
{0, 0, 0}
};
{0, 0, 0}
};
+test_st consistent_tests[] ={
+ {"generate_pairs", 1, generate_pairs },
+ {"generate_data", 1, generate_data },
+ {"get_read", 0, get_read_count },
+ {"cleanup", 1, cleanup_pairs },
+ {0, 0, 0}
+};
collection_st collection[] ={
{"block", 0, 0, tests},
{"fnv1a_64", pre_hash_fnv1a_64, 0, tests},
{"fnv1_32", pre_hash_fnv1_32, 0, tests},
{"fnv1a_32", pre_hash_fnv1a_32, 0, tests},
- {"ketama", pre_hash_ketama, 0, tests},
+ {"ketama", pre_behavior_ketama, 0, tests},
{"unix_socket", pre_unix_socket, 0, tests},
{"unix_socket_nodelay", pre_nodelay, 0, tests},
{"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},
{"version_1_2_3", check_for_1_2_3, 0, version_1_2_3},
{"string", 0, 0, string_tests},
{"user", 0, 0, user_tests},
{"generate", 0, 0, generate_tests},
{"generate_hsieh", pre_hsieh, 0, generate_tests},
+ {"generate_ketama", pre_behavior_ketama, 0, generate_tests},
{"generate_hsieh_consistent", enable_consistent, 0, generate_tests},
{"generate_md5", pre_md5, 0, generate_tests},
{"generate_murmur", pre_murmur, 0, generate_tests},
{"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},
{0, 0, 0, 0}
};