summaryrefslogtreecommitdiffstats
path: root/vespalib/src/tests/net/socket/socket_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vespalib/src/tests/net/socket/socket_test.cpp')
-rw-r--r--vespalib/src/tests/net/socket/socket_test.cpp134
1 files changed, 64 insertions, 70 deletions
diff --git a/vespalib/src/tests/net/socket/socket_test.cpp b/vespalib/src/tests/net/socket/socket_test.cpp
index bf0a5a2f273..c4b1e5286b2 100644
--- a/vespalib/src/tests/net/socket/socket_test.cpp
+++ b/vespalib/src/tests/net/socket/socket_test.cpp
@@ -74,7 +74,7 @@ vespalib::string get_meta(const SocketAddress &addr) {
return meta;
}
-vespalib::string read_bytes(Socket &socket, size_t wanted_bytes) {
+vespalib::string read_bytes(SocketHandle &socket, size_t wanted_bytes) {
char tmp[64];
vespalib::string result;
while (result.size() < wanted_bytes) {
@@ -88,7 +88,7 @@ vespalib::string read_bytes(Socket &socket, size_t wanted_bytes) {
return result;
}
-void verify_socket_io(bool is_server, Socket &socket) {
+void verify_socket_io(bool is_server, SocketHandle &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) {
@@ -104,7 +104,7 @@ void verify_socket_io(bool is_server, Socket &socket) {
}
}
-Socket::UP connect_sockets(bool is_server, ServerSocket &server_socket) {
+SocketHandle connect_sockets(bool is_server, ServerSocket &server_socket) {
if (is_server) {
return server_socket.accept();
} else {
@@ -113,7 +113,7 @@ Socket::UP connect_sockets(bool is_server, ServerSocket &server_socket) {
auto client = SocketSpec(spec).client_address();
fprintf(stderr, "connecting to '%s' (server: %s) (client: %s)\n",
spec.c_str(), get_meta(server).c_str(), get_meta(client).c_str());
- return Socket::connect(SocketSpec(spec));
+ return client.connect();
}
}
@@ -187,84 +187,79 @@ TEST("local client/server addresses") {
fprintf(stderr, "server(tcp/123): %s (%s)\n", server.spec().c_str(), get_meta(server).c_str());
}
-struct ServerWrapper {
- ServerSocket::UP server;
- ServerWrapper(const vespalib::string &spec) : server(ServerSocket::listen(SocketSpec(spec))) {}
-};
-
-TEST_MT_FF("require that basic socket io works", 2, ServerWrapper("tcp/0"), TimeBomb(60)) {
+TEST_MT_FF("require that basic socket io works", 2, ServerSocket("tcp/0"), TimeBomb(60)) {
bool is_server = (thread_id == 0);
- Socket::UP socket = connect_sockets(is_server, *f1.server);
- TEST_DO(verify_socket_io(is_server, *socket));
+ SocketHandle socket = connect_sockets(is_server, f1);
+ TEST_DO(verify_socket_io(is_server, socket));
}
TEST_MT_FF("require that basic unix domain socket io works (path)", 2,
- ServerWrapper("ipc/file:my_socket"), TimeBomb(60))
+ ServerSocket("ipc/file:my_socket"), TimeBomb(60))
{
bool is_server = (thread_id == 0);
- Socket::UP socket = connect_sockets(is_server, *f1.server);
- TEST_DO(verify_socket_io(is_server, *socket));
+ SocketHandle socket = connect_sockets(is_server, f1);
+ TEST_DO(verify_socket_io(is_server, socket));
}
TEST_MT_FF("require that basic unix domain socket io works (name)", 2,
- ServerWrapper(make_string("ipc/name:my_socket-%d", int(getpid()))), TimeBomb(60))
+ ServerSocket(make_string("ipc/name:my_socket-%d", int(getpid()))), TimeBomb(60))
{
bool is_server = (thread_id == 0);
- Socket::UP socket = connect_sockets(is_server, *f1.server);
- TEST_DO(verify_socket_io(is_server, *socket));
+ SocketHandle socket = connect_sockets(is_server, f1);
+ TEST_DO(verify_socket_io(is_server, socket));
}
-TEST_MT_FF("require that server accept can be interrupted", 2, ServerWrapper("tcp/0"), TimeBomb(60)) {
+TEST_MT_FF("require that server accept can be interrupted", 2, ServerSocket("tcp/0"), TimeBomb(60)) {
bool is_server = (thread_id == 0);
if (is_server) {
fprintf(stderr, "--> calling accept\n");
- Socket::UP socket = f1.server->accept();
+ SocketHandle socket = f1.accept();
fprintf(stderr, "<-- accept returned\n");
- EXPECT_TRUE(!socket->valid());
+ EXPECT_TRUE(!socket.valid());
} else {
std::this_thread::sleep_for(std::chrono::milliseconds(500));
fprintf(stderr, "--- closing server socket\n");
- f1.server->shutdown();
+ f1.shutdown();
}
}
TEST("require that socket file is removed by server socket when destructed") {
remove_file("my_socket");
- ServerSocket::UP server = ServerSocket::listen(SocketSpec("ipc/file:my_socket"));
- EXPECT_TRUE(server->valid());
+ ServerSocket server("ipc/file:my_socket");
+ EXPECT_TRUE(server.valid());
EXPECT_TRUE(is_socket("my_socket"));
- server.reset();
+ server = ServerSocket("invalid");
EXPECT_TRUE(!is_socket("my_socket"));
}
TEST("require that socket file is only removed on destruction if it is a socket") {
remove_file("my_socket");
- ServerSocket::UP server = ServerSocket::listen(SocketSpec("ipc/file:my_socket"));
- EXPECT_TRUE(server->valid());
+ ServerSocket server("ipc/file:my_socket");
+ EXPECT_TRUE(server.valid());
EXPECT_TRUE(is_socket("my_socket"));
replace_file("my_socket", "hello\n");
- server.reset();
+ server = ServerSocket("invalid");
EXPECT_TRUE(is_file("my_socket"));
remove_file("my_socket");
}
TEST("require that a server socket will fail to listen to a path that is already a regular file") {
replace_file("my_socket", "hello\n");
- ServerSocket::UP server = ServerSocket::listen(SocketSpec("ipc/file:my_socket"));
- EXPECT_TRUE(!server->valid());
- server.reset();
+ ServerSocket server("ipc/file:my_socket");
+ EXPECT_TRUE(!server.valid());
+ server = ServerSocket("invalid");
EXPECT_TRUE(is_file("my_socket"));
remove_file("my_socket");
}
TEST("require that a server socket will fail to listen to a path that is already taken by another server") {
remove_file("my_socket");
- ServerSocket::UP server1 = ServerSocket::listen(SocketSpec("ipc/file:my_socket"));
- ServerSocket::UP server2 = ServerSocket::listen(SocketSpec("ipc/file:my_socket"));
- EXPECT_TRUE(server1->valid());
- EXPECT_TRUE(!server2->valid());
+ ServerSocket server1("ipc/file:my_socket");
+ ServerSocket server2("ipc/file:my_socket");
+ EXPECT_TRUE(server1.valid());
+ EXPECT_TRUE(!server2.valid());
EXPECT_TRUE(is_socket("my_socket"));
- server1.reset();
+ server1 = ServerSocket("invalid");
EXPECT_TRUE(!is_socket("my_socket"));
}
@@ -275,55 +270,54 @@ TEST("require that a server socket will remove an old socket file if it cannot b
EXPECT_TRUE(is_socket("my_socket"));
}
EXPECT_TRUE(is_socket("my_socket"));
- ServerSocket::UP server = ServerSocket::listen(SocketSpec("ipc/file:my_socket"));
- EXPECT_TRUE(server->valid());
- server.reset();
+ ServerSocket server("ipc/file:my_socket");
+ EXPECT_TRUE(server.valid());
+ server = ServerSocket("invalid");
EXPECT_TRUE(!is_socket("my_socket"));
}
TEST("require that two server sockets cannot have the same abstract unix domain socket name") {
vespalib::string spec = make_string("ipc/name:my_socket-%d", int(getpid()));
- ServerSocket::UP server1 = ServerSocket::listen(SocketSpec(spec));
- ServerSocket::UP server2 = ServerSocket::listen(SocketSpec(spec));
- EXPECT_TRUE(server1->valid());
- EXPECT_TRUE(!server2->valid());
+ ServerSocket server1(spec);
+ ServerSocket server2(spec);
+ EXPECT_TRUE(server1.valid());
+ EXPECT_TRUE(!server2.valid());
}
TEST("require that abstract socket names are freed when the server socket is destructed") {
vespalib::string spec = make_string("ipc/name:my_socket-%d", int(getpid()));
- ServerSocket::UP server1 = ServerSocket::listen(SocketSpec(spec));
- EXPECT_TRUE(server1->valid());
- server1.reset();
- ServerSocket::UP server2 = ServerSocket::listen(SocketSpec(spec));
- EXPECT_TRUE(server2->valid());
+ ServerSocket server1(spec);
+ EXPECT_TRUE(server1.valid());
+ server1 = ServerSocket("invalid");
+ ServerSocket server2(spec);
+ EXPECT_TRUE(server2.valid());
}
TEST("require that abstract sockets do not have socket files") {
vespalib::string name = make_string("my_socket-%d", int(getpid()));
- vespalib::string spec = make_string("ipc/name:%s", name.c_str());
- ServerSocket::UP server = ServerSocket::listen(SocketSpec(spec));
- EXPECT_TRUE(server->valid());
+ ServerSocket server(SocketSpec::from_name(name));
+ EXPECT_TRUE(server.valid());
EXPECT_TRUE(!is_socket(name));
EXPECT_TRUE(!is_file(name));
}
TEST_MT_FFF("require that abstract and file-based unix domain sockets are not in conflict", 4,
- ServerWrapper(make_string("ipc/file:my_socket-%d", int(getpid()))),
- ServerWrapper(make_string("ipc/name:my_socket-%d", int(getpid()))), TimeBomb(60))
+ ServerSocket(make_string("ipc/file:my_socket-%d", int(getpid()))),
+ ServerSocket(make_string("ipc/name:my_socket-%d", int(getpid()))), TimeBomb(60))
{
bool is_server = ((thread_id % 2) == 0);
- ServerSocket &server_socket = ((thread_id / 2) == 0) ? *f1.server : *f2.server;
- Socket::UP socket = connect_sockets(is_server, server_socket);
- TEST_DO(verify_socket_io(is_server, *socket));
+ ServerSocket &server_socket = ((thread_id / 2) == 0) ? f1 : f2;
+ SocketHandle socket = connect_sockets(is_server, server_socket);
+ TEST_DO(verify_socket_io(is_server, socket));
}
TEST("require that sockets can be set blocking and non-blocking") {
SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0));
test::SocketOptionsVerifier verifier(handle.get());
EXPECT_TRUE(!SocketOptions::set_blocking(-1, true));
- EXPECT_TRUE(SocketOptions::set_blocking(handle.get(), true));
+ EXPECT_TRUE(handle.set_blocking(true));
TEST_DO(verifier.verify_blocking(true));
- EXPECT_TRUE(SocketOptions::set_blocking(handle.get(), false));
+ EXPECT_TRUE(handle.set_blocking(false));
TEST_DO(verifier.verify_blocking(false));
}
@@ -331,9 +325,9 @@ TEST("require that tcp nodelay can be enabled and disabled") {
SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0));
test::SocketOptionsVerifier verifier(handle.get());
EXPECT_TRUE(!SocketOptions::set_nodelay(-1, true));
- EXPECT_TRUE(SocketOptions::set_nodelay(handle.get(), true));
+ EXPECT_TRUE(handle.set_nodelay(true));
TEST_DO(verifier.verify_nodelay(true));
- EXPECT_TRUE(SocketOptions::set_nodelay(handle.get(), false));
+ EXPECT_TRUE(handle.set_nodelay(false));
TEST_DO(verifier.verify_nodelay(false));
}
@@ -341,9 +335,9 @@ TEST("require that reuse addr can be set and cleared") {
SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0));
test::SocketOptionsVerifier verifier(handle.get());
EXPECT_TRUE(!SocketOptions::set_reuse_addr(-1, true));
- EXPECT_TRUE(SocketOptions::set_reuse_addr(handle.get(), true));
+ EXPECT_TRUE(handle.set_reuse_addr(true));
TEST_DO(verifier.verify_reuse_addr(true));
- EXPECT_TRUE(SocketOptions::set_reuse_addr(handle.get(), false));
+ EXPECT_TRUE(handle.set_reuse_addr(false));
TEST_DO(verifier.verify_reuse_addr(false));
}
@@ -352,9 +346,9 @@ TEST("require that ipv6_only can be set and cleared") {
SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0));
test::SocketOptionsVerifier verifier(handle.get());
EXPECT_TRUE(!SocketOptions::set_ipv6_only(-1, true));
- EXPECT_TRUE(SocketOptions::set_ipv6_only(handle.get(), true));
+ EXPECT_TRUE(handle.set_ipv6_only(true));
TEST_DO(verifier.verify_ipv6_only(true));
- EXPECT_TRUE(SocketOptions::set_ipv6_only(handle.get(), false));
+ EXPECT_TRUE(handle.set_ipv6_only(false));
TEST_DO(verifier.verify_ipv6_only(false));
} else {
fprintf(stderr, "WARNING: skipping ipv6_only test since ipv6 is disabled");
@@ -365,9 +359,9 @@ TEST("require that tcp keepalive can be set and cleared") {
SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0));
test::SocketOptionsVerifier verifier(handle.get());
EXPECT_TRUE(!SocketOptions::set_keepalive(-1, true));
- EXPECT_TRUE(SocketOptions::set_keepalive(handle.get(), true));
+ EXPECT_TRUE(handle.set_keepalive(true));
TEST_DO(verifier.verify_keepalive(true));
- EXPECT_TRUE(SocketOptions::set_keepalive(handle.get(), false));
+ EXPECT_TRUE(handle.set_keepalive(false));
TEST_DO(verifier.verify_keepalive(false));
}
@@ -375,13 +369,13 @@ TEST("require that tcp lingering can be adjusted") {
SocketHandle handle(socket(my_inet(), SOCK_STREAM, 0));
test::SocketOptionsVerifier verifier(handle.get());
EXPECT_TRUE(!SocketOptions::set_linger(-1, true, 0));
- EXPECT_TRUE(SocketOptions::set_linger(handle.get(), true, 0));
+ EXPECT_TRUE(handle.set_linger(true, 0));
TEST_DO(verifier.verify_linger(true, 0));
- EXPECT_TRUE(SocketOptions::set_linger(handle.get(), true, 10));
+ EXPECT_TRUE(handle.set_linger(true, 10));
TEST_DO(verifier.verify_linger(true, 10));
- EXPECT_TRUE(SocketOptions::set_linger(handle.get(), false, 0));
+ EXPECT_TRUE(handle.set_linger(false, 0));
TEST_DO(verifier.verify_linger(false, 0));
- EXPECT_TRUE(SocketOptions::set_linger(handle.get(), false, 10));
+ EXPECT_TRUE(handle.set_linger(false, 10));
TEST_DO(verifier.verify_linger(false, 0));
}