Commit e9b540be authored by Jakob Otto's avatar Jakob Otto

Fix build and test on FreeBSD

parent bb8270b6
...@@ -27,6 +27,7 @@ namespace caf { ...@@ -27,6 +27,7 @@ namespace caf {
namespace detail { namespace detail {
void convert(const ip_endpoint& src, sockaddr_storage& dst) { void convert(const ip_endpoint& src, sockaddr_storage& dst) {
memset(&dst, 0, sizeof(sockaddr_storage));
if (src.address().embeds_v4()) { if (src.address().embeds_v4()) {
auto sockaddr4 = reinterpret_cast<sockaddr_in*>(&dst); auto sockaddr4 = reinterpret_cast<sockaddr_in*>(&dst);
sockaddr4->sin_family = AF_INET; sockaddr4->sin_family = AF_INET;
......
...@@ -37,22 +37,21 @@ namespace { ...@@ -37,22 +37,21 @@ namespace {
struct fixture : host_fixture { struct fixture : host_fixture {
fixture() : host_fixture() { fixture() : host_fixture() {
memset(&sockaddr6_src, 0, sizeof(sockaddr_in6)); memset(&sockaddr4_src, 0, sizeof(sockaddr_storage));
memset(&sockaddr6_dst, 0, sizeof(sockaddr_in6)); memset(&sockaddr6_src, 0, sizeof(sockaddr_storage));
sockaddr6_src.sin6_family = AF_INET6; auto sockaddr6_ptr = reinterpret_cast<sockaddr_in6*>(&sockaddr6_src);
sockaddr6_src.sin6_port = htons(23); sockaddr6_ptr->sin6_family = AF_INET6;
sockaddr6_src.sin6_addr = in6addr_loopback; sockaddr6_ptr->sin6_port = htons(23);
memset(&sockaddr4_src, 0, sizeof(sockaddr_in)); sockaddr6_ptr->sin6_addr = in6addr_loopback;
memset(&sockaddr4_dst, 0, sizeof(sockaddr_in)); auto sockaddr4_ptr = reinterpret_cast<sockaddr_in*>(&sockaddr4_src);
sockaddr4_src.sin_family = AF_INET; sockaddr4_ptr->sin_family = AF_INET;
sockaddr4_src.sin_port = htons(23); sockaddr4_ptr->sin_port = htons(23);
sockaddr4_src.sin_addr.s_addr = INADDR_LOOPBACK; sockaddr4_ptr->sin_addr.s_addr = INADDR_LOOPBACK;
} }
sockaddr_in6 sockaddr6_src; sockaddr_storage sockaddr6_src;
sockaddr_in6 sockaddr6_dst; sockaddr_storage sockaddr4_src;
sockaddr_in sockaddr4_src; sockaddr_storage dst;
sockaddr_in sockaddr4_dst;
ip_endpoint ep_src; ip_endpoint ep_src;
ip_endpoint ep_dst; ip_endpoint ep_dst;
}; };
...@@ -62,51 +61,43 @@ struct fixture : host_fixture { ...@@ -62,51 +61,43 @@ struct fixture : host_fixture {
CAF_TEST_FIXTURE_SCOPE(convert_ip_endpoint_tests, fixture) CAF_TEST_FIXTURE_SCOPE(convert_ip_endpoint_tests, fixture)
CAF_TEST(sockaddr_in6 roundtrip) { CAF_TEST(sockaddr_in6 roundtrip) {
ip_endpoint ep; ip_endpoint tmp;
CAF_MESSAGE("converting sockaddr_in6 to ip_endpoint"); CAF_MESSAGE("converting sockaddr_in6 to ip_endpoint");
CAF_CHECK_EQUAL(convert(reinterpret_cast<sockaddr_storage&>(sockaddr6_src), CAF_CHECK_EQUAL(convert(sockaddr6_src, tmp), none);
ep),
none);
CAF_MESSAGE("converting ip_endpoint to sockaddr_in6"); CAF_MESSAGE("converting ip_endpoint to sockaddr_in6");
convert(ep, reinterpret_cast<sockaddr_storage&>(sockaddr6_dst)); convert(tmp, dst);
CAF_CHECK_EQUAL(memcmp(&sockaddr6_src, &sockaddr6_dst, sizeof(sockaddr_in6)), CAF_CHECK_EQUAL(memcmp(&sockaddr6_src, &dst, sizeof(sockaddr_storage)), 0);
0);
} }
CAF_TEST(ipv6_endpoint roundtrip) { CAF_TEST(ipv6_endpoint roundtrip) {
sockaddr_storage addr; sockaddr_storage tmp = {};
memset(&addr, 0, sizeof(sockaddr_storage));
if (auto err = detail::parse("[::1]:55555", ep_src)) if (auto err = detail::parse("[::1]:55555", ep_src))
CAF_FAIL("unable to parse input: " << err); CAF_FAIL("unable to parse input: " << err);
CAF_MESSAGE("converting ip_endpoint to sockaddr_in6"); CAF_MESSAGE("converting ip_endpoint to sockaddr_in6");
convert(ep_src, addr); convert(ep_src, tmp);
CAF_MESSAGE("converting sockaddr_in6 to ip_endpoint"); CAF_MESSAGE("converting sockaddr_in6 to ip_endpoint");
CAF_CHECK_EQUAL(convert(addr, ep_dst), none); CAF_CHECK_EQUAL(convert(tmp, ep_dst), none);
CAF_CHECK_EQUAL(ep_src, ep_dst); CAF_CHECK_EQUAL(ep_src, ep_dst);
} }
CAF_TEST(sockaddr_in4 roundtrip) { CAF_TEST(sockaddr_in4 roundtrip) {
ip_endpoint ep; ip_endpoint tmp;
CAF_MESSAGE("converting sockaddr_in to ip_endpoint"); CAF_MESSAGE("converting sockaddr_in to ip_endpoint");
CAF_CHECK_EQUAL(convert(reinterpret_cast<sockaddr_storage&>(sockaddr4_src), CAF_CHECK_EQUAL(convert(sockaddr4_src, tmp), none);
ep),
none);
CAF_MESSAGE("converting ip_endpoint to sockaddr_in"); CAF_MESSAGE("converting ip_endpoint to sockaddr_in");
convert(ep, reinterpret_cast<sockaddr_storage&>(sockaddr4_dst)); convert(tmp, dst);
CAF_CHECK_EQUAL(memcmp(&sockaddr4_src, &sockaddr4_dst, sizeof(sockaddr_in)), CAF_CHECK_EQUAL(memcmp(&sockaddr4_src, &dst, sizeof(sockaddr_storage)), 0);
0);
} }
CAF_TEST(ipv4_endpoint roundtrip) { CAF_TEST(ipv4_endpoint roundtrip) {
sockaddr_storage addr; sockaddr_storage tmp = {};
memset(&addr, 0, sizeof(sockaddr_storage));
if (auto err = detail::parse("127.0.0.1:55555", ep_src)) if (auto err = detail::parse("127.0.0.1:55555", ep_src))
CAF_FAIL("unable to parse input: " << err); CAF_FAIL("unable to parse input: " << err);
CAF_MESSAGE("converting ip_endpoint to sockaddr_in"); CAF_MESSAGE("converting ip_endpoint to sockaddr_in");
convert(ep_src, addr); convert(ep_src, tmp);
CAF_MESSAGE("converting sockaddr_in to ip_endpoint"); CAF_MESSAGE("converting sockaddr_in to ip_endpoint");
CAF_CHECK_EQUAL(convert(addr, ep_dst), none); CAF_CHECK_EQUAL(convert(tmp, ep_dst), none);
CAF_CHECK_EQUAL(ep_src, ep_dst); CAF_CHECK_EQUAL(ep_src, ep_dst);
} }
CAF_TEST_FIXTURE_SCOPE_END(); CAF_TEST_FIXTURE_SCOPE_END()
...@@ -25,11 +25,11 @@ ...@@ -25,11 +25,11 @@
#include "host_fixture.hpp" #include "host_fixture.hpp"
#include "caf/detail/net_syscall.hpp" #include "caf/detail/net_syscall.hpp"
#include "caf/detail/socket_sys_includes.hpp"
#include "caf/ip_address.hpp" #include "caf/ip_address.hpp"
#include "caf/ip_endpoint.hpp" #include "caf/ip_endpoint.hpp"
#include "caf/ipv4_address.hpp" #include "caf/ipv4_address.hpp"
#include "caf/net/ip.hpp" #include "caf/net/ip.hpp"
#include "caf/net/socket_guard.hpp"
using namespace caf; using namespace caf;
using namespace caf::net; using namespace caf::net;
...@@ -70,11 +70,11 @@ CAF_TEST_FIXTURE_SCOPE(udp_datagram_socket_test, fixture) ...@@ -70,11 +70,11 @@ CAF_TEST_FIXTURE_SCOPE(udp_datagram_socket_test, fixture)
CAF_TEST(send and receive) { CAF_TEST(send and receive) {
std::vector<byte> buf(1024); std::vector<byte> buf(1024);
CAF_MESSAGE("sending data to: " << to_string(ep));
if (auto err = nonblocking(socket_cast<net::socket>(receive_socket), true)) if (auto err = nonblocking(socket_cast<net::socket>(receive_socket), true))
CAF_FAIL("nonblocking returned an error" << err); CAF_FAIL("nonblocking returned an error" << err);
CAF_CHECK_EQUAL(read(receive_socket, make_span(buf)), CAF_CHECK_EQUAL(read(receive_socket, make_span(buf)),
sec::unavailable_or_would_block); sec::unavailable_or_would_block);
CAF_MESSAGE("sending data to " << to_string(ep));
CAF_CHECK_EQUAL(write(send_socket, as_bytes(make_span(hello_test)), ep), CAF_CHECK_EQUAL(write(send_socket, as_bytes(make_span(hello_test)), ep),
hello_test.size()); hello_test.size());
variant<std::pair<size_t, ip_endpoint>, sec> read_ret; variant<std::pair<size_t, ip_endpoint>, sec> read_ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment