Changeset View
Changeset View
Standalone View
Standalone View
src/test/net_tests.cpp
Show First 20 Lines • Show All 303 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(cnetaddr_basic) { | ||||
CNetAddr addr; | CNetAddr addr; | ||||
// IPv4, INADDR_ANY | // IPv4, INADDR_ANY | ||||
BOOST_REQUIRE(LookupHost("0.0.0.0", addr, false)); | BOOST_REQUIRE(LookupHost("0.0.0.0", addr, false)); | ||||
BOOST_REQUIRE(!addr.IsValid()); | BOOST_REQUIRE(!addr.IsValid()); | ||||
BOOST_REQUIRE(addr.IsIPv4()); | BOOST_REQUIRE(addr.IsIPv4()); | ||||
BOOST_CHECK(addr.IsBindAny()); | BOOST_CHECK(addr.IsBindAny()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "0.0.0.0"); | BOOST_CHECK_EQUAL(addr.ToString(), "0.0.0.0"); | ||||
// IPv4, INADDR_NONE | // IPv4, INADDR_NONE | ||||
BOOST_REQUIRE(LookupHost("255.255.255.255", addr, false)); | BOOST_REQUIRE(LookupHost("255.255.255.255", addr, false)); | ||||
BOOST_REQUIRE(!addr.IsValid()); | BOOST_REQUIRE(!addr.IsValid()); | ||||
BOOST_REQUIRE(addr.IsIPv4()); | BOOST_REQUIRE(addr.IsIPv4()); | ||||
BOOST_CHECK(!addr.IsBindAny()); | BOOST_CHECK(!addr.IsBindAny()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "255.255.255.255"); | BOOST_CHECK_EQUAL(addr.ToString(), "255.255.255.255"); | ||||
// IPv4, casual | // IPv4, casual | ||||
BOOST_REQUIRE(LookupHost("12.34.56.78", addr, false)); | BOOST_REQUIRE(LookupHost("12.34.56.78", addr, false)); | ||||
BOOST_REQUIRE(addr.IsValid()); | BOOST_REQUIRE(addr.IsValid()); | ||||
BOOST_REQUIRE(addr.IsIPv4()); | BOOST_REQUIRE(addr.IsIPv4()); | ||||
BOOST_CHECK(!addr.IsBindAny()); | BOOST_CHECK(!addr.IsBindAny()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "12.34.56.78"); | BOOST_CHECK_EQUAL(addr.ToString(), "12.34.56.78"); | ||||
// IPv6, in6addr_any | // IPv6, in6addr_any | ||||
BOOST_REQUIRE(LookupHost("::", addr, false)); | BOOST_REQUIRE(LookupHost("::", addr, false)); | ||||
BOOST_REQUIRE(!addr.IsValid()); | BOOST_REQUIRE(!addr.IsValid()); | ||||
BOOST_REQUIRE(addr.IsIPv6()); | BOOST_REQUIRE(addr.IsIPv6()); | ||||
BOOST_CHECK(addr.IsBindAny()); | BOOST_CHECK(addr.IsBindAny()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "::"); | BOOST_CHECK_EQUAL(addr.ToString(), "::"); | ||||
// IPv6, casual | // IPv6, casual | ||||
BOOST_REQUIRE( | BOOST_REQUIRE( | ||||
LookupHost("1122:3344:5566:7788:9900:aabb:ccdd:eeff", addr, false)); | LookupHost("1122:3344:5566:7788:9900:aabb:ccdd:eeff", addr, false)); | ||||
BOOST_REQUIRE(addr.IsValid()); | BOOST_REQUIRE(addr.IsValid()); | ||||
BOOST_REQUIRE(addr.IsIPv6()); | BOOST_REQUIRE(addr.IsIPv6()); | ||||
BOOST_CHECK(!addr.IsBindAny()); | BOOST_CHECK(!addr.IsBindAny()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), | BOOST_CHECK_EQUAL(addr.ToString(), | ||||
"1122:3344:5566:7788:9900:aabb:ccdd:eeff"); | "1122:3344:5566:7788:9900:aabb:ccdd:eeff"); | ||||
// TORv2 | // TORv2 | ||||
BOOST_REQUIRE(addr.SetSpecial("6hzph5hv6337r6p2.onion")); | BOOST_REQUIRE(addr.SetSpecial("6hzph5hv6337r6p2.onion")); | ||||
BOOST_REQUIRE(addr.IsValid()); | BOOST_REQUIRE(addr.IsValid()); | ||||
BOOST_REQUIRE(addr.IsTor()); | BOOST_REQUIRE(addr.IsTor()); | ||||
BOOST_CHECK(!addr.IsBindAny()); | BOOST_CHECK(!addr.IsBindAny()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "6hzph5hv6337r6p2.onion"); | BOOST_CHECK_EQUAL(addr.ToString(), "6hzph5hv6337r6p2.onion"); | ||||
// TORv3 | // TORv3 | ||||
const char *torv3_addr = | const char *torv3_addr = | ||||
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"; | "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"; | ||||
BOOST_REQUIRE(addr.SetSpecial(torv3_addr)); | BOOST_REQUIRE(addr.SetSpecial(torv3_addr)); | ||||
BOOST_REQUIRE(addr.IsValid()); | BOOST_REQUIRE(addr.IsValid()); | ||||
BOOST_REQUIRE(addr.IsTor()); | BOOST_REQUIRE(addr.IsTor()); | ||||
BOOST_CHECK(!addr.IsBindAny()); | BOOST_CHECK(!addr.IsBindAny()); | ||||
BOOST_CHECK(!addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), torv3_addr); | BOOST_CHECK_EQUAL(addr.ToString(), torv3_addr); | ||||
// TORv3, broken, with wrong checksum | // TORv3, broken, with wrong checksum | ||||
BOOST_CHECK(!addr.SetSpecial( | BOOST_CHECK(!addr.SetSpecial( | ||||
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscsad.onion")); | "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscsad.onion")); | ||||
// TORv3, broken, with wrong version | // TORv3, broken, with wrong version | ||||
BOOST_CHECK(!addr.SetSpecial( | BOOST_CHECK(!addr.SetSpecial( | ||||
Show All 12 Lines | BOOST_AUTO_TEST_CASE(cnetaddr_basic) { | ||||
// Internal | // Internal | ||||
addr.SetInternal("esffpp"); | addr.SetInternal("esffpp"); | ||||
// "internal" is considered invalid | // "internal" is considered invalid | ||||
BOOST_REQUIRE(!addr.IsValid()); | BOOST_REQUIRE(!addr.IsValid()); | ||||
BOOST_REQUIRE(addr.IsInternal()); | BOOST_REQUIRE(addr.IsInternal()); | ||||
BOOST_CHECK(!addr.IsBindAny()); | BOOST_CHECK(!addr.IsBindAny()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "esffpvrt3wpeaygy.internal"); | BOOST_CHECK_EQUAL(addr.ToString(), "esffpvrt3wpeaygy.internal"); | ||||
// Totally bogus | // Totally bogus | ||||
BOOST_CHECK(!addr.SetSpecial("totally bogus")); | BOOST_CHECK(!addr.SetSpecial("totally bogus")); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(cnetaddr_serialize_v1) { | BOOST_AUTO_TEST_CASE(cnetaddr_serialize_v1) { | ||||
CNetAddr addr; | CNetAddr addr; | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(cnetaddr_unserialize_v2) { | ||||
// Valid IPv4. | // Valid IPv4. | ||||
s << MakeSpan(ParseHex("01" // network type (IPv4) | s << MakeSpan(ParseHex("01" // network type (IPv4) | ||||
"04" // address length | "04" // address length | ||||
"01020304")); // address | "01020304")); // address | ||||
s >> addr; | s >> addr; | ||||
BOOST_CHECK(addr.IsValid()); | BOOST_CHECK(addr.IsValid()); | ||||
BOOST_CHECK(addr.IsIPv4()); | BOOST_CHECK(addr.IsIPv4()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "1.2.3.4"); | BOOST_CHECK_EQUAL(addr.ToString(), "1.2.3.4"); | ||||
BOOST_REQUIRE(s.empty()); | BOOST_REQUIRE(s.empty()); | ||||
// Invalid IPv4, valid length but address itself is shorter. | // Invalid IPv4, valid length but address itself is shorter. | ||||
s << MakeSpan(ParseHex("01" // network type (IPv4) | s << MakeSpan(ParseHex("01" // network type (IPv4) | ||||
"04" // address length | "04" // address length | ||||
"0102")); // address | "0102")); // address | ||||
BOOST_CHECK_EXCEPTION(s >> addr, std::ios_base::failure, | BOOST_CHECK_EXCEPTION(s >> addr, std::ios_base::failure, | ||||
Show All 22 Lines | BOOST_AUTO_TEST_CASE(cnetaddr_unserialize_v2) { | ||||
// Valid IPv6. | // Valid IPv6. | ||||
s << MakeSpan(ParseHex("02" // network type (IPv6) | s << MakeSpan(ParseHex("02" // network type (IPv6) | ||||
"10" // address length | "10" // address length | ||||
"0102030405060708090a0b0c0d0e0f10")); // address | "0102030405060708090a0b0c0d0e0f10")); // address | ||||
s >> addr; | s >> addr; | ||||
BOOST_CHECK(addr.IsValid()); | BOOST_CHECK(addr.IsValid()); | ||||
BOOST_CHECK(addr.IsIPv6()); | BOOST_CHECK(addr.IsIPv6()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "102:304:506:708:90a:b0c:d0e:f10"); | BOOST_CHECK_EQUAL(addr.ToString(), "102:304:506:708:90a:b0c:d0e:f10"); | ||||
BOOST_REQUIRE(s.empty()); | BOOST_REQUIRE(s.empty()); | ||||
// Valid IPv6, contains embedded "internal". | // Valid IPv6, contains embedded "internal". | ||||
s << MakeSpan( | s << MakeSpan( | ||||
ParseHex("02" // network type (IPv6) | ParseHex("02" // network type (IPv6) | ||||
"10" // address length | "10" // address length | ||||
"fd6b88c08724ca978112ca1bbdcafac2")); // address: 0xfd + | "fd6b88c08724ca978112ca1bbdcafac2")); // address: 0xfd + | ||||
// sha256("bitcoin")[0:5] | // sha256("bitcoin")[0:5] | ||||
// + sha256(name)[0:10] | // + sha256(name)[0:10] | ||||
s >> addr; | s >> addr; | ||||
BOOST_CHECK(addr.IsInternal()); | BOOST_CHECK(addr.IsInternal()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "zklycewkdo64v6wc.internal"); | BOOST_CHECK_EQUAL(addr.ToString(), "zklycewkdo64v6wc.internal"); | ||||
BOOST_REQUIRE(s.empty()); | BOOST_REQUIRE(s.empty()); | ||||
// Invalid IPv6, with bogus length. | // Invalid IPv6, with bogus length. | ||||
s << MakeSpan(ParseHex("02" // network type (IPv6) | s << MakeSpan(ParseHex("02" // network type (IPv6) | ||||
"04" // address length | "04" // address length | ||||
"00")); // address | "00")); // address | ||||
BOOST_CHECK_EXCEPTION( | BOOST_CHECK_EXCEPTION( | ||||
Show All 20 Lines | BOOST_AUTO_TEST_CASE(cnetaddr_unserialize_v2) { | ||||
// Valid TORv2. | // Valid TORv2. | ||||
s << MakeSpan(ParseHex("03" // network type (TORv2) | s << MakeSpan(ParseHex("03" // network type (TORv2) | ||||
"0a" // address length | "0a" // address length | ||||
"f1f2f3f4f5f6f7f8f9fa")); // address | "f1f2f3f4f5f6f7f8f9fa")); // address | ||||
s >> addr; | s >> addr; | ||||
BOOST_CHECK(addr.IsValid()); | BOOST_CHECK(addr.IsValid()); | ||||
BOOST_CHECK(addr.IsTor()); | BOOST_CHECK(addr.IsTor()); | ||||
BOOST_CHECK(addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "6hzph5hv6337r6p2.onion"); | BOOST_CHECK_EQUAL(addr.ToString(), "6hzph5hv6337r6p2.onion"); | ||||
BOOST_REQUIRE(s.empty()); | BOOST_REQUIRE(s.empty()); | ||||
// Invalid TORv2, with bogus length. | // Invalid TORv2, with bogus length. | ||||
s << MakeSpan(ParseHex("03" // network type (TORv2) | s << MakeSpan(ParseHex("03" // network type (TORv2) | ||||
"07" // address length | "07" // address length | ||||
"00")); // address | "00")); // address | ||||
BOOST_CHECK_EXCEPTION( | BOOST_CHECK_EXCEPTION( | ||||
s >> addr, std::ios_base::failure, | s >> addr, std::ios_base::failure, | ||||
HasReason("BIP155 TORv2 address with length 7 (should be 10)")); | HasReason("BIP155 TORv2 address with length 7 (should be 10)")); | ||||
BOOST_REQUIRE(!s.empty()); // The stream is not consumed on invalid input. | BOOST_REQUIRE(!s.empty()); // The stream is not consumed on invalid input. | ||||
s.clear(); | s.clear(); | ||||
// Valid TORv3. | // Valid TORv3. | ||||
s << MakeSpan(ParseHex("04" // network type (TORv3) | s << MakeSpan(ParseHex("04" // network type (TORv3) | ||||
"20" // address length | "20" // address length | ||||
"79bcc625184b05194975c28b66b66b04" // address | "79bcc625184b05194975c28b66b66b04" // address | ||||
"69f7f6556fb1ac3189a79b40dda32f1f")); | "69f7f6556fb1ac3189a79b40dda32f1f")); | ||||
s >> addr; | s >> addr; | ||||
BOOST_CHECK(addr.IsValid()); | BOOST_CHECK(addr.IsValid()); | ||||
BOOST_CHECK(addr.IsTor()); | BOOST_CHECK(addr.IsTor()); | ||||
BOOST_CHECK(!addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL( | BOOST_CHECK_EQUAL( | ||||
addr.ToString(), | addr.ToString(), | ||||
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"); | "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"); | ||||
BOOST_REQUIRE(s.empty()); | BOOST_REQUIRE(s.empty()); | ||||
// Invalid TORv3, with bogus length. | // Invalid TORv3, with bogus length. | ||||
s << MakeSpan(ParseHex("04" // network type (TORv3) | s << MakeSpan(ParseHex("04" // network type (TORv3) | ||||
"00" // address length | "00" // address length | ||||
"00" // address | "00" // address | ||||
)); | )); | ||||
BOOST_CHECK_EXCEPTION( | BOOST_CHECK_EXCEPTION( | ||||
s >> addr, std::ios_base::failure, | s >> addr, std::ios_base::failure, | ||||
HasReason("BIP155 TORv3 address with length 0 (should be 32)")); | HasReason("BIP155 TORv3 address with length 0 (should be 32)")); | ||||
BOOST_REQUIRE(!s.empty()); // The stream is not consumed on invalid input. | BOOST_REQUIRE(!s.empty()); // The stream is not consumed on invalid input. | ||||
s.clear(); | s.clear(); | ||||
// Valid I2P. | // Valid I2P. | ||||
s << MakeSpan(ParseHex("05" // network type (I2P) | s << MakeSpan(ParseHex("05" // network type (I2P) | ||||
"20" // address length | "20" // address length | ||||
"a2894dabaec08c0051a481a6dac88b64" // address | "a2894dabaec08c0051a481a6dac88b64" // address | ||||
"f98232ae42d4b6fd2fa81952dfe36a87")); | "f98232ae42d4b6fd2fa81952dfe36a87")); | ||||
s >> addr; | s >> addr; | ||||
BOOST_CHECK(addr.IsValid()); | BOOST_CHECK(addr.IsValid()); | ||||
BOOST_CHECK(addr.IsI2P()); | |||||
BOOST_CHECK(!addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL( | BOOST_CHECK_EQUAL( | ||||
addr.ToString(), | addr.ToString(), | ||||
"ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p"); | "ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p"); | ||||
BOOST_REQUIRE(s.empty()); | BOOST_REQUIRE(s.empty()); | ||||
// Invalid I2P, with bogus length. | // Invalid I2P, with bogus length. | ||||
s << MakeSpan(ParseHex("05" // network type (I2P) | s << MakeSpan(ParseHex("05" // network type (I2P) | ||||
"03" // address length | "03" // address length | ||||
"00" // address | "00" // address | ||||
)); | )); | ||||
BOOST_CHECK_EXCEPTION( | BOOST_CHECK_EXCEPTION( | ||||
s >> addr, std::ios_base::failure, | s >> addr, std::ios_base::failure, | ||||
HasReason("BIP155 I2P address with length 3 (should be 32)")); | HasReason("BIP155 I2P address with length 3 (should be 32)")); | ||||
BOOST_REQUIRE(!s.empty()); // The stream is not consumed on invalid input. | BOOST_REQUIRE(!s.empty()); // The stream is not consumed on invalid input. | ||||
s.clear(); | s.clear(); | ||||
// Valid CJDNS. | // Valid CJDNS. | ||||
s << MakeSpan(ParseHex("06" // network type (CJDNS) | s << MakeSpan(ParseHex("06" // network type (CJDNS) | ||||
"10" // address length | "10" // address length | ||||
"fc000001000200030004000500060007" // address | "fc000001000200030004000500060007" // address | ||||
)); | )); | ||||
s >> addr; | s >> addr; | ||||
BOOST_CHECK(addr.IsValid()); | BOOST_CHECK(addr.IsValid()); | ||||
BOOST_CHECK(addr.IsCJDNS()); | |||||
BOOST_CHECK(!addr.IsAddrV1Compatible()); | |||||
BOOST_CHECK_EQUAL(addr.ToString(), "fc00:1:2:3:4:5:6:7"); | BOOST_CHECK_EQUAL(addr.ToString(), "fc00:1:2:3:4:5:6:7"); | ||||
BOOST_REQUIRE(s.empty()); | BOOST_REQUIRE(s.empty()); | ||||
// Invalid CJDNS, with bogus length. | // Invalid CJDNS, with bogus length. | ||||
s << MakeSpan(ParseHex("06" // network type (CJDNS) | s << MakeSpan(ParseHex("06" // network type (CJDNS) | ||||
"01" // address length | "01" // address length | ||||
"00" // address | "00" // address | ||||
)); | )); | ||||
▲ Show 20 Lines • Show All 94 Lines • Show Last 20 Lines |