]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
more coverage improvements
authorBob Halley <halley@play-bow.org>
Mon, 29 Jun 2020 14:32:32 +0000 (07:32 -0700)
committerBob Halley <halley@play-bow.org>
Mon, 29 Jun 2020 14:32:32 +0000 (07:32 -0700)
tests/test_message.py
tests/test_ntoaaton.py
tests/test_rdata.py
tests/test_update.py

index ca1fc8699248f4f473eb6341470d7b691eaef3a3..1a5dceaf4168f4bd773b5825abe69a3816ce2931 100644 (file)
@@ -27,6 +27,7 @@ import dns.name
 import dns.rdataclass
 import dns.rdatatype
 import dns.rrset
+import dns.update
 
 def here(filename):
     return os.path.join(os.path.dirname(__file__), filename)
@@ -346,5 +347,90 @@ class MessageTestCase(unittest.TestCase):
         expected = dns.message.from_text(query_text)
         self.assertEqual(m, expected)
 
+    def test_repr(self):
+        q = dns.message.from_text(query_text)
+        self.assertEqual(repr(q), '<DNS message, ID 1234>')
+
+    def test_non_question_setters(self):
+        rrset = dns.rrset.from_text('foo', 300, 'in', 'a', '10.0.0.1')
+        q = dns.message.QueryMessage(id=1)
+        q.answer = [rrset]
+        self.assertEqual(q.sections[1], [rrset])
+        self.assertEqual(q.sections[2], [])
+        self.assertEqual(q.sections[3], [])
+        q.authority = [rrset]
+        self.assertEqual(q.sections[2], [rrset])
+        self.assertEqual(q.sections[3], [])
+        q.additional = [rrset]
+        self.assertEqual(q.sections[3], [rrset])
+
+    def test_not_a_response(self):
+        q = dns.message.QueryMessage(id=1)
+        self.assertFalse(q.is_response(q))
+        r = dns.message.QueryMessage(id=2)
+        r.flags = dns.flags.QR
+        self.assertFalse(q.is_response(r))
+        r = dns.update.UpdateMessage(id=1)
+        self.assertFalse(q.is_response(r))
+        q1 = dns.message.make_query('www.dnspython.org.', 'a')
+        q2 = dns.message.make_query('www.google.com.', 'a')
+        # Give them the same id, as we want to test if responses for
+        # differing questions are rejected.
+        q1.id = 1
+        q2.id = 1
+        r = dns.message.make_response(q2)
+        self.assertFalse(q1.is_response(r))
+        # Test the other case of differing questions, where there is
+        # something in the response's question section that is not in
+        # the question's.  We have to do multiple questions to test
+        # this :)
+        r = dns.message.make_query('www.dnspython.org.', 'a')
+        r.flags |= dns.flags.QR
+        r.id = 1
+        r.find_rrset(r.question, dns.name.from_text('example'),
+                     dns.rdataclass.IN, dns.rdatatype.A, create=True,
+                     force_unique=True)
+        self.assertFalse(q1.is_response(r))
+
+    def test_more_not_equal_cases(self):
+        q1 = dns.message.make_query('www.dnspython.org.', 'a')
+        q2 = dns.message.make_query('www.dnspython.org.', 'a')
+        # ensure ids are same
+        q1.id = 1
+        q2.id = 1
+        # and flags are different
+        q2.flags |= dns.flags.QR
+        self.assertFalse(q1 == q2)
+        q2.flags = q1.flags
+        q2.find_rrset(q2.question, dns.name.from_text('example'),
+                      dns.rdataclass.IN, dns.rdatatype.A, create=True,
+                      force_unique=True)
+        self.assertFalse(q1 == q2)
+
+    def test_edns_properties(self):
+        q = dns.message.make_query('www.dnspython.org.', 'a')
+        self.assertEqual(q.edns, -1)
+        self.assertEqual(q.payload, 0)
+        self.assertEqual(q.options, ())
+        q = dns.message.make_query('www.dnspython.org.', 'a', use_edns=0,
+                                   payload=4096)
+        self.assertEqual(q.edns, 0)
+        self.assertEqual(q.payload, 4096)
+        self.assertEqual(q.options, ())
+
+    def test_generic_message_class(self):
+        q1 = dns.message.Message(id=1)
+        q1.set_opcode(dns.opcode.NOTIFY)
+        q1.flags |= dns.flags.AA
+        q1.find_rrset(q1.question, dns.name.from_text('example'),
+                      dns.rdataclass.IN, dns.rdatatype.SOA, create=True,
+                      force_unique=True)
+        w = q1.to_wire()
+        q2 = dns.message.from_wire(w)
+        self.assertTrue(isinstance(q2, dns.message.Message))
+        self.assertFalse(isinstance(q2, dns.message.QueryMessage))
+        self.assertFalse(isinstance(q2, dns.update.UpdateMessage))
+        self.assertEqual(q1, q2)
+
 if __name__ == '__main__':
     unittest.main()
