testing: re-enable udp test on mac [travis skip]
[awesomized/libmemcached] / test / tests / bin / memcp.cpp
1 #include "test/lib/common.hpp"
2 #include "test/lib/Shell.hpp"
3 #include "test/lib/Server.hpp"
4 #include "test/lib/Retry.hpp"
5 #include "test/lib/ReturnMatcher.hpp"
6
7 using Catch::Matchers::Contains;
8
9 TEST_CASE("bin/memcp") {
10 Shell sh{string{TESTING_ROOT "/../src/bin"}};
11
12 SECTION("no servers provided") {
13 string output;
14 REQUIRE_FALSE(sh.run("memcp nonexistent", output));
15 REQUIRE(output == "No Servers provided\n");
16 }
17
18 SECTION("--help") {
19 string output;
20 REQUIRE(sh.run("memcp --help", output));
21 REQUIRE_THAT(output, Contains("memcp"));
22 REQUIRE_THAT(output, Contains("v1"));
23 REQUIRE_THAT(output, Contains("help"));
24 REQUIRE_THAT(output, Contains("version"));
25 REQUIRE_THAT(output, Contains("option"));
26 REQUIRE_THAT(output, Contains("--"));
27 REQUIRE_THAT(output, Contains("="));
28 }
29
30 SECTION("with server") {
31 Server server{MEMCACHED_BINARY, {"-p", random_port_string}};
32 MemcachedPtr memc;
33 LoneReturnMatcher test{*memc};
34
35 REQUIRE(server.ensureListening());
36 auto port = get<int>(server.getSocketOrPort());
37 auto comm = "memcp --servers=localhost:" + to_string(port) + " ";
38
39 REQUIRE_SUCCESS(memcached_server_add(*memc, "localhost", port));
40
41 SECTION("okay") {
42 Tempfile temp;
43 temp.put(S("123"));
44
45 string output;
46 REQUIRE(sh.run(comm + temp.getFn(), output));
47 REQUIRE(output == "");
48
49 size_t len;
50 memcached_return_t rc;
51 Malloced val(memcached_get(*memc, S(temp.getFn()), &len, nullptr, &rc));
52
53 REQUIRE(*val);
54 REQUIRE_SUCCESS(rc);
55 REQUIRE(string(*val, len) == "123");
56 }
57
58 SECTION("connection failure") {
59 server.signal(SIGKILL);
60 server.wait();
61
62 Tempfile temp;
63
64 string output;
65 REQUIRE_FALSE(sh.run(comm + temp.getFn(), output));
66 REQUIRE_THAT(output, Contains("CONNECTION FAILURE"));
67 }
68
69 SECTION("file not found") {
70 string output;
71 REQUIRE_FALSE(sh.run(comm + "nonexistent", output));
72 REQUIRE_THAT(output, Contains("No such file or directory"));
73 }
74 }
75 }