libmemcached: fix #13
[awesomized/libmemcached] / tests / libmemcached-1.0 / setup_and_teardowns.cc
index 95ba4c8d44c8bb3a7886a83762afb1ac5e1df61c..047497d69729d3130e27ae759f827b85df8256d7 100644 (file)
  *
  */
 
-#include <config.h>
+#include <mem_config.h>
 #include <libtest/test.hpp>
 
-#include <libmemcached/util.h>
+#include <libmemcachedutil-1.0/util.h>
 
+#include "tests/print.h"
 #include "tests/libmemcached-1.0/setup_and_teardowns.h"
 
 #include <sys/stat.h>
@@ -61,6 +62,7 @@ memcached_return_t return_value_based_on_buffering(memcached_st *memc)
 */
 test_return_t pre_binary(memcached_st *memc)
 {
+  test_true(memcached_server_count(memc) > 0);
   test_skip(true, libmemcached_util_version_check(memc, 1, 4, 4));
   test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, true));
 
@@ -168,30 +170,62 @@ test_return_t pre_hash_fnv1a_32(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
+test_return_t memcached_servers_reset_SETUP(memcached_st *memc)
+{
+  memcached_servers_reset(memc);
+  test_compare(0U, memcached_server_count(memc));
+  return TEST_SUCCESS;
+}
+
+test_return_t memcached_servers_reset_CONTINUUM(memcached_st *memc)
+{
+  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, MEMCACHED_DISTRIBUTION_CONSISTENT);
+  memcached_servers_reset(memc);
+  test_zero(memc->ketama.continuum_count);
+  // If memc->ketama.continuum_count is non-zero at this point, any call to
+  // memcached_server_add will cause a segfault.
+  return TEST_SUCCESS;
+}
+
+test_return_t memcached_servers_reset_MEMCACHED_DISTRIBUTION_CONSISTENT_SETUP(memcached_st *memc)
+{
+  test_compare(TEST_SUCCESS, memcached_servers_reset_SETUP(memc));
+
+  test_compare(MEMCACHED_SUCCESS, memcached_behavior_set_distribution(memc, MEMCACHED_DISTRIBUTION_CONSISTENT));
+  test_compare(memcached_behavior_get_distribution(memc), MEMCACHED_DISTRIBUTION_CONSISTENT);
+
+  return TEST_SUCCESS;
+}
+
+test_return_t memcached_servers_reset_MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED_SETUP(memcached_st *memc)
+{
+  test_compare(TEST_SUCCESS, memcached_servers_reset_SETUP(memc));
+  ASSERT_EQ(0U, memcached_server_count(0));
+
+  test_compare(MEMCACHED_SUCCESS, memcached_behavior_set_distribution(memc, MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED));
+  test_compare(memcached_behavior_get_distribution(memc), MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED);
+
+  return TEST_SUCCESS;
+}
+
 test_return_t pre_behavior_ketama(memcached_st *memc)
 {
-  memcached_return_t rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA, 1);
-  test_compare(MEMCACHED_SUCCESS, rc);
+  test_compare(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA, 1));
 
-  uint64_t value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA);
-  test_compare(value, uint64_t(1));
+  test_compare(memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA), uint64_t(1));
 
   return TEST_SUCCESS;
 }
 
 test_return_t pre_behavior_ketama_weighted(memcached_st *memc)
 {
-  memcached_return_t rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, 1);
-  test_compare(MEMCACHED_SUCCESS, rc);
+  test_compare(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, true), MEMCACHED_SUCCESS);
 
-  uint64_t value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED);
-  test_compare(value, uint64_t(1));
+  test_compare(memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED), uint64_t(1));
 
-  test_compare(MEMCACHED_SUCCESS,
-               memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5));
+  test_compare(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, MEMCACHED_HASH_MD5), MEMCACHED_SUCCESS);
 
-  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH);
-  test_compare(MEMCACHED_HASH_MD5, memcached_hash_t(value));
+  test_compare(memcached_hash_t(memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_KETAMA_HASH)), MEMCACHED_HASH_MD5);
 
   return TEST_SUCCESS;
 }