]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[1607] make sure ignoring irrelevant cases.
authorJINMEI Tatuya <jinmei@isc.org>
Fri, 2 Mar 2012 07:08:28 +0000 (23:08 -0800)
committerJINMEI Tatuya <jinmei@isc.org>
Fri, 2 Mar 2012 07:08:28 +0000 (23:08 -0800)
getAdditional() is now non virtual function and implements the common code
check.  the actual processing is delegated to a protected virtual function.

src/lib/datasrc/tests/testdata/contexttest.zone
src/lib/datasrc/tests/zone_finder_context_unittest.cc
src/lib/datasrc/zone.h
src/lib/datasrc/zone_finder_context.cc

index c01ed9d20bec868e2999ec8d3621ed07d8a5498c..7227ced13fca62d4f398df7de2f5774d398b106d 100644 (file)
@@ -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.
index ae0f75f1c847a4d1766109e4f33a4956257859be..f59f9a7f68f4bb3936acd3a21118629658e4c1f6 100644 (file)
@@ -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());
+}
+
 }
index d2aeeffd508969f985f69e75bd8bbb6ebbf03778..d8ba30167f539cbe535659a940d1ba6ea09aff21 100644 (file)
@@ -181,7 +181,21 @@ public:
             return ((flags_ & RESULT_NSEC3_SIGNED) != 0);
         }
 
-        virtual void getAdditional(
+        void getAdditional(
+            const std::vector<isc::dns::RRType>& requested_types,
+            std::vector<isc::dns::ConstRRsetPtr>& 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<isc::dns::RRType>& requested_types,
             std::vector<isc::dns::ConstRRsetPtr>& result);
 
index 0853a2135cb7273dab687ab01ff03d7567b20304..ba2aaeb7e1a4fd3ddec037530fe9134612432156 100644 (file)
@@ -54,8 +54,8 @@ getAdditionalAddrs(ZoneFinder& finder, const Name& name,
 }
 
 void
-ZoneFinder::Context::getAdditional(const vector<RRType>& requested_types,
-                                   vector<ConstRRsetPtr>& result)
+ZoneFinder::Context::getAdditionalImpl(const vector<RRType>& requested_types,
+                                       vector<ConstRRsetPtr>& result)
 {
     RdataIteratorPtr rdata_iterator(rrset->getRdataIterator());
     ZoneFinder::FindOptions options = ZoneFinder::FIND_DEFAULT;