[svn] commit: r2264 - in /experiments/python-binding/src/lib/dns/python: ./ tests/

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Jun 24 12:38:59 UTC 2010


Author: jelte
Date: Thu Jun 24 12:38:59 2010
New Revision: 2264

Log:
Fixed the review comments about the tests (mostly lots of missing tests)
Also fixed a few bugs (uncaught exceptions)

Removed:
    experiments/python-binding/src/lib/dns/python/tests/libdns_python_test.in
Modified:
    experiments/python-binding/src/lib/dns/python/message_python.cc
    experiments/python-binding/src/lib/dns/python/tests/message_python_test.py
    experiments/python-binding/src/lib/dns/python/tests/messagerenderer_python_test.py
    experiments/python-binding/src/lib/dns/python/tests/name_python_test.py
    experiments/python-binding/src/lib/dns/python/tests/question_python_test.py
    experiments/python-binding/src/lib/dns/python/tests/rdata_python_test.py
    experiments/python-binding/src/lib/dns/python/tests/rrclass_python_test.py
    experiments/python-binding/src/lib/dns/python/tests/rrset_python_test.py
    experiments/python-binding/src/lib/dns/python/tests/rrttl_python_test.py
    experiments/python-binding/src/lib/dns/python/tests/rrtype_python_test.py

Modified: experiments/python-binding/src/lib/dns/python/message_python.cc
==============================================================================
--- experiments/python-binding/src/lib/dns/python/message_python.cc (original)
+++ experiments/python-binding/src/lib/dns/python/message_python.cc Thu Jun 24 12:38:59 2010
@@ -1364,8 +1364,13 @@
     if (!PyArg_ParseTuple(args, "O!", &rcode_type, &rcode)) {
         return NULL;
     }
-    self->message->setRcode(*rcode->rcode);
-    Py_RETURN_NONE;
+    try {
+        self->message->setRcode(*rcode->rcode);
+        Py_RETURN_NONE;
+    } catch (InvalidMessageOperation imo) {
+        PyErr_SetString(po_InvalidMessageOperation, imo.what());
+        return NULL;
+    }
 }
 
 static PyObject*
@@ -1394,8 +1399,13 @@
     if (!PyArg_ParseTuple(args, "O!", &opcode_type, &opcode)) {
         return NULL;
     }
-    self->message->setOpcode(*opcode->opcode);
-    Py_RETURN_NONE;
+    try {
+        self->message->setOpcode(*opcode->opcode);
+        Py_RETURN_NONE;
+    } catch (InvalidMessageOperation imo) {
+        PyErr_SetString(po_InvalidMessageOperation, imo.what());
+        return NULL;
+    }
 }
 
 static PyObject*
@@ -1487,14 +1497,18 @@
                                            &PyBool_Type, &sign)) {
         return NULL;
     }
-    
-    if (sign == Py_True) {
-        self->message->addRRset(*section->section, rrset->rrset, true);
-    } else {
-        self->message->addRRset(*section->section, rrset->rrset, false);
-    }
-    
-    Py_RETURN_NONE;
+
+    try {
+        if (sign == Py_True) {
+            self->message->addRRset(*section->section, rrset->rrset, true);
+        } else {
+            self->message->addRRset(*section->section, rrset->rrset, false);
+        }
+        Py_RETURN_NONE;
+    } catch (InvalidMessageOperation imo) {
+        PyErr_SetString(po_InvalidMessageOperation, imo.what());
+        return NULL;
+    }
 }
 
 static PyObject*

Modified: experiments/python-binding/src/lib/dns/python/tests/message_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/message_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/message_python_test.py Thu Jun 24 12:38:59 2010
@@ -1,4 +1,4 @@
-# Copyright (C) 2009  Internet Systems Consortium.
+# Copyright (C) 2010  Internet Systems Consortium.
 #
 # Permission to use, copy, modify, and distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #
-# Tests for the rrtype part of the libdns_python module
+# Tests for the message part of the libdns_python module
 #
 
 import unittest
@@ -59,7 +59,7 @@
 
     def test_to_text(self):
         self.assertEqual("QUERY", Opcode.QUERY().to_text())
-        self.assertEqual("QUERY", Opcode.QUERY().__str__())
+        self.assertEqual("QUERY", str(Opcode.QUERY()))
         self.assertEqual("IQUERY", Opcode.IQUERY().to_text())
         self.assertEqual("STATUS", Opcode.STATUS().to_text())
         self.assertEqual("RESERVED3", Opcode.RESERVED3().to_text())
@@ -81,24 +81,29 @@
         o2 = Opcode.NOTIFY()
         o3 = Opcode.NOTIFY()
         self.assertTrue(o2 == o3)
+        self.assertFalse(o2 != o3)
         self.assertTrue(o1 != o2)
         self.assertFalse(o1 == 1)
         self.assertFalse(o1 == o2)
         # can't use assertRaises here...
         try:
             o1 < o2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             o1 <= o2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             o1 > o2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             o1 >= o2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
 
