BIND 10 trac1600, updated. ede52d8098375352ae87a124619ad78f01fa2e28 [1600] Add a handle class for MessageRederer(), and add two tests for it.

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Mar 12 06:26:36 UTC 2012


The branch, trac1600 has been updated
       via  ede52d8098375352ae87a124619ad78f01fa2e28 (commit)
      from  d5ec40dace9fddaaec9873cfca2d670e8d35650a (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 ede52d8098375352ae87a124619ad78f01fa2e28
Author: Xie Jiagui <xiejiagui at cnnic.cn>
Date:   Mon Mar 12 14:24:38 2012 +0800

    [1600] Add a handle class for MessageRederer(),and add two tests for
    it.

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

Summary of changes:
 src/bin/auth/auth_srv.cc                |   25 ++++-----
 src/bin/auth/tests/auth_srv_unittest.cc |   24 +++++++++
 src/lib/dns/messagerendererhandle.h     |   84 +++++++++++++++++++++++++++++++
 3 files changed, 120 insertions(+), 13 deletions(-)
 create mode 100644 src/lib/dns/messagerendererhandle.h

-----------------------------------------------------------------------
diff --git a/src/bin/auth/auth_srv.cc b/src/bin/auth/auth_srv.cc
index 73f5592..747c124 100644
--- a/src/bin/auth/auth_srv.cc
+++ b/src/bin/auth/auth_srv.cc
@@ -36,7 +36,7 @@
 
 #include <dns/edns.h>
 #include <dns/exceptions.h>
-#include <dns/messagerenderer.h>
+#include <dns/messagerendererhandle.h>
 #include <dns/name.h>
 #include <dns/question.h>
 #include <dns/opcode.h>
@@ -99,8 +99,7 @@ public:
 
     IOService io_service_;
 
-    MessageRenderer renderer_;
-    
+    MessageRendererHandle renderer_handle_;
     /// Currently non-configurable, but will be.
     static const uint16_t DEFAULT_LOCAL_UDPSIZE = 4096;
 
@@ -558,18 +557,18 @@ AuthSrvImpl::processNormalQuery(const IOMessage& io_message, MessagePtr message,
         return (true);
     }
 
-    renderer_.setBuffer(buffer.get());
+    renderer_handle_.setBuffer(buffer.get());
     const bool udp_buffer =
         (io_message.getSocket().getProtocol() == IPPROTO_UDP);
-    renderer_.setLengthLimit(udp_buffer ? remote_bufsize : 65535);
+    renderer_handle_.setLengthLimit(udp_buffer ? remote_bufsize : 65535);
     if (tsig_context.get() != NULL) {
-        message->toWire(renderer_, *tsig_context);
+        message->toWire(renderer_handle_.getRenderer(), *tsig_context);
     } else {
-        message->toWire(renderer_);
+        message->toWire(renderer_handle_.getRenderer());
     }
-    renderer_.setBuffer(NULL);
+    renderer_handle_.setBuffer(NULL);
     LOG_DEBUG(auth_logger, DBG_AUTH_MESSAGES, AUTH_SEND_NORMAL_RESPONSE)
-              .arg(renderer_.getLength()).arg(message->toText());
+              .arg(renderer_handle_.getLength()).arg(message->toText());
 
     return (true);
 }
@@ -688,13 +687,13 @@ AuthSrvImpl::processNotify(const IOMessage& io_message, MessagePtr message,
     message->setHeaderFlag(Message::HEADERFLAG_AA);
     message->setRcode(Rcode::NOERROR());
 
-    renderer_.setBuffer(buffer.get());
+    renderer_handle_.setBuffer(buffer.get());
     if (tsig_context.get() != NULL) {
-        message->toWire(renderer_, *tsig_context);
+        message->toWire(renderer_handle_.getRenderer(), *tsig_context);
     } else {
-        message->toWire(renderer_);
+        message->toWire(renderer_handle_.getRenderer());
     }
-    renderer_.setBuffer(NULL);
+    renderer_handle_.setBuffer(NULL);
     return (true);
 }
 
diff --git a/src/bin/auth/tests/auth_srv_unittest.cc b/src/bin/auth/tests/auth_srv_unittest.cc
index f00efd9..3fc69bf 100644
--- a/src/bin/auth/tests/auth_srv_unittest.cc
+++ b/src/bin/auth/tests/auth_srv_unittest.cc
@@ -120,6 +120,7 @@ protected:
             }
         }
     }
