X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=testing%2Flib%2FMemcachedCluster.cpp;h=efb1a2de60d74e5b13d1c6ee73637083e5d83f6c;hb=400788eac8cccf9c30a616129a5dc2d67780790f;hp=4a330247eaf4cab4846ce51883cc995eca14f3cb;hpb=f33fd6e7d1df8e5878ce5c5605f64bab7b02ceb6;p=m6w6%2Flibmemcached diff --git a/testing/lib/MemcachedCluster.cpp b/testing/lib/MemcachedCluster.cpp index 4a330247..efb1a2de 100644 --- a/testing/lib/MemcachedCluster.cpp +++ b/testing/lib/MemcachedCluster.cpp @@ -1,6 +1,8 @@ #include "MemcachedCluster.hpp" #include "Retry.hpp" +const memcached_st MemcachedCluster::empty_memc{}; + void MemcachedCluster::init() { REQUIRE(cluster.start()); @@ -21,7 +23,9 @@ void MemcachedCluster::init() { } MemcachedCluster::~MemcachedCluster() { - memcached_free(&memc); + if (memcmp(&memc, &empty_memc, sizeof(memc))) { + memcached_free(&memc); + } } void MemcachedCluster::flush() { @@ -29,13 +33,16 @@ void MemcachedCluster::flush() { } MemcachedCluster::MemcachedCluster() -: cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {random_socket_or_port_arg()}}} +: cluster{Server{ + MEMCACHED_BINARY, + {random_socket_or_port_arg()} +}} { init(); } MemcachedCluster::MemcachedCluster(Cluster &&cluster_) -: cluster{forward(cluster_)} +: cluster{move(cluster_)} { init(); } @@ -44,14 +51,34 @@ MemcachedCluster MemcachedCluster::mixed() { return MemcachedCluster{}; } -MemcachedCluster MemcachedCluster::net() { - return MemcachedCluster{Cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {"-p", random_socket_or_port_string}}}}; +MemcachedCluster MemcachedCluster::network() { + return MemcachedCluster{Cluster{Server{ + MEMCACHED_BINARY, + {"-p", random_socket_or_port_string} + }}}; } MemcachedCluster MemcachedCluster::socket() { - return MemcachedCluster{Cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {"-s", random_socket_or_port_string}}}}; + return MemcachedCluster{Cluster{Server{ + MEMCACHED_BINARY, + {"-s", random_socket_or_port_string} + }}}; +} + +void MemcachedCluster::enableBinaryProto(bool enable) { + REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc, + MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, enable)); +} + +MemcachedCluster::MemcachedCluster(MemcachedCluster &&mc) + : cluster{Server{}} +{ + *this = move(mc); } -void MemcachedCluster::enableBinary(bool enable) { - REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, enable)); +MemcachedCluster &MemcachedCluster::operator=(MemcachedCluster &&mc) { + cluster = move(mc.cluster); + memcached_clone(&memc, &mc.memc); + returns = ReturnMatcher{&memc}; + return *this; }