@@ -106,6 +111,14 @@
     def test_init(self):
         self.assertRaises(TypeError, Rcode, "wrong")
         self.assertRaises(OverflowError, Rcode, 65536)
+        self.assertEqual(Rcode(0).get_code(), 0)
+    
+        self.assertEqual(0, Rcode(0).get_code())
+        self.assertEqual(0xfff, Rcode(0xfff).get_code()) # possible max code
+    
+        # should fail on attempt of construction with an out of range code
+        self.assertRaises(OverflowError, Rcode, 0x1000)
+        self.assertRaises(OverflowError, Rcode, 0xffff)
 
     def test_get_code(self):
         self.assertEqual(0, Rcode.NOERROR().get_code())
@@ -124,6 +137,7 @@
         self.assertEqual(13, Rcode.RESERVED13().get_code())
         self.assertEqual(14, Rcode.RESERVED14().get_code())
         self.assertEqual(15, Rcode.RESERVED15().get_code())
+        self.assertEqual(16, Rcode.BADVERS().get_code())
 
     def test_to_text(self):
         self.assertEqual("NOERROR", Rcode(0).to_text())
@@ -143,7 +157,11 @@
         self.assertEqual("RESERVED13", Rcode(13).to_text())
         self.assertEqual("RESERVED14", Rcode(14).to_text())
         self.assertEqual("RESERVED15", Rcode(15).to_text())
+        self.assertEqual("BADVERS", Rcode(16).to_text())
         
+        self.assertEqual("17", Rcode(Rcode.BADVERS().get_code() + 1).to_text())
+        self.assertEqual("4095", Rcode(0xfff).to_text())
+
     def test_richcmp(self):
         r1 = Rcode.NOERROR()
         r2 = Rcode.FORMERR()
@@ -155,18 +173,22 @@
         # can't use assertRaises here...
         try:
             r1 < r2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             r1 <= r2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             r1 > r2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             r1 >= r2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
 
@@ -192,103 +214,25 @@
         # can't use assertRaises here...
         try:
             s1 < s2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             s1 <= s2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             s1 > s2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         try:
             s1 >= s2
+            self.fail("operation that should have raised an error unexpectedly succeeded")
         except Exception as err:
             self.assertEqual(TypeError, type(err))
         
-
-class MessageTest(unittest.TestCase):
-
-    def setUp(self):
-        self.p = Message(Message.PARSE)
-        self.r = Message(Message.RENDER)
-        
-    def test_init(self):
-        self.assertRaises(TypeError, Message, 3)
-        self.assertRaises(TypeError, Message, "wrong")
-
-    def test_get_header_flag(self):
-        self.assertRaises(TypeError, self.p.get_header_flag, "wrong")
-        self.assertFalse(self.p.get_header_flag(MessageFlag.AA()))
-
-    def test_set_header_flag(self):
-        self.assertRaises(TypeError, self.r.set_header_flag, "wrong")
-        self.assertRaises(TypeError, self.r.clear_header_flag, "wrong")
-
-        self.assertFalse(self.r.get_header_flag(MessageFlag.AA()))
-        self.r.set_header_flag(MessageFlag.AA())
-        self.assertTrue(self.r.get_header_flag(MessageFlag.AA()))
-        self.r.clear_header_flag(MessageFlag.AA())
-        self.assertFalse(self.r.get_header_flag(MessageFlag.AA()))
-
-        self.assertRaises(InvalidMessageOperation,
-                          self.p.set_header_flag, MessageFlag.AA())
-        self.assertRaises(InvalidMessageOperation,
-                          self.p.clear_header_flag, MessageFlag.AA())
-
-    def test_set_DNSSEC_supported(self):
-        self.assertRaises(TypeError, self.r.set_dnssec_supported, "wrong")
-
-        self.assertFalse(self.r.is_dnssec_supported())
-        self.r.set_dnssec_supported(True)
-        self.assertTrue(self.r.is_dnssec_supported())
-        self.r.set_dnssec_supported(False)
-        self.assertFalse(self.r.is_dnssec_supported())
-
-    def test_set_udp_size(self):
-        self.assertRaises(TypeError, self.r.set_udp_size, "wrong")
-
-    def test_set_qid(self):
-        self.assertRaises(TypeError, self.r.set_qid, "wrong")
-        self.assertRaises(InvalidMessageOperation,
-                          self.p.set_qid, 123)
-
-    def test_set_rcode(self):
-        self.assertRaises(TypeError, self.r.set_rcode, "wrong")
-
-    def test_set_opcode(self):
-        self.assertRaises(TypeError, self.r.set_opcode, "wrong")
-
-    def test_get_section(self):
-        self.assertRaises(TypeError, self.r.get_section, "wrong")
-
-    def test_get_rr_count(self):
-        self.assertRaises(TypeError, self.r.get_rr_count, "wrong")
-
-    def test_add_question(self):
-        self.assertRaises(TypeError, self.r.add_question, "wrong", "wrong")
-
-    def test_add_rrset(self):
-        self.assertRaises(TypeError, self.r.add_rrset, "wrong")
-
-    def test_clear(self):
-        self.assertEqual(None, self.r.clear(Message.PARSE))
-        self.assertEqual(None, self.r.clear(Message.RENDER))
-        self.assertRaises(TypeError, self.r.clear, "wrong")
-        self.assertRaises(TypeError, self.r.clear, 3)
-
-    def test_to_wire(self):
-        self.assertRaises(TypeError, self.r.to_wire, 1)
-        self.assertRaises(InvalidMessageOperation,
-                          self.p.to_wire, MessageRenderer())
-
-    def test_from_wire(self):
-        self.assertRaises(TypeError, self.r.from_wire, 1)
-        self.assertRaises(InvalidMessageOperation,
-                          Message.from_wire, self.r, bytes())
-        self.assertRaises(MessageTooShort,
-                          Message.from_wire, self.p, bytes())
 
 # helper functions for tests taken from c++ unittests
 if "TESTDATA_PATH" in os.environ:
