libmemcached: fix #13
[awesomized/libmemcached] / tests / libmemcached-1.0 / setup_and_teardowns.cc
index 093be4906f2b3998c7ce211575dfbbda442939b7..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,12 +62,20 @@ 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));
 
   return TEST_SUCCESS;
 }
 
+test_return_t pre_buffer(memcached_st *memc)
+{
+  test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, true));
+
+  return TEST_SUCCESS;
+}
+
 test_return_t pre_unix_socket(memcached_st *memc)
 {
   struct stat buf;
@@ -161,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;
 }
@@ -218,30 +259,6 @@ test_return_t pre_nonblock(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
-test_return_t pre_cork(memcached_st *memc)
-{
-#ifdef __APPLE__
-  return TEST_SKIPPED;
-#endif
-  bool set= true;
-  if (memcached_success(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_CORK, set)))
-    return TEST_SUCCESS;
-
-  return TEST_SKIPPED;
-}
-
-test_return_t pre_cork_and_nonblock(memcached_st *memc)
-{
-#ifdef __APPLE__
-  return TEST_SKIPPED;
-#endif
-  test_return_t test_rc;
-  if ((test_rc= pre_cork(memc)) != TEST_SUCCESS)
-    return test_rc;
-
-  return pre_nonblock(memc);
-}
-
 test_return_t pre_nonblock_binary(memcached_st *memc)
 {
   memcached_st *memc_clone= memcached_clone(NULL, memc);