self.getmsg(), TEST_ZONE_NAME, TEST_RRCLASS), Rcode.NOERROR())
self.assertEqual(None, self.xfrsess._iterator)
self.assertEqual(None, self.xfrsess._jnl_reader)
-
+
# The data source doesn't support journaling. Should fallback to AXFR.
zone_name = Name('nojournal.example.com')
self.mdata = self.create_request_data(ixfr=IXFR_OK_VERSION,
self.assertEqual(Rcode.NOERROR(), response.get_rcode())
self.check_axfr_stream(response)
+ def test_ixfr_to_axfr(self):
+ self.xfrsess._request_data = \
+ self.create_request_data(ixfr=IXFR_NG_VERSION)
+ XfroutSession._handle(self.xfrsess)
+ response = self.sock.read_msg(Message.PRESERVE_ORDER);
+ self.assertEqual(Rcode.NOERROR(), response.get_rcode())
+ # The SOA serial is greater than that of requested one.
+ # So only the SOA was send.
+ answers = response.get_section(Message.SECTION_ANSWER)
+ self.assertEqual(1, len(answers))
+ self.assertTrue(rrsets_equal(create_soa(SOA_CURRENT_VERSION),
+ answers[0]))
+ self.assertEqual(RRType.IXFR(), response.get_question()[0].get_type())
+
def test_ixfr_normal_session(self):
# See testdata/creatediff.py. There are 8 changes between two
# versions. So the answer section should contain all of these and
self.xfrsess._request_data = \
self.create_request_data(ixfr=IXFR_OK_VERSION)
XfroutSession._handle(self.xfrsess)
- response = self.sock.read_msg(Message.PRESERVE_ORDER);
+ response = self.sock.read_msg(Message.PRESERVE_ORDER)
actual_records = response.get_section(Message.SECTION_ANSWER)
expected_records = [create_soa(2011112001), create_soa(2011111802),
create_soa(2011111900),
return len(bytes)
def get_soa_serial(soa_rdata):
- '''Extract the serial field of an SOA RDATA and returns it as an intger.
- (borrowed from xfrin)
+ '''Extract the serial field of an SOA RDATA and returns it as an Serial object.
'''
- return int(soa_rdata.to_text().split()[2])
+ return Serial(int(soa_rdata.to_text().split()[2]))
class XfroutSession():
def __init__(self, sock_fd, request_data, server, tsig_key_ring, remote,
format_zone_str(zone_name, zone_class),
begin_serial, end_serial)
return Rcode.NOERROR()
-
+
# Set up the journal reader or fall back to AXFR-style IXFR
try:
code, self._jnl_reader = self._datasrc_client.get_journal_reader(
- zone_name, begin_serial, end_serial)
+ zone_name, begin_serial.get_value(), end_serial.get_value())
except isc.datasrc.NotImplemented as ex:
# The underlying data source doesn't support journaling.
# Fall back to AXFR-style IXFR.
# Use the reader as the iterator to generate the response.
self._iterator = self._jnl_reader
-
+
return Rcode.NOERROR()
def _xfrout_setup(self, request_msg, zone_name, zone_class):