@@ -314,26 +258,202 @@
     message.from_wire(data)
     pass
 
-class ConvertedUnittests(unittest.TestCase):
-    
-    # tests below based on c++ unit tests
-    def test_RcodeConstruct(self):
-        # normal cases
-        self.assertEqual(0, Rcode(0).get_code())
-        self.assertEqual(0xfff, Rcode(0xfff).get_code()) # possible max code
-    
-        # should fail on attempt of construction with an out of range code
-        self.assertRaises(OverflowError, Rcode, 0x1000)
-        self.assertRaises(OverflowError, Rcode, 0xffff)
-    
-    def test_RcodeToText(self):
-        self.assertEqual("NOERROR", Rcode.NOERROR().to_text())
-        self.assertEqual("BADVERS", Rcode.BADVERS().to_text())
-        self.assertEqual("17", Rcode(Rcode.BADVERS().get_code() + 1).to_text())
-        self.assertEqual("4095", Rcode(0xfff).to_text())
-    
-    
-    def test_fromWire(self):
+# we don't have direct comparison for rrsets right now (should we?
+# should go in the cpp version first then), so also no direct list
+# comparison. Created a helper function
+def compare_rrset_list(list1, list2):
+    if len(list1) != len(list2):
+        return False
+    for i in range(0, len(list1)):
+        if str(list1[i]) != str(list2[i]):
+            return False
+    return True
+
+# a complete message taken from cpp tests, for testing towire and totext
+def create_message():
+    message_render = Message(Message.RENDER)
+    message_render.set_qid(0x1035)
+    message_render.set_opcode(Opcode.QUERY())
+    message_render.set_rcode(Rcode.NOERROR())
+    message_render.set_header_flag(MessageFlag.QR())
+    message_render.set_header_flag(MessageFlag.RD())
+    message_render.set_header_flag(MessageFlag.AA())
+    message_render.add_question(Question(Name("test.example.com"), RRClass("IN"), RRType("A")))
+    rrset = RRset(Name("test.example.com"), RRClass("IN"),
+                                        RRType("A"), RRTTL(3600))
+    rrset.add_rdata(Rdata(RRType("A"), RRClass("IN"), "192.0.2.1"))
+    rrset.add_rdata(Rdata(RRType("A"), RRClass("IN"), "192.0.2.2"))
+    message_render.add_rrset(Section.ANSWER(), rrset)
+    return message_render
+
+
+class MessageTest(unittest.TestCase):
+
+    def setUp(self):
+        self.p = Message(Message.PARSE)
+        self.r = Message(Message.RENDER)
+        
+    def test_init(self):
+        self.assertRaises(TypeError, Message, 3)
+        self.assertRaises(TypeError, Message, "wrong")
+
+    def test_get_header_flag(self):
+        self.assertRaises(TypeError, self.p.get_header_flag, "wrong")
+        self.assertFalse(self.p.get_header_flag(MessageFlag.AA()))
+
+    def test_set_clear_header_flag(self):
+        self.assertRaises(TypeError, self.r.set_header_flag, "wrong")
+        self.assertRaises(TypeError, self.r.clear_header_flag, "wrong")
+
+        self.assertFalse(self.r.get_header_flag(MessageFlag.AA()))
+        self.r.set_header_flag(MessageFlag.AA())
+        self.assertTrue(self.r.get_header_flag(MessageFlag.AA()))
+        self.r.clear_header_flag(MessageFlag.AA())
+        self.assertFalse(self.r.get_header_flag(MessageFlag.AA()))
+
+        self.assertRaises(InvalidMessageOperation,
+                          self.p.set_header_flag, MessageFlag.AA())
+        self.assertRaises(InvalidMessageOperation,
+                          self.p.clear_header_flag, MessageFlag.AA())
+
+    def test_set_DNSSEC_supported(self):
+        self.assertRaises(TypeError, self.r.set_dnssec_supported, "wrong")
+
+        self.assertFalse(self.r.is_dnssec_supported())
+        self.r.set_dnssec_supported(True)
+        self.assertTrue(self.r.is_dnssec_supported())
+        self.r.set_dnssec_supported(False)
+        self.assertFalse(self.r.is_dnssec_supported())
+
+        self.assertRaises(InvalidMessageOperation,
+                          self.p.set_dnssec_supported, True)
+        self.assertRaises(InvalidMessageOperation,
+                          self.p.set_dnssec_supported, False)
+
+    def test_set_udp_size(self):
+        self.assertRaises(TypeError, self.r.set_udp_size, "wrong")
+        self.assertRaises(InvalidMessageUDPSize, self.r.set_udp_size, 0)
+        self.assertRaises(InvalidMessageUDPSize, self.r.set_udp_size, 65536)
+        self.assertRaises(InvalidMessageOperation, self.p.set_udp_size, 1024)
+        self.r.set_udp_size(2048)
+        self.assertEqual(2048, self.r.get_udp_size())
+
+    def test_set_qid(self):
+        self.assertRaises(TypeError, self.r.set_qid, "wrong")
+        self.assertRaises(InvalidMessageOperation,
+                          self.p.set_qid, 123)
+        self.r.set_qid(1234)
+        self.assertEqual(1234, self.r.get_qid())
+
+    def test_set_rcode(self):
+        self.assertRaises(TypeError, self.r.set_rcode, "wrong")
+
+        rcode = Rcode.BADVERS()
+        self.r.set_rcode(rcode)
+        self.assertEqual(rcode, self.r.get_rcode())
+
+        self.assertRaises(InvalidMessageOperation,
+                          self.p.set_rcode, rcode)
+        
+
+    def test_set_opcode(self):
+        self.assertRaises(TypeError, self.r.set_opcode, "wrong")
+
+        opcode = Opcode.IQUERY()
+        self.r.set_opcode(opcode)
+        self.assertEqual(opcode, self.r.get_opcode())
+
+        self.assertRaises(InvalidMessageOperation,
+                          self.p.set_opcode, opcode)
+
+    def test_get_section(self):
+        self.assertRaises(TypeError, self.r.get_section, "wrong")
+
+        rrset = RRset(Name("example.com"), RRClass("IN"), RRType("A"), RRTTL(3600))
+        rrset.add_rdata(Rdata(RRType("A"), RRClass("IN"), "192.0.2.1"))
+        rrset.add_rdata(Rdata(RRType("A"), RRClass("IN"), "192.0.2.2"))
+        section_rrset = [rrset]
+
+        self.assertRaises(InvalidMessageOperation, self.p.add_rrset,
+                          Section.ANSWER(), rrset)
+        
+        self.assertFalse(compare_rrset_list(section_rrset, self.r.get_section(Section.ANSWER())))
+        self.assertEqual(0, self.r.get_rr_count(Section.ANSWER()))
+        self.r.add_rrset(Section.ANSWER(), rrset)
+        self.assertTrue(compare_rrset_list(section_rrset, self.r.get_section(Section.ANSWER())))
+        self.assertEqual(2, self.r.get_rr_count(Section.ANSWER()))
+
+        self.assertFalse(compare_rrset_list(section_rrset, self.r.get_section(Section.AUTHORITY())))
+        self.assertEqual(0, self.r.get_rr_count(Section.AUTHORITY()))
+        self.r.add_rrset(Section.AUTHORITY(), rrset)
+        self.assertTrue(compare_rrset_list(section_rrset, self.r.get_section(Section.AUTHORITY())))
+        self.assertEqual(2, self.r.get_rr_count(Section.AUTHORITY()))
+
+        self.assertFalse(compare_rrset_list(section_rrset, self.r.get_section(Section.ADDITIONAL())))
+        self.assertEqual(0, self.r.get_rr_count(Section.ADDITIONAL()))
+        self.r.add_rrset(Section.ADDITIONAL(), rrset)
+        self.assertTrue(compare_rrset_list(section_rrset, self.r.get_section(Section.ADDITIONAL())))
+        self.assertEqual(2, self.r.get_rr_count(Section.ADDITIONAL()))
+
+    def test_get_rr_count(self):
+        self.assertRaises(TypeError, self.r.get_rr_count, "wrong")
+        # counts also tested in add_section
+
+    def test_add_question(self):
+        self.assertRaises(TypeError, self.r.add_question, "wrong", "wrong")
+        q = Question(Name("example.com"), RRClass("IN"), RRType("A"))
+        qs = [q]
+        self.assertFalse(compare_rrset_list(qs, self.r.get_question()))
+        self.assertEqual(0, self.r.get_rr_count(Section.QUESTION()))
+        self.r.add_question(q)
+        self.assertTrue(compare_rrset_list(qs, self.r.get_question()))
+        self.assertEqual(1, self.r.get_rr_count(Section.QUESTION()))
+
+    def test_add_rrset(self):
+        self.assertRaises(TypeError, self.r.add_rrset, "wrong")
+        # actual addition already tested in get_section
+
+    def test_clear(self):
+        self.assertEqual(None, self.r.clear(Message.PARSE))
+        self.assertEqual(None, self.r.clear(Message.RENDER))
+        self.assertRaises(TypeError, self.r.clear, "wrong")
+        self.assertRaises(TypeError, self.r.clear, 3)
+
+    def test_to_wire(self):
+        self.assertRaises(TypeError, self.r.to_wire, 1)
+        self.assertRaises(InvalidMessageOperation,
+                          self.p.to_wire, MessageRenderer())
+
+        message_render = create_message()
+        renderer = MessageRenderer()
+        message_render.to_wire(renderer)
+        self.assertEqual(b'\x105\x85\x00\x00\x01\x00\x02\x00\x00\x00\x00\x04test\x07example\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x0e\x10\x00\x04\xc0\x00\x02\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x0e\x10\x00\x04\xc0\x00\x02\x02',
+                         renderer.get_data())
+
+    def test_to_text(self):
+        message_render = create_message()
+        
+        msg_str =\
+""";; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4149
+;; flags: qr aa rd ; QUESTION: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
+
+;; QUESTION SECTION:
+;test.example.com. IN A
+
+;; ANSWER SECTION:
+test.example.com. 3600 IN A 192.0.2.1
+test.example.com. 3600 IN A 192.0.2.2
+"""
+        self.assertEqual(msg_str, message_render.to_text())
+        self.assertEqual(msg_str, str(message_render))
+
+    def test_from_wire(self):
+        self.assertRaises(TypeError, self.r.from_wire, 1)
+        self.assertRaises(InvalidMessageOperation,
+                          Message.from_wire, self.r, bytes())
+        self.assertRaises(MessageTooShort,
+                          Message.from_wire, self.p, bytes())
+
         test_name = Name("test.example.com");
         
         message_parse = Message(0)
