|
@@ -915,7 +915,29 @@ class TestXfroutSession(TestXfroutSessionBase):
|
|
self.assertTrue(rrsets_equal(test_rr,
|
|
self.assertTrue(rrsets_equal(test_rr,
|
|
r.get_section(Message.SECTION_ANSWER)[1]))
|
|
r.get_section(Message.SECTION_ANSWER)[1]))
|
|
|
|
|
|
- def test_reply_xfrout_query_axfr_maxlen_with_soa2(self):
|
|
|
|
|
|
+ def test_reply_xfrout_query_axfr_maxlen_with_soa_with_tsig(self):
|
|
|
|
+ # Similar to the previous case, but with TSIG. In our test cases
|
|
|
|
+ # the size of the TSIG RR is 81 bytes (key name = example.com,
|
|
|
|
+ # algorithm = hmac-md5)
|
|
|
|
+ soa = RRset(Name('.'), RRClass.IN(), RRType.SOA(), RRTTL(3600))
|
|
|
|
+ soa.add_rdata(Rdata(RRType.SOA(), RRClass.IN(), '. . 0 0 0 0 0'))
|
|
|
|
+ self.mdata = self.create_request_data(zone_name=Name('.'))
|
|
|
|
+ self.xfrsess._soa = soa
|
|
|
|
+ self.xfrsess._tsig_ctx = self.create_mock_tsig_ctx(TSIGError.NOERROR)
|
|
|
|
+ self.xfrsess._tsig_len = 81
|
|
|
|
+ test_rr = create_generic(Name('.'), 65512 - 5 - 81 -
|
|
|
|
+ get_rrset_len(soa))
|
|
|
|
+ self.xfrsess._iterator = [soa, test_rr]
|
|
|
|
+ self.xfrsess._reply_xfrout_query(self.getmsg(), self.sock)
|
|
|
|
+ r, rlen = self.sock.read_msg(need_len=True)
|
|
|
|
+ self.assertEqual(65535, rlen)
|
|
|
|
+ self.assertEqual(2, r.get_rr_count(Message.SECTION_ANSWER))
|
|
|
|
+ self.assertTrue(rrsets_equal(soa,
|
|
|
|
+ r.get_section(Message.SECTION_ANSWER)[0]))
|
|
|
|
+ self.assertTrue(rrsets_equal(test_rr,
|
|
|
|
+ r.get_section(Message.SECTION_ANSWER)[1]))
|
|
|
|
+
|
|
|
|
+ def test_reply_xfrout_query_axfr_maxlen_with_endsoa(self):
|
|
# Similar to the previous test, but the first message cannot contain
|
|
# Similar to the previous test, but the first message cannot contain
|
|
# both SOA and the long RR due to the question section. The second
|
|
# both SOA and the long RR due to the question section. The second
|
|
# message should be able to contain both.
|
|
# message should be able to contain both.
|
|
@@ -933,6 +955,35 @@ class TestXfroutSession(TestXfroutSessionBase):
|
|
r, rlen = self.sock.read_msg(need_len=True)
|
|
r, rlen = self.sock.read_msg(need_len=True)
|
|
self.assertEqual(65535, rlen)
|
|
self.assertEqual(65535, rlen)
|
|
self.assertEqual(2, r.get_rr_count(Message.SECTION_ANSWER))
|
|
self.assertEqual(2, r.get_rr_count(Message.SECTION_ANSWER))
|
|
|
|
+ self.assertTrue(rrsets_equal(test_rr,
|
|
|
|
+ r.get_section(Message.SECTION_ANSWER)[0]))
|
|
|
|
+ self.assertTrue(rrsets_equal(soa,
|
|
|
|
+ r.get_section(Message.SECTION_ANSWER)[1]))
|
|
|
|
+
|
|
|
|
+ def test_reply_xfrout_query_axfr_maxlen_with_endsoa_with_tsig(self):
|
|
|
|
+ # Similar to the previous case, but with TSIG. In our test cases
|
|
|
|
+ # the size of the TSIG RR is 81 bytes (key name = example.com,
|
|
|
|
+ # algorithm = hmac-md5)
|
|
|
|
+ soa = RRset(Name('.'), RRClass.IN(), RRType.SOA(), RRTTL(3600))
|
|
|
|
+ soa.add_rdata(Rdata(RRType.SOA(), RRClass.IN(), '. . 0 0 0 0 0'))
|
|
|
|
+ self.mdata = self.create_request_data(zone_name=Name('.'))
|
|
|
|
+ self.xfrsess._soa = soa
|
|
|
|
+ self.xfrsess._tsig_ctx = self.create_mock_tsig_ctx(TSIGError.NOERROR)
|
|
|
|
+ self.xfrsess._tsig_len = 81
|
|
|
|
+ test_rr = create_generic(Name('.'), 65512 - 81 - get_rrset_len(soa))
|
|
|
|
+ self.xfrsess._iterator = [soa, test_rr]
|
|
|
|
+ self.xfrsess._reply_xfrout_query(self.getmsg(), self.sock)
|
|
|
|
+ r = self.sock.read_msg()
|
|
|
|
+ self.assertEqual(1, r.get_rr_count(Message.SECTION_ANSWER))
|
|
|
|
+ self.assertTrue(rrsets_equal(soa,
|
|
|
|
+ r.get_section(Message.SECTION_ANSWER)[0]))
|
|
|
|
+ r, rlen = self.sock.read_msg(need_len=True)
|
|
|
|
+ self.assertEqual(65535, rlen)
|
|
|
|
+ self.assertEqual(2, r.get_rr_count(Message.SECTION_ANSWER))
|
|
|
|
+ self.assertTrue(rrsets_equal(test_rr,
|
|
|
|
+ r.get_section(Message.SECTION_ANSWER)[0]))
|
|
|
|
+ self.assertTrue(rrsets_equal(soa,
|
|
|
|
+ r.get_section(Message.SECTION_ANSWER)[1]))
|
|
|
|
|
|
def test_reply_xfrout_query_axfr_toobigdata(self):
|
|
def test_reply_xfrout_query_axfr_toobigdata(self):
|
|
# Similar to the 'maxlen' test, but the RR doesn't even fit in a
|
|
# Similar to the 'maxlen' test, but the RR doesn't even fit in a
|