[svn] commit: r2861 - in /branches/trac232/src/lib/datasrc/python: libdata_source_python.cc tests/data_source_python_test.py
BIND 10 source code commits
bind10-changes at lists.isc.org
Wed Sep 8 12:59:14 UTC 2010
Author: jelte
Date: Wed Sep 8 12:59:13 2010
New Revision: 2861
Log:
findPreviousName and findCoveringNSEC3
Modified:
branches/trac232/src/lib/datasrc/python/libdata_source_python.cc
branches/trac232/src/lib/datasrc/python/tests/data_source_python_test.py
Modified: branches/trac232/src/lib/datasrc/python/libdata_source_python.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/python/libdata_source_python.cc (original)
+++ branches/trac232/src/lib/datasrc/python/libdata_source_python.cc Wed Sep 8 12:59:13 2010
@@ -77,6 +77,9 @@
static PyObject* DataSrc_findExactRRset(s_DataSrc* self, PyObject* args);
static PyObject* DataSrc_findAddrs(s_DataSrc* self, PyObject* args);
static PyObject* DataSrc_findReferral(s_DataSrc* self, PyObject* args);
+static PyObject* DataSrc_findPreviousName(s_DataSrc* self, PyObject* args);
+static PyObject* DataSrc_findCoveringNSEC3(s_DataSrc* self, PyObject* args);
+
static PyObject* DataSrc_startTransaction(s_DataSrc* self, PyObject* args);
static PyObject* DataSrc_commitTransaction(s_DataSrc* self, PyObject* args);
static PyObject* DataSrc_rollbackTransaction(s_DataSrc* self, PyObject* args);
@@ -96,6 +99,11 @@
"Searches the datasource for an address list" },
{ "find_referral", reinterpret_cast<PyCFunction>(DataSrc_findReferral), METH_VARARGS,
"Searches the datasource for a referral" },
+ { "find_previous_name", reinterpret_cast<PyCFunction>(DataSrc_findPreviousName), METH_VARARGS,
+ "Searches the datasource for the previous name. Returns (result_code, previous_name) tuple. "
+ "If result_code is not DataSrc.SUCCESS, previous_name will be None." },
+ { "find_covering_nsec3", reinterpret_cast<PyCFunction>(DataSrc_findCoveringNSEC3), METH_VARARGS,
+ "Searches the datasource for the covering NSEC3 rrset." },
{ "start_transaction", reinterpret_cast<PyCFunction>(DataSrc_startTransaction), METH_VARARGS,
"Start a transaction" },
{ "commit_transaction", reinterpret_cast<PyCFunction>(DataSrc_commitTransaction), METH_VARARGS,
@@ -625,6 +633,71 @@
}
static PyObject*
+DataSrc_findPreviousName(s_DataSrc* self, PyObject* args) {
+ PyObject* name_class = PyObject_GetAttrString(po_DNS_module, "Name");
+ PyObject *name_obj, *zone_name_obj;
+ uint32_t flags;
+ int args_check = PyArg_ParseTuple(args, "O!O!",
+ name_class, &name_obj,
+ name_class, &zone_name_obj);
+ Py_DECREF(name_class);
+
+ if (args_check) {
+ isc::dns::Name n = pyName_AsName(name_obj);
+ isc::dns::Name zone_name = pyName_AsName(zone_name_obj);
+
+ isc::dns::Name result_name("old.");
+ isc::datasrc::DataSrc::Result result =
+ self->datasrc->findPreviousName(n, result_name, &zone_name);
+ if (result == isc::datasrc::DataSrc::SUCCESS) {
+ return Py_BuildValue("(IO)", result, pyName_FromName(result_name));
+ } else {
+ Py_INCREF(Py_None);
+ return Py_BuildValue("(IO)", result, Py_None);
+ }
+ } else {
+ return (NULL);
+ }
+}
+
+static PyObject*
+DataSrc_findCoveringNSEC3(s_DataSrc* self, PyObject* args) {
+ PyObject* name_class = PyObject_GetAttrString(po_DNS_module, "Name");
+ PyObject *name_obj, *result_list_obj;
+ const char* hash;
+ uint32_t flags;
+ int args_check = PyArg_ParseTuple(args, "O!sO",
+ name_class, &name_obj,
+ &hash,
+ &result_list_obj);
+ Py_DECREF(name_class);
+
+ if (args_check) {
+ if (!PyList_Check(result_list_obj)) {
+ PyErr_SetString(PyExc_TypeError,
+ "argument 3 of find_covering_nsec3 is not a List");
+ return (NULL);
+ }
+ isc::dns::Name n = pyName_AsName(name_obj);
+ std::string hash_str(hash);
+ isc::dns::RRsetList result_list;
+ isc::datasrc::DataSrc::Result result =
+ self->datasrc->findCoveringNSEC3(n, hash_str, result_list);
+
+ if (result == isc::datasrc::DataSrc::SUCCESS) {
+ BOOST_FOREACH(isc::dns::RRsetPtr rrs, result_list) {
+ PyObject *rrset_obj = pyRRset_FromRRset(*rrs);
+ PyList_Append(result_list_obj, rrset_obj);
+ Py_DECREF(rrset_obj);
+ }
+ }
+ return Py_BuildValue("I", result);
+ } else {
+ return (NULL);
+ }
+}
+
+static PyObject*
DataSrc_getClass(s_DataSrc* self) {
// Find the (python) type for the data we are asking for
PyObject* type = PyObject_GetAttrString(po_DNS_module, "RRClass");
Modified: branches/trac232/src/lib/datasrc/python/tests/data_source_python_test.py
==============================================================================
--- branches/trac232/src/lib/datasrc/python/tests/data_source_python_test.py (original)
+++ branches/trac232/src/lib/datasrc/python/tests/data_source_python_test.py Wed Sep 8 12:59:13 2010
@@ -136,6 +136,33 @@
Name("sub.doesnotexist.org"),
RRClass.IN(), 0,
0, Name("doesnotexist.org"));
+
+ def test_find_previous_name(self):
+ self.ds.init("{ \"database_file\": \""+ testdata_path + "/test.sqlite3\" }")
+ result, result_name = self.ds.find_previous_name(Name("yyy.sql1.example.com"), Name("sql1.example.com"))
+ self.assertEqual(DataSrc.SUCCESS, result);
+ self.assertEqual("www.sql1.example.com.", result_name.to_text());
+
+ result, result_name = self.ds.find_previous_name(Name("www.nosuch.zone"), Name("nosuch.zone"))
+ self.assertEqual(DataSrc.ERROR, result);
+ self.assertEqual(None, result_name);
+
+ def test_find_covering_nsec3(self):
+ self.ds.init("{ \"database_file\": \""+ testdata_path + "/test.sqlite3\" }")
+ hashstr = "1BB7SO0452U1QHL98UISNDD9218GELR5";
+
+ nsec3_zonename = Name("sql2.example.com");
+
+ result_rrsets = []
+ result = self.ds.find_covering_nsec3(nsec3_zonename, hashstr, result_rrsets)
+ self.assertEqual(DataSrc.SUCCESS, result)
+ self.assertEqual(1, len(result_rrsets))
+ self.assertEqual("1BB7SO0452U1QHL98UISNDD9218GELR5.sql2.example.com. 7200 IN NSEC3 1 0 10 FEEDABEE 4KLSVDE8KH8G95VU68R7AHBE1CPQN38J\n", result_rrsets[0].to_text())
+
+ self.assertRaises(TypeError, self.ds.find_covering_nsec3)
+ self.assertRaises(TypeError, self.ds.find_covering_nsec3, 1)
+ self.assertRaises(TypeError, self.ds.find_covering_nsec3, nsec3_zonename, hashstr, 1)
+
class DataSourceWriteTest(unittest.TestCase):
def setUp(self):
More information about the bind10-changes
mailing list