BIND 10 trac491, updated. c9a06623e3e6041342046d52f502ce5e478ef29c [trac491] also update cache with our full answer

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Feb 18 14:33:21 UTC 2011


The branch, trac491 has been updated
       via  c9a06623e3e6041342046d52f502ce5e478ef29c (commit)
       via  004816211d6b0f438713c1a4e167be8ac25a356f (commit)
       via  cbc9f118a77f69878f4cebf383db39d984201bae (commit)
      from  949f642c90ab8ad7f0f02c35e383b9eb9e65792a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit c9a06623e3e6041342046d52f502ce5e478ef29c
Author: Jelte Jansen <jelte at isc.org>
Date:   Fri Feb 18 15:32:52 2011 +0100

    [trac491] also update cache with our full answer

commit 004816211d6b0f438713c1a4e167be8ac25a356f
Author: Jelte Jansen <jelte at isc.org>
Date:   Fri Feb 18 14:34:22 2011 +0100

    [trac491] build cache and nsas before asiolink

commit cbc9f118a77f69878f4cebf383db39d984201bae
Author: Jelte Jansen <jelte at isc.org>
Date:   Thu Feb 17 14:44:14 2011 +0100

    [trac491] update tests

-----------------------------------------------------------------------

Summary of changes:
 src/lib/Makefile.am                       |    2 +-
 src/lib/asiolink/recursive_query.cc       |    7 ++++
 src/lib/resolve/resolve.h                 |    6 ++++
 src/lib/resolve/tests/Makefile.am         |    1 +
 src/lib/resolve/tests/resolve_unittest.cc |   46 ++++++++++++++++++++++------
 5 files changed, 51 insertions(+), 11 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 8ab93ba..d5486a0 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -1,2 +1,2 @@
 SUBDIRS = exceptions dns cc config datasrc python xfr bench log \
-          resolve asiolink testutils nsas cache
+          resolve nsas cache asiolink testutils
diff --git a/src/lib/asiolink/recursive_query.cc b/src/lib/asiolink/recursive_query.cc
index 72f8a67..ed923a6 100644
--- a/src/lib/asiolink/recursive_query.cc
+++ b/src/lib/asiolink/recursive_query.cc
@@ -395,6 +395,13 @@ public:
         // until that one comes back to us)
         done_ = true;
         if (resume && !answer_sent_) {
+            // If we have a full successful answer, let's store that
+            // as well
+            // (note: we can either do this or only cache answers
+            // we receive, but in that case we'd need to re-do all
+            // answer processing, e.g. cname handling etc)
+            cache_.update(*answer_message_);
+
             resolvercallback_->success(answer_message_);
         } else {
             resolvercallback_->failure();
diff --git a/src/lib/resolve/resolve.h b/src/lib/resolve/resolve.h
index 944691d..4544eb5 100644
--- a/src/lib/resolve/resolve.h
+++ b/src/lib/resolve/resolve.h
@@ -50,6 +50,9 @@ void makeErrorMessage(isc::dns::MessagePtr answer_message,
 /// the Opcode). This allows for direct usage of makeErrorMessage(),
 /// as well as ResolveCache.lookup().
 ///
+/// Raises an isc::dns::InvalidMessageOperation if reponse_message is
+/// not in RENDER mode.
+///
 /// \param query_message The query message to take the Question, Qid,
 ///                      and Opcode from.
 /// \param response_message The fresh response message to initialize
@@ -65,6 +68,9 @@ void initResponseMessage(const isc::dns::Message& query_message,
 /// Opcode Query). This allows for direct usage of makeErrorMessage(),
 /// as well as ResolveCache.lookup().
 ///
+/// Raises an isc::dns::InvalidMessageOperation if reponse_message is
+/// not in RENDER mode.
+///
 /// \param question The question to place in the Question section
 /// \param response_message The fresh response message to initialize
 ///                         (must be type Message::RENDER)
diff --git a/src/lib/resolve/tests/Makefile.am b/src/lib/resolve/tests/Makefile.am
index 3b5f41a..e669384 100644
--- a/src/lib/resolve/tests/Makefile.am
+++ b/src/lib/resolve/tests/Makefile.am
@@ -19,6 +19,7 @@ run_unittests_SOURCES += resolver_callback_unittest.cc
 run_unittests_SOURCES += response_classifier_unittest.cc
 
 run_unittests_LDADD = $(GTEST_LDADD)
+run_unittests_LDADD +=  $(top_builddir)/src/lib/exceptions/libexceptions.la
 run_unittests_LDADD +=  $(top_builddir)/src/lib/resolve/libresolve.la
 run_unittests_LDADD +=  $(top_builddir)/src/lib/dns/libdns++.la
 
diff --git a/src/lib/resolve/tests/resolve_unittest.cc b/src/lib/resolve/tests/resolve_unittest.cc
index fd68f16..85d264d 100644
--- a/src/lib/resolve/tests/resolve_unittest.cc
+++ b/src/lib/resolve/tests/resolve_unittest.cc
@@ -122,21 +122,47 @@ TEST_F(ResolveHelperFunctionsTest, makeErrorMessageNonEmptyMessage) {
 }
 
 void
-compareSections(const MessagePtr message_a, const MessagePtr message_b,
+compareSections(const Message& message_a, const Message& 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)
+    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));
+    EXPECT_TRUE(rrs_a == message_a.endSection(section));
+    EXPECT_TRUE(rrs_b == message_b.endSection(section));
+}
+
+TEST_F(ResolveHelperFunctionsTest, initResponseMessage) {
+    Message response_parse(Message::PARSE);
+    EXPECT_THROW(isc::resolve::initResponseMessage(*message_a_,
+                                                   response_parse),
+                 isc::dns::InvalidMessageOperation);
+    EXPECT_THROW(isc::resolve::initResponseMessage(*question_,
+                                                   response_parse),
+                 isc::dns::InvalidMessageOperation);
+    
+    Message response1(Message::RENDER);
+    isc::resolve::initResponseMessage(*message_a_, response1);
+    ASSERT_EQ(message_a_->getOpcode(), response1.getOpcode());
+    ASSERT_EQ(message_a_->getQid(), response1.getQid());
+    isc::dns::QuestionIterator qi = response1.beginQuestion();
+    ASSERT_EQ(*question_, **qi);
+    ASSERT_TRUE(++qi == response1.endQuestion());
+
+    Message response2(Message::RENDER);
+    isc::resolve::initResponseMessage(*question_, response2);
+    ASSERT_EQ(Opcode::QUERY(), response2.getOpcode());
+    ASSERT_EQ(0, response2.getQid());
+    qi = response2.beginQuestion();
+    ASSERT_EQ(*question_, **qi);
+    ASSERT_TRUE(++qi == response2.endQuestion());
 }
 
 TEST_F(ResolveHelperFunctionsTest, copyAnswerMessage) {
@@ -164,9 +190,9 @@ TEST_F(ResolveHelperFunctionsTest, copyAnswerMessage) {
               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);
+    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




More information about the bind10-changes mailing list