diff options
author | Haavard <havardpe@yahoo-inc.com> | 2016-06-30 10:17:13 +0000 |
---|---|---|
committer | Haavard <havardpe@yahoo-inc.com> | 2016-08-05 10:25:21 +0000 |
commit | 22f708430ea9f8bf12fdd909814e96992e830e30 (patch) | |
tree | 0e4b7ddb5d56d5cd7491726d4cb1c3f0421c6363 /vespalib/src/tests/net/socket | |
parent | fb67e1d9300d80e9c4fa9e3c144c9f7406da9bb6 (diff) |
basic support for unix domain sockets
Diffstat (limited to 'vespalib/src/tests/net/socket')
-rw-r--r-- | vespalib/src/tests/net/socket/socket_test.cpp | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/vespalib/src/tests/net/socket/socket_test.cpp b/vespalib/src/tests/net/socket/socket_test.cpp index f14f7b13475..8f77f12876c 100644 --- a/vespalib/src/tests/net/socket/socket_test.cpp +++ b/vespalib/src/tests/net/socket/socket_test.cpp @@ -15,7 +15,7 @@ vespalib::string read_bytes(Socket &socket, size_t wanted_bytes) { vespalib::string result; while (result.size() < wanted_bytes) { size_t read_size = std::min(sizeof(tmp), wanted_bytes - result.size()); - size_t read_result = socket.read(tmp, read_size); + ssize_t read_result = socket.read(tmp, read_size); if (read_result <= 0) { return result; } @@ -28,11 +28,13 @@ void verify_socket_io(bool is_server, Socket &socket) { vespalib::string server_message = "hello, this is the server speaking"; vespalib::string client_message = "please pick up, I need to talk to you"; if(is_server) { - socket.write(server_message.data(), server_message.size()); + ssize_t written = socket.write(server_message.data(), server_message.size()); + EXPECT_EQUAL(written, server_message.size()); vespalib::string read = read_bytes(socket, client_message.size()); EXPECT_EQUAL(client_message, read); } else { - socket.write(client_message.data(), client_message.size()); + ssize_t written = socket.write(client_message.data(), client_message.size()); + EXPECT_EQUAL(written, client_message.size()); vespalib::string read = read_bytes(socket, server_message.size()); EXPECT_EQUAL(server_message, read); } @@ -42,7 +44,12 @@ Socket::UP connect_sockets(bool is_server, ServerSocket &server_socket) { if (is_server) { return server_socket.accept(); } else { - return Socket::connect("localhost", server_socket.address().port()); + SocketAddress server_address = server_socket.address(); + if (server_address.is_ipc()) { + return Socket::connect(server_address.path()); + } else { + return Socket::connect("localhost", server_address.port()); + } } } @@ -64,6 +71,14 @@ TEST("yahoo.com address") { } } +TEST("ipc address") { + auto addr = SocketAddress::from_path("my_socket"); + EXPECT_TRUE(addr.is_ipc()); + EXPECT_EQUAL(vespalib::string("my_socket"), addr.path()); + fprintf(stderr, "from_path(my_socket)\n"); + fprintf(stderr, " %s\n", addr.spec().c_str()); +} + struct ServerWrapper { ServerSocket::UP server = ServerSocket::listen(0); }; @@ -88,4 +103,25 @@ TEST_MT_F("require that server accept can be interrupted", 2, ServerWrapper) { } } +struct IpcServerWrapper { + vespalib::string server_path; + ServerSocket::UP server; + IpcServerWrapper(const vespalib::string &server_path_in) + : server_path(server_path_in), server() + { + unlink(server_path.c_str()); + server = ServerSocket::listen(server_path); + } + ~IpcServerWrapper() { + server.reset(); + unlink(server_path.c_str()); + } +}; + +TEST_MT_F("require that basic unix domain socket io works", 2, IpcServerWrapper("my_socket")) { + bool is_server = (thread_id == 0); + Socket::UP socket = connect_sockets(is_server, *f1.server); + TEST_DO(verify_socket_io(is_server, *socket)); +} + TEST_MAIN() { TEST_RUN_ALL(); } |