2b2449fdb94ab0747ff00e0794a5b42b0dc0a0bb
[m6w6/libmemcached] / test / tests / memcached / append.cpp
1 #include "test/lib/common.hpp"
2 #include "test/lib/MemcachedCluster.hpp"
3
4 DECLARE_STREQUAL;
5
6 TEST_CASE("memcached_append") {
7 pair<string, MemcachedCluster> tests[] = {
8 {"bin_mixed", MemcachedCluster::mixed()},
9 {"mixed", MemcachedCluster::mixed()}
10 };
11
12 tests[0].second.enableBinaryProto();
13
14 LOOPED_SECTION(tests) {
15 auto memc = &test.memc;
16
17 SECTION("text") {
18 const char *values[] = {
19 "one", "two", "three", "four"
20 };
21
22 for (auto key : values) {
23 string cmp{key};
24
25 REQUIRE_SUCCESS(memcached_set(memc, S(key), S(key), 0, 0));
26 for (auto value : values) {
27 REQUIRE_SUCCESS(memcached_append(memc, S(key), S(value), 0, 0));
28 cmp += value;
29 }
30
31 memcached_return_t rc;
32 size_t len;
33 uint32_t flags;
34 Malloced got(memcached_get(memc, S(key), &len, &flags, &rc));
35
36 REQUIRE(strequal(cmp, *got));
37 REQUIRE_SUCCESS(rc);
38 }
39 }
40
41 SECTION("bytes") {
42 vector<uint32_t> store_list{ 23, 56, 499, 98, 32847, 0 };
43 const size_t raw_len = sizeof(decltype(store_list)::value_type) * store_list.size();
44 const char *raw_ptr = reinterpret_cast<char *>(store_list.data());
45
46 REQUIRE_SUCCESS(memcached_set(memc, S(__func__), nullptr, 0, 0, 0));
47
48 for (auto item : store_list) {
49 auto val = reinterpret_cast<char *>(&item);
50 REQUIRE_SUCCESS(memcached_append(memc, S(__func__), val, sizeof(item), 0, 0));
51 }
52
53 memcached_return_t rc;
54 size_t len;
55 uint32_t flags;
56 Malloced got(memcached_get(memc, S(__func__), &len, &flags, &rc));
57
58 REQUIRE(len == raw_len);
59 REQUIRE(strequal({raw_ptr, raw_len}, string{*got, len}));
60 REQUIRE_SUCCESS(rc);
61 }
62 }
63 }