flush [ci skip]
[awesomized/libmemcached] / testing / memcached / encoding_key.cpp
1 #include "../lib/common.hpp"
2 #include "../lib/MemcachedCluster.hpp"
3
4 #define TEST_KEY LITERAL("test")
5 #define INITIAL_VAL LITERAL("initial")
6 #define REPLACED_VAL LITERAL("replaced")
7
8 static inline void check(memcached_st *enc, memcached_st *raw, const char *val, size_t len) {
9 memcached_return_t enc_rc, raw_rc;
10 size_t enc_length, raw_length;
11 Malloced enc_value(memcached_get(enc, TEST_KEY, &enc_length, nullptr, &enc_rc));
12 Malloced raw_value(memcached_get(raw, TEST_KEY, &raw_length, nullptr, &raw_rc));
13
14 REQUIRE(enc_rc == MEMCACHED_SUCCESS);
15 REQUIRE(raw_rc == MEMCACHED_SUCCESS);
16 REQUIRE_FALSE(enc_length == raw_length);
17 REQUIRE(memcmp(*raw_value, *enc_value, raw_length));
18 REQUIRE(enc_length == len);
19 REQUIRE_FALSE(memcmp(val, *enc_value, enc_length));
20 }
21
22 TEST_CASE("memcached encoding_key") {
23 MemcachedCluster tests[]{
24 MemcachedCluster::mixed(),
25 MemcachedCluster::net(),
26 MemcachedCluster::socket()
27 };
28
29 LOOPED_SECTION(tests) {
30 auto memc = &test.memc;
31
32 SECTION("accepts encoding key") {
33 MemcachedPtr copy(memc);
34
35 REQUIRE(MEMCACHED_SUCCESS ==
36 memcached_set_encoding_key(memc, LITERAL(__func__)));
37
38 SECTION("sets encoded value") {
39 REQUIRE(MEMCACHED_SUCCESS ==
40 memcached_set(memc, TEST_KEY, INITIAL_VAL, 0, 0));
41
42 SECTION("gets encoded value") {
43 check(memc, &copy.memc, INITIAL_VAL);
44 }
45
46 SECTION("cloned gets encoded value") {
47 MemcachedPtr dupe(memc);
48
49 check(&dupe.memc, &copy.memc, INITIAL_VAL);
50 }
51 }
52
53 SECTION("adds encoded value") {
54
55 REQUIRE(MEMCACHED_SUCCESS ==
56 memcached_set(memc, TEST_KEY, INITIAL_VAL, 0, 0));
57 REQUIRE(MEMCACHED_NOTSTORED ==
58 memcached_add(memc, TEST_KEY, REPLACED_VAL, 0, 0));
59
60 check(memc, &copy.memc, INITIAL_VAL);
61
62 test.flush();
63
64 REQUIRE(MEMCACHED_SUCCESS ==
65 memcached_add(memc, TEST_KEY, REPLACED_VAL, 0, 0));
66
67 SECTION("gets encoded value") {
68 check(memc, &copy.memc, REPLACED_VAL);
69 }
70 }
71
72 SECTION("replaces encoded value") {
73 REQUIRE(MEMCACHED_SUCCESS ==
74 memcached_set(memc, TEST_KEY, INITIAL_VAL, 0, 0));
75
76 check(memc, &copy.memc, INITIAL_VAL);
77
78 REQUIRE(MEMCACHED_SUCCESS ==
79 memcached_replace(memc, TEST_KEY, REPLACED_VAL, 0, 0));
80
81 SECTION("gets encoded value") {
82 check(memc, &copy.memc, REPLACED_VAL);
83 }
84 }
85
86 SECTION("unsupported") {
87 REQUIRE(MEMCACHED_NOT_SUPPORTED ==
88 memcached_increment(memc, TEST_KEY, 0, nullptr));
89 REQUIRE(MEMCACHED_NOT_SUPPORTED ==
90 memcached_decrement(memc, TEST_KEY, 0, nullptr));
91 REQUIRE(MEMCACHED_NOT_SUPPORTED ==
92 memcached_increment_with_initial(memc, TEST_KEY, 0, 0,
93 0, nullptr));
94 REQUIRE(MEMCACHED_NOT_SUPPORTED ==
95 memcached_decrement_with_initial(memc, TEST_KEY, 0, 0,
96 0, nullptr));
97 REQUIRE(MEMCACHED_NOT_SUPPORTED ==
98 memcached_append(memc, TEST_KEY, REPLACED_VAL, 0, 0));
99 REQUIRE(MEMCACHED_NOT_SUPPORTED ==
100 memcached_prepend(memc, TEST_KEY, REPLACED_VAL, 0, 0));
101 }
102 }
103 }
104 }