@@ -366,7 +486,7 @@
         self.assertEqual("192.0.2.1", rdata[0].to_text())
         self.assertEqual("192.0.2.2", rdata[1].to_text())
         self.assertEqual(2, len(rdata))
-    
+
     def test_GetEDNS0DOBit(self):
         message_parse = Message(Message.PARSE)
         ## Without EDNS0, DNSSEC is considered to be unsupported.
@@ -491,43 +611,6 @@
                           message_parse,
                           "message_fromWire9")
     
-    def test_to_text_and_wire(self):
-        message_render = Message(Message.RENDER)
-        message_render.set_qid(0x1035)
-        message_render.set_opcode(Opcode.QUERY())
-        message_render.set_rcode(Rcode.NOERROR())
-        message_render.set_header_flag(MessageFlag.QR())
-        message_render.set_header_flag(MessageFlag.RD())
-        message_render.set_header_flag(MessageFlag.AA())
-        message_render.add_question(Question(Name("test.example.com"), RRClass("IN"), RRType("A")))
-        rrset = RRset(Name("test.example.com"), RRClass("IN"),
-                                            RRType("A"), RRTTL(3600))
-        rrset.add_rdata(Rdata(RRType("A"), RRClass("IN"), "192.0.2.1"))
-        rrset.add_rdata(Rdata(RRType("A"), RRClass("IN"), "192.0.2.2"))
-        message_render.add_rrset(Section.ANSWER(), rrset)
-    
-        self.assertEqual(1, message_render.get_rr_count(Section.QUESTION()))
-        self.assertEqual(2, message_render.get_rr_count(Section.ANSWER()))
-        self.assertEqual(0, message_render.get_rr_count(Section.AUTHORITY()))
-        self.assertEqual(0, message_render.get_rr_count(Section.ADDITIONAL()))
-
-        renderer = MessageRenderer()
-        message_render.to_wire(renderer)
-        self.assertEqual(b'\x105\x85\x00\x00\x01\x00\x02\x00\x00\x00\x00\x04test\x07example\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x0e\x10\x00\x04\xc0\x00\x02\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x0e\x10\x00\x04\xc0\x00\x02\x02',
-                         renderer.get_data())
-        msg_str =\
-""";; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4149
-;; flags: qr aa rd ; QUESTION: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
-
-;; QUESTION SECTION:
-;test.example.com. IN A
-
-;; ANSWER SECTION:
-test.example.com. 3600 IN A 192.0.2.1
-test.example.com. 3600 IN A 192.0.2.2
-"""
-        self.assertEqual(msg_str, message_render.to_text())
-        self.assertEqual(msg_str, message_render.__str__())
 
 if __name__ == '__main__':
     unittest.main()

