From: JINMEI Tatuya Date: Wed, 29 Aug 2012 16:49:06 +0000 (-0700) Subject: [2098] added truncation case with 2 RRSIGs X-Git-Tag: trac2351_base~91^2~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b08ec1b998593ef1cf4f4edabcfdfa10bd7afb5b;p=thirdparty%2Fkea.git [2098] added truncation case with 2 RRSIGs --- diff --git a/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc b/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc index 74e26a4888..87c18b07da 100644 --- a/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc +++ b/src/lib/datasrc/memory/tests/treenode_rrset_unittest.cc @@ -47,10 +47,18 @@ protected: ns_rrset_(textToRRset("example.com. 3600 IN NS ns.example.com.")), a_rrset_(textToRRset("www.example.com. 3600 IN A 192.0.2.1\n" "www.example.com. 3600 IN A 192.0.2.2")), + aaaa_rrset_(textToRRset("www.example.com. 3600 IN AAAA " + "2001:db8::1\n")), dname_rrset_(textToRRset("example.com. 3600 IN DNAME d.example.org.")), - rrsig_rrset_(textToRRset("www.example.com. 3600 IN RRSIG " - "A 5 2 3600 20120814220826 20120715220826 " - "1234 example.com. FAKE")), + a_rrsig_rrset_(textToRRset("www.example.com. 3600 IN RRSIG " + "A 5 2 3600 20120814220826 20120715220826 " + "1234 example.com. FAKE")), + aaaa_rrsig_rrset_(textToRRset("www.example.com. 3600 IN RRSIG AAAA 5 2" + " 3600 20120814220826 20120715220826 " + "1234 example.com. FAKE\n" + "www.example.com. 3600 IN RRSIG AAAA 5 2" + " 3600 20120814220826 20120715220826 " + "4321 example.com. FAKE\n")), zone_data_(NULL) {} void SetUp() { @@ -69,8 +77,12 @@ protected: zone_data_->insertName(mem_sgmt_, www_name_, &www_node_); a_rdataset_ = RdataSet::create(mem_sgmt_, encoder_, a_rrset_, - rrsig_rrset_); + a_rrsig_rrset_); www_node_->setData(a_rdataset_); + + aaaa_rdataset_ = RdataSet::create(mem_sgmt_, encoder_, aaaa_rrset_, + aaaa_rrsig_rrset_); + a_rdataset_->next = aaaa_rdataset_; } void TearDown() { ZoneData::destroy(mem_sgmt_, zone_data_, rrclass_); @@ -83,13 +95,15 @@ protected: isc::util::MemorySegmentLocal mem_sgmt_; RdataEncoder encoder_; MessageRenderer renderer_, renderer_expected_; - ConstRRsetPtr ns_rrset_, a_rrset_, dname_rrset_, rrsig_rrset_; + ConstRRsetPtr ns_rrset_, a_rrset_, aaaa_rrset_, dname_rrset_, + a_rrsig_rrset_, aaaa_rrsig_rrset_; ZoneData* zone_data_; ZoneNode* origin_node_; ZoneNode* www_node_; RdataSet* ns_rdataset_; RdataSet* dname_rdataset_; RdataSet* a_rdataset_; + RdataSet* aaaa_rdataset_; }; TEST_F(TreeNodeRRsetTest, create) { @@ -149,16 +163,14 @@ TEST_F(TreeNodeRRsetTest, toWire) { SCOPED_TRACE("with RRSIG, DNSSEC OK"); const TreeNodeRRset rrset1(rrclass_, www_node_, a_rdataset_, true); checkToWireResult(expected_renderer, actual_renderer, rrset1, - www_name_, a_rrset_, rrsig_rrset_, true); - EXPECT_FALSE(actual_renderer.isTruncated()); + www_name_, a_rrset_, a_rrsig_rrset_, true); } { SCOPED_TRACE("with RRSIG, DNSSEC not OK"); const TreeNodeRRset rrset2(rrclass_, www_node_, a_rdataset_, false); checkToWireResult(expected_renderer, actual_renderer, rrset2, - www_name_, a_rrset_, rrsig_rrset_, false); - EXPECT_FALSE(actual_renderer.isTruncated()); + www_name_, a_rrset_, a_rrsig_rrset_, false); } { @@ -166,7 +178,6 @@ TEST_F(TreeNodeRRsetTest, toWire) { const TreeNodeRRset rrset3(rrclass_, origin_node_, ns_rdataset_, true); checkToWireResult(expected_renderer, actual_renderer, rrset3, origin_name_, ns_rrset_, ConstRRsetPtr(), true); - EXPECT_FALSE(actual_renderer.isTruncated()); } { @@ -175,7 +186,6 @@ TEST_F(TreeNodeRRsetTest, toWire) { false); checkToWireResult(expected_renderer, actual_renderer, rrset4, origin_name_, ns_rrset_, ConstRRsetPtr(), false); - EXPECT_FALSE(actual_renderer.isTruncated()); } { @@ -187,7 +197,6 @@ TEST_F(TreeNodeRRsetTest, toWire) { checkToWireResult(expected_renderer, actual_renderer, rrset5, Name("example.org"), dname_rrset_, ConstRRsetPtr(), false); - EXPECT_FALSE(actual_renderer.isTruncated()); } } @@ -224,17 +233,34 @@ TEST_F(TreeNodeRRsetTest, toWireTruncated) { checkTruncationResult(expected_renderer, actual_renderer, TreeNodeRRset(rrclass_, www_node_, a_rdataset_, true), - a_rrset_, rrsig_rrset_, true, + a_rrset_, a_rrsig_rrset_, true, www_name_.getLength() + 14, - 1); + 1); // 1 main RR, no RRSIG - // The first normal RRs should fit in the renderer (the name will be + // The first main RRs should fit in the renderer (the name will be // fully compressed, so its size is 2 bytes), but the RRSIG doesn't. checkTruncationResult(expected_renderer, actual_renderer, TreeNodeRRset(rrclass_, www_node_, a_rdataset_, true), - a_rrset_, rrsig_rrset_, true, - www_name_.getLength() + 14 + 2 + 14, 2); + a_rrset_, a_rrsig_rrset_, true, + www_name_.getLength() + 14 + 2 + 14, + 2); // 2 main RR, no RRSIG + + // This RRset has one main RR and two RRSIGs. Rendering the second RRSIG + // causes truncation. + // First, compute the rendered length for the main RR and a single RRSIG. + // The length of the RRSIG should be the same if we "accidentally" + // rendered the RRSIG for the A RR (which only contains one RRSIG). + expected_renderer.clear(); + aaaa_rrset_->toWire(expected_renderer); + a_rrsig_rrset_->toWire(expected_renderer); + const size_t limit_len = expected_renderer.getLength(); + // Then perform the test + checkTruncationResult(expected_renderer, actual_renderer, + TreeNodeRRset(rrclass_, www_node_, aaaa_rdataset_, + true), + aaaa_rrset_, aaaa_rrsig_rrset_, true, limit_len, + 2); // 1 main RR, 1 RRSIG } void