Browse Source

[master] Add tests for RRSIG related parts of RRset class

Mukund Sivaraman 12 years ago
parent
commit
0c63626ea1
1 changed files with 66 additions and 0 deletions
  1. 66 0
      src/lib/dns/tests/rrset_unittest.cc

+ 66 - 0
src/lib/dns/tests/rrset_unittest.cc

@@ -272,4 +272,70 @@ TEST_F(RRsetTest, LeftShiftOperator) {
     oss << rrset_a;
     EXPECT_EQ(rrset_a.toText(), oss.str());
 }
+
+class RRsetRRSIGTest : public ::testing::Test {
+protected:
+    RRsetRRSIGTest() : test_name("test.example.com")
+    {
+        rrset_a = new RRset(test_name, RRClass::IN(),
+                            RRType::A(), RRTTL(3600));
+        rrset_a->addRdata(in::A("192.0.2.1"));
+        rrset_a->addRdata(in::A("192.0.2.2"));
+
+        rrset_aaaa = new RRset(test_name, RRClass::IN(),
+                               RRType::AAAA(), RRTTL(3600));
+        rrset_aaaa->addRdata(in::AAAA("2001:db8::1234"));
+
+        rrset_rrsig = RRsetPtr(new RRset(test_name, RRClass::IN(),
+                                         RRType::RRSIG(), RRTTL(3600)));
+        rrset_rrsig->addRdata(generic::RRSIG("AAAA 5 3 7200 20100322084538 "
+                                             "20100220084538 1 example.com "
+                                             "FAKEFAKEFAKEFAKE"));
+        rrset_aaaa->addRRsig(rrset_rrsig);
+    }
+
+    const Name test_name;
+    RRset* rrset_a;           // A RRset with two RDATAs
+    RRset* rrset_aaaa;        // AAAA RRset with one RDATA with RRSIG
+    RRsetPtr rrset_rrsig;       // RRSIG for the AAAA RRset
+};
+
+TEST_F(RRsetRRSIGTest, getRRsig) {
+    RRsetPtr sp = rrset_a->getRRsig();
+    EXPECT_EQ(static_cast<void*>(NULL), sp.get());
+
+    sp = rrset_aaaa->getRRsig();
+    EXPECT_NE(static_cast<void*>(NULL), sp.get());
+}
+
+TEST_F(RRsetRRSIGTest, addRRsig) {
+    RRsetPtr sp = rrset_a->getRRsig();
+    EXPECT_EQ(static_cast<void*>(NULL), sp.get());
+
+    rrset_rrsig = RRsetPtr(new RRset(test_name, RRClass::IN(),
+                                     RRType::RRSIG(), RRTTL(3600)));
+    // one signature algorithm (5 = RSA/SHA-1)
+    rrset_rrsig->addRdata(generic::RRSIG("A 5 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    // another signature algorithm (3 = DSA/SHA-1)
+    rrset_rrsig->addRdata(generic::RRSIG("A 3 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    rrset_a->addRRsig(rrset_rrsig);
+
+    sp = rrset_a->getRRsig();
+    EXPECT_NE(static_cast<void*>(NULL), sp.get());
+    EXPECT_EQ(2, sp->getRdataCount());
+
+    // add to existing RRSIG
+    rrset_rrsig = RRsetPtr(new RRset(test_name, RRClass::IN(),
+                                     RRType::RRSIG(), RRTTL(3600)));
+    // another signature algorithm (4 = ECC)
+    rrset_rrsig->addRdata(generic::RRSIG("A 4 3 3600 "
+                                         "20000101000000 20000201000000 "
+                                         "12345 example.com. FAKEFAKEFAKE"));
+    rrset_a->addRRsig(rrset_rrsig);
+    EXPECT_EQ(3, sp->getRdataCount());
+}
 }