[svn] commit: r1338 - in /trunk/src/lib/auth/tests: datasrc_unittest.cc test_datasrc.cc testdata/q_wild2_a

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Mar 11 22:48:20 UTC 2010


Author: each
Date: Thu Mar 11 22:48:19 2010
New Revision: 1338

Log:
Added a unit test for a CNAME wildcard

Added:
    trunk/src/lib/auth/tests/testdata/q_wild2_a
Modified:
    trunk/src/lib/auth/tests/datasrc_unittest.cc
    trunk/src/lib/auth/tests/test_datasrc.cc

Modified: trunk/src/lib/auth/tests/datasrc_unittest.cc
==============================================================================
--- trunk/src/lib/auth/tests/datasrc_unittest.cc (original)
+++ trunk/src/lib/auth/tests/datasrc_unittest.cc Thu Mar 11 22:48:19 2010
@@ -259,6 +259,67 @@
     headerCheck(msg, Rcode::NOERROR(), true, true, true, 0, 2, 0);
 }
 
+TEST_F(DataSrcTest, WildcardCname) {
+    // Check that wildcard answers containing CNAMES are followed
+    // correctly
+    readAndProcessQuery(msg, "testdata/q_wild2_a");
+
+    headerCheck(msg, Rcode::NOERROR(), true, true, true, 4, 4, 6);
+
+    RRsetIterator rit = msg.beginSection(Section::ANSWER());
+    RRsetPtr rrset = *rit;
+    EXPECT_EQ(Name("www.wild2.example.com"), rrset->getName());
+    EXPECT_EQ(RRType::CNAME(), rrset->getType());
+    EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+    RdataIteratorPtr it = rrset->getRdataIterator();
+    it->first();
+    EXPECT_EQ("www.example.com.", it->getCurrent().toText());
+    it->next();
+    EXPECT_TRUE(it->isLast());
+
+    ++rit;
+    ++rit;
+    rrset = *rit;
+    EXPECT_EQ(Name("www.example.com"), rrset->getName());
+    EXPECT_EQ(RRType::A(), rrset->getType());
+    EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+    it = rrset->getRdataIterator();
+    it->first();
+    EXPECT_EQ("192.0.2.1", it->getCurrent().toText());
+    it->next();
+    EXPECT_TRUE(it->isLast());
+
+    rit = msg.beginSection(Section::AUTHORITY());
+    rrset = *rit;
+    EXPECT_EQ(Name("example.com"), rrset->getName());
+    EXPECT_EQ(RRType::NS(), rrset->getType());
+    EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+    it = rrset->getRdataIterator();
+    it->first();
+    EXPECT_EQ("dns01.example.com.", it->getCurrent().toText());
+    it->next();
+    EXPECT_EQ("dns02.example.com.", it->getCurrent().toText());
+    it->next();
+    EXPECT_EQ("dns03.example.com.", it->getCurrent().toText());
+    it->next();
+    EXPECT_TRUE(it->isLast());
+
+    rit = msg.beginSection(Section::ADDITIONAL());
+    rrset = *rit;
+    EXPECT_EQ(Name("dns01.example.com"), rrset->getName());
+    EXPECT_EQ(RRType::A(), rrset->getType());
+    EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+    it = rrset->getRdataIterator();
+    it->first();
+    EXPECT_EQ("192.0.2.1", it->getCurrent().toText());
+    it->next();
+    EXPECT_TRUE(it->isLast());
+}
+
 TEST_F(DataSrcTest, AuthDelegation) {
     readAndProcessQuery(msg, "testdata/q_sql1");
 

Modified: trunk/src/lib/auth/tests/test_datasrc.cc
==============================================================================
--- trunk/src/lib/auth/tests/test_datasrc.cc (original)
+++ trunk/src/lib/auth/tests/test_datasrc.cc Thu Mar 11 22:48:19 2010
@@ -57,6 +57,7 @@
 const Name cnameext("cname-ext.example.com");
 const Name dname("dname.example.com");
 const Name wild("*.wild.example.com");
+const Name wild2("*.wild2.example.com");
 const Name subzone("subzone.example.com");
 const Name loop1("loop1.example.com");
 const Name loop2("loop2.example.com");
@@ -80,6 +81,8 @@
 RRsetPtr dns03_nsec;
 RRsetPtr wild_a;
 RRsetPtr wild_nsec;
+RRsetPtr wild2_cname;
+RRsetPtr wild2_nsec;
 RRsetPtr dname_dname;
 RRsetPtr dname_nsec;
 RRsetPtr sql1_ns;
@@ -295,13 +298,33 @@
 
     wild_nsec = RRsetPtr(new RRset(wild, RRClass::IN(),
                                    RRType::NSEC(), RRTTL(3600)));
-    wild_nsec->addRdata(generic::NSEC("www.example.com. A RRSIG NSEC"));
+    wild_nsec->addRdata(generic::NSEC("*.wild2.example.com. A RRSIG NSEC"));
 
     rrsig = RRsetPtr(new RRset(wild, RRClass::IN(), RRType::RRSIG(),
                                RRTTL(3600)));
 
     rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. OoGYslRj4xjZnBuzgOqsrvkDAHWycmQzbUxCRmgWnCbXiobJK7/ynONH3jm8G3vGlU0lwpHkhNs6cUK+6Nu8W49X3MT0Xksl/brroLcXYLi3vfxnYUNMMpXdeFl6WNNfoJRo90F/f/TWXAClRrDS29qiG3G1PEJZikIxZsZ0tyM="));
     wild_nsec->addRRsig(rrsig);
+
+    // *.wild2.example.com HERE
+    wild2_cname = RRsetPtr(new RRset(wild2, RRClass::IN(), RRType::CNAME(),
+                                     RRTTL(3600)));
+    wild2_cname->addRdata(generic::CNAME("www.example.com"));
+
+    rrsig = RRsetPtr(new RRset(wild2, RRClass::IN(), RRType::RRSIG(),
+                               RRTTL(3600)));
+    rrsig->addRdata(generic::RRSIG("CNAME 5 3 3600 20100410212307 20100311212307 33495 example.com. pGHtGdRBi4GKFSKszi6SsKvuBLDX8dFhZubU0tMojQ9SJuiFNF+WtxvdAYuUaoWP/9VLUaYmiw5u7JnzmR84DiXZPEs6DtD+UJdOZhaS7V7RTpE+tMOfVQBLpUnRWYtlTTmiBpFquzf3DdIxgUFhEPEuJJyp3LFRxJObCaq9 nvI="));
+    wild2_cname->addRRsig(rrsig);
+
+    wild2_nsec = RRsetPtr(new RRset(wild2, RRClass::IN(),
+                                    RRType::NSEC(), RRTTL(3600)));
+    wild2_nsec->addRdata(generic::NSEC("www.example.com. CNAME RRSIG NSEC"));
+
+    rrsig = RRsetPtr(new RRset(wild2, RRClass::IN(), RRType::RRSIG(),
+                               RRTTL(3600)));
+
+    rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100410212307 20100311212307 33495 example.com. EuSzh6or8mbvwru2H7fyYeMpW6J8YZ528rabU38V/lMN0TdamghIuCneAvSNaZgwk2MSN1bWpZqB2kAipaM/ZI9/piLlTvVjjOQ8pjk0auwCEqT7Z7Qng3E92O9yVzO+WHT9QZn/fR6t60392In4IvcBGjZyjzQk8njIwbui xGA="));
+    wild2_nsec->addRRsig(rrsig);
 
     // foo.example.com
     foo_cname = RRsetPtr(new RRset(foo, RRClass::IN(), RRType::CNAME(),
@@ -324,7 +347,7 @@
     // cname-int.example.com
     cnameint_cname = RRsetPtr(new RRset(cnameint, RRClass::IN(),
                                         RRType::CNAME(), RRTTL(3600)));
-    cnameint_cname->addRdata(generic::CNAME("www.example.com"));
+    cnameint_cname->addRdata(generic::CNAME("www.example.com."));
 
     rrsig = RRsetPtr(new RRset(cnameint, RRClass::IN(), RRType::RRSIG(),
                                RRTTL(3600)));
@@ -606,9 +629,20 @@
                 target.addRRset(wild_a);
             } else if (rdtype == RRType::NSEC()) {
                 target.addRRset(wild_nsec);
-                flags |= REFERRAL;
-            } else {
-                flags |= TYPE_NOT_FOUND;
+            } else {
+                flags |= TYPE_NOT_FOUND;
+            }
+        } else if (name == wild2) {
+            if (any) {
+                target.addRRset(wild2_cname);
+                target.addRRset(wild2_nsec);
+            } else if (rdtype == RRType::NSEC()) {
+                target.addRRset(wild2_nsec);
+            } else {
+                target.addRRset(wild2_cname);
+                if (rdtype != RRType::CNAME()) {
+                    flags |= CNAME_FOUND;
+                }
             }
         } else if (name == www) {
             if (any) {
@@ -769,8 +803,10 @@
             target = subzone;
         } else if (qname < wild) {
             target = www;
+        } else if (qname < wild2) {
+            target = wild;
         } else {
-            target = wild;
+            target = wild2;
         }
     } else {
         if (qname >= sql1 || qname < www_sql1) {




More information about the bind10-changes mailing list