]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
a[2051] Wrap the configure method
authorMichal 'vorner' Vaner <michal.vaner@nic.cz>
Mon, 16 Jul 2012 12:00:24 +0000 (14:00 +0200)
committerMichal 'vorner' Vaner <michal.vaner@nic.cz>
Mon, 16 Jul 2012 12:00:24 +0000 (14:00 +0200)
src/lib/python/isc/datasrc/configurableclientlist_python.cc
src/lib/python/isc/datasrc/tests/Makefile.am
src/lib/python/isc/datasrc/tests/clientlist_test.py

index 8b3e2540fe2dddd5201246706f97cce6d51f5584..b77be24d2aa0eb6aa07b14c77ff6a57de2957ee7 100644 (file)
@@ -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
index f8b08e32f3e24bbaf1389b7292cd64c7fc822f7f..34af092948e47006d71f69529bd5141a8291ccd4 100644 (file)
@@ -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
index 18bc74dc70fd46dc168a11f982f783abd690ad42..e7219e9b27eb5204ea1157dc448055161fbc10a7 100644 (file)
@@ -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()