Browse Source

[1484] Provide the find_all for an updater

Michal 'vorner' Vaner 13 years ago
parent
commit
137405d030

+ 30 - 0
src/lib/python/isc/datasrc/tests/datasrc_test.py

@@ -305,6 +305,36 @@ class DataSrcClient(unittest.TestCase):
         self.assertEqual(sorted(map(lambda rdata: rdata.to_text(), rdatas)),
                          sorted(["192.0.2.1", "192.0.2.2", "2001:db8::1",
                                  "2001:db8::2"]))
+        # The same, but on an updater
+        dsc = isc.datasrc.DataSourceClient("sqlite3", WRITE_ZONE_DB_CONFIG)
+        updater = dsc.get_updater(isc.dns.Name("example.com"), False)
+
+        # Some "failure" responses
+        result, rrset = updater.find_all(isc.dns.Name("www.sql1.example.com"),
+                                        finder.FIND_DEFAULT)
+        self.assertEqual(finder.DELEGATION, result)
+        self.assertEqual("sql1.example.com. 3600 IN NS dns01.example.com.\n" +
+                         "sql1.example.com. 3600 IN NS dns02.example.com.\n" +
+                         "sql1.example.com. 3600 IN NS dns03.example.com.\n",
+                         rrset.to_text())
+
+        result, rrset = updater.find_all(isc.dns.Name("nxdomain.example.com"),
+                                         finder.FIND_DEFAULT)
+        self.assertEqual(finder.NXDOMAIN, result)
+        self.assertIsNone(None, rrset)
+
+        # A success. It should return the list now.
+        result, rrsets = updater.find_all(isc.dns.Name("mix.example.com."))
+        self.assertEqual(ZoneFinder.SUCCESS, result)
+        self.assertEqual(2, len(rrsets))
+        self.assertEqual(sorted(map(lambda rrset: rrset.get_type().to_text(),
+                                    rrsets)), sorted(["A", "AAAA"]))
+        rdatas = []
+        for rrset in rrsets:
+            rdatas.extend(rrset.get_rdata())
+        self.assertEqual(sorted(map(lambda rdata: rdata.to_text(), rdatas)),
+                         sorted(["192.0.2.1", "192.0.2.2", "2001:db8::1",
+                                 "2001:db8::2"]))
 
     def test_find(self):
         dsc = isc.datasrc.DataSourceClient("sqlite3", READ_ZONE_DB_CONFIG)

+ 9 - 0
src/lib/python/isc/datasrc/updater_python.cc

@@ -48,6 +48,7 @@ using namespace isc::datasrc::python;
 namespace isc_datasrc_internal {
 // See finder_python.cc
 PyObject* ZoneFinder_helper(ZoneFinder* finder, PyObject* args);
+PyObject* ZoneFinder_helper_all(ZoneFinder* finder, PyObject* args);
 }
 
 namespace {
@@ -185,6 +186,13 @@ ZoneUpdater_find(PyObject* po_self, PyObject* args) {
                                                     args));
 }
 
+PyObject*
+ZoneUpdater_find_all(PyObject* po_self, PyObject* args) {
+    s_ZoneUpdater* const self = static_cast<s_ZoneUpdater*>(po_self);
+    return (isc_datasrc_internal::ZoneFinder_helper_all(
+        &self->cppobj->getFinder(), args));
+}
+
 // This list contains the actual set of functions we have in
 // python. Each entry has
 // 1. Python method name
@@ -208,6 +216,7 @@ PyMethodDef ZoneUpdater_methods[] = {
       METH_NOARGS, ZoneFinder_getClass_doc },
     { "find", reinterpret_cast<PyCFunction>(ZoneUpdater_find), METH_VARARGS,
       ZoneFinder_find_doc },
+    { "find_all", ZoneUpdater_find_all, METH_VARARGS, "TODO" },
     { NULL, NULL, 0, NULL }
 };