From: JINMEI Tatuya Date: Fri, 2 Mar 2012 07:08:28 +0000 (-0800) Subject: [1607] make sure ignoring irrelevant cases. X-Git-Tag: trac2351_base~226^2~116^2~41^2~46^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de4b10ee8d53f5c9537ba98ad401f84d008efd69;p=thirdparty%2Fkea.git [1607] make sure ignoring irrelevant cases. getAdditional() is now non virtual function and implements the common code check. the actual processing is delegated to a protected virtual function. --- diff --git a/src/lib/datasrc/tests/testdata/contexttest.zone b/src/lib/datasrc/tests/testdata/contexttest.zone index c01ed9d20b..7227ced13f 100644 --- a/src/lib/datasrc/tests/testdata/contexttest.zone +++ b/src/lib/datasrc/tests/testdata/contexttest.zone @@ -1,7 +1,7 @@ ;; test zone file used for ZoneFinderContext tests. ;; RRSIGs are (obviouslly) faked ones for testing. -example.org. 3600 IN SOA ns1.example.org. bugs.x.w.example.org. 20 3600 300 3600000 3600 +example.org. 3600 IN SOA ns1.example.org. bugs.x.w.example.org. 22 3600 300 3600000 3600 example.org. 3600 IN NS ns1.example.org. example.org. 3600 IN NS ns2.example.org. example.org. 3600 IN MX 1 mx1.example.org. @@ -27,3 +27,9 @@ ns1.a.example.org. 3600 IN A 192.0.2.5 ns2.a.example.org. 3600 IN A 192.0.2.6 ns2.a.example.org. 3600 IN AAAA 2001:db8::6 mx.a.example.org. 3600 IN A 192.0.2.7 + +;; CNAME +alias.example.org. 3600 IN CNAME cname.example.org. + +;; DNAME +dname.example.org. 3600 IN DNAME dname.example.com. diff --git a/src/lib/datasrc/tests/zone_finder_context_unittest.cc b/src/lib/datasrc/tests/zone_finder_context_unittest.cc index ae0f75f1c8..f59f9a7f68 100644 --- a/src/lib/datasrc/tests/zone_finder_context_unittest.cc +++ b/src/lib/datasrc/tests/zone_finder_context_unittest.cc @@ -256,4 +256,29 @@ TEST_P(ZoneFinderContextTest, getAdditionalWithSIG) { sigresult_sets.begin(), sigresult_sets.end()); } +TEST_P(ZoneFinderContextTest, getAdditionalNoOP) { + // getAdditional() is only meaningful after SUCCESS or DELEGATION. + + ZoneFinderContextPtr ctx = finder_->find(Name("nxdomain.example.org"), + RRType::NS()); + EXPECT_EQ(ZoneFinder::NXDOMAIN, ctx->code); + ctx->getAdditional(REQUESTED_BOTH, result_sets_); + EXPECT_TRUE(result_sets_.empty()); + + ctx = finder_->find(qzone_, RRType::TXT()); + EXPECT_EQ(ZoneFinder::NXRRSET, ctx->code); + ctx->getAdditional(REQUESTED_BOTH, result_sets_); + EXPECT_TRUE(result_sets_.empty()); + + ctx = finder_->find(Name("alias.example.org."), RRType::A()); + EXPECT_EQ(ZoneFinder::CNAME, ctx->code); + ctx->getAdditional(REQUESTED_BOTH, result_sets_); + EXPECT_TRUE(result_sets_.empty()); + + ctx = finder_->find(Name("www.dname.example.org."), RRType::A()); + EXPECT_EQ(ZoneFinder::DNAME, ctx->code); + ctx->getAdditional(REQUESTED_BOTH, result_sets_); + EXPECT_TRUE(result_sets_.empty()); +} + } diff --git a/src/lib/datasrc/zone.h b/src/lib/datasrc/zone.h index d2aeeffd50..d8ba30167f 100644 --- a/src/lib/datasrc/zone.h +++ b/src/lib/datasrc/zone.h @@ -181,7 +181,21 @@ public: return ((flags_ & RESULT_NSEC3_SIGNED) != 0); } - virtual void getAdditional( + void getAdditional( + const std::vector& requested_types, + std::vector& result) + { + // Perform common checks, and delegate the process the default + // or specialized implementation. + if (code != SUCCESS && code != DELEGATION) { + return; + } + + getAdditionalImpl(requested_types, result); + } + + protected: + virtual void getAdditionalImpl( const std::vector& requested_types, std::vector& result); diff --git a/src/lib/datasrc/zone_finder_context.cc b/src/lib/datasrc/zone_finder_context.cc index 0853a2135c..ba2aaeb7e1 100644 --- a/src/lib/datasrc/zone_finder_context.cc +++ b/src/lib/datasrc/zone_finder_context.cc @@ -54,8 +54,8 @@ getAdditionalAddrs(ZoneFinder& finder, const Name& name, } void -ZoneFinder::Context::getAdditional(const vector& requested_types, - vector& result) +ZoneFinder::Context::getAdditionalImpl(const vector& requested_types, + vector& result) { RdataIteratorPtr rdata_iterator(rrset->getRdataIterator()); ZoneFinder::FindOptions options = ZoneFinder::FIND_DEFAULT;