[svn] commit: r3345 - in /branches/trac375/src/lib/datasrc/python: pydatasrc.cc tests/pydatasrc_test.py

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Oct 25 09:21:16 UTC 2010


Author: jelte
Date: Mon Oct 25 09:21:16 2010
New Revision: 3345

Log:
make the find_ functions return the flags value as well, and check it in the tests

Modified:
    branches/trac375/src/lib/datasrc/python/pydatasrc.cc
    branches/trac375/src/lib/datasrc/python/tests/pydatasrc_test.py

Modified: branches/trac375/src/lib/datasrc/python/pydatasrc.cc
==============================================================================
--- branches/trac375/src/lib/datasrc/python/pydatasrc.cc (original)
+++ branches/trac375/src/lib/datasrc/python/pydatasrc.cc Mon Oct 25 09:21:16 2010
@@ -119,9 +119,17 @@
       "RRClass rrclass: The class of the RRset to find\n"
       "RRType rrtype: The type of the RRset to find\n"
       "List result: The results are added to this list\n"
-      "int flags: Contains result flags after this function completes\n"
-      "Name zonename: The name of the zone\n"
-      "Returns DataSrc.SUCCESS on success, error value otherwise\n"
+      "Name zonename: The name of the zone\n\n"
+      "Returns a tuple (result, flags), where result is\n"
+      "SUCCESS, ERROR, or NOT_IMPLEMENTED, and flags is either 0\n"
+      "or a bitwise OR of the following possible values:\n"
+      "REFERRAL:       The node contains an NS record\n"
+      "CNAME_FOUND:    The node contains a CNAME record\n"
+      "NAME_NOT_FOUND: The node does not exist in the data source.\n"
+      "TYPE_NOT_FOUND: The node does not contain the requested RRType\n"
+      "NO_SUCH_ZONE:   The zone does not exist in this data source.\n"
+      "DATA_NOT_FOUND: A combination of the last three, for coding\n"
+      "                convenience.\n"
     },
     { "find_exact_rrset", reinterpret_cast<PyCFunction>(DataSrc_findExactRRset), METH_VARARGS,
       "Searches the datasource for a specific RRset\n"
@@ -130,9 +138,8 @@
       "RRClass rrclass: The class of the RRset to find\n"
       "RRType rrtype: The type of the RRset to find\n"
       "List result: The results are added to this list\n"
-      "int flags: Contains result flags after this function completes\n"
       "Name zonename: The name of the zone\n\n"
-      "Returns DataSrc.SUCCESS on success, error value otherwise\n"
+      "Returns a tuple (result, flags), see find_rrset().\n"
     },
     { "find_addrs", reinterpret_cast<PyCFunction>(DataSrc_findAddrs), METH_VARARGS,
       "Searches the datasource for an address list\n"
@@ -140,9 +147,8 @@
       "Name name: The name of the RRsets to find\n"
       "RRClass rrclass: The class of the RRsets to find\n"
       "List result: The results are added to this list\n"
-      "int flags: Contains result flags after this function completes\n"
       "Name zonename: The name of the zone\n\n"
-      "Returns DataSrc.SUCCESS on success, error value otherwise\n"
+      "Returns a tuple (result, flags), see find_rrset().\n"
     },
     { "find_referral", reinterpret_cast<PyCFunction>(DataSrc_findReferral), METH_VARARGS,
       "Searches the datasource for a referral.\n"
@@ -150,9 +156,8 @@
       "Name name: The name of the RRsets to find\n"
       "RRClass rrclass: The class of the RRsets to find\n"
       "List result: The results are added to this list\n"
-      "int flags: Contains result flags after this function completes\n"
       "Name zonename: The name of the zone\n\n"
-      "Returns DataSrc.SUCCESS on success, error value otherwise\n"
+      "Returns a tuple (result, flags), see find_rrset().\n"
     },
     { "find_previous_name", reinterpret_cast<PyCFunction>(DataSrc_findPreviousName), METH_VARARGS,
       "Searches the datasource for the previous name.\n"
@@ -716,12 +721,11 @@
     PyObject* rrtype_class = PyObject_GetAttrString(po_DNS_module, "RRType");
     PyObject *name_obj, *class_obj, *type_obj, *result_list_obj, *zone_name_obj;
     uint32_t flags;
-    int args_check = PyArg_ParseTuple(args, "O!O!O!OIO!",
+    int args_check = PyArg_ParseTuple(args, "O!O!O!OO!",
                          name_class, &name_obj,
                          rrclass_class, &class_obj,
                          rrtype_class, &type_obj,
                          &result_list_obj,
-                         &flags,
                          name_class, &zone_name_obj);
     Py_DECREF(name_class);
     Py_DECREF(rrclass_class);
@@ -750,7 +754,7 @@
                 Py_DECREF(rrset_obj);
             }
         }
