1 #include "test/lib/common.hpp"
2 #include "test/lib/MemcachedCluster.hpp"
4 TEST_CASE("memcached_poll_timeout") {
5 auto test
= MemcachedCluster::network();
6 auto memc
= &test
.memc
;
8 REQUIRE_SUCCESS(memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_NO_BLOCK
, 1));
9 REQUIRE_SUCCESS(memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL
, 1));
10 REQUIRE_SUCCESS(memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_TCP_NODELAY
, 0));
11 REQUIRE_SUCCESS(memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_POLL_TIMEOUT
, 20));
12 REQUIRE_SUCCESS(memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_RCV_TIMEOUT
, 20*1000));
13 REQUIRE_SUCCESS(memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_SND_TIMEOUT
, 20*1000));
14 REQUIRE_SUCCESS(memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT
, 60));
15 REQUIRE_SUCCESS(memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT
, 20));
18 memcached_return_t rc
;
23 auto rnd
= random_ascii_string(128);
25 REQUIRE_SUCCESS(memcached_flush(memc
, 0));
27 for (auto i
= 0; i
< num
; ++i
) {
28 auto setKey
= rnd
+ to_string(i
);
29 REQUIRE_SUCCESS(memcached_set(memc
, setKey
.c_str(), setKey
.length(), setKey
.c_str(),
30 setKey
.length(), 1, 0));
34 auto timeoutAchieved
= false;
35 for (auto i
= 0; i
< num
; ++i
) {
36 for (auto j
= 0; j
< i
; ++j
) {
37 auto getKey
= rnd
+ to_string(j
);
38 auto len
= getKey
.length();
39 char key
[MEMCACHED_MAX_KEY
];
40 memcpy(key
, getKey
.c_str(), len
+ 1);
41 const char *keys
[1] = {key
};
42 std::cerr
<< int(timeoutAchieved
);
44 REQUIRE_SUCCESS(memcached_mget(memc
, keys
, &len
, 1));
46 while (auto rv
= memcached_fetch(memc
, key
, nullptr, &len
, nullptr, &rc
)) {
47 REQUIRE(!timeoutAchieved
);
53 REQUIRE(numResults
== 1);
56 if (MEMCACHED_END
== rc
|| MEMCACHED_NOTFOUND
== rc
){
60 if (MEMCACHED_TIMEOUT
== rc
){
61 timeoutAchieved
= true;