From: Remi Gacogne Date: Thu, 29 Dec 2016 09:49:34 +0000 (+0100) Subject: Merge pull request #4762 from rgacogne/suffixmatchnode-existing-node X-Git-Tag: dnsdist-1.1.0~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2fb8f5aff6c2caadbd9c491bbc01c355f06d5fe;p=thirdparty%2Fpdns.git Merge pull request #4762 from rgacogne/suffixmatchnode-existing-node SuffixMatchNode: Fix an insertion issue for an existing node --- c2fb8f5aff6c2caadbd9c491bbc01c355f06d5fe diff --cc pdns/test-dnsname_cc.cc index a4275460d2,5e6c5041c4..fc63ccee22 --- a/pdns/test-dnsname_cc.cc +++ b/pdns/test-dnsname_cc.cc @@@ -491,59 -491,15 +491,66 @@@ BOOST_AUTO_TEST_CASE(test_suffixmatch) smn.add(g_rootdnsname); // block the root BOOST_CHECK(smn.check(DNSName("a.root-servers.net."))); + + DNSName examplenet("example.net."); + DNSName net("net."); + smn.add(examplenet); + smn.add(net); + BOOST_CHECK(smn.check(examplenet)); + BOOST_CHECK(smn.check(net)); } +BOOST_AUTO_TEST_CASE(test_suffixmatch_tree) { + SuffixMatchTree smt; + DNSName ezdns("ezdns.it."); + smt.add(ezdns, ezdns); + + smt.add(DNSName("org.").getRawLabels(), DNSName("org.")); + + DNSName wwwpowerdnscom("www.powerdns.com."); + DNSName wwwezdnsit("www.ezdns.it."); + BOOST_REQUIRE(smt.lookup(wwwezdnsit)); + BOOST_CHECK_EQUAL(*smt.lookup(wwwezdnsit), ezdns); + BOOST_CHECK(smt.lookup(wwwpowerdnscom) == nullptr); + + BOOST_REQUIRE(smt.lookup(DNSName("www.powerdns.org."))); + BOOST_CHECK_EQUAL(*smt.lookup(DNSName("www.powerdns.org.")), DNSName("org.")); + BOOST_REQUIRE(smt.lookup(DNSName("www.powerdns.oRG."))); + BOOST_CHECK_EQUAL(*smt.lookup(DNSName("www.powerdns.oRG.")), DNSName("org.")); + + smt.add(DNSName("news.bbc.co.uk."), DNSName("news.bbc.co.uk.")); + BOOST_REQUIRE(smt.lookup(DNSName("news.bbc.co.uk."))); + BOOST_CHECK_EQUAL(*smt.lookup(DNSName("news.bbc.co.uk.")), DNSName("news.bbc.co.uk.")); + BOOST_REQUIRE(smt.lookup(DNSName("www.news.bbc.co.uk."))); + BOOST_CHECK_EQUAL(*smt.lookup(DNSName("www.news.bbc.co.uk.")), DNSName("news.bbc.co.uk.")); + BOOST_REQUIRE(smt.lookup(DNSName("www.www.www.www.www.news.bbc.co.uk."))); + BOOST_CHECK_EQUAL(*smt.lookup(DNSName("www.www.www.www.www.news.bbc.co.uk.")), DNSName("news.bbc.co.uk.")); + BOOST_CHECK(smt.lookup(DNSName("images.bbc.co.uk.")) == nullptr); + BOOST_CHECK(smt.lookup(DNSName("www.news.gov.uk.")) == nullptr); + + smt.add(g_rootdnsname, g_rootdnsname); // block the root + BOOST_REQUIRE(smt.lookup(DNSName("a.root-servers.net."))); + BOOST_CHECK_EQUAL(*smt.lookup(DNSName("a.root-servers.net.")), g_rootdnsname); + + DNSName apowerdnscom("a.powerdns.com."); + DNSName bpowerdnscom("b.powerdns.com."); + smt.add(apowerdnscom, apowerdnscom); + smt.add(bpowerdnscom, bpowerdnscom); + BOOST_REQUIRE(smt.lookup(apowerdnscom)); + BOOST_CHECK_EQUAL(*smt.lookup(apowerdnscom), apowerdnscom); + BOOST_REQUIRE(smt.lookup(bpowerdnscom)); + BOOST_CHECK_EQUAL(*smt.lookup(bpowerdnscom), bpowerdnscom); + + DNSName examplenet("example.net."); + DNSName net("net."); + smt.add(examplenet, examplenet); + smt.add(net, net); + BOOST_REQUIRE(smt.lookup(examplenet)); + BOOST_CHECK_EQUAL(*smt.lookup(examplenet), examplenet); + BOOST_REQUIRE(smt.lookup(net)); + BOOST_CHECK_EQUAL(*smt.lookup(net), net); +} + BOOST_AUTO_TEST_CASE(test_concat) { DNSName first("www."), second("powerdns.com.");