From: Mukund Sivaraman Date: Mon, 17 Sep 2012 12:17:13 +0000 (+0530) Subject: Merge branch 'master' into trac2108_3 X-Git-Tag: trac2351_base~70^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ee0950bcf935175ebed77a407ad6881e2b482bef;p=thirdparty%2Fkea.git Merge branch 'master' into trac2108_3 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 --- ee0950bcf935175ebed77a407ad6881e2b482bef diff --cc src/lib/datasrc/memory/Makefile.am index d34633d342,b04647c366..168c2ab46d --- a/src/lib/datasrc/memory/Makefile.am +++ b/src/lib/datasrc/memory/Makefile.am @@@ -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 diff --cc src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc index c83c034366,41f369079f..182cca6820 --- a/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc +++ b/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc @@@ -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 + createRRset(const RRClass& rrclass, const ZoneNode* node, + const RdataSet* rdataset, bool dnssec_ok) + { + return (boost::shared_ptr( + new TreeNodeRRset(rrclass, node, rdataset, dnssec_ok))); + } + + boost::shared_ptr + createRRset(const Name& realname, const RRClass& rrclass, const ZoneNode* node, + const RdataSet* rdataset, bool dnssec_ok) + { + return (boost::shared_ptr( + 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 + void + setOutputLengthLimit(OutputType& output, size_t len_limit) { + output.setLengthLimit(len_limit); + } + template <> + void + setOutputLengthLimit(OutputBuffer&, size_t) { + } + + template + bool + isOutputTruncated(OutputType& output) { + return (output.isTruncated()); + } + template <> + bool + isOutputTruncated(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 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_)); } + + 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.getTTL(), isc::Unexpected); + 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); + } } diff --cc src/lib/datasrc/memory/treenode_rrset.h index 91f81e859b,dd94245049..bbaeff516b --- a/src/lib/datasrc/memory/treenode_rrset.h +++ b/src/lib/datasrc/memory/treenode_rrset.h @@@ -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. @@@ -122,11 -129,14 +129,16 @@@ /// \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