From: Josh Soref Date: Fri, 28 Sep 2018 11:25:10 +0000 (-0400) Subject: merge test-nmtree into test-iputils_hh X-Git-Tag: dnsdist-1.3.3~85^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dabf2ef2d7b5a53c60e2137bb8ffc1598a2abff4;p=pdns merge test-nmtree into test-iputils_hh --- diff --git a/pdns/Makefile.am b/pdns/Makefile.am index dfb194085..b7a90d6be 100644 --- a/pdns/Makefile.am +++ b/pdns/Makefile.am @@ -1287,7 +1287,6 @@ testrunner_SOURCES = \ test-md5_hh.cc \ test-misc_hh.cc \ test-nameserver_cc.cc \ - test-nmtree.cc \ test-packetcache_cc.cc \ test-rcpgenerator_cc.cc \ test-signers.cc \ diff --git a/pdns/recursordist/Makefile.am b/pdns/recursordist/Makefile.am index 09901dde9..1e71f38b6 100644 --- a/pdns/recursordist/Makefile.am +++ b/pdns/recursordist/Makefile.am @@ -258,7 +258,6 @@ testrunner_SOURCES = \ test-ixfr_cc.cc \ test-misc_hh.cc \ test-mtasker.cc \ - test-nmtree.cc \ test-negcache_cc.cc \ test-rcpgenerator_cc.cc \ test-recpacketcache_cc.cc \ diff --git a/pdns/recursordist/test-nmtree.cc b/pdns/recursordist/test-nmtree.cc deleted file mode 120000 index 923334b33..000000000 --- a/pdns/recursordist/test-nmtree.cc +++ /dev/null @@ -1 +0,0 @@ -../test-nmtree.cc \ No newline at end of file diff --git a/pdns/test-iputils_hh.cc b/pdns/test-iputils_hh.cc index 1f0bf0cf6..ae9641831 100644 --- a/pdns/test-iputils_hh.cc +++ b/pdns/test-iputils_hh.cc @@ -325,4 +325,132 @@ BOOST_AUTO_TEST_CASE(test_NetmaskGroup) { } +BOOST_AUTO_TEST_CASE(test_NetmaskTree) { + NetmaskTree nmt; + nmt.insert(Netmask("130.161.252.0/24")).second=0; + nmt.insert(Netmask("130.161.0.0/16")).second=1; + nmt.insert(Netmask("130.0.0.0/8")).second=2; + + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("213.244.168.210")), (void*)0); + auto found=nmt.lookup(ComboAddress("130.161.252.29")); + BOOST_CHECK(found); + BOOST_CHECK_EQUAL(found->second, 0); + found=nmt.lookup(ComboAddress("130.161.180.1")); + BOOST_CHECK(found); + BOOST_CHECK_EQUAL(found->second, 1); + + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("130.255.255.255"))->second, 2); + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("130.161.252.255"))->second, 0); + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("130.161.253.255"))->second, 1); + + found=nmt.lookup(ComboAddress("130.145.180.1")); + BOOST_CHECK(found); + BOOST_CHECK_EQUAL(found->second, 2); + + nmt.clear(); + BOOST_CHECK(!nmt.lookup(ComboAddress("130.161.180.1"))); + + nmt.insert(Netmask("::1")).second=1; + nmt.insert(Netmask("::/0")).second=0; + nmt.insert(Netmask("fe80::/16")).second=2; + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("130.161.253.255")), (void*)0); + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("::2"))->second, 0); + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("::ffff"))->second, 0); + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("::1"))->second, 1); + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("fe80::1"))->second, 2); +} + +BOOST_AUTO_TEST_CASE(test_single) { + NetmaskTree nmt; + nmt.insert(Netmask("127.0.0.0/8")).second=1; + BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("127.0.0.1"))->second, 1); +} + +BOOST_AUTO_TEST_CASE(test_scale) { + string start="192.168."; + NetmaskTree works; + for(int i=0; i < 256; ++i) { + for(int j=0; j < 256; ++j) { + works.insert(Netmask(start+std::to_string(i)+"."+std::to_string(j))).second=i*j; + } + } + + for(int i=0; i < 256; ++i) { + for(int j=0; j < 256; ++j) { + BOOST_CHECK_EQUAL(works.lookup(ComboAddress(start+std::to_string(i)+"."+std::to_string(j)))->second, i*j); + } + } + + start="130.161."; + for(int i=0; i < 256; ++i) { + for(int j=0; j < 256; ++j) { + BOOST_CHECK_EQUAL(works.lookup(ComboAddress(start+std::to_string(i)+"."+std::to_string(j))), (void*)0); + } + } + + start="2000:123:"; + for(int i=0; i < 256; ++i) { + for(int j=0; j < 256; ++j) { + works.insert(Netmask(start+std::to_string(i)+":"+std::to_string(j)+"::/64")).second=i*j; + } + } + + for(int i=0; i < 256; ++i) { + for(int j=0; j < 256; ++j) { + BOOST_CHECK_EQUAL(works.lookup(ComboAddress(start+std::to_string(i)+":"+std::to_string(j)+"::"+std::to_string(i)+":"+std::to_string(j)))->second, i*j); + } + } + + start="2001:123:"; + for(int i=0; i < 256; ++i) { + for(int j=0; j < 256; ++j) { + BOOST_CHECK_EQUAL(works.lookup(ComboAddress(start+std::to_string(i)+":"+std::to_string(j)+"::"+std::to_string(i)+":"+std::to_string(j))), (void*)0); + } + } +} + +BOOST_AUTO_TEST_CASE(test_removal) { + std::string prefix = "192."; + NetmaskTree nmt(true); + + size_t count = 0; + for(unsigned int i = 0; i < 256; ++i) { + for(unsigned int j = 16; j <= 32; ++j) { + nmt.insert(Netmask(prefix + std::to_string(i) +".127.255/"+std::to_string(j))).second = j; + count++; + } + } + + BOOST_CHECK_EQUAL(nmt.size(), count); + + for(unsigned int i = 0; i < 256; ++i) { + ComboAddress key(prefix + std::to_string(i) + ".127.255"); + const auto result = nmt.lookup(key); + BOOST_CHECK_EQUAL(result->first.getBits(), 32); + BOOST_CHECK_EQUAL(result->first.getMaskedNetwork().toString(), key.toString()); + BOOST_CHECK_EQUAL(result->second, 32); + } + + for(unsigned int i = 0; i < 256; ++i) { + for(unsigned int j = 32; j >= 16; --j) { + ComboAddress key(prefix + std::to_string(i) + ".127.255"); + nmt.erase(Netmask(key, j)); + const auto result = nmt.lookup(key); + + if (j > 16) { + BOOST_REQUIRE(result != nullptr); + BOOST_CHECK_EQUAL(result->first.getBits(), j-1); + BOOST_CHECK_EQUAL(result->first.getMaskedNetwork().toString(), Netmask(key, j-1).getMaskedNetwork().toString()); + BOOST_CHECK_EQUAL(result->second, j - 1); + } + else { + BOOST_CHECK(result == nullptr); + } + } + } + + BOOST_CHECK_EQUAL(nmt.size(), 0); + BOOST_CHECK(nmt.empty()); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/pdns/test-nmtree.cc b/pdns/test-nmtree.cc deleted file mode 100644 index 22ec6ff9c..000000000 --- a/pdns/test-nmtree.cc +++ /dev/null @@ -1,142 +0,0 @@ -#define BOOST_TEST_DYN_LINK -#define BOOST_TEST_NO_MAIN -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include -#include -#include "iputils.hh" - -using namespace boost; - -BOOST_AUTO_TEST_SUITE(test_nmtree) - -BOOST_AUTO_TEST_CASE(test_basic) { - NetmaskTree nmt; - nmt.insert(Netmask("130.161.252.0/24")).second=0; - nmt.insert(Netmask("130.161.0.0/16")).second=1; - nmt.insert(Netmask("130.0.0.0/8")).second=2; - - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("213.244.168.210")), (void*)0); - auto found=nmt.lookup(ComboAddress("130.161.252.29")); - BOOST_CHECK(found); - BOOST_CHECK_EQUAL(found->second, 0); - found=nmt.lookup(ComboAddress("130.161.180.1")); - BOOST_CHECK(found); - BOOST_CHECK_EQUAL(found->second, 1); - - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("130.255.255.255"))->second, 2); - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("130.161.252.255"))->second, 0); - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("130.161.253.255"))->second, 1); - - found=nmt.lookup(ComboAddress("130.145.180.1")); - BOOST_CHECK(found); - BOOST_CHECK_EQUAL(found->second, 2); - - nmt.clear(); - BOOST_CHECK(!nmt.lookup(ComboAddress("130.161.180.1"))); - - nmt.insert(Netmask("::1")).second=1; - nmt.insert(Netmask("::/0")).second=0; - nmt.insert(Netmask("fe80::/16")).second=2; - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("130.161.253.255")), (void*)0); - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("::2"))->second, 0); - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("::ffff"))->second, 0); - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("::1"))->second, 1); - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("fe80::1"))->second, 2); -} - -BOOST_AUTO_TEST_CASE(test_single) { - NetmaskTree nmt; - nmt.insert(Netmask("127.0.0.0/8")).second=1; - BOOST_CHECK_EQUAL(nmt.lookup(ComboAddress("127.0.0.1"))->second, 1); -} - -BOOST_AUTO_TEST_CASE(test_scale) { - string start="192.168."; - NetmaskTree works; - for(int i=0; i < 256; ++i) { - for(int j=0; j < 256; ++j) { - works.insert(Netmask(start+std::to_string(i)+"."+std::to_string(j))).second=i*j; - } - } - - for(int i=0; i < 256; ++i) { - for(int j=0; j < 256; ++j) { - BOOST_CHECK_EQUAL(works.lookup(ComboAddress(start+std::to_string(i)+"."+std::to_string(j)))->second, i*j); - } - } - - start="130.161."; - for(int i=0; i < 256; ++i) { - for(int j=0; j < 256; ++j) { - BOOST_CHECK_EQUAL(works.lookup(ComboAddress(start+std::to_string(i)+"."+std::to_string(j))), (void*)0); - } - } - - start="2000:123:"; - for(int i=0; i < 256; ++i) { - for(int j=0; j < 256; ++j) { - works.insert(Netmask(start+std::to_string(i)+":"+std::to_string(j)+"::/64")).second=i*j; - } - } - - for(int i=0; i < 256; ++i) { - for(int j=0; j < 256; ++j) { - BOOST_CHECK_EQUAL(works.lookup(ComboAddress(start+std::to_string(i)+":"+std::to_string(j)+"::"+std::to_string(i)+":"+std::to_string(j)))->second, i*j); - } - } - - start="2001:123:"; - for(int i=0; i < 256; ++i) { - for(int j=0; j < 256; ++j) { - BOOST_CHECK_EQUAL(works.lookup(ComboAddress(start+std::to_string(i)+":"+std::to_string(j)+"::"+std::to_string(i)+":"+std::to_string(j))), (void*)0); - } - } -} - -BOOST_AUTO_TEST_CASE(test_removal) { - std::string prefix = "192."; - NetmaskTree nmt(true); - - size_t count = 0; - for(unsigned int i = 0; i < 256; ++i) { - for(unsigned int j = 16; j <= 32; ++j) { - nmt.insert(Netmask(prefix + std::to_string(i) +".127.255/"+std::to_string(j))).second = j; - count++; - } - } - - BOOST_CHECK_EQUAL(nmt.size(), count); - - for(unsigned int i = 0; i < 256; ++i) { - ComboAddress key(prefix + std::to_string(i) + ".127.255"); - const auto result = nmt.lookup(key); - BOOST_CHECK_EQUAL(result->first.getBits(), 32); - BOOST_CHECK_EQUAL(result->first.getMaskedNetwork().toString(), key.toString()); - BOOST_CHECK_EQUAL(result->second, 32); - } - - for(unsigned int i = 0; i < 256; ++i) { - for(unsigned int j = 32; j >= 16; --j) { - ComboAddress key(prefix + std::to_string(i) + ".127.255"); - nmt.erase(Netmask(key, j)); - const auto result = nmt.lookup(key); - - if (j > 16) { - BOOST_REQUIRE(result != nullptr); - BOOST_CHECK_EQUAL(result->first.getBits(), j-1); - BOOST_CHECK_EQUAL(result->first.getMaskedNetwork().toString(), Netmask(key, j-1).getMaskedNetwork().toString()); - BOOST_CHECK_EQUAL(result->second, j - 1); - } - else { - BOOST_CHECK(result == nullptr); - } - } - } - - BOOST_CHECK_EQUAL(nmt.size(), 0); - BOOST_CHECK(nmt.empty()); -} - -BOOST_AUTO_TEST_SUITE_END()