zeek/auxil/broker/caf/libcaf_net/test/tcp_sockets.cpp
Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

66 lines
1.8 KiB
C++

// This file is part of CAF, the C++ Actor Framework. See the file LICENSE in
// the main distribution directory for license terms and copyright or visit
// https://github.com/actor-framework/actor-framework/blob/master/LICENSE.
#define CAF_SUITE tcp_sockets
#include "caf/net/tcp_accept_socket.hpp"
#include "caf/net/tcp_stream_socket.hpp"
#include "caf/net/test/host_fixture.hpp"
#include "caf/test/dsl.hpp"
#include "caf/net/socket_guard.hpp"
using namespace caf;
using namespace caf::net;
namespace {
// TODO: switch to std::operator""s when switching to C++14
std::string operator"" _s(const char* str, size_t size) {
return std::string(str, size);
}
struct fixture : host_fixture {
fixture() {
auth.port = 0;
auth.host = "0.0.0.0"_s;
}
uri::authority_type auth;
};
} // namespace
CAF_TEST_FIXTURE_SCOPE(tcp_sockets_tests, fixture)
CAF_TEST(open tcp port) {
auto acceptor = unbox(make_tcp_accept_socket(auth, false));
auto port = unbox(local_port(acceptor));
CAF_CHECK_NOT_EQUAL(port, 0);
auto acceptor_guard = make_socket_guard(acceptor);
CAF_MESSAGE("opened acceptor on port " << port);
}
CAF_TEST(tcp connect) {
auto acceptor = unbox(make_tcp_accept_socket(auth, false));
auto port = unbox(local_port(acceptor));
CAF_CHECK_NOT_EQUAL(port, 0);
auto acceptor_guard = make_socket_guard(acceptor);
CAF_MESSAGE("opened acceptor on port " << port);
uri::authority_type dst;
dst.port = port;
dst.host = "localhost"_s;
CAF_MESSAGE("connecting to localhost");
auto conn = unbox(make_connected_tcp_stream_socket(dst));
auto conn_guard = make_socket_guard(conn);
CAF_CHECK_NOT_EQUAL(conn, invalid_socket);
auto accepted = unbox(accept(acceptor));
auto accepted_guard = make_socket_guard(conn);
CAF_CHECK_NOT_EQUAL(accepted, invalid_socket);
CAF_MESSAGE("connected");
}
CAF_TEST_FIXTURE_SCOPE_END()