From: Michal 'vorner' Vaner Date: Mon, 16 Jul 2012 12:00:24 +0000 (+0200) Subject: a[2051] Wrap the configure method X-Git-Tag: trac2351_base~157^2~26^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f0ce2e2039b298dc4a64e64da86b82f78dbb3a70;p=thirdparty%2Fkea.git a[2051] Wrap the configure method --- diff --git a/src/lib/python/isc/datasrc/configurableclientlist_python.cc b/src/lib/python/isc/datasrc/configurableclientlist_python.cc index 8b3e2540fe..b77be24d2a 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(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(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 f8b08e32f3..34af092948 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 18bc74dc70..e7219e9b27 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()