From: Jelte Jansen Date: Tue, 5 Jun 2012 10:02:10 +0000 (+0200) Subject: [2018] move module-level tests to own test class X-Git-Tag: trac2351_base~226^2~59^2~7^2^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f9ec0f7c7b3d60c19b258f2c0d95edb7d4a3e8a1;p=thirdparty%2Fkea.git [2018] move module-level tests to own test class --- diff --git a/src/lib/python/isc/ddns/libddns_messages.mes b/src/lib/python/isc/ddns/libddns_messages.mes index dad516f47e..d6bea7d8e0 100644 --- a/src/lib/python/isc/ddns/libddns_messages.mes +++ b/src/lib/python/isc/ddns/libddns_messages.mes @@ -194,7 +194,7 @@ should give more information on what prerequisite type failed. If the result code is FORMERR, the prerequisite section was not well-formed. An error response with the given result code is sent back to the client. -% LIBDDNS_UPDATE_UNCAUGHT_EXCEPTION update client %1 for zone %2: uncaught exception while processing update section: %1 +% LIBDDNS_UPDATE_UNCAUGHT_EXCEPTION update client %1 for zone %2: uncaught exception while processing update section: %3 An uncaught exception was encountered while processing the Update section of a DDNS message. The specific exception is shown in the log message. To make sure DDNS service is not interrupted, this problem is caught instead diff --git a/src/lib/python/isc/ddns/tests/session_tests.py b/src/lib/python/isc/ddns/tests/session_tests.py index c23b031447..3e7ace5a90 100644 --- a/src/lib/python/isc/ddns/tests/session_tests.py +++ b/src/lib/python/isc/ddns/tests/session_tests.py @@ -94,6 +94,97 @@ def create_rrset(name, rrclass, rrtype, ttl, rdatas = []): add_rdata(rrset, rdata) return rrset +class SessionModuleTests(unittest.TestCase): + '''Tests for module-level functions in the session.py module''' + + def test_foreach_rr_in_rrset(self): + rrset = create_rrset("www.example.org", TEST_RRCLASS, + RRType.A(), 3600, [ "192.0.2.1" ]) + + l = [] + for rr in foreach_rr(rrset): + l.append(str(rr)) + self.assertEqual(["www.example.org. 3600 IN A 192.0.2.1\n"], l) + + add_rdata(rrset, "192.0.2.2") + add_rdata(rrset, "192.0.2.3") + + # but through the generator, there should be several 1-line entries + l = [] + for rr in foreach_rr(rrset): + l.append(str(rr)) + self.assertEqual(["www.example.org. 3600 IN A 192.0.2.1\n", + "www.example.org. 3600 IN A 192.0.2.2\n", + "www.example.org. 3600 IN A 192.0.2.3\n", + ], l) + + def test_convert_rrset_class(self): + # Converting an RRSET to a different class should work + # if the rdata types can be converted + rrset = create_rrset("www.example.org", RRClass.NONE(), RRType.A(), + 3600, [ b'\xc0\x00\x02\x01', b'\xc0\x00\x02\x02']) + + rrset2 = convert_rrset_class(rrset, RRClass.IN()) + self.assertEqual("www.example.org. 3600 IN A 192.0.2.1\n" + + "www.example.org. 3600 IN A 192.0.2.2\n", + str(rrset2)) + + rrset3 = convert_rrset_class(rrset2, RRClass.NONE()) + self.assertEqual("www.example.org. 3600 CLASS254 A \\# 4 " + + "c0000201\nwww.example.org. 3600 CLASS254 " + + "A \\# 4 c0000202\n", + str(rrset3)) + + # depending on what type of bad data is given, a number + # of different exceptions could be raised (TODO: i recall + # there was a ticket about making a better hierarchy for + # dns/parsing related exceptions) + self.assertRaises(InvalidRdataLength, convert_rrset_class, + rrset, RRClass.CH()) + add_rdata(rrset, b'\xc0\x00') + self.assertRaises(DNSMessageFORMERR, convert_rrset_class, + rrset, RRClass.IN()) + + def test_collect_rrsets(self): + ''' + Tests the 'rrset collector' method, which collects rrsets + with the same name and type + ''' + collected = [] + + collect_rrsets(collected, create_rrset("a.example.org", RRClass.IN(), + RRType.A(), 0, [ "192.0.2.1" ])) + # Same name and class, different type + collect_rrsets(collected, create_rrset("a.example.org", RRClass.IN(), + RRType.TXT(), 0, [ "one" ])) + collect_rrsets(collected, create_rrset("a.example.org", RRClass.IN(), + RRType.A(), 0, [ "192.0.2.2" ])) + collect_rrsets(collected, create_rrset("a.example.org", RRClass.IN(), + RRType.TXT(), 0, [ "two" ])) + # Same class and type as an existing one, different name + collect_rrsets(collected, create_rrset("b.example.org", RRClass.IN(), + RRType.A(), 0, [ "192.0.2.3" ])) + # Same name and type as an existing one, different class + collect_rrsets(collected, create_rrset("a.example.org", RRClass.CH(), + RRType.TXT(), 0, [ "one" ])) + collect_rrsets(collected, create_rrset("b.example.org", RRClass.IN(), + RRType.A(), 0, [ "192.0.2.4" ])) + collect_rrsets(collected, create_rrset("a.example.org", RRClass.CH(), + RRType.TXT(), 0, [ "two" ])) + + strings = [ rrset.to_text() for rrset in collected ] + # note + vs , in this list + expected = ['a.example.org. 0 IN A 192.0.2.1\n' + + 'a.example.org. 0 IN A 192.0.2.2\n', + 'a.example.org. 0 IN TXT "one"\n' + + 'a.example.org. 0 IN TXT "two"\n', + 'b.example.org. 0 IN A 192.0.2.3\n' + + 'b.example.org. 0 IN A 192.0.2.4\n', + 'a.example.org. 0 CH TXT "one"\n' + + 'a.example.org. 0 CH TXT "two"\n'] + + self.assertEqual(expected, strings) + class SessionTestBase(unittest.TestCase): '''Base class for all sesion related tests. @@ -201,94 +292,6 @@ class SessionTest(SessionTestBase): # zone class doesn't match self.check_notauth(Name('example.org'), RRClass.CH()) - def test_foreach_rr_in_rrset(self): - rrset = create_rrset("www.example.org", TEST_RRCLASS, - RRType.A(), 3600, [ "192.0.2.1" ]) - - l = [] - for rr in foreach_rr(rrset): - l.append(str(rr)) - self.assertEqual(["www.example.org. 3600 IN A 192.0.2.1\n"], l) - - add_rdata(rrset, "192.0.2.2") - add_rdata(rrset, "192.0.2.3") - - # but through the generator, there should be several 1-line entries - l = [] - for rr in foreach_rr(rrset): - l.append(str(rr)) - self.assertEqual(["www.example.org. 3600 IN A 192.0.2.1\n", - "www.example.org. 3600 IN A 192.0.2.2\n", - "www.example.org. 3600 IN A 192.0.2.3\n", - ], l) - - def test_convert_rrset_class(self): - # Converting an RRSET to a different class should work - # if the rdata types can be converted - rrset = create_rrset("www.example.org", RRClass.NONE(), RRType.A(), - 3600, [ b'\xc0\x00\x02\x01', b'\xc0\x00\x02\x02']) - - rrset2 = convert_rrset_class(rrset, RRClass.IN()) - self.assertEqual("www.example.org. 3600 IN A 192.0.2.1\n" + - "www.example.org. 3600 IN A 192.0.2.2\n", - str(rrset2)) - - rrset3 = convert_rrset_class(rrset2, RRClass.NONE()) - self.assertEqual("www.example.org. 3600 CLASS254 A \\# 4 " + - "c0000201\nwww.example.org. 3600 CLASS254 " + - "A \\# 4 c0000202\n", - str(rrset3)) - - # depending on what type of bad data is given, a number - # of different exceptions could be raised (TODO: i recall - # there was a ticket about making a better hierarchy for - # dns/parsing related exceptions) - self.assertRaises(InvalidRdataLength, convert_rrset_class, - rrset, RRClass.CH()) - add_rdata(rrset, b'\xc0\x00') - self.assertRaises(DNSMessageFORMERR, convert_rrset_class, - rrset, RRClass.IN()) - - def test_collect_rrsets(self): - ''' - Tests the 'rrset collector' method, which collects rrsets - with the same name and type - ''' - collected = [] - - collect_rrsets(collected, create_rrset("a.example.org", RRClass.IN(), - RRType.A(), 0, [ "192.0.2.1" ])) - # Same name and class, different type - collect_rrsets(collected, create_rrset("a.example.org", RRClass.IN(), - RRType.TXT(), 0, [ "one" ])) - collect_rrsets(collected, create_rrset("a.example.org", RRClass.IN(), - RRType.A(), 0, [ "192.0.2.2" ])) - collect_rrsets(collected, create_rrset("a.example.org", RRClass.IN(), - RRType.TXT(), 0, [ "two" ])) - # Same class and type as an existing one, different name - collect_rrsets(collected, create_rrset("b.example.org", RRClass.IN(), - RRType.A(), 0, [ "192.0.2.3" ])) - # Same name and type as an existing one, different class - collect_rrsets(collected, create_rrset("a.example.org", RRClass.CH(), - RRType.TXT(), 0, [ "one" ])) - collect_rrsets(collected, create_rrset("b.example.org", RRClass.IN(), - RRType.A(), 0, [ "192.0.2.4" ])) - collect_rrsets(collected, create_rrset("a.example.org", RRClass.CH(), - RRType.TXT(), 0, [ "two" ])) - - strings = [ rrset.to_text() for rrset in collected ] - # note + vs , in this list - expected = ['a.example.org. 0 IN A 192.0.2.1\n' + - 'a.example.org. 0 IN A 192.0.2.2\n', - 'a.example.org. 0 IN TXT "one"\n' + - 'a.example.org. 0 IN TXT "two"\n', - 'b.example.org. 0 IN A 192.0.2.3\n' + - 'b.example.org. 0 IN A 192.0.2.4\n', - 'a.example.org. 0 CH TXT "one"\n' + - 'a.example.org. 0 CH TXT "two"\n'] - - self.assertEqual(expected, strings) - def __check_prerequisite_exists_combined(self, method, rrclass, expected): '''shared code for the checks for the very similar (but reversed in behaviour) methods __prereq_rrset_exists and