ddnet/src/test/net.cpp
def 6691be1d90 Run unit tests with sanitizers (fixes #6205)
Also fix memory leak in Net.Ipv4AndIpv6Work

Rust tests fail to link when building in san directory, works in source
directory.
2022-12-30 23:35:22 +01:00

51 lines
1.2 KiB
C++

#include <gtest/gtest.h>
#include <base/system.h>
TEST(Net, Ipv4AndIpv6Work)
{
NETADDR Bindaddr = {};
NETSOCKET Socket1;
NETSOCKET Socket2;
Bindaddr.type = NETTYPE_IPV4 | NETTYPE_IPV6;
Socket2 = net_udp_create(Bindaddr);
do
{
Bindaddr.port = secure_rand() % 64511 + 1024;
} while(!(Socket1 = net_udp_create(Bindaddr)));
NETADDR LocalhostV4;
NETADDR LocalhostV6;
NETADDR TargetV4;
NETADDR TargetV6;
ASSERT_FALSE(net_addr_from_str(&LocalhostV4, "127.0.0.1"));
ASSERT_FALSE(net_addr_from_str(&LocalhostV6, "[::1]"));
TargetV4 = LocalhostV4;
TargetV6 = LocalhostV6;
TargetV4.port = Bindaddr.port;
TargetV6.port = Bindaddr.port;
NETADDR Addr;
unsigned char *pData;
EXPECT_EQ(net_udp_send(Socket2, &TargetV4, "abc", 3), 3);
EXPECT_EQ(net_socket_read_wait(Socket1, 10000000), 1);
ASSERT_EQ(net_udp_recv(Socket1, &Addr, &pData), 3);
Addr.port = 0;
EXPECT_EQ(Addr, LocalhostV4);
EXPECT_EQ(mem_comp(pData, "abc", 3), 0);
EXPECT_EQ(net_udp_send(Socket2, &TargetV6, "def", 3), 3);
EXPECT_EQ(net_socket_read_wait(Socket1, 10000000), 1);
ASSERT_EQ(net_udp_recv(Socket1, &Addr, &pData), 3);
Addr.port = 0;
EXPECT_EQ(Addr, LocalhostV6);
EXPECT_EQ(mem_comp(pData, "def", 3), 0);
net_udp_close(Socket1);
net_udp_close(Socket2);
}