-        return (Py_BuildValue("I", result));
+        return (Py_BuildValue("II", result, flags));
     } else {
         return (NULL);
     }
@@ -763,12 +767,11 @@
     PyObject* rrtype_class = PyObject_GetAttrString(po_DNS_module, "RRType");
     PyObject *name_obj, *class_obj, *type_obj, *result_list_obj, *zone_name_obj;
     uint32_t flags;
-    int args_check = PyArg_ParseTuple(args, "O!O!O!OIO!",
+    int args_check = PyArg_ParseTuple(args, "O!O!O!OO!",
                                       name_class, &name_obj,
                                       rrclass_class, &class_obj,
                                       rrtype_class, &type_obj,
                                       &result_list_obj,
-                                      &flags,
                                       name_class, &zone_name_obj);
     Py_DECREF(name_class);
     Py_DECREF(rrclass_class);
@@ -795,7 +798,7 @@
             PyList_Append(result_list_obj, rrset_obj);
             Py_DECREF(rrset_obj);
         }
-        return (Py_BuildValue("I", result));
+        return (Py_BuildValue("II", result, flags));
     } else {
         return (NULL);
     }
@@ -807,11 +810,10 @@
     PyObject* rrclass_class = PyObject_GetAttrString(po_DNS_module, "RRClass");
     PyObject *name_obj, *class_obj, *type_obj, *result_list_obj, *zone_name_obj;
     uint32_t flags;
-    int args_check = PyArg_ParseTuple(args, "O!O!OIO!",
+    int args_check = PyArg_ParseTuple(args, "O!O!OO!",
                          name_class, &name_obj,
                          rrclass_class, &class_obj,
                          &result_list_obj,
-                         &flags,
                          name_class, &zone_name_obj);
     Py_DECREF(name_class);
     Py_DECREF(rrclass_class);
@@ -836,7 +838,7 @@
             PyList_Append(result_list_obj, rrset_obj);
             Py_DECREF(rrset_obj);
         }
-        return (Py_BuildValue("I", result));
+        return (Py_BuildValue("II", result, flags));
     } else {
         return (NULL);
     }
@@ -848,11 +850,10 @@
     PyObject* rrclass_class = PyObject_GetAttrString(po_DNS_module, "RRClass");
     PyObject *name_obj, *class_obj, *type_obj, *result_list_obj, *zone_name_obj;
     uint32_t flags;
-    int args_check = PyArg_ParseTuple(args, "O!O!OIO!",
+    int args_check = PyArg_ParseTuple(args, "O!O!OO!",
                          name_class, &name_obj,
                          rrclass_class, &class_obj,
                          &result_list_obj,
-                         &flags,
                          name_class, &zone_name_obj);
     Py_DECREF(name_class);
     Py_DECREF(rrclass_class);
@@ -877,7 +878,7 @@
             PyList_Append(result_list_obj, rrset_obj);
             Py_DECREF(rrset_obj);
         }
-        return (Py_BuildValue("I", result));
+        return (Py_BuildValue("II", result, flags));
     } else {
         return (NULL);
     }
@@ -1357,6 +1358,12 @@
     PyDict_SetItemString(datasrc_type.tp_dict, "W_NO_SUCH_ZONE", Py_BuildValue("I", DataSrc::W_NO_SUCH_ZONE));
     PyDict_SetItemString(datasrc_type.tp_dict, "W_NO_SUCH_DATA", Py_BuildValue("I", DataSrc::W_NO_SUCH_DATA));
 
+    PyDict_SetItemString(datasrc_type.tp_dict, "REFERRAL", Py_BuildValue("I", DataSrc::REFERRAL));
+    PyDict_SetItemString(datasrc_type.tp_dict, "CNAME_FOUND", Py_BuildValue("I", DataSrc::CNAME_FOUND));
+    PyDict_SetItemString(datasrc_type.tp_dict, "NAME_NOT_FOUND", Py_BuildValue("I", DataSrc::NAME_NOT_FOUND));
+    PyDict_SetItemString(datasrc_type.tp_dict, "TYPE_NOT_FOUND", Py_BuildValue("I", DataSrc::TYPE_NOT_FOUND));
+    PyDict_SetItemString(datasrc_type.tp_dict, "NO_SUCH_ZONE", Py_BuildValue("I", DataSrc::NO_SUCH_ZONE));
+    PyDict_SetItemString(datasrc_type.tp_dict, "DATA_NOT_FOUND", Py_BuildValue("I", DataSrc::DATA_NOT_FOUND));
     //
     // DataSrcTransaction
     //

