]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
Merge branch 'master' into trac2108_3
authorMukund Sivaraman <muks@isc.org>
Mon, 17 Sep 2012 12:17:13 +0000 (17:47 +0530)
committerMukund Sivaraman <muks@isc.org>
Mon, 17 Sep 2012 12:17:13 +0000 (17:47 +0530)
Conflicts fixed:
src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc
src/lib/datasrc/memory/treenode_rrset.cc
src/lib/datasrc/memory/treenode_rrset.h

1  2 
configure.ac
src/lib/datasrc/memory/Makefile.am
src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc
src/lib/datasrc/memory/treenode_rrset.cc
src/lib/datasrc/memory/treenode_rrset.h

diff --cc configure.ac
Simple merge
index d34633d3426d6cc4990e3d70fbdc623561efea0a,b04647c36614b8e9e7a4d7d4e0e9d90479e3008b..168c2ab46da64b9e024a563a5d388092538cc6b9
@@@ -15,16 -15,6 +15,17 @@@ libdatasrc_memory_la_SOURCES += rdatase
  libdatasrc_memory_la_SOURCES += treenode_rrset.h treenode_rrset.cc
  libdatasrc_memory_la_SOURCES += rdata_serialization.h rdata_serialization.cc
  libdatasrc_memory_la_SOURCES += zone_data.h zone_data.cc
+ libdatasrc_memory_la_SOURCES += segment_object_holder.h
  libdatasrc_memory_la_SOURCES += zone_table.h zone_table.cc
 +libdatasrc_memory_la_SOURCES += memory_client.h memory_client.cc
 +libdatasrc_memory_la_SOURCES += logger.h logger.cc
 +nodist_libdatasrc_memory_la_SOURCES = memory_messages.h memory_messages.cc
 +
  EXTRA_DIST  = rdata_serialization_priv.cc
 +
 +BUILT_SOURCES = memory_messages.h memory_messages.cc
 +memory_messages.h memory_messages.cc: Makefile memory_messages.mes
 +      $(top_builddir)/src/lib/log/compiler/message $(top_srcdir)/src/lib/datasrc/memory/memory_messages.mes
 +
 +EXTRA_DIST += memory_messages.mes
 +CLEANFILES += memory_messages.h memory_messages.cc
index c83c034366aef166865dfc300628503e0ceca687,41f369079f854c6926bc7e9e4760672f6fa98083..182cca682003e7b29da4efe9be08706ee80b12cc
@@@ -149,39 -152,86 +154,86 @@@ checkBasicFields(const AbstractRRset& a
      EXPECT_EQ(expected_sigcount, actual_rrset.getRRsigDataCount());
  }
  
