Skip to content

Commit 97e6a7f

Browse files
author
MarcoFalke
committed
Merge #21477: test: Add test for CNetAddr::ToString IPv6 address formatting (RFC 5952)
732c7bd tests: Add test for CNetAddr::ToString IPv6 address formatting (RFC 5952) (practicalswift) Pull request description: Test that `CNetAddr::ToString` formats IPv6 addresses with zero compression and canonicalisation as described in [RFC 5952 ("A Recommendation for IPv6 Address Text Representation")](https://tools.ietf.org/html/rfc5952). Solving #21466 will hopefully be trivial with the ability to check zero compression correctness against these tests. ACKs for top commit: vasild: ACK 732c7bd Tree-SHA512: 31a1378aa435ba4171490a2e15d7280a175292270eb001b47d367e010c6ac9b83420b82bbeab22211f8f500c69e21878047c87adf216263b3420b6bb2a5d2bfb
2 parents ea3c9a9 + 732c7bd commit 97e6a7f

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

src/test/net_tests.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,60 @@ BOOST_AUTO_TEST_CASE(cnetaddr_basic)
396396
BOOST_CHECK(!addr.SetSpecial("totally bogus"));
397397
}
398398

399+
BOOST_AUTO_TEST_CASE(cnetaddr_tostring_canonical_ipv6)
400+
{
401+
// Test that CNetAddr::ToString formats IPv6 addresses with zero compression as described in
402+
// RFC 5952 ("A Recommendation for IPv6 Address Text Representation").
403+
const std::map<std::string, std::string> canonical_representations_ipv6{
404+
{"0000:0000:0000:0000:0000:0000:0000:0000", "::"},
405+
{"000:0000:000:00:0:00:000:0000", "::"},
406+
{"000:000:000:000:000:000:000:000", "::"},
407+
{"00:00:00:00:00:00:00:00", "::"},
408+
{"0:0:0:0:0:0:0:0", "::"},
409+
{"0:0:0:0:0:0:0:1", "::1"},
410+
{"2001:0:0:1:0:0:0:1", "2001:0:0:1::1"},
411+
{"2001:0db8:0:0:1:0:0:1", "2001:db8::1:0:0:1"},
412+
{"2001:0db8:85a3:0000:0000:8a2e:0370:7334", "2001:db8:85a3::8a2e:370:7334"},
413+
{"2001:0db8::0001", "2001:db8::1"},
414+
{"2001:0db8::0001:0000", "2001:db8::1:0"},
415+
{"2001:0db8::1:0:0:1", "2001:db8::1:0:0:1"},
416+
{"2001:db8:0000:0:1::1", "2001:db8::1:0:0:1"},
417+
{"2001:db8:0000:1:1:1:1:1", "2001:db8:0:1:1:1:1:1"},
418+
{"2001:db8:0:0:0:0:2:1", "2001:db8::2:1"},
419+
{"2001:db8:0:0:0::1", "2001:db8::1"},
420+
{"2001:db8:0:0:1:0:0:1", "2001:db8::1:0:0:1"},
421+
{"2001:db8:0:0:1::1", "2001:db8::1:0:0:1"},
422+
{"2001:DB8:0:0:1::1", "2001:db8::1:0:0:1"},
423+
{"2001:db8:0:0::1", "2001:db8::1"},
424+
{"2001:db8:0:0:aaaa::1", "2001:db8::aaaa:0:0:1"},
425+
{"2001:db8:0:1:1:1:1:1", "2001:db8:0:1:1:1:1:1"},
426+
{"2001:db8:0::1", "2001:db8::1"},
427+
{"2001:db8:85a3:0:0:8a2e:370:7334", "2001:db8:85a3::8a2e:370:7334"},
428+
{"2001:db8::0:1", "2001:db8::1"},
429+
{"2001:db8::0:1:0:0:1", "2001:db8::1:0:0:1"},
430+
{"2001:DB8::1", "2001:db8::1"},
431+
{"2001:db8::1", "2001:db8::1"},
432+
{"2001:db8::1:0:0:1", "2001:db8::1:0:0:1"},
433+
{"2001:db8::1:1:1:1:1", "2001:db8:0:1:1:1:1:1"},
434+
{"2001:db8::aaaa:0:0:1", "2001:db8::aaaa:0:0:1"},
435+
{"2001:db8:aaaa:bbbb:cccc:dddd:0:1", "2001:db8:aaaa:bbbb:cccc:dddd:0:1"},
436+
{"2001:db8:aaaa:bbbb:cccc:dddd::1", "2001:db8:aaaa:bbbb:cccc:dddd:0:1"},
437+
{"2001:db8:aaaa:bbbb:cccc:dddd:eeee:0001", "2001:db8:aaaa:bbbb:cccc:dddd:eeee:1"},
438+
{"2001:db8:aaaa:bbbb:cccc:dddd:eeee:001", "2001:db8:aaaa:bbbb:cccc:dddd:eeee:1"},
439+
{"2001:db8:aaaa:bbbb:cccc:dddd:eeee:01", "2001:db8:aaaa:bbbb:cccc:dddd:eeee:1"},
440+
{"2001:db8:aaaa:bbbb:cccc:dddd:eeee:1", "2001:db8:aaaa:bbbb:cccc:dddd:eeee:1"},
441+
{"2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa", "2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa"},
442+
{"2001:db8:aaaa:bbbb:cccc:dddd:eeee:AAAA", "2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa"},
443+
{"2001:db8:aaaa:bbbb:cccc:dddd:eeee:AaAa", "2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa"},
444+
};
445+
for (const auto& [input_address, expected_canonical_representation_output] : canonical_representations_ipv6) {
446+
CNetAddr net_addr;
447+
BOOST_REQUIRE(LookupHost(input_address, net_addr, false));
448+
BOOST_REQUIRE(net_addr.IsIPv6());
449+
BOOST_CHECK_EQUAL(net_addr.ToString(), expected_canonical_representation_output);
450+
}
451+
}
452+
399453
BOOST_AUTO_TEST_CASE(cnetaddr_serialize_v1)
400454
{
401455
CNetAddr addr;

0 commit comments

Comments
 (0)