Parcourir la source

[1064] Tests for GLUE_OK mode

It should just go trough NS delegation points (but not trough DNAME
ones).
Michal 'vorner' Vaner il y a 13 ans
Parent
commit
978ae99ac4
1 fichiers modifiés avec 62 ajouts et 2 suppressions
  1. 62 2
      src/lib/datasrc/tests/database_unittest.cc

+ 62 - 2
src/lib/datasrc/tests/database_unittest.cc

@@ -390,11 +390,12 @@ doFindTest(shared_ptr<DatabaseClient::Finder> finder,
            ZoneFinder::Result expected_result,
            const std::vector<std::string>& expected_rdatas,
            const std::vector<std::string>& expected_sig_rdatas,
-           const isc::dns::Name& expected_name = isc::dns::Name::ROOT_NAME())
+           const isc::dns::Name& expected_name = isc::dns::Name::ROOT_NAME(),
+           const ZoneFinder::FindOptions options = ZoneFinder::FIND_DEFAULT)
 {
     SCOPED_TRACE("doFindTest " + name.toText() + " " + type.toText());
     ZoneFinder::FindResult result =
-        finder->find(name, type, NULL, ZoneFinder::FIND_DEFAULT);
+        finder->find(name, type, NULL, options);
     ASSERT_EQ(expected_result, result.code) << name << " " << type;
     if (expected_rdatas.size() > 0) {
         checkRRset(result.rrset, expected_name != Name(".") ? expected_name :
@@ -839,6 +840,65 @@ TEST_F(DatabaseClientTest, find) {
                               ZoneFinder::FIND_DEFAULT),
                  DataSourceError);
     EXPECT_FALSE(current_database_->searchRunning());
+
+    // Glue-OK mode. Just go trough NS delegations down (but not trough
+    // DNAME) and pretend it is not there.
+    {
+        SCOPED_TRACE("Glue OK");
+        expected_rdatas.clear();
+        expected_sig_rdatas.clear();
+        doFindTest(finder, isc::dns::Name("ns.delegation.example.org."),
+                   isc::dns::RRType::AAAA(), isc::dns::RRType::AAAA(),
+                   isc::dns::RRTTL(3600), ZoneFinder::NXRRSET, expected_rdatas,
+                   expected_sig_rdatas,
+                   isc::dns::Name("ns.delegation.example.org."),
+                   ZoneFinder::FIND_GLUE_OK);
+        doFindTest(finder, isc::dns::Name("nothere.delegation.example.org."),
+                   isc::dns::RRType::AAAA(), isc::dns::RRType::AAAA(),
+                   isc::dns::RRTTL(3600), ZoneFinder::NXDOMAIN,
+                   expected_rdatas, expected_sig_rdatas,
+                   isc::dns::Name("nothere.delegation.example.org."),
+                   ZoneFinder::FIND_GLUE_OK);
+        expected_rdatas.push_back("192.0.2.1");
+        doFindTest(finder, isc::dns::Name("ns.delegation.example.org."),
+                   isc::dns::RRType::A(), isc::dns::RRType::A(),
+                   isc::dns::RRTTL(3600), ZoneFinder::SUCCESS, expected_rdatas,
+                   expected_sig_rdatas,
+                   isc::dns::Name("ns.delegation.example.org."),
+                   ZoneFinder::FIND_GLUE_OK);
+        expected_rdatas.clear();
+        expected_rdatas.push_back("ns.example.com.");
+        expected_rdatas.push_back("ns.delegation.example.org.");
+        expected_sig_rdatas.clear();
+        expected_sig_rdatas.push_back("NS 5 3 3600 20000101000000 "
+                                      "20000201000000 12345 example.org. "
+                                      "FAKEFAKEFAKE");
+        // When we request the NS, it should be SUCCESS, not DELEGATION
+        // (different in GLUE_OK)
+        doFindTest(finder, isc::dns::Name("delegation.example.org."),
+                   isc::dns::RRType::NS(), isc::dns::RRType::NS(),
+                   isc::dns::RRTTL(3600), ZoneFinder::SUCCESS, expected_rdatas,
+                   expected_sig_rdatas, isc::dns::Name("delegation.example.org."),
+                   ZoneFinder::FIND_GLUE_OK);
+        expected_rdatas.clear();
+        expected_rdatas.push_back("dname.example.com.");
+        expected_sig_rdatas.clear();
+        expected_sig_rdatas.push_back("DNAME 5 3 3600 20000101000000 "
+                                      "20000201000000 12345 example.org. "
+                                      "FAKEFAKEFAKE");
+        doFindTest(finder, isc::dns::Name("below.dname.example.org."),
+                   isc::dns::RRType::A(), isc::dns::RRType::DNAME(),
+                   isc::dns::RRTTL(3600), ZoneFinder::DNAME, expected_rdatas,
+                   expected_sig_rdatas, isc::dns::Name("dname.example.org."),
+                   ZoneFinder::FIND_GLUE_OK);
+        EXPECT_FALSE(current_database_->searchRunning());
+        doFindTest(finder, isc::dns::Name("below.dname.example.org."),
+                   isc::dns::RRType::AAAA(), isc::dns::RRType::DNAME(),
+                   isc::dns::RRTTL(3600), ZoneFinder::DNAME, expected_rdatas,
+                   expected_sig_rdatas, isc::dns::Name("dname.example.org."),
+                   ZoneFinder::FIND_GLUE_OK);
+        EXPECT_FALSE(current_database_->searchRunning());
+    } // End of GLUE_OK
 }
 
 TEST_F(DatabaseClientTest, getOrigin) {