Browse Source

[1252] add new result codes and method from #1177 to wrappers

Jelte Jansen 13 years ago
parent
commit
1fe148279b

+ 4 - 0
src/lib/python/isc/datasrc/datasrc.cc

@@ -115,6 +115,10 @@ initModulePart_ZoneFinder(PyObject* mod) {
                      Py_BuildValue("I", ZoneFinder::CNAME));
     addClassVariable(zonefinder_type, "DNAME",
                      Py_BuildValue("I", ZoneFinder::DNAME));
+    addClassVariable(zonefinder_type, "WILDCARD",
+                     Py_BuildValue("I", ZoneFinder::WILDCARD));
+    addClassVariable(zonefinder_type, "WILDCARD_NXRRSET",
+                     Py_BuildValue("I", ZoneFinder::WILDCARD_NXRRSET));
 
     addClassVariable(zonefinder_type, "FIND_DEFAULT",
                      Py_BuildValue("I", ZoneFinder::FIND_DEFAULT));

+ 23 - 0
src/lib/python/isc/datasrc/finder_python.cc

@@ -160,6 +160,27 @@ ZoneFinder_find(PyObject* po_self, PyObject* args) {
     return (isc_datasrc_internal::ZoneFinder_helper(self->cppobj.get(), args));
 }
 
+PyObject*
+ZoneFinder_findPreviousName(PyObject* po_self, PyObject* args) {
+    s_ZoneFinder* const self = static_cast<s_ZoneFinder*>(po_self);
+    PyObject *name_obj;
+    if (PyArg_ParseTuple(args, "O!", &name_type, &name_obj)) {
+        try {
+            return (createNameObject(
+                self->cppobj->findPreviousName(PyName_ToName(name_obj))));
+        } catch (const std::exception& exc) {
+            PyErr_SetString(getDataSourceException("Error"), exc.what());
+            return (NULL);
+        } catch (...) {
+            PyErr_SetString(getDataSourceException("Error"),
+                            "Unexpected exception");
+            return (NULL);
+        }
+    } else {
+        return (NULL);
+    }
+}
+
 // This list contains the actual set of functions we have in
 // python. Each entry has
 // 1. Python method name
@@ -173,6 +194,8 @@ PyMethodDef ZoneFinder_methods[] = {
       METH_NOARGS, ZoneFinder_getClass_doc },
     { "find", reinterpret_cast<PyCFunction>(ZoneFinder_find), METH_VARARGS,
       ZoneFinder_find_doc },
+    { "find_previous_name", reinterpret_cast<PyCFunction>(ZoneFinder_findPreviousName),
+      METH_VARARGS, ZoneFinder_find_doc },/*TODO DOC*/
     { NULL, NULL, 0, NULL }
 };
 

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

@@ -231,6 +231,21 @@ class DataSrcClient(unittest.TestCase):
             "cname-ext.example.com. 3600 IN CNAME www.sql1.example.com.\n",
             rrset.to_text())
 
+        result, rrset = finder.find(isc.dns.Name("foo.wild.example.com"),
+                                    isc.dns.RRType.A(),
+                                    None,
+                                    finder.FIND_DEFAULT)
+        self.assertEqual(finder.WILDCARD, result)
+        self.assertEqual("foo.wild.example.com. 3600 IN A 192.0.2.255\n",
+                         rrset.to_text())
+
+        result, rrset = finder.find(isc.dns.Name("foo.wild.example.com"),
+                                    isc.dns.RRType.TXT(),
+                                    None,
+                                    finder.FIND_DEFAULT)
+        self.assertEqual(finder.WILDCARD_NXRRSET, result)
+        self.assertEqual(None, rrset)
+
         self.assertRaises(TypeError, finder.find,
                           "foo",
                           isc.dns.RRType.A(),
@@ -247,6 +262,20 @@ class DataSrcClient(unittest.TestCase):
                           None,
                           "foo")
 
+    def test_find_previous(self):
+        dsc = isc.datasrc.DataSourceClient(READ_ZONE_DB_FILE)
+
+        result, finder = dsc.find_zone(isc.dns.Name("example.com"))
+        self.assertEqual(finder.SUCCESS, result)
+
+        prev = finder.find_previous_name(isc.dns.Name("bbb.example.com"))
+        self.assertEqual("example.com.", prev.to_text())
+
+        prev = finder.find_previous_name(isc.dns.Name("zzz.example.com"))
+        self.assertEqual("www.example.com.", prev.to_text())
+
+        prev = finder.find_previous_name(prev)
+        self.assertEqual("*.wild.example.com.", prev.to_text())
 
 class DataSrcUpdater(unittest.TestCase):