1 #include "../lib/common.hpp"
2 #include "../lib/MemcachedCluster.hpp"
4 #define TEST_KEY LITERAL("test")
5 #define INITIAL_VAL LITERAL("initial")
6 #define REPLACED_VAL LITERAL("replaced")
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
));
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
));
22 TEST_CASE("memcached encoding_key") {
23 MemcachedCluster tests
[]{
24 MemcachedCluster::mixed(),
25 MemcachedCluster::net(),
26 MemcachedCluster::socket()
29 LOOPED_SECTION(tests
) {
30 auto memc
= &test
.memc
;
32 SECTION("accepts encoding key") {
33 MemcachedPtr
copy(memc
);
35 REQUIRE(MEMCACHED_SUCCESS
==
36 memcached_set_encoding_key(memc
, LITERAL(__func__
)));
38 SECTION("sets encoded value") {
39 REQUIRE(MEMCACHED_SUCCESS
==
40 memcached_set(memc
, TEST_KEY
, INITIAL_VAL
, 0, 0));
42 SECTION("gets encoded value") {
43 check(memc
, ©
.memc
, INITIAL_VAL
);
46 SECTION("cloned gets encoded value") {
47 MemcachedPtr
dupe(memc
);
49 check(&dupe
.memc
, ©
.memc
, INITIAL_VAL
);
53 SECTION("adds encoded value") {
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));
60 check(memc
, ©
.memc
, INITIAL_VAL
);
64 REQUIRE(MEMCACHED_SUCCESS
==
65 memcached_add(memc
, TEST_KEY
, REPLACED_VAL
, 0, 0));
67 SECTION("gets encoded value") {
68 check(memc
, ©
.memc
, REPLACED_VAL
);
72 SECTION("replaces encoded value") {
73 REQUIRE(MEMCACHED_SUCCESS
==
74 memcached_set(memc
, TEST_KEY
, INITIAL_VAL
, 0, 0));
76 check(memc
, ©
.memc
, INITIAL_VAL
);
78 REQUIRE(MEMCACHED_SUCCESS
==
79 memcached_replace(memc
, TEST_KEY
, REPLACED_VAL
, 0, 0));
81 SECTION("gets encoded value") {
82 check(memc
, ©
.memc
, REPLACED_VAL
);
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,
94 REQUIRE(MEMCACHED_NOT_SUPPORTED
==
95 memcached_decrement_with_initial(memc
, TEST_KEY
, 0, 0,
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));