X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=test%2Flib%2FMemcachedCluster.cpp;h=06e2c7f1b97d3cfac6f49366d723b4fa12a05d6a;hb=fe7194f7d6348559fc9219d9899c9633c9de77f2;hp=63155e94aba6389c05ca1d6a1bf37b42a46445ea;hpb=2b1e2cd28a097ba1fb8613ee17b9560e82aa2470;p=awesomized%2Flibmemcached diff --git a/test/lib/MemcachedCluster.cpp b/test/lib/MemcachedCluster.cpp index 63155e94..06e2c7f1 100644 --- a/test/lib/MemcachedCluster.cpp +++ b/test/lib/MemcachedCluster.cpp @@ -15,7 +15,25 @@ void MemcachedCluster::init() { 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 &[behavior, value] : to_set) { + REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc, behavior, value)); + } + for (const auto &server : cluster.getServers()) { auto target = server.getSocketOrPort(); if (holds_alternative(target)) { @@ -46,8 +64,9 @@ MemcachedCluster::MemcachedCluster() init(); } -MemcachedCluster::MemcachedCluster(Cluster &&cluster_) +MemcachedCluster::MemcachedCluster(Cluster &&cluster_, behaviors_t to_set_) : cluster{move(cluster_)} +, to_set{move(to_set_)} { init(); } @@ -83,6 +102,18 @@ 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"} + } + }}, { + {MEMCACHED_BEHAVIOR_USE_UDP, 1} + }}; +} + #if LIBMEMCACHED_WITH_SASL_SUPPORT MemcachedCluster MemcachedCluster::sasl() { auto mc = MemcachedCluster{Cluster{Server{ @@ -91,8 +122,9 @@ MemcachedCluster MemcachedCluster::sasl() { Server::arg_pair_t{"-p", random_socket_or_port_string}, Server::arg_t{"-S"} } - }}}; - mc.enableBinaryProto(); + }}, { + {MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1}, + }}; REQUIRE(MEMCACHED_SUCCESS == memcached_set_sasl_auth_data(&mc.memc, "memcached", "memcached")); return mc; @@ -111,6 +143,11 @@ 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::killOneServer() { + const auto &servers = cluster.getServers(); + const auto &victim = servers[random_num(0UL, servers.size() - 1)]; + ::kill(victim.getPid(), SIGKILL); +}