Modified: experiments/python-binding/src/lib/dns/python/tests/messagerenderer_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/messagerenderer_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/messagerenderer_python_test.py Thu Jun 24 12:38:59 2010
@@ -48,19 +48,6 @@
         message.add_rrset(Section.AUTHORITY(), rrset)
         self.message2 = message
 
-        #message = Message(Message.RENDER)
-        #message.set_qid(123)
-        #message.set_header_flag(MessageFlag.AA())
-        #message.set_header_flag(MessageFlag.QR())
-        #message.set_opcode(Opcode.QUERY())
-        #message.set_rcode(Rcode.NOERROR())
-        #message.add_question(Question(name, c, t))
-        #rrset = RRset(name, c, t, ttl)
-        #for i in range(1, 99):
-        #    rrset.add_rdata(Rdata(t, c, "192.0.2." + str(i)))
-        #message.add_rrset(Section.AUTHORITY(), rrset)
-        #self.message3 = message
-
         self.renderer1 = MessageRenderer()
         self.renderer2 = MessageRenderer()
         self.renderer3 = MessageRenderer()

Modified: experiments/python-binding/src/lib/dns/python/tests/name_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/name_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/name_python_test.py Thu Jun 24 12:38:59 2010
@@ -58,6 +58,18 @@
         self.assertEqual("COMMONANCESTOR", NameComparisonResult.NameRelation[self.ncr12.get_relation()])
         self.assertEqual("COMMONANCESTOR", NameComparisonResult.NameRelation[self.ncr15.get_relation()])
 