index 4a5818e67f749a18c23825ebf8876f757d7fc1dc..d8cb7bc4c7ec236587002921e89081fc6885955c 100644 (file)
@@ -310,5 +310,11 @@ class NtoAAtoNTestCase(unittest.TestCase):
             t = dns.inet.low_level_address_tuple(('2600::1', 53), bogus)
         self.assertRaises(NotImplementedError, bad)
 
+        def test_bogus_family(self):
+            self.assertRaises(NotImplementedError,
+                              lambda: dns.inet.inet_pton(12345, 'bogus'))
+            self.assertRaises(NotImplementedError,
+                              lambda: dns.inet.inet_ntop(12345, b'bogus'))
+
 if __name__ == '__main__':
     unittest.main()
index 226d5b30bedf837d8d5048276cc7d6d4f11146e7..0ed38b760c176863143649a2c5710761d881f0a9 100644 (file)
@@ -16,6 +16,7 @@
 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
+import binascii
 import io
 import operator
 import pickle
@@ -28,6 +29,7 @@ import dns.rdata
 import dns.rdataclass
 import dns.rdataset
 import dns.rdatatype
+from dns.rdtypes.ANY.OPT import OPT
 
 import tests.stxt_module
 import tests.ttxt_module
@@ -393,5 +395,19 @@ class RdataTestCase(unittest.TestCase):
         self.assertEqual(r1.address, 0o12345)
         self.assertEqual(r1.to_text(), 'chaos. 12345')
 
+    def test_opt_repr(self):
+        opt = OPT(4096, dns.rdatatype.OPT, ())
+        self.assertEqual(repr(opt), '<DNS CLASS4096 OPT rdata: >')
+
+    def test_opt_short_lengths(self):
+        def bad1():
+            opt = OPT.from_wire(4096, dns.rdatatype.OPT,
+                                binascii.unhexlify('f00102'), 0, 3)
+        self.assertRaises(dns.exception.FormError, bad1)
+        def bad2():
+            opt = OPT.from_wire(4096, dns.rdatatype.OPT,
+                                binascii.unhexlify('f00100030000'), 0, 6)
+        self.assertRaises(dns.exception.FormError, bad2)
+
 if __name__ == '__main__':
     unittest.main()
index b87a044fdbde034fd2f73a98d7e4049e0ebe6221..d9ce6f52920d1170500b9cd0811055971a310b55 100644 (file)
@@ -226,5 +226,12 @@ class UpdateTestCase(unittest.TestCase):
         update2 = dns.message.from_wire(wire, keyring)
         self.assertEqual(update, update2)
 
+    def test_is_response(self):
+        update = dns.message.from_text(update_text)
+        self.assertTrue(isinstance(update, dns.update.UpdateMessage))
+        r = dns.message.make_response(update)
+        self.assertTrue(isinstance(r, dns.update.UpdateMessage))
+        self.assertTrue(update.is_response(r))
+
 if __name__ == '__main__':
     unittest.main()