2021-04-17 14:03:12 +00:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
|
|
#include <base/system.h>
|
|
|
|
|
|
|
|
TEST(NetAddr, FromStr)
|
|
|
|
{
|
|
|
|
NETADDR Addr;
|
|
|
|
char aBuf1[NETADDR_MAXSTRSIZE];
|
|
|
|
char aBuf2[NETADDR_MAXSTRSIZE];
|
|
|
|
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "127.0.0.1"));
|
|
|
|
net_addr_str(&Addr, aBuf1, sizeof(aBuf1), true);
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf1, "127.0.0.1:0");
|
|
|
|
EXPECT_STREQ(aBuf2, "127.0.0.1");
|
|
|
|
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "1.2.3.4:5678"));
|
|
|
|
net_addr_str(&Addr, aBuf1, sizeof(aBuf1), true);
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf1, "1.2.3.4:5678");
|
|
|
|
EXPECT_STREQ(aBuf2, "1.2.3.4");
|
|
|
|
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "[::1]"));
|
|
|
|
net_addr_str(&Addr, aBuf1, sizeof(aBuf1), true);
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
2021-05-05 16:22:52 +00:00
|
|
|
EXPECT_STREQ(aBuf1, "[::1]:0");
|
|
|
|
EXPECT_STREQ(aBuf2, "[::1]");
|
2021-04-17 14:03:12 +00:00
|
|
|
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "[0123:4567:89ab:cdef:1:2:3:4]:5678"));
|
|
|
|
net_addr_str(&Addr, aBuf1, sizeof(aBuf1), true);
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf1, "[123:4567:89ab:cdef:1:2:3:4]:5678");
|
|
|
|
EXPECT_STREQ(aBuf2, "[123:4567:89ab:cdef:1:2:3:4]");
|
|
|
|
}
|
|
|
|
|
2021-05-05 16:22:52 +00:00
|
|
|
TEST(NetAddr, StrV6)
|
|
|
|
{
|
|
|
|
NETADDR Addr;
|
|
|
|
char aBuf1[NETADDR_MAXSTRSIZE];
|
|
|
|
char aBuf2[NETADDR_MAXSTRSIZE];
|
|
|
|
|
|
|
|
// Test vectors from RFC 5952 section 4:
|
|
|
|
// https://tools.ietf.org/html/rfc5952#section-4
|
|
|
|
// 4.1 Handling Leading Zeros in a 16-Bit Field
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "[2001:0db8::0001]:1"));
|
|
|
|
net_addr_str(&Addr, aBuf1, sizeof(aBuf1), true);
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf1, "[2001:db8::1]:1");
|
|
|
|
EXPECT_STREQ(aBuf2, "[2001:db8::1]");
|
|
|
|
|
|
|
|
// 4.2.1 Shorten as Much as Possible
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "[2001:db8:0:0:0:0:2:1]"));
|
|
|
|
net_addr_str(&Addr, aBuf1, sizeof(aBuf1), true);
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf1, "[2001:db8::2:1]:0");
|
|
|
|
EXPECT_STREQ(aBuf2, "[2001:db8::2:1]");
|
|
|
|
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "[2001:db8::0:1]"));
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf2, "[2001:db8::1]");
|
|
|
|
|
|
|
|
// 4.2.2 Handling One 16-Bit 0 Field
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "[2001:db8::1:1:1:1:1]"));
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf2, "[2001:db8:0:1:1:1:1:1]");
|
|
|
|
|
|
|
|
// 4.2.3 Choice in Placement of "::"
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "[2001:0:0:1:0:0:0:1]"));
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf2, "[2001:0:0:1::1]");
|
|
|
|
|
|
|
|
EXPECT_FALSE(net_addr_from_str(&Addr, "[2001:db8:0:0:1:0:0:1]"));
|
|
|
|
net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false);
|
|
|
|
EXPECT_STREQ(aBuf2, "[2001:db8::1:0:0:1]");
|
|
|
|
}
|
|
|
|
|
2021-04-17 14:03:12 +00:00
|
|
|
TEST(NetAddr, FromStrInvalid)
|
|
|
|
{
|
|
|
|
NETADDR Addr;
|
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "127.0.0."));
|
2021-07-26 10:48:12 +00:00
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "127.0.0.1a"));
|
2021-04-17 14:03:12 +00:00
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "1.1"));
|
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "[::1"));
|
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "[::"));
|
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "127.0.0.1:"));
|
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "[::]:"));
|
2021-07-26 10:48:12 +00:00
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "127.0.0.1:1a"));
|
2021-04-17 14:03:12 +00:00
|
|
|
EXPECT_TRUE(net_addr_from_str(&Addr, "[::]:c"));
|
|
|
|
}
|