+        superdomain = Name("com")
+        relation = superdomain.compare(self.name1)
+        self.assertEqual("SUPERDOMAIN", NameComparisonResult.NameRelation[relation.get_relation()])
+
+        subdomain = Name("sub.aaaa.example.com")
+        relation = subdomain.compare(self.name1)
+        self.assertEqual("SUBDOMAIN", NameComparisonResult.NameRelation[relation.get_relation()])
+
+        same = Name("aaaa.example.com")
+        relation = same.compare(self.name1)
+        self.assertEqual("EQUAL", NameComparisonResult.NameRelation[relation.get_relation()])
+
 class NameTest(unittest.TestCase):
     def setUp(self):
         self.name1 = Name("example.com")
@@ -82,7 +94,6 @@
         self.assertRaises(InvalidBufferPosition, Name, b, 100)
         b = bytearray()
         b += b'\x07example'*32 + b'\x03com\x00'
-        # no TooLong for from wire?
         self.assertRaises(DNSMessageFORMERR, Name, b, 0)
 
     def test_at(self):
@@ -104,6 +115,7 @@
     def test_to_text(self):
         self.assertEqual("example.com.", self.name1.to_text())
         self.assertEqual(".", self.name2.to_text())
+        self.assertEqual(".", str(self.name2))
         self.assertEqual("something.completely.different.", self.name3.to_text())
 
     def test_to_wire(self):
@@ -129,8 +141,6 @@
         self.assertFalse(self.name1.equals(self.name2))
         self.assertFalse(self.name1.equals(self.name3))
         self.assertTrue(self.name1.equals(self.name4))
-        #TODO: == not yet defined
-        #self.assertEqual(self.name1, self.name2)
 
     def test_split(self):
         s = self.name1.split(1,1)
@@ -173,10 +183,18 @@
     def test_richcmp(self):
         self.assertTrue(self.name1 > self.name2)
         self.assertFalse(self.name1 < self.name2)
+        self.assertFalse(self.name2 > self.name1)
+        self.assertTrue(self.name2 < self.name1)
         self.assertTrue(self.name1 == self.name4)
+        self.assertFalse(self.name1 != self.name4)
+        self.assertTrue(self.name1 != self.name2)
+        self.assertFalse(self.name1 == self.name2)
         self.assertTrue(self.name1 <= self.name4)
         self.assertTrue(self.name1 >= self.name4)
         self.assertFalse(self.name1 <= self.name2)
+        self.assertTrue(self.name4 >= self.name1)
+        self.assertTrue(self.name4 <= self.name1)
+        self.assertFalse(self.name2 >= self.name1)
 
 if __name__ == '__main__':
     unittest.main()

Modified: experiments/python-binding/src/lib/dns/python/tests/question_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/question_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/question_python_test.py Thu Jun 24 12:38:59 2010
@@ -1,4 +1,4 @@
-# Copyright (C) 2009  Internet Systems Consortium.
+# Copyright (C) 2010  Internet Systems Consortium.
 #
 # Permission to use, copy, modify, and distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -55,7 +55,8 @@
         self.assertRaises(TypeError, Question, "wrong")
 
     # tests below based on cpp unit tests
-    def test_QuestionTest_fromWire(self):
+    # also tests get_name, get_class and get_type
+    def test_from_wire(self):
         
         q = question_from_wire("question_fromWire")
 
