flush [ci skip]
[awesomized/libmemcached] / testing / lib / MemcachedCluster.cpp
1 #include "MemcachedCluster.hpp"
2 #include "Retry.hpp"
3
4 void MemcachedCluster::init() {
5 REQUIRE(cluster.start());
6
7 REQUIRE(memcached_create(&memc));
8 for (const auto &server : cluster.getServers()) {
9 auto target = server.getSocketOrPort();
10 if (holds_alternative<string>(target)) {
11 REQUIRE(MEMCACHED_SUCCESS == memcached_server_add_unix_socket(&memc, get<string>(target).c_str()));
12 } else {
13 REQUIRE(MEMCACHED_SUCCESS == memcached_server_add(&memc, "localhost", get<int>(target)));
14 }
15 }
16
17 Retry cluster_is_listening([this]() {
18 return cluster.isListening();
19 });
20 REQUIRE(cluster_is_listening());
21 }
22
23 MemcachedCluster::~MemcachedCluster() {
24 memcached_free(&memc);
25 }
26
27 void MemcachedCluster::flush() {
28 REQUIRE(MEMCACHED_SUCCESS == memcached_flush(&memc, 0));
29 }
30
31 MemcachedCluster::MemcachedCluster()
32 : cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {random_socket_or_port_arg()}}}
33 {
34 init();
35 }
36
37 MemcachedCluster::MemcachedCluster(Cluster &&cluster_)
38 : cluster{forward<Cluster>(cluster_)}
39 {
40 init();
41 }
42
43 MemcachedCluster MemcachedCluster::mixed() {
44 return MemcachedCluster{};
45 }
46
47 MemcachedCluster MemcachedCluster::net() {
48 return MemcachedCluster{Cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {"-p", random_socket_or_port_string}}}};
49 }
50
51 MemcachedCluster MemcachedCluster::socket() {
52 return MemcachedCluster{Cluster{Server{getenv_else("MEMCACHED_BINARY", "memcached"), {"-s", random_socket_or_port_string}}}};
53 }
54
55 void MemcachedCluster::enableBinary(bool enable) {
56 REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, enable));
57 }