Modified: branches/trac375/src/lib/datasrc/python/tests/pydatasrc_test.py
==============================================================================
--- branches/trac375/src/lib/datasrc/python/tests/pydatasrc_test.py (original)
+++ branches/trac375/src/lib/datasrc/python/tests/pydatasrc_test.py Mon Oct 25 09:21:16 2010
@@ -69,108 +69,120 @@
     def test_find_rrset(self):
         self.ds.init("{ \"database_file\": \""+ testdata_path + "/example.org.sqlite3\" }")
         result = []
-        n = self.ds.find_rrset(Name("www.example.org"), RRClass.IN(), RRType.A(), result, 0, Name("example.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_rrset(Name("www.example.org"), RRClass.IN(), RRType.A(), result, Name("example.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.org. 3600 IN A 192.0.2.1\n", str(result[0]))
 
         result = []
-        n = self.ds.find_rrset(Name("doesnotexist.example.org"), RRClass.IN(), RRType.A(), result, 0, Name("example.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        result = []
-        n = self.ds.find_rrset(Name("www.doesnotexist.org"), RRClass.IN(), RRType.A(), result, 0, Name("doesnotexist.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        self.assertRaises(TypeError, self.ds.find_rrset);
+        n, flags = self.ds.find_rrset(Name("doesnotexist.example.org"), RRClass.IN(), RRType.A(), result, Name("example.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
+        self.assertEqual(0, len(result))
+
+        result = []
+        n, flags = self.ds.find_rrset(Name("www.doesnotexist.org"), RRClass.IN(), RRType.A(), result, Name("doesnotexist.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NO_SUCH_ZONE, flags)
+        self.assertEqual(0, len(result))
+
+        self.assertRaises(TypeError, self.ds.find_rrset)
         self.assertRaises(TypeError, self.ds.find_rrset,
                                      Name("www.doesnotexist.org"),
-                                     RRClass.IN(), RRType.A(), 0,
-                                     0, Name("doesnotexist.org"));
+                                     RRClass.IN(), RRType.A(),
+                                     0, Name("doesnotexist.org"))
 
     def test_find_exact_rrset(self):
         self.ds.init("{ \"database_file\": \""+ testdata_path + "/example.org.sqlite3\" }")
         result = []
-        n = self.ds.find_exact_rrset(Name("www.example.org"), RRClass.IN(), RRType.A(), result, 0, Name("example.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_exact_rrset(Name("www.example.org"), RRClass.IN(), RRType.A(), result, Name("example.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.org. 3600 IN A 192.0.2.1\n", str(result[0]))
 
         result = []
-        n = self.ds.find_exact_rrset(Name("doesnotexist.example.org"), RRClass.IN(), RRType.A(), result, 0, Name("example.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        result = []
-        n = self.ds.find_exact_rrset(Name("www.doesnotexist.org"), RRClass.IN(), RRType.A(), result, 0, Name("doesnotexist.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        self.assertRaises(TypeError, self.ds.find_exact_rrset);
+        n, flags = self.ds.find_exact_rrset(Name("doesnotexist.example.org"), RRClass.IN(), RRType.A(), result, Name("example.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
+        self.assertEqual(0, len(result))
+
+        result = []
+        n, flags = self.ds.find_exact_rrset(Name("www.doesnotexist.org"), RRClass.IN(), RRType.A(), result, Name("doesnotexist.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NO_SUCH_ZONE, flags)
+        self.assertEqual(0, len(result))
+
+        self.assertRaises(TypeError, self.ds.find_exact_rrset)
         self.assertRaises(TypeError, self.ds.find_exact_rrset,
                                      Name("www.doesnotexist.org"),
-                                     RRClass.IN(), RRType.A(), 0,
-                                     0, Name("doesnotexist.org"));
+                                     RRClass.IN(), RRType.A(),
+                                     0, Name("doesnotexist.org"))
 
     def test_find_addrs(self):
         self.ds.init("{ \"database_file\": \""+ testdata_path + "/example.org.sqlite3\" }")
         result = []
-        n = self.ds.find_addrs(Name("www.example.org"), RRClass.IN(), result, 0, Name("example.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.org"), RRClass.IN(), result, Name("example.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.org. 3600 IN A 192.0.2.1\n", str(result[0]))
 
         result = []
-        n = self.ds.find_addrs(Name("doesnotexist.example.org"), RRClass.IN(), result, 0, Name("example.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        result = []
-        n = self.ds.find_addrs(Name("www.doesnotexist.org"), RRClass.IN(), result, 0, Name("doesnotexist.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        self.assertRaises(TypeError, self.ds.find_addrs);
+        n, flags = self.ds.find_addrs(Name("doesnotexist.example.org"), RRClass.IN(), result, Name("example.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
+        self.assertEqual(0, len(result))
+
+        result = []
+        n, flags = self.ds.find_addrs(Name("www.doesnotexist.org"), RRClass.IN(), result, Name("doesnotexist.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NO_SUCH_ZONE, flags)
+        self.assertEqual(0, len(result))
+
+        self.assertRaises(TypeError, self.ds.find_addrs)
         self.assertRaises(TypeError, self.ds.find_addrs,
                                      Name("www.doesnotexist.org"),
-                                     RRClass.IN(), 0,
-                                     0, Name("doesnotexist.org"));
+                                     RRClass.IN(),
+                                     0, Name("doesnotexist.org"))
 
     def test_find_referral(self):
         self.ds.init("{ \"database_file\": \""+ testdata_path + "/example.org.sqlite3\" }")
         result = []
-        n = self.ds.find_referral(Name("sub.example.org"), RRClass.IN(), result, 0, Name("example.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_referral(Name("sub.example.org"), RRClass.IN(), result, Name("example.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.REFERRAL, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("sub.example.org. 3600 IN NS ns.sub.example.org.\n", str(result[0]))
 
         result = []
-        n = self.ds.find_referral(Name("doesnotexist.example.org"), RRClass.IN(), result, 0, Name("example.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        result = []
-        n = self.ds.find_referral(Name("sub.doesnotexist.org"), RRClass.IN(), result, 0, Name("doesnotexist.org"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        self.assertRaises(TypeError, self.ds.find_referral);
+        n, flags = self.ds.find_referral(Name("doesnotexist.example.org"), RRClass.IN(), result, Name("example.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
+        self.assertEqual(0, len(result))
+
+        result = []
+        n, flags = self.ds.find_referral(Name("sub.doesnotexist.org"), RRClass.IN(), result, Name("doesnotexist.org"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NO_SUCH_ZONE, flags)
+        self.assertEqual(0, len(result))
+
+        self.assertRaises(TypeError, self.ds.find_referral)
         self.assertRaises(TypeError, self.ds.find_referral,
                                      Name("sub.doesnotexist.org"),
-                                     RRClass.IN(), 0,
-                                     0, Name("doesnotexist.org"));
+                                     RRClass.IN(),
+                                     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());
+        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);
+        self.assertEqual(DataSrc.ERROR, result)
+        self.assertEqual(None, result_name)
 
         self.assertRaises(TypeError, self.ds.find_previous_name)
         
@@ -178,7 +190,7 @@
         self.ds.init("{ \"database_file\": \""+ testdata_path + "/test.sqlite3\" }")
         hashstr = "1BB7SO0452U1QHL98UISNDD9218GELR5";
     
-        nsec3_zonename = Name("sql2.example.com");
+        nsec3_zonename = Name("sql2.example.com")
 
         result_rrsets = []
         result = self.ds.find_covering_nsec3(nsec3_zonename, hashstr, result_rrsets)
@@ -241,8 +253,9 @@
         # check for nonexistence again, then add it and commit
         # finally check if exists
         result = []
-        n = self.ds.find_addrs(Name("added.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("added.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
         self.assertEqual(0, len(result))
 
         rrset.add_rdata(Rdata(rrset.get_type(), rrset.get_class(), "192.0.2.1"))
@@ -252,8 +265,9 @@
         self.ds.rollback_transaction(transaction)
 
         result = []
-        n = self.ds.find_addrs(Name("added.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("added.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
         self.assertEqual(0, len(result))
 
     def test_add_rrset_commit(self):
@@ -261,8 +275,9 @@
         rrset.add_rdata(Rdata(rrset.get_type(), rrset.get_class(), "192.0.2.1"))
         
         result = []
-        n = self.ds.find_addrs(Name("added.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("added.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
         self.assertEqual(0, len(result))
 
         transaction = DataSrcTransaction(self.ds, Name("example.com"), RRClass.IN())
@@ -274,8 +289,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_addrs(Name("added.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("added.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("added.example.com. 3600 IN A 192.0.2.1\n", str(result[0]))
 
@@ -293,8 +309,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
 
         result = self.ds.del_rrset(transaction, rrset)
@@ -303,8 +320,9 @@
         self.ds.rollback_transaction(transaction)
 
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
 
         self.assertRaises(TypeError, self.ds.rollback_transaction)
@@ -314,8 +332,9 @@
         rrset.add_rdata(Rdata(rrset.get_type(), rrset.get_class(), "192.0.2.1"))
         
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
 
         transaction = DataSrcTransaction(self.ds, Name("example.com"), RRClass.IN())
@@ -327,8 +346,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         # there's still other data, so we should get a list of 1 empty
         # rrset
         self.assertEqual(1, len(result))
@@ -340,8 +360,9 @@
         rrset = RRset(Name("www.example.com"), RRClass.IN(), RRType.ANY(), RRTTL(3600))
         
         result = []
-        n = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
 
         transaction = DataSrcTransaction(self.ds, Name("example.com"), RRClass.IN())
@@ -353,8 +374,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
         self.assertEqual(0, len(result))
 
     def test_del_zone(self):
@@ -369,8 +391,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NO_SUCH_ZONE, flags)
         self.assertEqual(0, len(result))
         
         transaction = DataSrcTransaction(self.ds, Name("example.com"), RRClass.IN())
@@ -385,13 +408,15 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(1, len(result))
-
-        result = []
-        n = self.ds.find_rrset(Name("example.com"), RRClass.IN(), RRType.SOA(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
+        self.assertEqual(1, len(result))
+
+        result = []
+        n, flags = self.ds.find_rrset(Name("example.com"), RRClass.IN(), RRType.SOA(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.REFERRAL, flags)
         self.assertEqual(1, len(result))
 
         rrset1 = result[0]
@@ -413,8 +438,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
         self.assertEqual(0, len(result))
 
     def test_replace_zone_list_new_zone(self):
@@ -439,13 +465,15 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(1, len(result))
-
-        result = []
-        n = self.ds.find_rrset(Name("example.com"), RRClass.IN(), RRType.SOA(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
+        self.assertEqual(1, len(result))
+
+        result = []
+        n, flags = self.ds.find_rrset(Name("example.com"), RRClass.IN(), RRType.SOA(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.REFERRAL, flags)
         self.assertEqual(1, len(result))
 
         rrset1 = result[0]
@@ -463,12 +491,14 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
 
         result = []
-        n = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
-        self.assertEqual(0, len(result))
-
-        n = self.ds.find_rrset(Name("added.example.com"), RRClass.IN(), RRType.A(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_rrset(Name("www.example.com"), RRClass.IN(), RRType.A(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(DataSrc.NAME_NOT_FOUND, flags)
+        self.assertEqual(0, len(result))
+
+        n, flags = self.ds.find_rrset(Name("added.example.com"), RRClass.IN(), RRType.A(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
 
     def test_replace_zone_function_not_rrset(self):
@@ -562,8 +592,9 @@
         rrsets = rrsets_from_file(testdata_path + "/ixfr_ok.rrs")
 
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.com. 3600 IN A 192.0.2.1\n", str(result[0]))
 
@@ -578,8 +609,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
         
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.com. 3600 IN A 192.0.2.3\n", str(result[0]))
 
@@ -596,8 +628,9 @@
         rrsets = rrsets_from_file(testdata_path + "/ixfr_ok.rrs")
 
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.com. 3600 IN A 192.0.2.1\n", str(result[0]))
 
@@ -612,8 +645,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
         
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.com. 3600 IN A 192.0.2.3\n", str(result[0]))
 
@@ -655,8 +689,9 @@
         rrsets = rrsets_from_file(testdata_path + "/ixfr_bad_remove_nonexisting.rrs")
 
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.com. 3600 IN A 192.0.2.1\n", str(result[0]))
 
@@ -674,8 +709,9 @@
         self.assertEqual(DataSrc.W_SUCCESS, result)
         
         result = []
-        n = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, 0, Name("example.com"))
-        self.assertEqual(DataSrc.SUCCESS, n);
+        n, flags = self.ds.find_addrs(Name("www.example.com"), RRClass.IN(), result, Name("example.com"))
+        self.assertEqual(DataSrc.SUCCESS, n)
+        self.assertEqual(0, flags)
         self.assertEqual(1, len(result))
         self.assertEqual("www.example.com. 3600 IN A 192.0.2.1\n", str(result[0]))
         
@@ -706,10 +742,10 @@
 def install_writable_database():
     return os.system(testdata_install_prog + " " + testdata_path +
                      "/test.sqlite3 " + testdata_out_path +
-                     "/write_test.sqlite3" );
+                     "/write_test.sqlite3" )
 
 def remove_writable_database():
-    return os.remove(testdata_out_path + "/write_test.sqlite3" );
+    return os.remove(testdata_out_path + "/write_test.sqlite3" )
 
 def rrsets_from_file(filename):
     rrsets = []




More information about the bind10-changes mailing list