19#include <boost/test/unit_test.hpp>
21using namespace std::literals;
68 BOOST_CHECK(
ResolveIP(
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion").IsTor());
79bool static TestSplitHost(
const std::string& test,
const std::string& host, uint16_t port,
bool validPort=
true)
84 return hostOut == host && portOut == port && validPortOut == validPort;
123bool static TestParse(std::string src, std::string canon)
231 ResolveIP(
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion")};
238 !subnet.
Match(
ResolveIP(
"kpgvmscirrdqpekbqjsvw5teanhatztpp2gl6eee4zkowvwfxwenqaid.onion")));
311 subnet =
LookupSubNet(
"1:2:3:4:5:6:7:8/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
313 subnet =
LookupSubNet(
"1:2:3:4:5:6:7:8/ffff:0000:0000:0000:0000:0000:0000:0000");
315 subnet =
LookupSubNet(
"1:2:3:4:5:6:7:8/0000:0000:0000:0000:0000:0000:0000:0000");
322 subnet =
LookupSubNet(
"1:2:3:4:5:6:7:8/ffff:ffff:ffff:fffe:ffff:ffff:ffff:ff0f");
336 BOOST_CHECK(netgroupman.GetGroup(
ResolveIP(
"2002:102:304:9999:9999:9999:9999:9999")) == std::vector<unsigned char>({(
unsigned char)
NET_IPV4, 1, 2}));
337 BOOST_CHECK(netgroupman.GetGroup(
ResolveIP(
"2001:0:9999:9999:9999:9999:FEFD:FCFB")) == std::vector<unsigned char>({(
unsigned char)
NET_IPV4, 1, 2}));
338 BOOST_CHECK(netgroupman.GetGroup(
ResolveIP(
"2001:470:abcd:9999:9999:9999:9999:9999")) == std::vector<unsigned char>({(
unsigned char)
NET_IPV6, 32, 1, 4, 112, 175}));
339 BOOST_CHECK(netgroupman.GetGroup(
ResolveIP(
"2001:2001:9999:9999:9999:9999:9999:9999")) == std::vector<unsigned char>({(
unsigned char)
NET_IPV6, 32, 1, 32, 1}));
342 std::vector<unsigned char> internal_group = {
NET_INTERNAL, 0x12, 0x92, 0x94, 0x00, 0xeb, 0x46, 0x07, 0xc4, 0xac, 0x07};
378 BOOST_CHECK(error.
original.find(
"Cannot resolve -whitebind address") != std::string::npos);
380 BOOST_CHECK(error.
original.find(
"Need to specify a port with -whitebind") != std::string::npos);
445 BOOST_CHECK(error.
original.find(
"whitebind may only be used for incoming connections (\"out\" was passed)") != std::string::npos);
453 BOOST_CHECK(error.
original.find(
"Invalid netmask specified in -whitelist") != std::string::npos);
474 BOOST_CHECK(std::find(strings.begin(), strings.end(),
"bloomfilter") != strings.end());
475 BOOST_CHECK(std::find(strings.begin(), strings.end(),
"forcerelay") != strings.end());
476 BOOST_CHECK(std::find(strings.begin(), strings.end(),
"relay") != strings.end());
477 BOOST_CHECK(std::find(strings.begin(), strings.end(),
"noban") != strings.end());
478 BOOST_CHECK(std::find(strings.begin(), strings.end(),
"mempool") != strings.end());
479 BOOST_CHECK(std::find(strings.begin(), strings.end(),
"download") != strings.end());
480 BOOST_CHECK(std::find(strings.begin(), strings.end(),
"addr") != strings.end());
496 BOOST_CHECK(!
LookupSubNet(
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion\0example.com"s).IsValid());
497 BOOST_CHECK(!
LookupSubNet(
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion\0example.com\0"s).IsValid());
528 "00000000000000000000000000000001"
533 "00000000000000000000000000000001"
538 "00000000000000000000000000000001"
550 "00000000000000000000000000000001"
557 "00000000000000000000000000000001"
564 "00000000000000000000000000000001"
578 std::vector<CAddress> addresses_unserialized;
595 std::vector<CAddress> addresses_unserialized;
612 std::list<int> ports(std::numeric_limits<uint16_t>::max());
613 std::iota(ports.begin(), ports.end(), 1);
621 constexpr auto ASMAP_DATA{
622 "fd38d50f7d5d665357f64bba6bfc190d6078a7e68e5d3ac032edf47f8b5755f87881bfd3633d9aa7c1fa279b3"
623 "6fe26c63bbc9de44e0f04e5a382d8e1cddbe1c26653bc939d4327f287e8b4d1f8aff33176787cb0ff7cb28e3f"
624 "daef0f8f47357f801c9f7ff7a99f7f9c9f99de7f3156ae00f23eb27a303bc486aa3ccc31ec19394c2f8a53ddd"
625 "ea3cc56257f3b7e9b1f488be9c1137db823759aa4e071eef2e984aaf97b52d5f88d0f373dd190fe45e06efef1"
626 "df7278be680a73a74c76db4dd910f1d30752c57fe2bc9f079f1a1e1b036c2a69219f11c5e11980a3fa51f4f82"
627 "d36373de73b1863a8c27e36ae0e4f705be3d76ecff038a75bc0f92ba7e7f6f4080f1c47c34d095367ecf4406c"
628 "1e3bbc17ba4d6f79ea3f031b876799ac268b1e0ea9babf0f9a8e5f6c55e363c6363df46afc696d7afceaf49b6"
629 "e62df9e9dc27e70664cafe5c53df66dd0b8237678ada90e73f05ec60e6f6e96c3cbb1ea2f9dece115d5bdba10"
630 "33e53662a7d72a29477b5beb35710591d3e23e5f0379baea62ffdee535bcdf879cbf69b88d7ea37c8015381cf"
631 "63dc33d28f757a4a5e15d6a08"_hex};
634 std::vector<bool> asmap_bits;
635 asmap_bits.reserve(ASMAP_DATA.size() * 8);
636 for (
auto byte : ASMAP_DATA) {
637 for (
int bit = 0; bit < 8; ++bit) {
638 asmap_bits.push_back((std::to_integer<uint8_t>(
byte) >> bit) & 1);
A CService with information about it as peer.
static constexpr SerParams V1_NETWORK
static constexpr SerParams V2_NETWORK
bool SetInternal(const std::string &name)
Create an "internal" address that represents a name or FQDN.
A combination of a network address (CNetAddr) and a (TCP) port.
std::string ToStringAddrPort() const
std::string ToString() const
bool Match(const CNetAddr &addr) const
Double ended buffer combining vector and stream-like interfaces.
NetPermissionFlags m_flags
static void AddFlag(NetPermissionFlags &flags, NetPermissionFlags f)
static void ClearFlag(NetPermissionFlags &flags, NetPermissionFlags f)
ClearFlag is only called with f == NetPermissionFlags::Implicit.
static std::vector< std::string > ToStrings(NetPermissionFlags flags)
static bool HasFlag(NetPermissionFlags flags, NetPermissionFlags f)
static bool TryParse(const std::string &str, NetWhitebindPermissions &output, bilingual_str &error)
static bool TryParse(const std::string &str, NetWhitelistPermissions &output, ConnectionDirection &output_connection_direction, bilingual_str &error)
BOOST_FIXTURE_TEST_SUITE(cuckoocache_tests, BasicTestingSetup)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END()
static CService ip(uint32_t i)
std::string HexStr(const std::span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
static const std::string addr1
static const std::string addr2
""_hex is a compile-time user-defined literal returning a std::array<std::byte>, equivalent to ParseH...
std::string ToString(const T &t)
Locale-independent version of std::to_string.
bool IsLocal(const CService &addr)
check whether a given address is potentially local
@ NET_ONION
TOR (v2 or v3)
@ NET_UNROUTABLE
Addresses from these networks are not publicly routable on the global Internet.
@ NET_INTERNAL
A set of addresses that represent the hash of a string or FQDN.
CSubNet LookupSubNet(const std::string &subnet_str)
Parse and resolve a specified subnet string into the appropriate internal representation.
std::vector< CNetAddr > LookupHost(const std::string &name, unsigned int nMaxSolutions, bool fAllowLookup, DNSLookupFn dns_lookup_function)
Resolve a host string to its corresponding network addresses.
enum Network ParseNetwork(const std::string &net_in)
CService LookupNumeric(const std::string &name, uint16_t portDefault, DNSLookupFn dns_lookup_function)
Resolve a service string with a numeric IP to its first corresponding service.
bool IsBadPort(uint16_t port)
Determine if a port is "bad" from the perspective of attempting to connect to a node on that port.
static constexpr const char * stream_addrv1_hex
static constexpr const char * stream_addrv2_hex
static bool TestParse(std::string src, std::string canon)
static const std::vector< CAddress > fixture_addresses({ CAddress{ CService(CNetAddr(in6_addr(IN6ADDR_LOOPBACK_INIT)), 0), NODE_NONE, NodeSeconds{0x4966bc61s}, }, CAddress{ CService(CNetAddr(in6_addr(IN6ADDR_LOOPBACK_INIT)), 0x00f1), NODE_NETWORK, NodeSeconds{0x83766279s}, }, CAddress{ CService(CNetAddr(in6_addr(IN6ADDR_LOOPBACK_INIT)), 0xf1f2), static_cast< ServiceFlags >(NODE_WITNESS|NODE_COMPACT_FILTERS|NODE_NETWORK_LIMITED), NodeSeconds{0xffffffffs}, }, })
static bool TestSplitHost(const std::string &test, const std::string &host, uint16_t port, bool validPort=true)
BOOST_AUTO_TEST_CASE(netbase_networks)
static CNetAddr CreateInternal(const std::string &host)
static CNetAddr ResolveIP(const std::string &ip)
#define BOOST_CHECK_EQUAL(v1, v2)
#define BOOST_CHECK(expr)
ServiceFlags
nServices flags
std::vector< Byte > ParseHex(std::string_view hex_str)
Like TryParseHex, but returns an empty vector on invalid input.
bool SplitHostPort(std::string_view in, uint16_t &portOut, std::string &hostOut)
Splits socket address string into host string and port value.
std::chrono::time_point< NodeClock, std::chrono::seconds > NodeSeconds