X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=test%2Ftests%2Flib.cpp;h=7d6143bd210d0b2c3212f5b5dc8cf3295c022bfc;hb=2f4e1833d236264f6d4d19ac1ce58c76b55c3ec6;hp=aac8f436705a9465bacfc43973b42518003e563a;hpb=9f262c9ea92d4869715ca6f534c80075a8310ac1;p=awesomized%2Flibmemcached diff --git a/test/tests/lib.cpp b/test/tests/lib.cpp index aac8f436..7d6143bd 100644 --- a/test/tests/lib.cpp +++ b/test/tests/lib.cpp @@ -2,18 +2,20 @@ #include "test/lib/Cluster.hpp" #include "test/lib/Retry.hpp" #include "test/lib/Server.hpp" +#include "test/lib/Connection.hpp" TEST_CASE("lib/Server") { - Server server{MEMCACHED_BINARY, {Server::arg_t{"-v"}}}; + Server server{MEMCACHED_BINARY, { + Server::arg_t{"-v"}, + Server::arg_pair_t{"-p", random_port_string} + }}; SECTION("starts and listens") { REQUIRE(server.start().has_value()); - - Retry server_is_listening{[&server] { - return server.isListening(); - }}; - REQUIRE(server_is_listening()); + REQUIRE(server.ensureListening()); + REQUIRE(server.isListening()); + REQUIRE(server.check()); SECTION("stops") { @@ -26,6 +28,7 @@ TEST_CASE("lib/Server") { SECTION("stopped") { REQUIRE_FALSE(server.check()); + REQUIRE_FALSE(server.isListening()); } } } @@ -40,11 +43,8 @@ TEST_CASE("lib/Cluster") { SECTION("starts and listens") { REQUIRE(cluster.start()); - - Retry cluster_is_listening{[&cluster] { - return cluster.isListening(); - }}; - REQUIRE(cluster_is_listening()); + REQUIRE(cluster.ensureListening()); + REQUIRE(cluster.isListening()); SECTION("stops") { @@ -54,7 +54,46 @@ TEST_CASE("lib/Cluster") { SECTION("stopped") { REQUIRE(cluster.isStopped()); + REQUIRE_FALSE(cluster.isListening()); + } + } + } +} + +TEST_CASE("lib/Connection") { + SECTION("sockaddr_un") { + auto f = []{ + 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"}; + return conn; + }; + REQUIRE_THROWS(f()); + } + SECTION("connect") { + Cluster cluster{Server{MEMCACHED_BINARY, + { + random_socket_or_port_arg(), + }}}; + REQUIRE(cluster.start()); + Retry cluster_is_listening{[&cluster] { return cluster.isListening(); }}; + REQUIRE(cluster_is_listening()); + + vector conns; + conns.reserve(cluster.getServers().size()); + for (const auto &server : cluster.getServers()) { + CHECK_NOFAIL(conns.emplace_back(Connection{server.getSocketOrPort()}).open()); + } + while (!conns.empty()) { + vector again; + again.reserve(conns.size()); + for (auto &conn : conns) { + if (conn.isOpen()) { + REQUIRE(conn.isWritable()); + REQUIRE_FALSE(conn.getError()); + } else { + again.emplace_back(move(conn)); + } } + conns.swap(again); } } }