+test_st udp_setup_server_tests[] ={
+ {"set_udp_behavior_test", 0, (test_callback_fn)set_udp_behavior_test},
+ {"add_tcp_server_udp_client_test", 0, (test_callback_fn)add_tcp_server_udp_client_test},
+ {"add_udp_server_tcp_client_test", 0, (test_callback_fn)add_udp_server_tcp_client_test},
+ {0, 0, 0}
+};
+
+test_st upd_io_tests[] ={
+ {"udp_set_test", 0, (test_callback_fn)udp_set_test},
+ {"udp_buffered_set_test", 0, (test_callback_fn)udp_buffered_set_test},
+ {"udp_set_too_big_test", 0, (test_callback_fn)udp_set_too_big_test},
+ {"udp_delete_test", 0, (test_callback_fn)udp_delete_test},
+ {"udp_buffered_delete_test", 0, (test_callback_fn)udp_buffered_delete_test},
+ {"udp_verbosity_test", 0, (test_callback_fn)udp_verbosity_test},
+ {"udp_quit_test", 0, (test_callback_fn)udp_quit_test},
+ {"udp_flush_test", 0, (test_callback_fn)udp_flush_test},
+ {"udp_incr_test", 0, (test_callback_fn)udp_incr_test},
+ {"udp_decr_test", 0, (test_callback_fn)udp_decr_test},
+ {"udp_stat_test", 0, (test_callback_fn)udp_stat_test},
+ {"udp_version_test", 0, (test_callback_fn)udp_version_test},
+ {"udp_get_test", 0, (test_callback_fn)udp_get_test},
+ {"udp_mixed_io_test", 0, (test_callback_fn)udp_mixed_io_test},
+ {0, 0, 0}
+};
+
+/* Clean the server before beginning testing */
+test_st tests[] ={
+ {"flush", 0, (test_callback_fn)flush_test },
+ {"init", 0, (test_callback_fn)init_test },
+ {"allocation", 0, (test_callback_fn)allocation_test },
+ {"server_list_null_test", 0, (test_callback_fn)server_list_null_test},
+ {"server_unsort", 0, (test_callback_fn)server_unsort_test},
+ {"server_sort", 0, (test_callback_fn)server_sort_test},
+ {"server_sort2", 0, (test_callback_fn)server_sort2_test},
+ {"clone_test", 0, (test_callback_fn)clone_test },
+ {"connection_test", 0, (test_callback_fn)connection_test},
+ {"callback_test", 0, (test_callback_fn)callback_test},
+ {"userdata_test", 0, (test_callback_fn)userdata_test},
+ {"error", 0, (test_callback_fn)error_test },
+ {"set", 0, (test_callback_fn)set_test },
+ {"set2", 0, (test_callback_fn)set_test2 },
+ {"set3", 0, (test_callback_fn)set_test3 },
+ {"dump", 1, (test_callback_fn)dump_test},
+ {"add", 1, (test_callback_fn)add_test },
+ {"replace", 1, (test_callback_fn)replace_test },
+ {"delete", 1, (test_callback_fn)delete_test },
+ {"get", 1, (test_callback_fn)get_test },
+ {"get2", 0, (test_callback_fn)get_test2 },
+ {"get3", 0, (test_callback_fn)get_test3 },
+ {"get4", 0, (test_callback_fn)get_test4 },
+ {"partial mget", 0, (test_callback_fn)get_test5 },
+ {"stats_servername", 0, (test_callback_fn)stats_servername_test },
+ {"increment", 0, (test_callback_fn)increment_test },
+ {"increment_with_initial", 1, (test_callback_fn)increment_with_initial_test },
+ {"decrement", 0, (test_callback_fn)decrement_test },
+ {"decrement_with_initial", 1, (test_callback_fn)decrement_with_initial_test },
+ {"increment_by_key", 0, (test_callback_fn)increment_by_key_test },
+ {"increment_with_initial_by_key", 1, (test_callback_fn)increment_with_initial_by_key_test },
+ {"decrement_by_key", 0, (test_callback_fn)decrement_by_key_test },
+ {"decrement_with_initial_by_key", 1, (test_callback_fn)decrement_with_initial_by_key_test },
+ {"quit", 0, (test_callback_fn)quit_test },
+ {"mget", 1, (test_callback_fn)mget_test },
+ {"mget_result", 1, (test_callback_fn)mget_result_test },
+ {"mget_result_alloc", 1, (test_callback_fn)mget_result_alloc_test },
+ {"mget_result_function", 1, (test_callback_fn)mget_result_function },
+ {"mget_execute", 1, (test_callback_fn)mget_execute },
+ {"mget_end", 0, (test_callback_fn)mget_end },
+ {"get_stats", 0, (test_callback_fn)get_stats },
+ {"add_host_test", 0, (test_callback_fn)add_host_test },
+ {"add_host_test_1", 0, (test_callback_fn)add_host_test1 },
+ {"get_stats_keys", 0, (test_callback_fn)get_stats_keys },
+ {"version_string_test", 0, (test_callback_fn)version_string_test},
+ {"bad_key", 1, (test_callback_fn)bad_key_test },
+ {"memcached_server_cursor", 1, (test_callback_fn)memcached_server_cursor_test },
+ {"read_through", 1, (test_callback_fn)read_through },
+ {"delete_through", 1, (test_callback_fn)delete_through },
+ {"noreply", 1, (test_callback_fn)noreply_test},
+ {"analyzer", 1, (test_callback_fn)analyzer_test},
+#ifdef HAVE_LIBMEMCACHEDUTIL
+ {"connectionpool", 1, (test_callback_fn)connection_pool_test },
+#endif
+ {"test_get_last_disconnect", 1, (test_callback_fn)test_get_last_disconnect},
+ {0, 0, 0}
+};
+
+test_st behavior_tests[] ={
+ {"behavior_test", 0, (test_callback_fn)behavior_test},
+ {0, 0, 0}
+};
+
+test_st async_tests[] ={
+ {"add", 1, (test_callback_fn)add_wrapper },
+ {0, 0, 0}
+};
+
+test_st string_tests[] ={
+ {"string static with null", 0, (test_callback_fn)string_static_null },
+ {"string alloc with null", 0, (test_callback_fn)string_alloc_null },
+ {"string alloc with 1K", 0, (test_callback_fn)string_alloc_with_size },
+ {"string alloc with malloc failure", 0, (test_callback_fn)string_alloc_with_size_toobig },
+ {"string append", 0, (test_callback_fn)string_alloc_append },
+ {"string append failure (too big)", 0, (test_callback_fn)string_alloc_append_toobig },
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st result_tests[] ={
+ {"result static", 0, (test_callback_fn)result_static},
+ {"result alloc", 0, (test_callback_fn)result_alloc},
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st version_1_2_3[] ={
+ {"append", 0, (test_callback_fn)append_test },
+ {"prepend", 0, (test_callback_fn)prepend_test },
+ {"cas", 0, (test_callback_fn)cas_test },
+ {"cas2", 0, (test_callback_fn)cas2_test },
+ {"append_binary", 0, (test_callback_fn)append_binary_test },
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st user_tests[] ={
+ {"user_supplied_bug1", 0, (test_callback_fn)user_supplied_bug1 },
+ {"user_supplied_bug2", 0, (test_callback_fn)user_supplied_bug2 },
+ {"user_supplied_bug3", 0, (test_callback_fn)user_supplied_bug3 },
+ {"user_supplied_bug4", 0, (test_callback_fn)user_supplied_bug4 },
+ {"user_supplied_bug5", 1, (test_callback_fn)user_supplied_bug5 },
+ {"user_supplied_bug6", 1, (test_callback_fn)user_supplied_bug6 },
+ {"user_supplied_bug7", 1, (test_callback_fn)user_supplied_bug7 },
+ {"user_supplied_bug8", 1, (test_callback_fn)user_supplied_bug8 },
+ {"user_supplied_bug9", 1, (test_callback_fn)user_supplied_bug9 },
+ {"user_supplied_bug10", 1, (test_callback_fn)user_supplied_bug10 },
+ {"user_supplied_bug11", 1, (test_callback_fn)user_supplied_bug11 },
+ {"user_supplied_bug12", 1, (test_callback_fn)user_supplied_bug12 },
+ {"user_supplied_bug13", 1, (test_callback_fn)user_supplied_bug13 },
+ {"user_supplied_bug14", 1, (test_callback_fn)user_supplied_bug14 },
+ {"user_supplied_bug15", 1, (test_callback_fn)user_supplied_bug15 },
+ {"user_supplied_bug16", 1, (test_callback_fn)user_supplied_bug16 },
+#ifndef __sun
+ /*
+ ** It seems to be something weird with the character sets..
+ ** value_fetch is unable to parse the value line (iscntrl "fails"), so I
+ ** guess I need to find out how this is supposed to work.. Perhaps I need
+ ** to run the test in a specific locale (I tried zh_CN.UTF-8 without success,
+ ** so just disable the code for now...).
+ */
+ {"user_supplied_bug17", 1, (test_callback_fn)user_supplied_bug17 },
+#endif
+ {"user_supplied_bug18", 1, (test_callback_fn)user_supplied_bug18 },
+ {"user_supplied_bug19", 1, (test_callback_fn)user_supplied_bug19 },
+ {"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},
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st replication_tests[]= {
+ {"set", 1, (test_callback_fn)replication_set_test },
+ {"get", 0, (test_callback_fn)replication_get_test },
+ {"mget", 0, (test_callback_fn)replication_mget_test },
+ {"delete", 0, (test_callback_fn)replication_delete_test },
+ {"rand_mget", 0, (test_callback_fn)replication_randomize_mget_test },
+ {0, 0, (test_callback_fn)0}
+};
+
+/*
+ * The following test suite is used to verify that we don't introduce
+ * regression bugs. If you want more information about the bug / test,
+ * you should look in the bug report at
+ * http://bugs.launchpad.net/libmemcached
+ */
+test_st regression_tests[]= {
+ {"lp:434484", 1, (test_callback_fn)regression_bug_434484 },
+ {"lp:434843", 1, (test_callback_fn)regression_bug_434843 },
+ {"lp:434843 buffered", 1, (test_callback_fn)regression_bug_434843_buffered },
+ {"lp:421108", 1, (test_callback_fn)regression_bug_421108 },
+ {"lp:442914", 1, (test_callback_fn)regression_bug_442914 },
+ {"lp:447342", 1, (test_callback_fn)regression_bug_447342 },
+ {"lp:463297", 1, (test_callback_fn)regression_bug_463297 },
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st ketama_compatibility[]= {
+ {"libmemcached", 1, (test_callback_fn)ketama_compatibility_libmemcached },
+ {"spymemcached", 1, (test_callback_fn)ketama_compatibility_spymemcached },
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st generate_tests[] ={
+ {"generate_pairs", 1, (test_callback_fn)generate_pairs },
+ {"generate_data", 1, (test_callback_fn)generate_data },
+ {"get_read", 0, (test_callback_fn)get_read },
+ {"delete_generate", 0, (test_callback_fn)delete_generate },
+ {"generate_buffer_data", 1, (test_callback_fn)generate_buffer_data },
+ {"delete_buffer", 0, (test_callback_fn)delete_buffer_generate},
+ {"generate_data", 1, (test_callback_fn)generate_data },
+ {"mget_read", 0, (test_callback_fn)mget_read },
+ {"mget_read_result", 0, (test_callback_fn)mget_read_result },
+ {"mget_read_function", 0, (test_callback_fn)mget_read_function },
+ {"cleanup", 1, (test_callback_fn)cleanup_pairs },
+ {"generate_large_pairs", 1, (test_callback_fn)generate_large_pairs },
+ {"generate_data", 1, (test_callback_fn)generate_data },
+ {"generate_buffer_data", 1, (test_callback_fn)generate_buffer_data },
+ {"cleanup", 1, (test_callback_fn)cleanup_pairs },
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st consistent_tests[] ={
+ {"generate_pairs", 1, (test_callback_fn)generate_pairs },
+ {"generate_data", 1, (test_callback_fn)generate_data },
+ {"get_read", 0, (test_callback_fn)get_read_count },
+ {"cleanup", 1, (test_callback_fn)cleanup_pairs },
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st consistent_weighted_tests[] ={
+ {"generate_pairs", 1, (test_callback_fn)generate_pairs },
+ {"generate_data", 1, (test_callback_fn)generate_data_with_stats },
+ {"get_read", 0, (test_callback_fn)get_read_count },
+ {"cleanup", 1, (test_callback_fn)cleanup_pairs },
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st hsieh_availability[] ={
+ {"hsieh_avaibility_test", 0, (test_callback_fn)hsieh_avaibility_test},
+ {0, 0, (test_callback_fn)0}
+};
+
+#if 0
+test_st hash_sanity[] ={
+ {"hash sanity", 0, (test_callback_fn)hash_sanity_test},
+ {0, 0, (test_callback_fn)0}
+};
+#endif
+
+test_st ketama_auto_eject_hosts[] ={
+ {"auto_eject_hosts", 1, (test_callback_fn)auto_eject_hosts },
+ {"output_ketama_weighted_keys", 1, (test_callback_fn)output_ketama_weighted_keys },
+ {0, 0, (test_callback_fn)0}
+};
+
+test_st hash_tests[] ={
+ {"md5", 0, (test_callback_fn)md5_run },
+ {"crc", 0, (test_callback_fn)crc_run },
+ {"fnv1_64", 0, (test_callback_fn)fnv1_64_run },
+ {"fnv1a_64", 0, (test_callback_fn)fnv1a_64_run },
+ {"fnv1_32", 0, (test_callback_fn)fnv1_32_run },
+ {"fnv1a_32", 0, (test_callback_fn)fnv1a_32_run },
+ {"hsieh", 0, (test_callback_fn)hsieh_run },
+ {"murmur", 0, (test_callback_fn)murmur_run },
+ {"jenkis", 0, (test_callback_fn)jenkins_run },
+ {0, 0, (test_callback_fn)0}
+};
+
+collection_st collection[] ={
+#if 0
+ {"hash_sanity", 0, 0, hash_sanity},
+#endif
+ {"hsieh_availability", 0, 0, hsieh_availability},
+ {"udp_setup", (test_callback_fn)init_udp, 0, udp_setup_server_tests},
+ {"udp_io", (test_callback_fn)init_udp, 0, upd_io_tests},
+ {"udp_binary_io", (test_callback_fn)binary_init_udp, 0, upd_io_tests},
+ {"block", 0, 0, tests},
+ {"binary", (test_callback_fn)pre_binary, 0, tests},
+ {"nonblock", (test_callback_fn)pre_nonblock, 0, tests},
+ {"nodelay", (test_callback_fn)pre_nodelay, 0, tests},
+ {"settimer", (test_callback_fn)pre_settimer, 0, tests},
+ {"md5", (test_callback_fn)pre_md5, 0, tests},
+ {"crc", (test_callback_fn)pre_crc, 0, tests},
+ {"hsieh", (test_callback_fn)pre_hsieh, 0, tests},
+ {"jenkins", (test_callback_fn)pre_jenkins, 0, tests},
+ {"fnv1_64", (test_callback_fn)pre_hash_fnv1_64, 0, tests},
+ {"fnv1a_64", (test_callback_fn)pre_hash_fnv1a_64, 0, tests},
+ {"fnv1_32", (test_callback_fn)pre_hash_fnv1_32, 0, tests},
+ {"fnv1a_32", (test_callback_fn)pre_hash_fnv1a_32, 0, tests},
+ {"ketama", (test_callback_fn)pre_behavior_ketama, 0, tests},
+ {"ketama_auto_eject_hosts", (test_callback_fn)pre_behavior_ketama, 0, ketama_auto_eject_hosts},
+ {"unix_socket", (test_callback_fn)pre_unix_socket, 0, tests},
+ {"unix_socket_nodelay", (test_callback_fn)pre_nodelay, 0, tests},
+ {"poll_timeout", (test_callback_fn)poll_timeout, 0, tests},
+ {"gets", (test_callback_fn)enable_cas, 0, tests},
+ {"consistent_crc", (test_callback_fn)enable_consistent_crc, 0, tests},
+ {"consistent_hsieh", (test_callback_fn)enable_consistent_hsieh, 0, tests},
+#ifdef MEMCACHED_ENABLE_DEPRECATED
+ {"deprecated_memory_allocators", (test_callback_fn)deprecated_set_memory_alloc, 0, tests},
+#endif
+ {"memory_allocators", (test_callback_fn)set_memory_alloc, 0, tests},
+ {"prefix", (test_callback_fn)set_prefix, 0, tests},
+ {"version_1_2_3", (test_callback_fn)check_for_1_2_3, 0, version_1_2_3},
+ {"string", 0, 0, string_tests},
+ {"result", 0, 0, result_tests},
+ {"async", (test_callback_fn)pre_nonblock, 0, async_tests},
+ {"async_binary", (test_callback_fn)pre_nonblock_binary, 0, async_tests},
+ {"user", 0, 0, user_tests},
+ {"generate", 0, 0, generate_tests},
+ {"generate_hsieh", (test_callback_fn)pre_hsieh, 0, generate_tests},
+ {"generate_ketama", (test_callback_fn)pre_behavior_ketama, 0, generate_tests},
+ {"generate_hsieh_consistent", (test_callback_fn)enable_consistent_hsieh, 0, generate_tests},
+ {"generate_md5", (test_callback_fn)pre_md5, 0, generate_tests},
+ {"generate_murmur", (test_callback_fn)pre_murmur, 0, generate_tests},
+ {"generate_jenkins", (test_callback_fn)pre_jenkins, 0, generate_tests},
+ {"generate_nonblock", (test_callback_fn)pre_nonblock, 0, generate_tests},
+ {"consistent_not", 0, 0, consistent_tests},
+ {"consistent_ketama", (test_callback_fn)pre_behavior_ketama, 0, consistent_tests},
+ {"consistent_ketama_weighted", (test_callback_fn)pre_behavior_ketama_weighted, 0, consistent_weighted_tests},
+ {"ketama_compat", 0, 0, ketama_compatibility},
+ {"test_hashes", 0, 0, hash_tests},
+ {"replication", (test_callback_fn)pre_replication, 0, replication_tests},
+ {"replication_noblock", (test_callback_fn)pre_replication_noblock, 0, replication_tests},
+ {"regression", 0, 0, regression_tests},
+ {"behaviors", 0, 0, behavior_tests},
+ {0, 0, 0, 0}
+};
+
+#define SERVERS_TO_CREATE 5
+
+#include "libmemcached_world.h"
+