flush
[awesomized/libmemcached] / testing / lib / MemcachedCluster.hpp
1 #pragma once
2
3 #include "common.hpp"
4 #include "Cluster.hpp"
5
6 class ReturnMatcher : public Catch::MatcherBase<memcached_return_t> {
7 public:
8 explicit ReturnMatcher(const memcached_st *memc_, memcached_return_t expected_ = MEMCACHED_SUCCESS)
9 : memc{memc_}
10 , expected{expected_}
11 {}
12
13 ReturnMatcher(const ReturnMatcher &) = default;
14 ReturnMatcher &operator = (const ReturnMatcher &) = default;
15
16 ReturnMatcher(ReturnMatcher &&rm);
17 ReturnMatcher &operator = (ReturnMatcher &&rm);
18
19 bool match(const memcached_return_t &arg) const override;
20 ReturnMatcher success();
21 ReturnMatcher operator () (memcached_return_t expected_);
22
23 protected:
24 string describe() const override;
25
26 private:
27 const memcached_st *memc;
28 memcached_return_t expected{MEMCACHED_SUCCESS};
29 };
30
31 class LoneReturnMatcher {
32 public:
33 ReturnMatcher returns;
34 explicit LoneReturnMatcher(const memcached_st *memc) : returns{memc}
35 {}
36 };
37
38 class MemcachedCluster {
39 public:
40 Cluster cluster;
41 memcached_st memc{empty_memc};
42 ReturnMatcher returns{&memc};
43
44 MemcachedCluster();
45 explicit
46 MemcachedCluster(Cluster &&cluster);
47 ~MemcachedCluster();
48
49 MemcachedCluster(const MemcachedCluster &) = delete;
50 MemcachedCluster &operator=(const MemcachedCluster &) = delete;
51
52 MemcachedCluster(MemcachedCluster &&mc);;
53 MemcachedCluster &operator=(MemcachedCluster &&mc);
54
55 void enableBinaryProto(bool enable = true);
56 void flush();
57
58 static MemcachedCluster mixed();
59 static MemcachedCluster network();
60 static MemcachedCluster socket();
61
62 private:
63 static const memcached_st empty_memc;
64
65 void init();
66 };