Browse Source

[trac497] added some more tests

Jelte Jansen 14 years ago
parent
commit
4d29fda48f
1 changed files with 125 additions and 65 deletions
  1. 125 65
      src/lib/resolve/tests/resolve_unittest.cc

+ 125 - 65
src/lib/resolve/tests/resolve_unittest.cc

@@ -30,83 +30,143 @@ namespace {
 class ResolveHelperFunctionsTest : public ::testing::Test {
 public:
     ResolveHelperFunctionsTest() :
-        message_(new Message(Message::RENDER)),
+        message_a_(new Message(Message::RENDER)),
+        message_b_(new Message(Message::RENDER)),
         question_(new Question(Name("www.example.com"), RRClass::IN(), RRType::A()))
     {
-        message_->setOpcode(Opcode::QUERY());
-        message_->setRcode(Rcode::NOERROR());
-        message_->addQuestion(question_);
+        createMessageA();
+        createMessageB();
     };
 
-    MessagePtr message_;
-    QuestionPtr question_;
+    void createMessageA() {
+        message_a_->setOpcode(Opcode::QUERY());
+        message_a_->setRcode(Rcode::NOERROR());
+        message_a_->addQuestion(question_);
+    }
+
+    void createMessageB() {
+        message_b_->setOpcode(Opcode::QUERY());
+        message_b_->setRcode(Rcode::NOERROR());
+        message_b_->addQuestion(question_);
+
+        // We could reuse the same rrset in the different sections,
+        // but to be sure, we create separate ones
+        RRsetPtr answer_rrset(new RRset(Name("www.example.com"),
+                                        RRClass::IN(), RRType::TXT(),
+                                        RRTTL(3600)));
+        answer_rrset->addRdata(rdata::createRdata(RRType::TXT(),
+                                                  RRClass::IN(),
+                                                  "Answer"));
+        message_b_->addRRset(Message::SECTION_ANSWER, answer_rrset);
     
+        RRsetPtr auth_rrset(new RRset(Name("www.example.com"),
+                                        RRClass::IN(), RRType::TXT(),
+                                        RRTTL(3600)));
+        auth_rrset->addRdata(rdata::createRdata(RRType::TXT(),
+                                                  RRClass::IN(),
+                                                  "Authority"));
+        auth_rrset->addRdata(rdata::createRdata(RRType::TXT(),
+                                                  RRClass::IN(),
+                                                  "Rdata"));
+        message_b_->addRRset(Message::SECTION_AUTHORITY, auth_rrset);
+    
+        RRsetPtr add_rrset(new RRset(Name("www.example.com"),
+                                     RRClass::IN(), RRType::TXT(),
+                                     RRTTL(3600)));
+        add_rrset->addRdata(rdata::createRdata(RRType::TXT(),
+                                               RRClass::IN(),
+                                               "Additional"));
+        add_rrset->addRdata(rdata::createRdata(RRType::TXT(),
+                                               RRClass::IN(),
+                                               "Rdata"));
+        add_rrset->addRdata(rdata::createRdata(RRType::TXT(),
+                                               RRClass::IN(),
+                                               "fields."));
+        message_b_->addRRset(Message::SECTION_ADDITIONAL, add_rrset);
+    };
+
+    MessagePtr message_a_;
+    MessagePtr message_b_;
+    QuestionPtr question_;
 };
 
 TEST_F(ResolveHelperFunctionsTest, makeErrorMessageEmptyMessage) {
-    ASSERT_EQ(Rcode::NOERROR(), message_->getRcode());
-    ASSERT_EQ(1, message_->getRRCount(Message::SECTION_QUESTION));
-    ASSERT_EQ(0, message_->getRRCount(Message::SECTION_ANSWER));
-    ASSERT_EQ(0, message_->getRRCount(Message::SECTION_AUTHORITY));
-    ASSERT_EQ(0, message_->getRRCount(Message::SECTION_ADDITIONAL));
-
-    isc::resolve::makeErrorMessage(message_, Rcode::SERVFAIL());
-    EXPECT_EQ(Rcode::SERVFAIL(), message_->getRcode());
-    EXPECT_EQ(1, message_->getRRCount(Message::SECTION_QUESTION));
-    EXPECT_EQ(0, message_->getRRCount(Message::SECTION_ANSWER));
-    EXPECT_EQ(0, message_->getRRCount(Message::SECTION_AUTHORITY));
-    EXPECT_EQ(0, message_->getRRCount(Message::SECTION_ADDITIONAL));
+    ASSERT_EQ(Rcode::NOERROR(), message_a_->getRcode());
+    ASSERT_EQ(1, message_a_->getRRCount(Message::SECTION_QUESTION));
+    ASSERT_EQ(0, message_a_->getRRCount(Message::SECTION_ANSWER));
+    ASSERT_EQ(0, message_a_->getRRCount(Message::SECTION_AUTHORITY));
+    ASSERT_EQ(0, message_a_->getRRCount(Message::SECTION_ADDITIONAL));
+
+    isc::resolve::makeErrorMessage(message_a_, Rcode::SERVFAIL());
+    EXPECT_EQ(Rcode::SERVFAIL(), message_a_->getRcode());
+    EXPECT_EQ(1, message_a_->getRRCount(Message::SECTION_QUESTION));
+    EXPECT_EQ(0, message_a_->getRRCount(Message::SECTION_ANSWER));
+    EXPECT_EQ(0, message_a_->getRRCount(Message::SECTION_AUTHORITY));
+    EXPECT_EQ(0, message_a_->getRRCount(Message::SECTION_ADDITIONAL));
 }
 
 TEST_F(ResolveHelperFunctionsTest, makeErrorMessageNonEmptyMessage) {
-    // We could reuse the same rrset in the different sections,
-    // but to be sure, we create separate ones
-    RRsetPtr answer_rrset(new RRset(Name("www.example.com"),
-                                    RRClass::IN(), RRType::TXT(),
-                                    RRTTL(3600)));
-    answer_rrset->addRdata(rdata::createRdata(RRType::TXT(),
-                                              RRClass::IN(),
-                                              "Answer"));
-    message_->addRRset(Message::SECTION_ANSWER, answer_rrset);
-
-    RRsetPtr auth_rrset(new RRset(Name("www.example.com"),
-                                    RRClass::IN(), RRType::TXT(),
-                                    RRTTL(3600)));
-    auth_rrset->addRdata(rdata::createRdata(RRType::TXT(),
-                                              RRClass::IN(),
-                                              "Authority"));
-    auth_rrset->addRdata(rdata::createRdata(RRType::TXT(),
-                                              RRClass::IN(),
-                                              "Rdata"));
-    message_->addRRset(Message::SECTION_AUTHORITY, auth_rrset);
-
-    RRsetPtr add_rrset(new RRset(Name("www.example.com"),
-                                 RRClass::IN(), RRType::TXT(),
-                                 RRTTL(3600)));
-    add_rrset->addRdata(rdata::createRdata(RRType::TXT(),
-                                           RRClass::IN(),
-                                           "Additional"));
-    add_rrset->addRdata(rdata::createRdata(RRType::TXT(),
-                                           RRClass::IN(),
-                                           "Rdata"));
-    add_rrset->addRdata(rdata::createRdata(RRType::TXT(),
-                                           RRClass::IN(),
-                                           "fields."));
-    message_->addRRset(Message::SECTION_ADDITIONAL, add_rrset);
-
-    ASSERT_EQ(Rcode::NOERROR(), message_->getRcode());
-    ASSERT_EQ(1, message_->getRRCount(Message::SECTION_QUESTION));
-    ASSERT_EQ(1, message_->getRRCount(Message::SECTION_ANSWER));
-    ASSERT_EQ(2, message_->getRRCount(Message::SECTION_AUTHORITY));
-    ASSERT_EQ(3, message_->getRRCount(Message::SECTION_ADDITIONAL));
-
-    isc::resolve::makeErrorMessage(message_, Rcode::FORMERR());
-    EXPECT_EQ(Rcode::FORMERR(), message_->getRcode());
-    EXPECT_EQ(1, message_->getRRCount(Message::SECTION_QUESTION));
-    EXPECT_EQ(0, message_->getRRCount(Message::SECTION_ANSWER));
-    EXPECT_EQ(0, message_->getRRCount(Message::SECTION_AUTHORITY));
-    EXPECT_EQ(0, message_->getRRCount(Message::SECTION_ADDITIONAL));
+
+    ASSERT_EQ(Rcode::NOERROR(), message_b_->getRcode());
+    ASSERT_EQ(1, message_b_->getRRCount(Message::SECTION_QUESTION));
+    ASSERT_EQ(1, message_b_->getRRCount(Message::SECTION_ANSWER));
+    ASSERT_EQ(2, message_b_->getRRCount(Message::SECTION_AUTHORITY));
+    ASSERT_EQ(3, message_b_->getRRCount(Message::SECTION_ADDITIONAL));
+
+    isc::resolve::makeErrorMessage(message_b_, Rcode::FORMERR());
+    EXPECT_EQ(Rcode::FORMERR(), message_b_->getRcode());
+    EXPECT_EQ(1, message_b_->getRRCount(Message::SECTION_QUESTION));
+    EXPECT_EQ(0, message_b_->getRRCount(Message::SECTION_ANSWER));
+    EXPECT_EQ(0, message_b_->getRRCount(Message::SECTION_AUTHORITY));
+    EXPECT_EQ(0, message_b_->getRRCount(Message::SECTION_ADDITIONAL));
+}
+
+void
+compareSections(const MessagePtr message_a, const MessagePtr message_b,
+                Message::Section section)
+{
+    RRsetIterator rrs_a = message_a->beginSection(section);
+    RRsetIterator rrs_b = message_b->beginSection(section);
+    while (rrs_a != message_a->endSection(section) &&
+           rrs_b != message_b->endSection(section)
+          ) {
+        EXPECT_EQ(*rrs_a, *rrs_b);
+        ++rrs_a;
+        ++rrs_b;
+    }
+    // can't use EXPECT_EQ here, no eqHelper for endsection comparison
+    EXPECT_TRUE(rrs_a == message_a->endSection(section));
+    EXPECT_TRUE(rrs_b == message_b->endSection(section));
 }
 
+TEST_F(ResolveHelperFunctionsTest, copyAnswerMessage) {
+    message_b_->setRcode(Rcode::NXDOMAIN());
+    
+    ASSERT_NE(message_b_->getRcode(), message_a_->getRcode());
+    ASSERT_NE(message_b_->getRRCount(Message::SECTION_ANSWER),
+              message_a_->getRRCount(Message::SECTION_ANSWER));
+    ASSERT_NE(message_b_->getRRCount(Message::SECTION_AUTHORITY),
+              message_a_->getRRCount(Message::SECTION_AUTHORITY));
+    ASSERT_NE(message_b_->getRRCount(Message::SECTION_ADDITIONAL),
+              message_a_->getRRCount(Message::SECTION_ADDITIONAL));
+    ASSERT_EQ(0, message_a_->getRRCount(Message::SECTION_ANSWER));
+    ASSERT_EQ(0, message_a_->getRRCount(Message::SECTION_AUTHORITY));
+    ASSERT_EQ(0, message_a_->getRRCount(Message::SECTION_ADDITIONAL));
+
+    isc::resolve::copyAnswerMessage(*message_b_, message_a_);
+
+    EXPECT_EQ(message_b_->getRcode(), message_a_->getRcode());
+    ASSERT_EQ(message_b_->getRRCount(Message::SECTION_ANSWER),
+              message_a_->getRRCount(Message::SECTION_ANSWER));
+    ASSERT_EQ(message_b_->getRRCount(Message::SECTION_AUTHORITY),
+              message_a_->getRRCount(Message::SECTION_AUTHORITY));
+    ASSERT_EQ(message_b_->getRRCount(Message::SECTION_ADDITIONAL),
+              message_a_->getRRCount(Message::SECTION_ADDITIONAL));
+
+    
+    compareSections(message_a_, message_b_, Message::SECTION_ANSWER);
+    compareSections(message_a_, message_b_, Message::SECTION_AUTHORITY);
+    compareSections(message_a_, message_b_, Message::SECTION_ADDITIONAL);
+}
 
 } // Anonymous namespace