BIND 10 trac2051, updated. f0ce2e2039b298dc4a64e64da86b82f78dbb3a70 a[2051] Wrap the configure method

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Jul 16 12:00:57 UTC 2012


The branch, trac2051 has been updated
       via  f0ce2e2039b298dc4a64e64da86b82f78dbb3a70 (commit)
      from  9aaaaca8c1dd8e735d8695bf2cbab95965e3bd2b (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 f0ce2e2039b298dc4a64e64da86b82f78dbb3a70
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date:   Mon Jul 16 14:00:24 2012 +0200

    a[2051] Wrap the configure method

-----------------------------------------------------------------------

Summary of changes:
 .../isc/datasrc/configurableclientlist_python.cc   |   33 ++++++++++++++++++--
 src/lib/python/isc/datasrc/tests/Makefile.am       |    1 +
 .../python/isc/datasrc/tests/clientlist_test.py    |   32 +++++++++++++++++++
 3 files changed, 64 insertions(+), 2 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/python/isc/datasrc/configurableclientlist_python.cc b/src/lib/python/isc/datasrc/configurableclientlist_python.cc
index 8b3e254..b77be24 100644
--- a/src/lib/python/isc/datasrc/configurableclientlist_python.cc
+++ b/src/lib/python/isc/datasrc/configurableclientlist_python.cc
@@ -56,10 +56,12 @@ ConfigurableClientList_init(PyObject* po_self, PyObject* args, PyObject*) {
     s_ConfigurableClientList* self =
         static_cast<s_ConfigurableClientList*>(po_self);
     try {
-        isc::dns::RRClass rrclass(isc::dns::RRClass::IN());
+        const PyObject* rrclass;
         if (PyArg_ParseTuple(args, "O!", &isc::dns::python::rrclass_type,
                              &rrclass)) {
-            self->cppobj = new ConfigurableClientList(rrclass);
+            self->cppobj =
+                new ConfigurableClientList(isc::dns::python::
+                                           PyRRClass_ToRRClass(rrclass));
             return (0);
         }
     } catch (const exception& ex) {
@@ -84,6 +86,31 @@ ConfigurableClientList_destroy(PyObject* po_self) {
     Py_TYPE(self)->tp_free(self);
 }
 
+PyObject*
+ConfigurableClientList_configure(PyObject* po_self, PyObject* args) {
+    s_ConfigurableClientList* self =
+        static_cast<s_ConfigurableClientList*>(po_self);
+    try {
+        const char* configuration;
+        int allow_cache;
+        if (PyArg_ParseTuple(args, "si", &configuration, &allow_cache)) {
+            const isc::data::ConstElementPtr
+                element(isc::data::Element::fromJSON(string(configuration)));
+            self->cppobj->configure(*element, allow_cache);
+            Py_RETURN_NONE;
+        } else {
+            return (NULL);
+        }
+    } catch (const std::exception& exc) {
+        PyErr_SetString(getDataSourceException("Error"), exc.what());
+        return (NULL);
+    } catch (...) {
+        PyErr_SetString(getDataSourceException("Error"),
+                        "Unknown C++ exception");
+        return (NULL);
+    }
+}
+
 // This list contains the actual set of functions we have in
 // python. Each entry has
 // 1. Python method name
@@ -91,6 +118,8 @@ ConfigurableClientList_destroy(PyObject* po_self) {
 // 3. Argument type
 // 4. Documentation
 PyMethodDef ConfigurableClientList_methods[] = {
+    { "configure", ConfigurableClientList_configure, METH_VARARGS,
+        "TODO: Docs" },
     { NULL, NULL, 0, NULL }
 };
 } // end of unnamed namespace
diff --git a/src/lib/python/isc/datasrc/tests/Makefile.am b/src/lib/python/isc/datasrc/tests/Makefile.am
index f8b08e3..34af092 100644
--- a/src/lib/python/isc/datasrc/tests/Makefile.am
+++ b/src/lib/python/isc/datasrc/tests/Makefile.am
@@ -36,6 +36,7 @@ endif
 	PYTHONPATH=:$(COMMON_PYTHON_PATH):$(abs_top_builddir)/src/lib/python/isc/log:$(abs_top_builddir)/src/lib/python/isc/datasrc/.libs:$(abs_top_builddir)/src/lib/dns/python/.libs \
 	TESTDATA_PATH=$(abs_srcdir)/testdata \
 	TESTDATA_WRITE_PATH=$(abs_builddir) \
+	GLOBAL_TESTDATA_PATH=$(abs_top_srcdir)/src/lib/testutils/testdata \
 	B10_FROM_BUILD=$(abs_top_builddir) \
 	$(PYCOVERAGE_RUN) $(abs_srcdir)/$$pytest || exit ; \
 	done
diff --git a/src/lib/python/isc/datasrc/tests/clientlist_test.py b/src/lib/python/isc/datasrc/tests/clientlist_test.py
index 18bc74d..e7219e9 100644
--- a/src/lib/python/isc/datasrc/tests/clientlist_test.py
+++ b/src/lib/python/isc/datasrc/tests/clientlist_test.py
@@ -17,6 +17,9 @@ import isc.log
 import isc.datasrc
 import isc.dns
 import unittest
+import os
+
+TESTDATA_PATH = os.environ['GLOBAL_TESTDATA_PATH'] + os.sep
 
 class ClientListTest(unittest.TestCase):
     """
@@ -40,6 +43,35 @@ class ClientListTest(unittest.TestCase):
         self.assertRaises(TypeError, isc.datasrc.ConfigurableClientList,
                          isc.dns.RRClass.IN(), isc.dns.RRClass.IN())
 
+    def test_configure(self):
+        """
+        Test we can configure the client list. This tests if the valid
+        ones are acceptend and invalid rejected. We check the changes
+        have effect.
+        """
+        clist = isc.datasrc.ConfigurableClientList(isc.dns.RRClass.IN())
+        # This should be NOP now
+        clist.configure("[]", True)
+        # We can use this type, as it is not loaded dynamically.
+        clist.configure('''[{
+            "type": "MasterFiles",
+            "params": {
+                "example.org": "''' + TESTDATA_PATH + '''example.org.zone"
+            },
+            "cache-enable": true
+        }]''', True)
+        self.assertRaises(isc.datasrc.Error, clist.configure, '"bad type"',
+                          True)
+        self.assertRaises(isc.datasrc.Error, clist.configure, '''[{
+            "type": "bad type"
+        }]''', True)
+        self.assertRaises(isc.datasrc.Error, clist.configure, '''[{
+            bad JSON,
+        }]''', True)
+        self.assertRaises(TypeError, clist.configure, [], True)
+        self.assertRaises(TypeError, clist.configure, "[]")
+        self.assertRaises(TypeError, clist.configure, "[]", "true")
+
 if __name__ == "__main__":
     isc.log.init("bind10")
     isc.log.resetUnitTestRootLogger()



More information about the bind10-changes mailing list