X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=test%2Flib%2FMemcachedCluster.cpp;h=bb164e5d1982ea707e0375db807f3d7bcefa9724;hb=cf5fafcbbfd88990693baaa8b10838fd36598f5f;hp=c03bacce1f4124382b7f4886bb856d79f80f8b95;hpb=9f262c9ea92d4869715ca6f534c80075a8310ac1;p=m6w6%2Flibmemcached diff --git a/test/lib/MemcachedCluster.cpp b/test/lib/MemcachedCluster.cpp index c03bacce..bb164e5d 100644 --- a/test/lib/MemcachedCluster.cpp +++ b/test/lib/MemcachedCluster.cpp @@ -9,7 +9,24 @@ void MemcachedCluster::init() { Retry cluster_is_listening([this]() { return cluster.isListening(); }); - REQUIRE(cluster_is_listening()); + while (!cluster_is_listening()) { + cluster.stop(); + cluster.wait(); + cluster.start(); + } + + if (auto br = getenv_else("MEMCACHED_BREAK", "0")) { + if (*br && *br != '0') { + string in; + + cout << "Started servers:\n"; + for (const auto &server : cluster.getServers()) { + cout << server.getPid() << " "; + } + cout << "\nPress ENTER to continue... " << ::flush; + cin.get(); + } + } REQUIRE(memcached_create(&memc)); for (const auto &server : cluster.getServers()) { @@ -79,6 +96,16 @@ MemcachedCluster MemcachedCluster::socket() { }}}; } +MemcachedCluster MemcachedCluster::udp() { + return MemcachedCluster{Cluster{Server{ + MEMCACHED_BINARY, + { + Server::arg_pair_t{"-U", random_socket_or_port_string}, + Server::arg_t{"-v"} + } + }}}; +} + #if LIBMEMCACHED_WITH_SASL_SUPPORT MemcachedCluster MemcachedCluster::sasl() { auto mc = MemcachedCluster{Cluster{Server{ @@ -107,6 +134,16 @@ void MemcachedCluster::enableBuffering(bool enable) { void MemcachedCluster::enableReplication() { REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc, - MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS, memcached_server_count(&memc))); + MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS, memcached_server_count(&memc) - 1)); } +void MemcachedCluster::enableUdp(bool enable) { + REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc, + MEMCACHED_BEHAVIOR_USE_UDP, enable)); +} + +void MemcachedCluster::killOneServer() { + const auto &servers = cluster.getServers(); + const auto &victim = servers[random_num(0UL, servers.size() - 1)]; + ::kill(victim.getPid(), SIGKILL); +}