Skip to content

Commit e7cf865

Browse files
committed
test: add unit test for local address advertising
1 parent f4754b9 commit e7cf865

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

src/test/net_tests.cpp

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -904,4 +904,109 @@ BOOST_AUTO_TEST_CASE(initial_advertise_from_version_message)
904904
TestOnlyResetTimeData();
905905
}
906906

907+
908+
BOOST_AUTO_TEST_CASE(advertise_local_address)
909+
{
910+
auto CreatePeer = [](const CAddress& addr) {
911+
return std::make_unique<CNode>(/*id=*/0,
912+
/*sock=*/nullptr,
913+
addr,
914+
/*nKeyedNetGroupIn=*/0,
915+
/*nLocalHostNonceIn=*/0,
916+
CAddress{},
917+
/*pszDest=*/std::string{},
918+
ConnectionType::OUTBOUND_FULL_RELAY,
919+
/*inbound_onion=*/false);
920+
};
921+
SetReachable(NET_CJDNS, true);
922+
923+
CAddress addr_ipv4{Lookup("1.2.3.4", 8333, false).value(), NODE_NONE};
924+
BOOST_REQUIRE(addr_ipv4.IsValid());
925+
BOOST_REQUIRE(addr_ipv4.IsIPv4());
926+
927+
CAddress addr_ipv6{Lookup("1122:3344:5566:7788:9900:aabb:ccdd:eeff", 8333, false).value(), NODE_NONE};
928+
BOOST_REQUIRE(addr_ipv6.IsValid());
929+
BOOST_REQUIRE(addr_ipv6.IsIPv6());
930+
931+
CAddress addr_ipv6_tunnel{Lookup("2002:3344:5566:7788:9900:aabb:ccdd:eeff", 8333, false).value(), NODE_NONE};
932+
BOOST_REQUIRE(addr_ipv6_tunnel.IsValid());
933+
BOOST_REQUIRE(addr_ipv6_tunnel.IsIPv6());
934+
BOOST_REQUIRE(addr_ipv6_tunnel.IsRFC3964());
935+
936+
CAddress addr_teredo{Lookup("2001:0000:5566:7788:9900:aabb:ccdd:eeff", 8333, false).value(), NODE_NONE};
937+
BOOST_REQUIRE(addr_teredo.IsValid());
938+
BOOST_REQUIRE(addr_teredo.IsIPv6());
939+
BOOST_REQUIRE(addr_teredo.IsRFC4380());
940+
941+
CAddress addr_onion;
942+
BOOST_REQUIRE(addr_onion.SetSpecial("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"));
943+
BOOST_REQUIRE(addr_onion.IsValid());
944+
BOOST_REQUIRE(addr_onion.IsTor());
945+
946+
CAddress addr_i2p;
947+
BOOST_REQUIRE(addr_i2p.SetSpecial("udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p"));
948+
BOOST_REQUIRE(addr_i2p.IsValid());
949+
BOOST_REQUIRE(addr_i2p.IsI2P());
950+
951+
CService service_cjdns{Lookup("fc00:3344:5566:7788:9900:aabb:ccdd:eeff", 8333, false).value(), NODE_NONE};
952+
CAddress addr_cjdns{MaybeFlipIPv6toCJDNS(service_cjdns), NODE_NONE};
953+
BOOST_REQUIRE(addr_cjdns.IsValid());
954+
BOOST_REQUIRE(addr_cjdns.IsCJDNS());
955+
956+
const auto peer_ipv4{CreatePeer(addr_ipv4)};
957+
const auto peer_ipv6{CreatePeer(addr_ipv6)};
958+
const auto peer_ipv6_tunnel{CreatePeer(addr_ipv6_tunnel)};
959+
const auto peer_teredo{CreatePeer(addr_teredo)};
960+
const auto peer_onion{CreatePeer(addr_onion)};
961+
const auto peer_i2p{CreatePeer(addr_i2p)};
962+
const auto peer_cjdns{CreatePeer(addr_cjdns)};
963+
964+
// one local clearnet address - advertise to all but privacy peers
965+
AddLocal(addr_ipv4);
966+
BOOST_CHECK(GetLocalAddress(*peer_ipv4) == addr_ipv4);
967+
BOOST_CHECK(GetLocalAddress(*peer_ipv6) == addr_ipv4);
968+
BOOST_CHECK(GetLocalAddress(*peer_ipv6_tunnel) == addr_ipv4);
969+
BOOST_CHECK(GetLocalAddress(*peer_teredo) == addr_ipv4);
970+
BOOST_CHECK(GetLocalAddress(*peer_cjdns) == addr_ipv4);
971+
BOOST_CHECK(!GetLocalAddress(*peer_onion).IsValid());
972+
BOOST_CHECK(!GetLocalAddress(*peer_i2p).IsValid());
973+
RemoveLocal(addr_ipv4);
974+
975+
// local privacy addresses - don't advertise to clearnet peers
976+
AddLocal(addr_onion);
977+
AddLocal(addr_i2p);
978+
BOOST_CHECK(!GetLocalAddress(*peer_ipv4).IsValid());
979+
BOOST_CHECK(!GetLocalAddress(*peer_ipv6).IsValid());
980+
BOOST_CHECK(!GetLocalAddress(*peer_ipv6_tunnel).IsValid());
981+
BOOST_CHECK(!GetLocalAddress(*peer_teredo).IsValid());
982+
BOOST_CHECK(!GetLocalAddress(*peer_cjdns).IsValid());
983+
BOOST_CHECK(GetLocalAddress(*peer_onion) == addr_onion);
984+
BOOST_CHECK(GetLocalAddress(*peer_i2p) == addr_i2p);
985+
RemoveLocal(addr_onion);
986+
RemoveLocal(addr_i2p);
987+
988+
// local addresses from all networks
989+
AddLocal(addr_ipv4);
990+
AddLocal(addr_ipv6);
991+
AddLocal(addr_ipv6_tunnel);
992+
AddLocal(addr_teredo);
993+
AddLocal(addr_onion);
994+
AddLocal(addr_i2p);
995+
AddLocal(addr_cjdns);
996+
BOOST_CHECK(GetLocalAddress(*peer_ipv4) == addr_ipv4);
997+
BOOST_CHECK(GetLocalAddress(*peer_ipv6) == addr_ipv6);
998+
BOOST_CHECK(GetLocalAddress(*peer_ipv6_tunnel) == addr_ipv6);
999+
BOOST_CHECK(GetLocalAddress(*peer_teredo) == addr_ipv4);
1000+
BOOST_CHECK(GetLocalAddress(*peer_onion) == addr_onion);
1001+
BOOST_CHECK(GetLocalAddress(*peer_i2p) == addr_i2p);
1002+
BOOST_CHECK(GetLocalAddress(*peer_cjdns) == addr_cjdns);
1003+
RemoveLocal(addr_ipv4);
1004+
RemoveLocal(addr_ipv6);
1005+
RemoveLocal(addr_ipv6_tunnel);
1006+
RemoveLocal(addr_teredo);
1007+
RemoveLocal(addr_onion);
1008+
RemoveLocal(addr_i2p);
1009+
RemoveLocal(addr_cjdns);
1010+
}
1011+
9071012
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)