@@ -79,15 +80,14 @@
                           question_from_wire,
                           "question_fromWire", 36)
     
-    
-    def test_QuestionTest_to_text(self):
+    def test_to_text(self):
     
         self.assertEqual("foo.example.com. IN NS\n", self.test_question1.to_text())
-        self.assertEqual("foo.example.com. IN NS\n", self.test_question1.__str__())
+        self.assertEqual("foo.example.com. IN NS\n", str(self.test_question1))
         self.assertEqual("bar.example.com. CH A\n", self.test_question2.to_text())
     
     
-    def test_QuestionTest_to_wireBuffer(self):
+    def test_to_wire_buffer(self):
         obuffer = bytes()
         obuffer = self.test_question1.to_wire(obuffer)
         obuffer = self.test_question2.to_wire(obuffer)
@@ -95,7 +95,7 @@
         self.assertEqual(obuffer, wiredata)
     
     
-    def test_QuestionTest_to_wireRenderer(self):
+    def test_to_wire_renderer(self):
         renderer = MessageRenderer()
         self.test_question1.to_wire(renderer)
         self.test_question2.to_wire(renderer)

Modified: experiments/python-binding/src/lib/dns/python/tests/rdata_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/rdata_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/rdata_python_test.py Thu Jun 24 12:38:59 2010
@@ -51,11 +51,20 @@
         self.assertEqual(b'\x03foo', b)
         self.assertRaises(TypeError, self.rdata1.to_wire, 1)
 
+        renderer = MessageRenderer()
+        self.rdata1.to_wire(renderer)
+        self.assertEqual(b'\xc0\x00\x02b', renderer.get_data())
+
+        renderer = MessageRenderer()
+        self.rdata3.to_wire(renderer)
+        self.assertEqual(b'\x0casdfasdfasdf', renderer.get_data())
+
     def test_rdata_to_text(self):
         self.assertEqual("192.0.2.98", self.rdata1.to_text())
         self.assertEqual("192.0.2.99", self.rdata2.to_text())
         self.assertEqual("\"asdfasdfasdf\"", self.rdata3.to_text())
         self.assertEqual("\"foo\"", self.rdata4.to_text())
+        self.assertEqual("\"foo\"", str(self.rdata4))
 
     def test_richcmp(self):
         self.assertTrue(self.rdata1 < self.rdata2);
@@ -66,5 +75,13 @@
         other_rdata = Rdata(RRType("TXT"), RRClass("IN"), "foo")
         self.assertTrue(self.rdata4 == other_rdata)
 
+        self.assertFalse(self.rdata1 > self.rdata2);
+        self.assertFalse(self.rdata1 >= self.rdata2);
+        self.assertTrue(self.rdata1 < self.rdata2);
+        self.assertTrue(self.rdata1 <= self.rdata2);
+        self.assertFalse(self.rdata3 == self.rdata4)
+        self.assertFalse(self.rdata4 != other_rdata)
+        
+
 if __name__ == '__main__':
     unittest.main()

Modified: experiments/python-binding/src/lib/dns/python/tests/rrclass_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/rrclass_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/rrclass_python_test.py Thu Jun 24 12:38:59 2010
@@ -40,7 +40,7 @@
         
     def test_rrclass_to_text(self):
         self.assertEqual("IN", self.c1.to_text())
-        self.assertEqual("IN", self.c1.__str__())
+        self.assertEqual("IN", str(self.c1))
         self.assertEqual("CH", self.c2.to_text())
 
     def test_rrclass_to_wire(self):
@@ -63,6 +63,15 @@
         self.assertTrue(self.c1 <= self.c2)
         self.assertFalse(self.c1 > self.c2)
         self.assertFalse(self.c1 >= self.c2)
+        other_rrclass = RRClass("IN")
+        self.assertTrue(self.c1 == other_rrclass)
+
+        self.assertFalse(self.c1 == self.c2)
+        self.assertFalse(self.c1 > self.c2)
+        self.assertFalse(self.c1 >= self.c2)
+        self.assertTrue(self.c1 < self.c2)
+        self.assertTrue(self.c1 <= self.c2)
+        self.assertFalse(self.c1 != other_rrclass)
 
     def test_statics(self):
         self.assertEqual(RRClass.IN(), RRClass("IN"))

Modified: experiments/python-binding/src/lib/dns/python/tests/rrset_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/rrset_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/rrset_python_test.py Thu Jun 24 12:38:59 2010
@@ -1,4 +1,4 @@
-# Copyright (C) 2009  Internet Systems Consortium.
+# Copyright (C) 2010  Internet Systems Consortium.
 #
 # Permission to use, copy, modify, and distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -85,9 +85,8 @@
                          self.rrset_a.to_text());
         self.assertEqual("test.example.com. 3600 IN A 192.0.2.1\n"
                          "test.example.com. 3600 IN A 192.0.2.2\n",
-                         self.rrset_a.__str__());
+                         str(self.rrset_a));
 
