|
|
|
@ -26,62 +26,99 @@ char *ares_strdup(const char*); |
|
|
|
|
namespace ares { |
|
|
|
|
namespace test { |
|
|
|
|
|
|
|
|
|
#ifndef CARES_SYMBOL_HIDING |
|
|
|
|
void CheckPtoN4(int size, unsigned int value, const char *input) { |
|
|
|
|
struct in_addr a4; |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
uint32_t expected = htonl(value); |
|
|
|
|
EXPECT_EQ(size, ares_inet_net_pton(AF_INET, input, &a4, sizeof(a4))) |
|
|
|
|
<< " for input " << input; |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr) << " for input " << input; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
TEST_F(LibraryTest, InetPtoN) { |
|
|
|
|
struct in_addr a4; |
|
|
|
|
struct in6_addr a6; |
|
|
|
|
|
|
|
|
|
#ifndef CARES_SYMBOL_HIDING |
|
|
|
|
uint32_t expected; |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(4 * 8, ares_inet_net_pton(AF_INET, "1.2.3.4", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0x01020304); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(4 * 8, ares_inet_net_pton(AF_INET, "129.1.1.1", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0x81010101); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(4 * 8, ares_inet_net_pton(AF_INET, "192.1.1.1", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0xC0010101); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(4 * 8, ares_inet_net_pton(AF_INET, "224.1.1.1", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0xE0010101); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(4 * 8, ares_inet_net_pton(AF_INET, "225.1.1.1", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0xE1010101); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(4 * 8, ares_inet_net_pton(AF_INET, "240.1.1.1", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0xF0010101); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
|
|
|
|
|
CheckPtoN4(4 * 8, 0x01020304, "1.2.3.4"); |
|
|
|
|
CheckPtoN4(4 * 8, 0x81010101, "129.1.1.1"); |
|
|
|
|
CheckPtoN4(4 * 8, 0xC0010101, "192.1.1.1"); |
|
|
|
|
CheckPtoN4(4 * 8, 0xE0010101, "224.1.1.1"); |
|
|
|
|
CheckPtoN4(4 * 8, 0xE1010101, "225.1.1.1"); |
|
|
|
|
CheckPtoN4(4, 0xE0000000, "224"); |
|
|
|
|
CheckPtoN4(4 * 8, 0xFD000000, "253"); |
|
|
|
|
CheckPtoN4(4 * 8, 0xF0010101, "240.1.1.1"); |
|
|
|
|
CheckPtoN4(4 * 8, 0x02030405, "02.3.4.5"); |
|
|
|
|
CheckPtoN4(3 * 8, 0x01020304, "1.2.3.4/24"); |
|
|
|
|
CheckPtoN4(3 * 8, 0x01020300, "1.2.3/24"); |
|
|
|
|
CheckPtoN4(2 * 8, 0xa0000000, "0xa"); |
|
|
|
|
CheckPtoN4(0, 0x02030405, "2.3.4.5/000"); |
|
|
|
|
CheckPtoN4(1 * 8, 0x01020000, "1.2/8"); |
|
|
|
|
CheckPtoN4(2 * 8, 0x01020000, "0x0102/16"); |
|
|
|
|
CheckPtoN4(4 * 8, 0x02030405, "02.3.4.5"); |
|
|
|
|
|
|
|
|
|
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "::", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "::1", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "1234:5678::", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "12:34::ff", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.4", &a6, sizeof(a6))); |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(3 * 8, ares_inet_net_pton(AF_INET, "1.2.3.4/24", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0x01020304); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(3 * 8, ares_inet_net_pton(AF_INET, "1.2.3/24", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0x01020300); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
a4.s_addr = 0; |
|
|
|
|
EXPECT_EQ(2 * 8, ares_inet_net_pton(AF_INET, "0x0102/16", &a4, sizeof(a4))); |
|
|
|
|
expected = htonl(0x01020000); |
|
|
|
|
EXPECT_EQ(expected, a4.s_addr); |
|
|
|
|
EXPECT_EQ(23, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.4/23", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(3 * 8, ares_inet_net_pton(AF_INET6, "12:34::ff/24", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(0, ares_inet_net_pton(AF_INET6, "12:34::ff/0", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "12:34::ffff:0.2", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234", &a6, sizeof(a6))); |
|
|
|
|
|
|
|
|
|
// Various malformed versions
|
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, " ", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "0x", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "0x ", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "x0", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "0xXYZZY", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "xyzzy", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET+AF_INET6, "1.2.3.4", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "257.2.3.4", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "002.3.4.x", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "00.3.4.x", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "2.3.4.x", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "2.3.4.5.6", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "2.3.4.5.6/12", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "2.3.4:5", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "2.3.4.5/120", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "2.3.4.5/1x", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "2.3.4.5/x", &a4, sizeof(a4))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ff/240", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ff/02", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ff/2y", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ff/y", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ff/", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, ":x", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, ":", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, ": :1234", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "::12345", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "1234::2345:3456::0011", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234::", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1.2.3.4", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, ":1234:1234:1234:1234:1234:1234:1234:1234", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, ":1234:1234:1234:1234:1234:1234:1234:1234:", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:5678", &a6, sizeof(a6))); |
|
|
|
|
// TODO(drysdale): check whether the next two tests should give -1.
|
|
|
|
|
EXPECT_EQ(0, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:5678:5678", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(0, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:5678:5678:5678", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:257.2.3.4", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:002.2.3.4", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.4.5.6", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.4.5", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.z", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3001.4", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3..4", &a6, sizeof(a6))); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.", &a6, sizeof(a6))); |
|
|
|
|
|
|
|
|
|
// Hex constants are allowed.
|
|
|
|
|
EXPECT_EQ(4 * 8, ares_inet_net_pton(AF_INET, "0x01020304", &a4, sizeof(a4))); |
|
|
|
@ -106,6 +143,7 @@ TEST_F(LibraryTest, InetPtoN) { |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "0x0a0b0c0d", &a4, 0)); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "0x0xyz", &a4, 0)); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "0x1122334", &a4, sizeof(a4) - 1)); |
|
|
|
|
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "253", &a4, sizeof(a4) - 1)); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
EXPECT_EQ(1, ares_inet_pton(AF_INET, "1.2.3.4", &a4)); |
|
|
|
|