testing: UDP test
[m6w6/libmemcached] / test / tests / memcached / udp.cpp
1 #include "test/lib/common.hpp"
2 #include "test/lib/MemcachedCluster.hpp"
3
4 TEST_CASE("memcached_udp") {
5 auto test = MemcachedCluster::udp();
6 auto memc = &test.memc;
7
8 SECTION("sets reply flag") {
9 // FIXME: bad internals test
10 REQUIRE(memc->flags.reply);
11 REQUIRE_FALSE(memc->flags.use_udp);
12 REQUIRE_FALSE(memc->flags.use_udp == memc->flags.reply);
13 test.enableUdp();
14 REQUIRE_FALSE(memc->flags.reply);
15 REQUIRE(memc->flags.use_udp);
16 REQUIRE_FALSE(memc->flags.use_udp == memc->flags.reply);
17 test.enableUdp(false);
18 REQUIRE(memc->flags.reply);
19 REQUIRE_FALSE(memc->flags.use_udp);
20 REQUIRE_FALSE(memc->flags.use_udp == memc->flags.reply);
21 }
22
23 test.enableUdp();
24
25 SECTION("compat") {
26 memcached_return_t rc;
27 REQUIRE_RC(MEMCACHED_INVALID_ARGUMENTS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, true));
28 REQUIRE_RC(MEMCACHED_NOT_SUPPORTED, memcached_version(memc));
29 REQUIRE_SUCCESS(memcached_verbosity(memc, 0));
30 REQUIRE(nullptr == memcached_get(memc, S(__func__), 0, 0, &rc));
31 REQUIRE_RC(MEMCACHED_NOT_SUPPORTED, rc);
32 REQUIRE_RC(MEMCACHED_NOT_SUPPORTED, memcached_mget_execute_by_key(memc, S(__func__), nullptr, nullptr, 0, nullptr, nullptr, 0));
33 REQUIRE(nullptr == memcached_stat(memc, nullptr, &rc));
34 REQUIRE_RC(MEMCACHED_NOT_SUPPORTED, rc);
35 }
36
37 SECTION("io") {
38 const auto max = 1025; // request id rolls over at 1024
39 auto binary = GENERATE(0,1);
40
41 test.enableBinaryProto(binary);
42
43 DYNAMIC_SECTION("binary=" << binary) {
44 SECTION("set") {
45 for (auto i = 0; i < max; ++i) {
46 auto s = to_string(i);
47 INFO("i=" << i);
48 REQUIRE_SUCCESS(memcached_set(memc, s.c_str(), s.length(), s.c_str(), s.length(), 0, 0));
49 }
50 // FIXME: check request id
51 memcached_quit(memc);
52 REQUIRE_SUCCESS(memcached_last_error(memc));
53 }
54
55 SECTION("set too big") {
56 const auto len = 1'234'567;
57 auto blob = make_unique<char>(len);
58 REQUIRE_RC(MEMCACHED_WRITE_FAILURE, memcached_set(memc, S(__func__), blob.get(), len, 0, 0));
59 memcached_quit(memc);
60 REQUIRE_SUCCESS(memcached_last_error(memc));
61 }
62
63 SECTION("delete") {
64 for (auto i = 0; i < max; ++i) {
65 auto s = to_string(i);
66 INFO("i=" << i);
67 REQUIRE_SUCCESS(memcached_delete(memc, s.c_str(), s.length(), 0));
68 }
69 memcached_quit(memc);
70 REQUIRE_SUCCESS(memcached_last_error(memc));
71 }
72
73 SECTION("verbosity") {
74 for (auto i = 0; i < max; ++i) {
75 INFO("i=" << i);
76 REQUIRE_SUCCESS(memcached_verbosity(memc, 0));
77 }
78 memcached_quit(memc);
79 REQUIRE_SUCCESS(memcached_last_error(memc));
80 }
81
82 SECTION("flush") {
83 for (auto i = 0; i < max; ++i) {
84 INFO("i=" << i);
85 REQUIRE_SUCCESS(memcached_flush(memc, 0));
86 }
87 memcached_quit(memc);
88 REQUIRE_SUCCESS(memcached_last_error(memc));
89 }
90 }
91 }
92 }