Browse Source

[trac551] Some more tests from review

Michal 'vorner' Vaner 14 years ago
parent
commit
310d15bf23
1 changed files with 59 additions and 16 deletions
  1. 59 16
      src/lib/datasrc/tests/memory_datasrc_unittest.cc

+ 59 - 16
src/lib/datasrc/tests/memory_datasrc_unittest.cc

@@ -197,6 +197,7 @@ public:
              &rr_child_dname_},
             {"example.com. 300 IN A 192.0.2.10", &rr_out_},
             {"*.wild.example.org. 300 IN A 192.0.2.1", &rr_wild_},
+            {"foo.wild.example.org. 300 IN A 192.0.2.3", &rr_under_wild_},
             {"wild.*.foo.example.org. 300 IN A 192.0.2.1", &rr_emptywild_},
             {"wild.*.foo.*.bar.example.org. 300 IN A 192.0.2.1",
              &rr_nested_emptywild_},
@@ -254,6 +255,7 @@ public:
     RRsetPtr rr_nested_emptywild_;
     RRsetPtr rr_nswild_, rr_dnamewild_;
     RRsetPtr rr_child_wild_;
+    RRsetPtr rr_under_wild_;
 
     /**
      * \brief Test one find query to the zone.
@@ -297,21 +299,22 @@ public:
                     EXPECT_EQ(answer, find_result.rrset);
                 } else if (check_wild_answer) {
                     RdataIteratorPtr expectedIt(answer->getRdataIterator());
-                    RdataIteratorPtr gotIt(answer->getRdataIterator());
-                    while (!expectedIt->isLast() && !gotIt->isLast()) {
+                    RdataIteratorPtr actualIt(
+                        find_result.rrset->getRdataIterator());
+                    while (!expectedIt->isLast() && !actualIt->isLast()) {
                         EXPECT_EQ(0, expectedIt->getCurrent().compare(
-                            gotIt->getCurrent())) << "The RRs differ ('" <<
+                            actualIt->getCurrent())) << "The RRs differ ('" <<
                             expectedIt->getCurrent().toText() << "', '" <<
-                            gotIt->getCurrent().toText() << "')";
+                            actualIt->getCurrent().toText() << "')";
                         expectedIt->next();
-                        gotIt->next();
+                        actualIt->next();
                     }
                     EXPECT_TRUE(expectedIt->isLast()) <<
                         "Result has less RRs than expected";
-                    EXPECT_TRUE(gotIt->isLast()) <<
+                    EXPECT_TRUE(actualIt->isLast()) <<
                         "Result has more RRs than expected";
-                    EXPECT_EQ(answer->getType(),
-                        find_result.rrset->getType());
+                    EXPECT_EQ(answer->getClass(),
+                        find_result.rrset->getClass());
                     EXPECT_EQ(answer->getType(),
                         find_result.rrset->getType());
                     EXPECT_EQ(answer->getTTL(),
@@ -571,11 +574,6 @@ TEST_F(MemoryZoneTest, glue) {
     findTest(Name("www.child.example.org"), RRType::A(), Zone::DELEGATION,
              true, rr_child_ns_, NULL, NULL, Zone::FIND_GLUE_OK);
 
-    // TODO:
-    // glue name would match a wildcard under a zone cut: wildcard match
-    // shouldn't happen under a cut and result must be PARTIALMATCH
-    // (This case cannot be tested yet)
-
     // nested cut case.  The glue should be found.
     findTest(rr_grandchild_glue_->getName(), RRType::AAAA(),
              Zone::SUCCESS,
@@ -699,7 +697,8 @@ TEST_F(MemoryZoneTest, wildcard) {
      */
     EXPECT_EQ(SUCCESS, zone_.add(rr_wild_));
 
-    // Search at the parent. The parent will not have the A, but it will be here
+    // Search at the parent. The parent will not have the A, but it will
+    // be in the wildcard (so check the wildcard isn't matched at the parent)
     {
         SCOPED_TRACE("Search at parrent");
         findTest(Name("wild.example.org"), RRType::A(), Zone::NXRRSET);
@@ -724,17 +723,37 @@ TEST_F(MemoryZoneTest, wildcard) {
         findTest(Name("a.b.wild.example.org"), RRType::A(), Zone::SUCCESS,
             false, rr_wild_, NULL, NULL, Zone::FIND_DEFAULT, true);
     }
+
+    EXPECT_EQ(SUCCESS, zone_.add(rr_under_wild_));
+    {
+        SCOPED_TRACE("Search under non-wildcard");
+        findTest(Name("bar.foo.wild.example.org"), RRType::A(),
+            Zone::NXDOMAIN);
+    }
 }
 
 /*
  * Test that we don't match a wildcard if we get under delegation.
+ * By 4.3.3 of RFC1034:
+ * "Wildcard RRs do not apply:
+ *   - When the query is in another zone.  That is, delegation cancels
+ *     the wildcard defaults."
  */
 TEST_F(MemoryZoneTest, delegatedWildcard) {
     EXPECT_EQ(SUCCESS, zone_.add(rr_child_wild_));
     EXPECT_EQ(SUCCESS, zone_.add(rr_child_ns_));
 
-    findTest(Name("a.child.example.org"), RRType::A(), Zone::DELEGATION, true,
-        rr_child_ns_);
+    {
+        SCOPED_TRACE("Looking under delegation point");
+        findTest(Name("a.child.example.org"), RRType::A(), Zone::DELEGATION,
+            true, rr_child_ns_);
+    }
+
+    {
+        SCOPED_TRACE("Looking under delegation point in GLUE_OK mode");
+        findTest(Name("a.child.example.org"), RRType::A(), Zone::DELEGATION,
+            true, rr_child_ns_);
+    }
 }
 
 // Tests combination of wildcard and ANY.
@@ -800,6 +819,12 @@ TEST_F(MemoryZoneTest, emptyWildcard) {
             ConstRRsetPtr(), &wildTarget);
         EXPECT_EQ(0, wildTarget.size());
     }
+
+    {
+        SCOPED_TRACE("Asking outside the wildcard");
+        findTest(Name("wild.bar.foo.example.org"), RRType::A(),
+            Zone::NXDOMAIN);
+    }
 }
 
 // Same as emptyWildcard, but with multiple * in the path.
@@ -812,6 +837,24 @@ TEST_F(MemoryZoneTest, nestedEmptyWildcard) {
             Zone::SUCCESS, true, rr_nested_emptywild_);
     }
 
+    {
+        SCOPED_TRACE("Matching against lower wildcard");
+        findTest(Name("baz.foo.*.bar.example.org"), RRType::A(),
+            Zone::NXRRSET);
+    }
+
+    {
+        SCOPED_TRACE("Trying to match over both wildcards at once");
+        findTest(Name("baz.foo.baz.bar.example.org"), RRType::A(),
+            Zone::NXDOMAIN);
+    }
+
+    {
+        SCOPED_TRACE("Trying to match over upper wildcard");
+        findTest(Name("*.foo.baz.bar.example.org"), RRType::A(),
+            Zone::NXDOMAIN);
+    }
+
     // Domains to test
     const char* names[] = {
         "*.foo.*.bar.example.org",