1 #include "test/lib/common.hpp"
2 #include "test/lib/Cluster.hpp"
3 #include "test/lib/Retry.hpp"
4 #include "test/lib/Server.hpp"
5 #include "test/lib/Connection.hpp"
7 TEST_CASE("lib/Server") {
8 Server server
{MEMCACHED_BINARY
, {
10 Server::arg_pair_t
{"-p", random_port_string
}
13 SECTION("starts and listens") {
15 REQUIRE(server
.start().has_value());
17 Retry server_is_listening
{[&server
] {
18 return server
.isListening();
20 REQUIRE(server_is_listening());
24 REQUIRE(server
.stop());
26 SECTION("is waitable") {
28 REQUIRE(server
.wait());
32 REQUIRE_FALSE(server
.check());
39 TEST_CASE("lib/Cluster") {
40 Cluster cluster
{Server
{MEMCACHED_BINARY
, {
41 random_socket_or_port_arg(),
44 SECTION("starts and listens") {
46 REQUIRE(cluster
.start());
48 Retry cluster_is_listening
{[&cluster
] {
49 return cluster
.isListening();
51 REQUIRE(cluster_is_listening());
60 REQUIRE(cluster
.isStopped());
66 TEST_CASE("lib/Connection") {
67 SECTION("sockaddr_un") {
69 Connection conn
{"/this/is/way/too/long/for/a/standard/unix/socket/path/living/on/this/system/at/least/i/hope/so/and/this/is/about/to/fail/for/the/sake/of/this/test.sock"};
75 Cluster cluster
{Server
{MEMCACHED_BINARY
,
77 random_socket_or_port_arg(),
79 REQUIRE(cluster
.start());
80 Retry cluster_is_listening
{[&cluster
] { return cluster
.isListening(); }};
81 REQUIRE(cluster_is_listening());
83 vector
<Connection
> conns
;
84 conns
.reserve(cluster
.getServers().size());
85 for (const auto &server
: cluster
.getServers()) {
86 REQUIRE(conns
.emplace_back(Connection
{server
.getSocketOrPort()}).open());
88 while (!conns
.empty()) {
89 vector
<Connection
> again
;
90 again
.reserve(conns
.size());
91 for (auto &conn
: conns
) {
93 REQUIRE(conn
.isWritable());
94 REQUIRE_FALSE(conn
.getError());
96 again
.emplace_back(move(conn
));