travis: clang needs high resolution rnd seeds
[awesomized/libmemcached] / testing / tests / memcached / regression / lp434843.cpp
1 #include "testing/lib/common.hpp"
2 #include "testing/lib/MemcachedCluster.hpp"
3
4 static memcached_return_t callback_counter(const memcached_st *, memcached_result_st *, void *context) {
5 auto *counter= reinterpret_cast<size_t *>(context);
6 *counter = *counter + 1;
7
8 return MEMCACHED_SUCCESS;
9 }
10
11 #define NUM_KEYS 1024
12
13 TEST_CASE("memcached_regression_lp434843") {
14 MemcachedCluster test{Cluster{Server{MEMCACHED_BINARY, {"-p", random_port_string}}, 1}};
15 auto memc = &test.memc;
16 auto buffering = GENERATE(0, 1);
17
18 test.enableBinaryProto();
19 test.enableBuffering(buffering);
20
21 INFO("buffering: " << buffering);
22
23 size_t counter = 0;
24 memcached_execute_fn cb[] = {&callback_counter};
25
26 array<string, NUM_KEYS> str;
27 array<char *, NUM_KEYS> chr;
28 array<size_t, NUM_KEYS> len;
29
30 for (auto i = 0; i < NUM_KEYS; ++i) {
31 str[i] = random_ascii_string(36);
32 chr[i] = str[i].data();
33 len[i] = str[i].length();
34 cerr << str[i] << endl;
35 }
36
37 REQUIRE_SUCCESS(memcached_mget(memc, chr.data(), len.data(), NUM_KEYS));
38 REQUIRE_RC(MEMCACHED_NOTFOUND, memcached_fetch_execute(memc, cb, &counter, 1));
39 REQUIRE(counter == 0);
40
41 for (auto i = 0; i < NUM_KEYS; ++i) {
42 char data[1024];
43 REQUIRE_SUCCESS(memcached_add(memc, chr[i], len[i], data, sizeof(data), 0, 0));
44 }
45
46 REQUIRE_SUCCESS(memcached_mget(memc, chr.data(), len.data(), NUM_KEYS));
47 REQUIRE_SUCCESS( memcached_fetch_execute(memc, cb, &counter, 1));
48 REQUIRE(counter == NUM_KEYS);
49 }