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

86 lines
1.7 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 socket_guard
#include "caf/net/socket_guard.hpp"
#include "caf/test/dsl.hpp"
#include "caf/net/socket_id.hpp"
using namespace caf;
using namespace caf::net;
namespace {
constexpr socket_id dummy_id = 13;
struct dummy_socket {
dummy_socket(socket_id id, bool& closed) : id(id), closed(closed) {
// nop
}
dummy_socket(const dummy_socket&) = default;
dummy_socket& operator=(const dummy_socket& other) {
id = other.id;
closed = other.closed;
return *this;
}
socket_id id;
bool& closed;
};
void close(dummy_socket x) {
x.id = invalid_socket_id;
x.closed = true;
}
struct fixture {
fixture() : closed{false}, sock{dummy_id, closed} {
// nop
}
bool closed;
dummy_socket sock;
};
} // namespace
CAF_TEST_FIXTURE_SCOPE(socket_guard_tests, fixture)
CAF_TEST(cleanup) {
{
auto guard = make_socket_guard(sock);
CAF_CHECK_EQUAL(guard.socket().id, dummy_id);
}
CAF_CHECK(sock.closed);
}
CAF_TEST(reset) {
{
auto guard = make_socket_guard(sock);
CAF_CHECK_EQUAL(guard.socket().id, dummy_id);
guard.release();
CAF_CHECK_EQUAL(guard.socket().id, invalid_socket_id);
guard.reset(sock);
CAF_CHECK_EQUAL(guard.socket().id, dummy_id);
}
CAF_CHECK_EQUAL(sock.closed, true);
}
CAF_TEST(release) {
{
auto guard = make_socket_guard(sock);
CAF_CHECK_EQUAL(guard.socket().id, dummy_id);
guard.release();
CAF_CHECK_EQUAL(guard.socket().id, invalid_socket_id);
}
CAF_CHECK_EQUAL(sock.closed, false);
}
CAF_TEST_FIXTURE_SCOPE_END()