+ // The following two are trivial wrapper to create a shared pointer
+ // version of TreeNodeRRset object in order to work around dubious
+ // behavior of some C++ compiler: they reject getting a const reference to
+ // a temporary non-copyable object.
+ boost::shared_ptr<TreeNodeRRset>
+ createRRset(const RRClass& rrclass, const ZoneNode* node,
+             const RdataSet* rdataset, bool dnssec_ok)
+ {
+     return (boost::shared_ptr<TreeNodeRRset>(
+                 new TreeNodeRRset(rrclass, node, rdataset, dnssec_ok)));
+ }
+ boost::shared_ptr<TreeNodeRRset>
+ createRRset(const Name& realname, const RRClass& rrclass, const ZoneNode* node,
+             const RdataSet* rdataset, bool dnssec_ok)
+ {
+     return (boost::shared_ptr<TreeNodeRRset>(
+                 new TreeNodeRRset(realname, rrclass, node, rdataset,
+                                   dnssec_ok)));
+ }
  TEST_F(TreeNodeRRsetTest, create) {
      // Constructed with RRSIG, and it should be visible.
-     checkBasicFields(TreeNodeRRset(rrclass_, www_node_, a_rdataset_, true),
+     checkBasicFields(*createRRset(rrclass_, www_node_, a_rdataset_, true),
 -                     www_name_, rrclass_, RRType::A(), 2, 1);
 +                     www_name_, rrclass_, RRType::A(), 3600, 2, 1);
      // Constructed with RRSIG, and it should be invisible.
-     checkBasicFields(TreeNodeRRset(rrclass_, www_node_, a_rdataset_, false),
+     checkBasicFields(*createRRset(rrclass_, www_node_, a_rdataset_, false),
 -                     www_name_, rrclass_, RRType::A(), 2, 0);
 +                     www_name_, rrclass_, RRType::A(), 3600, 2, 0);
      // Constructed without RRSIG, and it would be visible (but of course won't)
-     checkBasicFields(TreeNodeRRset(rrclass_, origin_node_, ns_rdataset_, true),
+     checkBasicFields(*createRRset(rrclass_, origin_node_, ns_rdataset_, true),
 -                     origin_name_, rrclass_, RRType::NS(), 1, 0);
 +                     origin_name_, rrclass_, RRType::NS(), 3600, 1, 0);
      // Constructed without RRSIG, and it should be visible
-     checkBasicFields(TreeNodeRRset(rrclass_, origin_node_, ns_rdataset_,
-                                    false),
+     checkBasicFields(*createRRset(rrclass_, origin_node_, ns_rdataset_, false),
 -                     origin_name_, rrclass_, RRType::NS(), 1, 0);
 +                     origin_name_, rrclass_, RRType::NS(), 3600, 1, 0);
      // RRSIG-only case (note the RRset's type is covered type)
-     checkBasicFields(TreeNodeRRset(rrclass_, www_node_, rrsig_only_rdataset_,
-                                    true),
+     checkBasicFields(*createRRset(rrclass_, www_node_, rrsig_only_rdataset_,
+                                   true),
 -                     www_name_, rrclass_, RRType::TXT(), 0, 1);
 +                     www_name_, rrclass_, RRType::TXT(), 3600, 0, 1);
      // RRSIG-only case (note the RRset's type is covered type), but it's
      // invisible
-     checkBasicFields(TreeNodeRRset(rrclass_, www_node_, rrsig_only_rdataset_,
-                                    false),
+     checkBasicFields(*createRRset(rrclass_, www_node_, rrsig_only_rdataset_,
+                                   false),
 -                     www_name_, rrclass_, RRType::TXT(), 0, 0);
 +                     www_name_, rrclass_, RRType::TXT(), 3600, 0, 0);
      // Wildcard substitution
-     checkBasicFields(TreeNodeRRset(match_name_, rrclass_,
-                                    wildcard_node_, wildcard_rdataset_,
-                                    true),
+     checkBasicFields(*createRRset(match_name_, rrclass_,
+                                   wildcard_node_, wildcard_rdataset_,
+                                   true),
 -                     match_name_, rrclass_, RRType::A(), 2, 1);
 +                     match_name_, rrclass_, RRType::A(), 3600, 2, 1);
  }
  
- // Templated if and when we support OutputBuffer version of toWire().
- // Right now, we take a minimalist approach, only implementing testing the
- // renderer version.
+ // The following two templated functions are helper to encapsulate the
+ // concept truncation and handle MessageRenderer and OutputBuffer transparently
+ // in templated test cases.
+ template <typename OutputType>
+ void
+ setOutputLengthLimit(OutputType& output, size_t len_limit) {
+     output.setLengthLimit(len_limit);
+ }
+ template <>
+ void
+ setOutputLengthLimit<OutputBuffer>(OutputBuffer&, size_t) {
+ }
+ template <typename OutputType>
+ bool
+ isOutputTruncated(OutputType& output) {
+     return (output.isTruncated());
+ }
+ template <>
+ bool
+ isOutputTruncated<OutputBuffer>(OutputBuffer&) {
+     return (false);
+ }
+ // Templated so we so can support OutputBuffer version of toWire().
+ // We use the above helper templated functions for some renderer only methods.
+ // We test two sets of cases: normal rendering case and case when truncation
+ // is expected.  The latter is effectively for MessageRenderer only.
+ // If len_limit == 0, we consider it the normal case; otherwise it's for
+ // truncation.  prepended_name isn't used for the truncation case.
  template <typename OutputType>
  void
  checkToWireResult(OutputType& expected_output, OutputType& actual_output,
@@@ -525,4 -566,25 +568,24 @@@ TEST_F(TreeNodeRRsetTest, isSameKind) 
      // Different kind of different RRset class
      EXPECT_FALSE(rrset.isSameKind(*aaaa_rrset_));
  }
 -    EXPECT_THROW(rrset.getTTL(), isc::Unexpected);
