aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/tests/net/socket
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2016-06-30 10:17:13 +0000
committerHaavard <havardpe@yahoo-inc.com>2016-08-05 10:25:21 +0000
commit22f708430ea9f8bf12fdd909814e96992e830e30 (patch)
tree0e4b7ddb5d56d5cd7491726d4cb1c3f0421c6363 /vespalib/src/tests/net/socket
parentfb67e1d9300d80e9c4fa9e3c144c9f7406da9bb6 (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.cpp44
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(); }