Changeset View
Changeset View
Standalone View
Standalone View
src/test/net_tests.cpp
// Copyright (c) 2012-2019 The Bitcoin Core developers | // Copyright (c) 2012-2019 The Bitcoin Core developers | ||||
// Copyright (c) 2017-2019 The Bitcoin developers | // Copyright (c) 2017-2019 The Bitcoin developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <net.h> | #include <net.h> | ||||
#include <addrdb.h> | #include <addrdb.h> | ||||
#include <addrman.h> | #include <addrman.h> | ||||
#include <chainparams.h> | #include <chainparams.h> | ||||
#include <clientversion.h> | #include <clientversion.h> | ||||
#include <config.h> | #include <config.h> | ||||
#include <netbase.h> | #include <netbase.h> | ||||
#include <serialize.h> | #include <serialize.h> | ||||
#include <streams.h> | #include <streams.h> | ||||
#include <util/strencodings.h> | |||||
#include <util/string.h> | #include <util/string.h> | ||||
#include <version.h> | |||||
#include <test/util/setup_common.h> | #include <test/util/setup_common.h> | ||||
#include <boost/test/unit_test.hpp> | #include <boost/test/unit_test.hpp> | ||||
#include <memory> | #include <memory> | ||||
#include <string> | #include <string> | ||||
▲ Show 20 Lines • Show All 267 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(LocalAddress_BasicLifecycle) { | ||||
BOOST_CHECK_EQUAL(IsLocal(addr), false); | BOOST_CHECK_EQUAL(IsLocal(addr), false); | ||||
BOOST_CHECK_EQUAL(AddLocal(addr, 1000), true); | BOOST_CHECK_EQUAL(AddLocal(addr, 1000), true); | ||||
BOOST_CHECK_EQUAL(IsLocal(addr), true); | BOOST_CHECK_EQUAL(IsLocal(addr), true); | ||||
RemoveLocal(addr); | RemoveLocal(addr); | ||||
BOOST_CHECK_EQUAL(IsLocal(addr), false); | BOOST_CHECK_EQUAL(IsLocal(addr), false); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(cnetaddr_basic) { | |||||
CNetAddr addr; | |||||
// IPv4, INADDR_ANY | |||||
BOOST_REQUIRE(LookupHost("0.0.0.0", addr, false)); | |||||
BOOST_REQUIRE(!addr.IsValid()); | |||||
BOOST_REQUIRE(addr.IsIPv4()); | |||||
BOOST_CHECK(addr.IsBindAny()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "0.0.0.0"); | |||||
// IPv4, INADDR_NONE | |||||
BOOST_REQUIRE(LookupHost("255.255.255.255", addr, false)); | |||||
BOOST_REQUIRE(!addr.IsValid()); | |||||
BOOST_REQUIRE(addr.IsIPv4()); | |||||
BOOST_CHECK(!addr.IsBindAny()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "255.255.255.255"); | |||||
// IPv4, casual | |||||
BOOST_REQUIRE(LookupHost("12.34.56.78", addr, false)); | |||||
BOOST_REQUIRE(addr.IsValid()); | |||||
BOOST_REQUIRE(addr.IsIPv4()); | |||||
BOOST_CHECK(!addr.IsBindAny()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "12.34.56.78"); | |||||
// IPv6, in6addr_any | |||||
BOOST_REQUIRE(LookupHost("::", addr, false)); | |||||
BOOST_REQUIRE(!addr.IsValid()); | |||||
BOOST_REQUIRE(addr.IsIPv6()); | |||||
BOOST_CHECK(addr.IsBindAny()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "::"); | |||||
// IPv6, casual | |||||
BOOST_REQUIRE( | |||||
LookupHost("1122:3344:5566:7788:9900:aabb:ccdd:eeff", addr, false)); | |||||
BOOST_REQUIRE(addr.IsValid()); | |||||
BOOST_REQUIRE(addr.IsIPv6()); | |||||
BOOST_CHECK(!addr.IsBindAny()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), | |||||
"1122:3344:5566:7788:9900:aabb:ccdd:eeff"); | |||||
// TORv2 | |||||
addr.SetSpecial("6hzph5hv6337r6p2.onion"); | |||||
BOOST_REQUIRE(addr.IsValid()); | |||||
BOOST_REQUIRE(addr.IsTor()); | |||||
BOOST_CHECK(!addr.IsBindAny()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "6hzph5hv6337r6p2.onion"); | |||||
// Internal | |||||
addr.SetInternal("esffpp"); | |||||
// "internal" is considered invalid | |||||
BOOST_REQUIRE(!addr.IsValid()); | |||||
BOOST_REQUIRE(addr.IsInternal()); | |||||
BOOST_CHECK(!addr.IsBindAny()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "esffpvrt3wpeaygy.internal"); | |||||
} | |||||
BOOST_AUTO_TEST_CASE(cnetaddr_serialize) { | |||||
CNetAddr addr; | |||||
CDataStream s(SER_NETWORK, PROTOCOL_VERSION); | |||||
addr.SetInternal("a"); | |||||
s << addr; | |||||
BOOST_CHECK_EQUAL(HexStr(s), "fd6b88c08724ca978112ca1bbdcafac2"); | |||||
s.clear(); | |||||
} | |||||
// prior to PR #14728, this test triggers an undefined behavior | // prior to PR #14728, this test triggers an undefined behavior | ||||
BOOST_AUTO_TEST_CASE(ipv4_peer_with_ipv6_addrMe_test) { | BOOST_AUTO_TEST_CASE(ipv4_peer_with_ipv6_addrMe_test) { | ||||
// set up local addresses; all that's necessary to reproduce the bug is | // set up local addresses; all that's necessary to reproduce the bug is | ||||
// that a normal IPv4 address is among the entries, but if this address is | // that a normal IPv4 address is among the entries, but if this address is | ||||
// !IsRoutable the undefined behavior is easier to trigger deterministically | // !IsRoutable the undefined behavior is easier to trigger deterministically | ||||
{ | { | ||||
LOCK(cs_mapLocalHost); | LOCK(cs_mapLocalHost); | ||||
in_addr ipv4AddrLocal; | in_addr ipv4AddrLocal; | ||||
▲ Show 20 Lines • Show All 50 Lines • Show Last 20 Lines |