libmemcached: add MEMCACHED_BEHAVIOR_META_PROTOCOL
[awesomized/libmemcached] / test / tests / memcached / inc_dec.cpp
1 #include "test/lib/common.hpp"
2 #include "test/lib/MemcachedCluster.hpp"
3
4 TEST_CASE("memcached_inc_dec") {
5 pair<string, MemcachedCluster> tests[] = {
6 {"mixed", MemcachedCluster::mixed()},
7 };
8
9 LOOPED_SECTION(tests) {
10 auto memc = &test.memc;
11 auto proto = GENERATE(as<memcached_behavior_t>{}, 0, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, MEMCACHED_BEHAVIOR_META_PROTOCOL);
12 char *prefix = GENERATE(as<char *>{}, "", "namespace:");
13
14 if (proto == MEMCACHED_BEHAVIOR_META_PROTOCOL && !test.isGEVersion(1, 6)) {
15 continue;
16 }
17 if (proto) {
18 REQUIRE_SUCCESS(memcached_behavior_set(memc, proto, 1));
19 }
20 if (*prefix) {
21 REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, prefix));
22 }
23
24 DYNAMIC_SECTION("increment (" << (proto ? libmemcached_string_behavior(proto) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix << ")") {
25 uint64_t number;
26
27 REQUIRE_SUCCESS(memcached_set(memc, S("number"), S("0"), 0, 0));
28
29 for (auto i = 1; i <= 10; ++i) {
30 INFO("iteration " << i);
31 REQUIRE_SUCCESS(memcached_increment(memc, S("number"), 1, &number));
32 REQUIRE(number == static_cast<uint64_t>(i));
33 }
34 }
35
36 DYNAMIC_SECTION("increment by_key (" << (proto ? libmemcached_string_behavior(proto) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix << ")") {
37 uint64_t number;
38
39 REQUIRE_SUCCESS(memcached_set_by_key(memc, S("key"), S("number"), S("0"), 0, 0));
40
41 for (auto i = 1; i <= 10; ++i) {
42 REQUIRE_SUCCESS(memcached_increment_by_key(memc, S("key"), S("number"), 1, &number));
43 REQUIRE(number == static_cast<uint64_t>(i));
44 }
45 }
46
47 DYNAMIC_SECTION("increment with initial (" << (proto ? libmemcached_string_behavior(proto) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix << ")") {
48 uint64_t number;
49 uint64_t initial = GENERATE(0, 456);
50
51 if (!proto) {
52 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS,
53 memcached_increment_with_initial(memc, S("number"), 1, initial, 0, &number));
54 } else {
55 REQUIRE_SUCCESS(memcached_increment_with_initial(memc, S("number"), 123, initial, 0, &number));
56 REQUIRE(number == initial);
57 REQUIRE_SUCCESS(memcached_increment_with_initial(memc, S("number"), 123, initial, 0, &number));
58 REQUIRE(number == initial + 123);
59 }
60 }
61
62 DYNAMIC_SECTION("increment with initial by_key (" << (proto ? libmemcached_string_behavior(proto) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix << ")") {
63 uint64_t number;
64 uint64_t initial = GENERATE(0, 456);
65
66 if (!proto) {
67 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS,
68 memcached_increment_with_initial_by_key(memc, S("key"), S("number"), 1, initial, 0, &number));
69 } else {
70 REQUIRE_SUCCESS(memcached_increment_with_initial_by_key(memc, S("key"), S("number"), 123, initial, 0, &number));
71 REQUIRE(number == initial);
72 REQUIRE_SUCCESS(memcached_increment_with_initial_by_key(memc, S("key"), S("number"), 123, initial, 0, &number));
73 REQUIRE(number == initial + 123);
74 }
75 }
76
77 DYNAMIC_SECTION("decrement (" << (proto ? libmemcached_string_behavior(proto) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix << ")") {
78 uint64_t number;
79
80 REQUIRE_SUCCESS(memcached_set(memc, S("number"), S("10"), 0, 0));
81
82 for (auto i = 9; i >= 0; --i) {
83 REQUIRE_SUCCESS(memcached_decrement(memc, S("number"), 1, &number));
84 REQUIRE(number == static_cast<uint64_t>(i));
85 }
86 }
87 DYNAMIC_SECTION("decrement by_key (" << (proto ? libmemcached_string_behavior(proto) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix << ")") {
88 uint64_t number;
89
90 REQUIRE_SUCCESS(memcached_set_by_key(memc, S("key"), S("number"), S("10"), 0, 0));
91
92 for (auto i = 9; i >= 0; --i) {
93 REQUIRE_SUCCESS(memcached_decrement_by_key(memc, S("key"), S("number"), 1, &number));
94 REQUIRE(number == static_cast<uint64_t>(i));
95 }
96 }
97 DYNAMIC_SECTION("decrement with initial (" << (proto ? libmemcached_string_behavior(proto) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix << ")") {
98 uint64_t number;
99 uint64_t initial = GENERATE(987, 456);
100
101 if (!proto) {
102 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS,
103 memcached_decrement_with_initial(memc, S("number"), 1, initial, 0, &number));
104 } else {
105 REQUIRE_SUCCESS(memcached_decrement_with_initial(memc, S("number"), 123, initial, 0, &number));
106 REQUIRE(number == initial);
107 REQUIRE_SUCCESS(memcached_decrement_with_initial(memc, S("number"), 123, initial, 0, &number));
108 REQUIRE(number == initial - 123);
109 }
110 }
111 DYNAMIC_SECTION("decrement with initial by_key (" << (proto ? libmemcached_string_behavior(proto) + sizeof("MEMCACHED_BEHAVIOR") : "ASCII_PROTOCOL") << ", prefix=" << prefix << ")") {
112 uint64_t number;
113 uint64_t initial = GENERATE(987, 456);
114
115 if (!proto) {
116 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS,
117 memcached_decrement_with_initial_by_key(memc, S("key"), S("number"), 1, initial, 0, &number));
118 } else {
119 REQUIRE_SUCCESS(memcached_decrement_with_initial_by_key(memc, S("key"), S("number"), 123, initial, 0, &number));
120 REQUIRE(number == initial);
121 REQUIRE_SUCCESS(memcached_decrement_with_initial_by_key(memc, S("key"), S("number"), 123, initial, 0, &number));
122 REQUIRE(number == initial - 123);
123 }
124 }
125 }
126 }