+ TEST_F(TreeNodeRRsetTest, unexpectedMethods) {
+     // Note: buffer version of toWire() is checked in the toWire test.
+     TreeNodeRRset rrset(rrclass_, www_node_, a_rdataset_, true);
+     EXPECT_THROW(rrset.setTTL(RRTTL(0)), isc::Unexpected);
+     EXPECT_THROW(rrset.setName(Name("example")), isc::Unexpected);
+     EXPECT_THROW(rrset.addRdata(createRdata(RRType::A(), rrclass_, "0.0.0.0")),
+                  isc::Unexpected);
+     EXPECT_THROW(rrset.getRRsig(), isc::Unexpected);
+     RdataPtr sig_rdata = createRdata(
+         RRType::RRSIG(), rrclass_,
+         "A 5 2 3600 20120814220826 20120715220826 5300 example.com. FAKE");
+     EXPECT_THROW(rrset.addRRsig(sig_rdata), isc::Unexpected);
+     EXPECT_THROW(rrset.addRRsig(*a_rrsig_rrset_), isc::Unexpected);
+     EXPECT_THROW(rrset.addRRsig(a_rrsig_rrset_), isc::Unexpected);
+     EXPECT_THROW(rrset.addRRsig(RRsetPtr()), isc::Unexpected);
+     EXPECT_THROW(rrset.removeRRsig(), isc::Unexpected);
+ }
  }
index 91f81e859b984b36b3f92190978e60c0ebc2258f,dd942450495eaeb0043b284256653b5b010504e4..bbaeff516ba141fc68241b64c25b788335144a7b
@@@ -105,7 -112,7 +112,7 @@@ public
                    const RdataSet* rdataset, bool dnssec_ok) :
          node_(node), rdataset_(rdataset),
          rrsig_count_(rdataset_->getSigRdataCount()), rrclass_(rrclass),
-         dnssec_ok_(dnssec_ok), name_(NULL), realname_buf_(NULL), ttl_(NULL)
 -        dnssec_ok_(dnssec_ok), name_(NULL), realname_(NULL)
++        dnssec_ok_(dnssec_ok), name_(NULL), realname_(NULL), ttl_(NULL)
      {}
  
      /// \brief Constructor for wildcard-expanded owner name.
      /// \throw std::bad_alloc Memory allocation fails
      TreeNodeRRset(const dns::Name& realname, const dns::RRClass& rrclass,
                    const ZoneNode* node, const RdataSet* rdataset,
-                   bool dnssec_ok);
+                   bool dnssec_ok) :
+         node_(node), rdataset_(rdataset),
+         rrsig_count_(rdataset_->getSigRdataCount()), rrclass_(rrclass),
 -        dnssec_ok_(dnssec_ok), name_(NULL), realname_(new dns::Name(realname))
++        dnssec_ok_(dnssec_ok), name_(NULL), realname_(new dns::Name(realname)),
++      ttl_(NULL)
+     {}
  
      virtual ~TreeNodeRRset() {
-         delete[] realname_buf_;
+         delete realname_;
 +        delete ttl_;
          delete name_;
      }
  
@@@ -251,8 -256,7 +258,8 @@@ private
      const dns::RRClass rrclass_;
      const bool dnssec_ok_;
      mutable dns::Name* name_;
-     uint8_t* realname_buf_;
+     const dns::Name* const realname_;
 +    mutable dns::RRTTL* ttl_;
  };
  
  } // namespace memory