910aca3ce2ea3dab2a547ca5bd14d33ab7c89ab1
[awesomized/libmemcached] / testing / lib / MemcachedCluster.cpp
1 #include "MemcachedCluster.hpp"
2 #include "Retry.hpp"
3
4 const memcached_st MemcachedCluster::empty_memc{};
5
6 void MemcachedCluster::init() {
7 REQUIRE(cluster.start());
8
9 REQUIRE(memcached_create(&memc));
10 for (const auto &server : cluster.getServers()) {
11 auto target = server.getSocketOrPort();
12 if (holds_alternative<string>(target)) {
13 REQUIRE(MEMCACHED_SUCCESS == memcached_server_add_unix_socket(&memc, get<string>(target).c_str()));
14 } else {
15 REQUIRE(MEMCACHED_SUCCESS == memcached_server_add(&memc, "localhost", get<int>(target)));
16 }
17 }
18
19 Retry cluster_is_listening([this]() {
20 return cluster.isListening();
21 });
22 REQUIRE(cluster_is_listening());
23 }
24
25 MemcachedCluster::~MemcachedCluster() {
26 if (memcmp(&memc, &empty_memc, sizeof(memc))) {
27 memcached_free(&memc);
28 }
29 }
30
31 void MemcachedCluster::flush() {
32 REQUIRE(MEMCACHED_SUCCESS == memcached_flush(&memc, 0));
33 }
34
35 MemcachedCluster::MemcachedCluster()
36 : cluster{Server{
37 MEMCACHED_BINARY,
38 {random_socket_or_port_arg()}
39 }}
40 {
41 init();
42 }
43
44 MemcachedCluster::MemcachedCluster(Cluster &&cluster_)
45 : cluster{move(cluster_)}
46 {
47 init();
48 }
49
50 MemcachedCluster::MemcachedCluster(MemcachedCluster &&mc)
51 : cluster{Server{}}
52 {
53 *this = move(mc);
54 }
55
56 MemcachedCluster &MemcachedCluster::operator=(MemcachedCluster &&mc) {
57 cluster = move(mc.cluster);
58 memcached_clone(&memc, &mc.memc);
59 returns = ReturnMatcher{&memc};
60 return *this;
61 }
62
63 MemcachedCluster MemcachedCluster::mixed() {
64 return MemcachedCluster{};
65 }
66
67 MemcachedCluster MemcachedCluster::network() {
68 return MemcachedCluster{Cluster{Server{
69 MEMCACHED_BINARY,
70 {"-p", random_socket_or_port_string}
71 }}};
72 }
73
74 MemcachedCluster MemcachedCluster::socket() {
75 return MemcachedCluster{Cluster{Server{
76 MEMCACHED_BINARY,
77 {"-s", random_socket_or_port_string}
78 }}};
79 }
80
81 void MemcachedCluster::enableBinaryProto(bool enable) {
82 REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc,
83 MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, enable));
84 }
85
86 void MemcachedCluster::enableBuffering(bool enable) {
87 REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc,
88 MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, enable));
89 }
90
91 void MemcachedCluster::enableReplication() {
92 REQUIRE(MEMCACHED_SUCCESS == memcached_behavior_set(&memc,
93 MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS, memcached_server_count(&memc)));
94 }
95