+
     IOService ios_;
     DNSService dnss_;
     MockSession statistics_session;
@@ -1038,4 +1039,27 @@ TEST_F(AuthSrvTest, listenAddresses) {
                                 "Released tokens");
 }
 
+TEST_F(AuthSrvTest, processNormalQuery_reuseRenderer1) {
+    UnitTestUtil::createRequestMessage(request_message, Opcode::QUERY(),
+                                       default_qid, Name("example.com"),
+                                       RRClass::IN(), RRType::NS());
+    
+    request_message.setHeaderFlag(Message::HEADERFLAG_AA);
+    createRequestPacket(request_message, IPPROTO_UDP);
+    server.processMessage(*io_message, parse_message, response_obuffer, &dnsserv);
+    EXPECT_NE(request_message.getRcode(), parse_message->getRcode());
+}
+
+TEST_F(AuthSrvTest, processNormalQuery_reuseRenderer2) {
+    UnitTestUtil::createRequestMessage(request_message, Opcode::QUERY(),
+                                       default_qid, Name("example.com"),
+                                       RRClass::IN(), RRType::SOA());
+    
+    request_message.setHeaderFlag(Message::HEADERFLAG_AA);
+    createRequestPacket(request_message, IPPROTO_UDP);
+    server.processMessage(*io_message, parse_message, response_obuffer, &dnsserv);
+    ConstQuestionPtr question = *parse_message->beginQuestion();
+    EXPECT_STRNE(question->getType().toText().c_str(),RRType::NS().toText().c_str());
+}
+
 }
diff --git a/src/lib/dns/messagerendererhandle.h b/src/lib/dns/messagerendererhandle.h
new file mode 100644
index 0000000..be813c4
--- /dev/null
+++ b/src/lib/dns/messagerendererhandle.h
@@ -0,0 +1,84 @@
+// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+#ifndef __MESSAGERENDERERHANDLE_H
+#define __MESSAGERENDERERHANDLE_H 1
+
+#include <dns/messagerenderer.h>
+
+namespace isc {
+
+namespace dns {
+
+/// The \c MessageRendererHandle is a handle class for
+/// \c MessageRendere.
+///
+/// A \c MessageRendererHandle object is constructed with a \c MessageRenderer
+/// object.
+class MessageRendererHandle {
+    ///
+    /// \name Constructors, Assignment Operator and Destructor.
+    ///
+    /// Note: The copy constructor and the assignment operator are
+    /// intentionally defined as private.
+    //@{
+private:
+    MessageRendererHandle(const MessageRendererHandle& renderer);
+    MessageRendererHandle& operator=(const MessageRendererHandle& renderer);
+public:
+    /// The constructor.
+    ///
+    /// \param use_cache Whether to enable hot spot cache for lookup results.
+    /// \param xfrout_client Communication interface with a separate xfrout
+    /// process.  It's normally a reference to an xfr::XfroutClient object,
+    /// but can refer to a local mock object for te
+    explicit MessageRendererHandle():renderer_(NULL){
+        renderer_ = new MessageRenderer();
+    }
+    ~MessageRendererHandle() {
+        if(NULL != renderer_) {
+            delete renderer_;
+            renderer_ = NULL;
+        }
+    }
+    //@}
+public:
+    /// \brief Return the length of data written in the internal buffer.
+    size_t getLength() const {
+           return (renderer_->getLength());
+    }
+    /// \brief Set the buffer.
+    void setBuffer(isc::util::OutputBuffer* buffer) {
+        renderer_->setBuffer(buffer);
+    }
+    MessageRenderer& getRenderer() const {
+        return *renderer_;
+    }
+    /// \brief Set the maximum length of rendered data that can fit in the
+    /// corresponding DNS message without truncation.
+    ///
+    /// \param len The maximum length in bytes.
+    void setLengthLimit(size_t len) {
+        renderer_->setLengthLimit(len);
+    }
+private:
+    MessageRenderer * renderer_;
+};
+}
+}
+#endif // __MESSAGERENDERERHANDLE_H
+
+// Local Variables:
+// mode: c++
+// End:



More information about the bind10-changes mailing list