BIND 10 trac2853, updated. 71de47f8d14d274ae2223e56423d6022a3cf0369 [2853] Add a testcase using reset_memory_segment() and get_cached_zone_writer()
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Jun 6 10:45:47 UTC 2013
The branch, trac2853 has been updated
via 71de47f8d14d274ae2223e56423d6022a3cf0369 (commit)
from 2935657cc5e260f54be045b28d7184adb406d3d7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 71de47f8d14d274ae2223e56423d6022a3cf0369
Author: Mukund Sivaraman <muks at isc.org>
Date: Thu Jun 6 16:14:49 2013 +0530
[2853] Add a testcase using reset_memory_segment() and get_cached_zone_writer()
This test currently causes a segmentation fault. From a core,
it seems to be inside ZoneWriter::install(). See the lines which
modify that method as part of this commit. getHeader() segfaults.
-----------------------------------------------------------------------
Summary of changes:
src/lib/datasrc/memory/zone_writer.cc | 3 +-
.../python/isc/datasrc/tests/clientlist_test.py | 61 ++++++++++++++++++++
2 files changed, 63 insertions(+), 1 deletion(-)
-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/memory/zone_writer.cc b/src/lib/datasrc/memory/zone_writer.cc
index ebe6151..3d4469c 100644
--- a/src/lib/datasrc/memory/zone_writer.cc
+++ b/src/lib/datasrc/memory/zone_writer.cc
@@ -139,7 +139,8 @@ ZoneWriter::install() {
// segment. Once there is, we should provide the test.
while (impl_->state_ != Impl::ZW_INSTALLED) {
try {
- ZoneTable* table(impl_->segment_.getHeader().getTable());
+ ZoneTableHeader& header = impl_->segment_.getHeader();
+ ZoneTable* table(header.getTable());
if (!table) {
isc_throw(isc::Unexpected, "No zone table present");
}
diff --git a/src/lib/python/isc/datasrc/tests/clientlist_test.py b/src/lib/python/isc/datasrc/tests/clientlist_test.py
index bdac69c..231401e 100644
--- a/src/lib/python/isc/datasrc/tests/clientlist_test.py
+++ b/src/lib/python/isc/datasrc/tests/clientlist_test.py
@@ -151,6 +151,67 @@ class ClientListTest(unittest.TestCase):
self.assertRaises(TypeError, self.clist.find, "example.org")
self.assertRaises(TypeError, self.clist.find)
+ def test_find_mapped(self):
+ """
+ Test find on a mapped segment.
+ """
+ self.clist = isc.datasrc.ConfigurableClientList(isc.dns.RRClass.IN)
+ self.clist.configure('''[{
+ "type": "MasterFiles",
+ "params": {
+ "example.org": "''' + TESTDATA_PATH + '''example.org.zone"
+ },
+ "cache-enable": true,
+ "cache-type": "mapped"
+ }]''', True)
+
+ self.clist.reset_memory_segment("MasterFiles", isc.datasrc.ConfigurableClientList.CREATE, '''{"mapped-file": "''' + os.environ['TESTDATA_WRITE_PATH'] + os.sep + '''testmappedx.mapped"}''')
+ result = self.clist.get_cached_zone_writer(isc.dns.Name("example.org"))
+ result[1].load()
+ result[1].install()
+ result[1].cleanup()
+
+ dsrc, finder, exact = self.clist.find(isc.dns.Name("sub.example.org"))
+ self.assertIsNotNone(dsrc)
+ self.assertTrue(isinstance(dsrc, isc.datasrc.DataSourceClient))
+ self.assertIsNotNone(finder)
+ self.assertTrue(isinstance(finder, isc.datasrc.ZoneFinder))
+ # Check the finder holds a reference to the data source
+ # Note that one reference is kept in the parameter list
+ # of getrefcount
+ self.assertEqual(3, sys.getrefcount(dsrc))
+ finder = None
+ self.assertEqual(2, sys.getrefcount(dsrc))
+ # We check an exact match in test_configure already
+ self.assertFalse(exact)
+ self.dsrc, self.finder, exact = \
+ self.clist.find(isc.dns.Name("sub.example.org"), False)
+ self.assertIsNotNone(self.dsrc)
+ self.assertTrue(isinstance(self.dsrc, isc.datasrc.DataSourceClient))
+ self.assertIsNotNone(self.finder)
+ self.assertTrue(isinstance(self.finder, isc.datasrc.ZoneFinder))
+ self.assertFalse(exact)
+ self.dsrc, self.finder, exact = \
+ self.clist.find(isc.dns.Name("sub.example.org"), True)
+ self.assertIsNone(self.dsrc)
+ self.assertIsNone(self.finder)
+ self.assertFalse(exact)
+ self.dsrc, self.finder, exact = \
+ self.clist.find(isc.dns.Name("sub.example.org"), False, False)
+ self.assertIsNotNone(self.dsrc)
+ self.assertTrue(isinstance(self.dsrc, isc.datasrc.DataSourceClient))
+ self.assertIsNotNone(self.finder)
+ self.assertTrue(isinstance(self.finder, isc.datasrc.ZoneFinder))
+ self.assertFalse(exact)
+ self.dsrc, self.finder, exact = \
+ self.clist.find(isc.dns.Name("sub.example.org"), True, False)
+ self.assertIsNone(self.dsrc)
+ self.assertIsNone(self.finder)
+ self.assertFalse(exact)
+ # Some invalid inputs
+ self.assertRaises(TypeError, self.clist.find, "example.org")
+ self.assertRaises(TypeError, self.clist.find)
+
if __name__ == "__main__":
isc.log.init("bind10")
isc.log.resetUnitTestRootLogger()
More information about the bind10-changes
mailing list