-        #rrset_empty = RRset(self.test_name, RRClass("IN"), RRType("A"), RRTTL(3600))
         self.assertRaises(EmptyRRset, self.rrset_a_empty.to_text)
 
     def test_to_wire_buffer(self):
@@ -104,6 +103,13 @@
         mr = MessageRenderer()
         self.rrset_a.to_wire(mr)
         self.assertEqual(exp_buffer, mr.get_data())
+
+    def test_get_rdata(self):
+        rdata = [ Rdata(RRType("A"), RRClass("IN"), "192.0.2.1"),
+                  Rdata(RRType("A"), RRClass("IN"), "192.0.2.2")
+                ]
+        self.assertEqual(rdata, self.rrset_a.get_rdata())
+        self.assertEqual([], self.rrset_a_empty.get_rdata())
         
 if __name__ == '__main__':
     unittest.main()

Modified: experiments/python-binding/src/lib/dns/python/tests/rrttl_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/rrttl_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/rrttl_python_test.py Thu Jun 24 12:38:59 2010
@@ -21,7 +21,7 @@
 import os
 from libdns_python import *
 
-class RdataTest(unittest.TestCase):
+class RRTTLTest(unittest.TestCase):
     def setUp(self):
         self.t1 = RRTTL(1)
         self.t2 = RRTTL(3600)
@@ -40,12 +40,12 @@
         b[3] = 15
         self.assertEqual(15, RRTTL(b).get_value())
         
-    def test_rdata_to_text(self):
+    def test_rrttl_to_text(self):
         self.assertEqual("1", self.t1.to_text())
-        self.assertEqual("1", self.t1.__str__())
+        self.assertEqual("1", str(self.t1))
         self.assertEqual("3600", self.t2.to_text())
 
-    def test_rdata_to_wire(self):
+    def test_rrttl_to_wire(self):
         b = bytearray()
         self.t1.to_wire(b)
         self.assertEqual(b'\x00\x00\x00\x01', b)
@@ -57,7 +57,7 @@
         self.assertEqual(b'\x00\x00\x0e\x10', mr.get_data())
         self.assertRaises(TypeError, self.t1.to_wire, 1)
 
-    def test_rdata_richcmp(self):
+    def test_rrttl_richcmp(self):
         self.assertTrue(self.t1 == RRTTL(1))
         self.assertFalse(self.t1 != RRTTL(1))
         self.assertFalse(self.t1 == 1)
@@ -66,5 +66,12 @@
         self.assertFalse(self.t1 > self.t2)
         self.assertFalse(self.t1 >= self.t2)
 
+        self.assertFalse(self.t1 != RRTTL(1))
+        self.assertTrue(self.t1 == RRTTL(1))
+        self.assertFalse(self.t1 > self.t2)
+        self.assertFalse(self.t1 >= self.t2)
+        self.assertTrue(self.t1 < self.t2)
+        self.assertTrue(self.t1 <= self.t2)
+
 if __name__ == '__main__':
     unittest.main()

Modified: experiments/python-binding/src/lib/dns/python/tests/rrtype_python_test.py
==============================================================================
--- experiments/python-binding/src/lib/dns/python/tests/rrtype_python_test.py (original)
+++ experiments/python-binding/src/lib/dns/python/tests/rrtype_python_test.py Thu Jun 24 12:38:59 2010
@@ -1,4 +1,4 @@
-# Copyright (C) 2009  Internet Systems Consortium.
+# Copyright (C) 2010  Internet Systems Consortium.
 #
 # Permission to use, copy, modify, and distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -39,9 +39,10 @@
         self.assertRaises(IncompleteRRType, RRType, b)
         self.assertRaises(TypeError, RRType, Exception)
     
-    def test_from_text(self):
+    def test_init_from_text(self):
         self.assertEqual("A", RRType("A").to_text())
         self.assertEqual("NS", RRType("NS").to_text());
+        self.assertEqual("NS", str(RRType("NS")));
     
         self.assertEqual("TYPE65535", RRType("TYPE65535").to_text());
     
@@ -101,6 +102,14 @@
         self.assertFalse(RRType(100) > RRType(65535));
         self.assertFalse(RRType(100) >= RRType(65535));
 
+        self.assertFalse(RRType(1) != RRType("A"));
+        self.assertFalse(RRType(0) == RRType("A"));
+        self.assertFalse(RRType("A") > RRType("NS"));
+        self.assertFalse(RRType("A") >= RRType("NS"));
+        self.assertFalse(RRType(100) > RRType(65535));
+        self.assertTrue(RRType(100) < RRType(65535));
+        self.assertTrue(RRType(100) <= RRType(65535));
+
         self.assertFalse(self.rrtype_1 == 1)
 
     def test_statics(self):




More information about the bind10-changes mailing list