BIND 10 trac2000, updated. 0408d1e6472105cb9c762ac3ef7082d47dc6a720 [2000] Add OPT::toWire() implementations

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Jan 27 08:32:24 UTC 2014


The branch, trac2000 has been updated
       via  0408d1e6472105cb9c762ac3ef7082d47dc6a720 (commit)
      from  a001951886e545f2f0a299fccbeb7fb9388deccf (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 0408d1e6472105cb9c762ac3ef7082d47dc6a720
Author: Mukund Sivaraman <muks at isc.org>
Date:   Mon Jan 27 13:46:19 2014 +0530

    [2000] Add OPT::toWire() implementations

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

Summary of changes:
 src/lib/dns/rdata/generic/opt_41.cc     |   22 +++++++++++++----
 src/lib/dns/tests/rdata_opt_unittest.cc |   39 ++++++++++++++++++++++++++++---
 2 files changed, 54 insertions(+), 7 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/dns/rdata/generic/opt_41.cc b/src/lib/dns/rdata/generic/opt_41.cc
index 176fa39..6b292e9 100644
--- a/src/lib/dns/rdata/generic/opt_41.cc
+++ b/src/lib/dns/rdata/generic/opt_41.cc
@@ -164,13 +164,27 @@ OPT::toText() const {
 }
 
 void
-OPT::toWire(OutputBuffer&) const {
-    // nothing to do, as this simple version doesn't support any options.
+OPT::toWire(OutputBuffer& buffer) const {
+    BOOST_FOREACH(const PseudoRR& pseudo_rr, impl_->pseudo_rrs_) {
+        buffer.writeUint16(pseudo_rr.getCode());
+        const uint16_t length = pseudo_rr.getLength();
+        buffer.writeUint16(length);
+        if (length > 0) {
+            buffer.writeData(pseudo_rr.getData(), length);
+        }
+    }
 }
 
 void
-OPT::toWire(AbstractMessageRenderer&) const {
-    // nothing to do, as this simple version doesn't support any options.
+OPT::toWire(AbstractMessageRenderer& renderer) const {
+    BOOST_FOREACH(const PseudoRR& pseudo_rr, impl_->pseudo_rrs_) {
+        renderer.writeUint16(pseudo_rr.getCode());
+        const uint16_t length = pseudo_rr.getLength();
+        renderer.writeUint16(length);
+        if (length > 0) {
+            renderer.writeData(pseudo_rr.getData(), length);
+        }
+    }
 }
 
 int
diff --git a/src/lib/dns/tests/rdata_opt_unittest.cc b/src/lib/dns/tests/rdata_opt_unittest.cc
index e5695ac..756f8d3 100644
--- a/src/lib/dns/tests/rdata_opt_unittest.cc
+++ b/src/lib/dns/tests/rdata_opt_unittest.cc
@@ -35,7 +35,14 @@ class Rdata_OPT_Test : public RdataTest {
     // there's nothing to specialize
 };
 
-const generic::OPT rdata_opt;
+const uint8_t rdata_opt_wiredata[] = {
+    // Option code
+    0x00, 0x03,
+    // Option length
+    0x00, 0x03,
+    // Option data
+    0x00, 0x01, 0x02
+};
 
 TEST_F(Rdata_OPT_Test, createFromText) {
     // OPT RR cannot be created from text.
@@ -78,21 +85,47 @@ TEST_F(Rdata_OPT_Test, createFromLexer) {
 }
 
 TEST_F(Rdata_OPT_Test, toWireBuffer) {
+    const generic::OPT rdata_opt =
+        dynamic_cast<const generic::OPT&>
+        (*rdataFactoryFromFile(RRType("OPT"), RRClass("IN"),
+                               "rdata_opt_fromWire1", 2));
+
+    obuffer.clear();
     rdata_opt.toWire(obuffer);
-    EXPECT_EQ(0, obuffer.getLength());
+
+    EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
+                        obuffer.getData(),
+                        obuffer.getLength(),
+                        rdata_opt_wiredata, sizeof(rdata_opt_wiredata));
 }
 
 TEST_F(Rdata_OPT_Test, toWireRenderer) {
+    const generic::OPT rdata_opt =
+        dynamic_cast<const generic::OPT&>
+        (*rdataFactoryFromFile(RRType("OPT"), RRClass("IN"),
+                               "rdata_opt_fromWire1", 2));
+
+    renderer.clear();
     rdata_opt.toWire(renderer);
-    EXPECT_EQ(0, obuffer.getLength());
+
+    EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
+                        renderer.getData(),
+                        renderer.getLength(),
+                        rdata_opt_wiredata, sizeof(rdata_opt_wiredata));
 }
 
 TEST_F(Rdata_OPT_Test, toText) {
+    // empty OPT
+    const generic::OPT rdata_opt;
+
     EXPECT_THROW(rdata_opt.toText(),
                  isc::InvalidOperation);
 }
 
 TEST_F(Rdata_OPT_Test, compare) {
+    // empty OPT
+    const generic::OPT rdata_opt;
+
     EXPECT_THROW(rdata_opt.compare(
                   *rdataFactoryFromFile(RRType::OPT(), RRClass::CH(),
                                         "rdata_opt_fromWire1", 2)),



More information about the bind10-changes mailing list