diff -r 345391bb8ee1 Lib/test/test_ipaddress.py --- a/Lib/test/test_ipaddress.py Sat Mar 01 02:04:10 2014 -0500 +++ b/Lib/test/test_ipaddress.py Sat Mar 01 13:00:00 2014 +0100 @@ -10,6 +10,7 @@ import operator import ipaddress + class BaseTestCase(unittest.TestCase): # One big change in ipaddress over the original ipaddr module is # error reporting that tries to assume users *don't know the rules* @@ -52,17 +53,18 @@ def assertAddressError(self, details, *args): """Ensure a clean AddressValueError""" return self.assertCleanError(ipaddress.AddressValueError, - details, *args) + details, *args) def assertNetmaskError(self, details, *args): """Ensure a clean NetmaskValueError""" return self.assertCleanError(ipaddress.NetmaskValueError, - details, *args) + details, *args) def assertInstancesEqual(self, lhs, rhs): """Check constructor arguments produce equivalent instances""" self.assertEqual(self.factory(lhs), self.factory(rhs)) + class CommonTestMixin: def test_empty_address(self): @@ -102,8 +104,8 @@ def test_large_ints_rejected(self): msg = "%d (>= 2**32) is not permitted as an IPv4 address" - with self.assertAddressError(re.escape(msg % 2**32)): - self.factory(2**32) + with self.assertAddressError(re.escape(msg % 2 ** 32)): + self.factory(2 ** 32) def test_bad_packed_length(self): def assertBadLength(length): @@ -115,6 +117,7 @@ assertBadLength(3) assertBadLength(5) + class CommonTestMixin_v6(CommonTestMixin): def test_leading_zeros(self): @@ -140,8 +143,8 @@ def test_large_ints_rejected(self): msg = "%d (>= 2**128) is not permitted as an IPv6 address" - with self.assertAddressError(re.escape(msg % 2**128)): - self.factory(2**128) + with self.assertAddressError(re.escape(msg % 2 ** 128)): + self.factory(2 ** 128) def test_bad_packed_length(self): def assertBadLength(length): @@ -195,7 +198,7 @@ def test_empty_octet(self): def assertBadOctet(addr): with self.assertAddressError("Empty octet not permitted in %r", - addr): + addr): ipaddress.IPv4Address(addr) assertBadOctet("42..42.42") @@ -443,6 +446,7 @@ class InterfaceTestCase_v4(BaseTestCase, NetmaskTestMixin_v4): factory = ipaddress.IPv4Interface + class NetworkTestCase_v4(BaseTestCase, NetmaskTestMixin_v4): factory = ipaddress.IPv4Network @@ -496,9 +500,11 @@ assertBadNetmask("::1", "pudding") assertBadNetmask("::", "::") + class InterfaceTestCase_v6(BaseTestCase, NetmaskTestMixin_v6): factory = ipaddress.IPv6Interface + class NetworkTestCase_v6(BaseTestCase, NetmaskTestMixin_v6): factory = ipaddress.IPv6Network @@ -608,7 +614,6 @@ self.assertRaises(TypeError, v6net.__gt__, v4net) - class IpaddrUnitTest(unittest.TestCase): def setUp(self): @@ -634,9 +639,9 @@ ipaddress.IPv4Address('1.1.2.0')) self.assertEqual(ipaddress.IPv4Address('1.1.1.1') - 256, ipaddress.IPv4Address('1.1.0.1')) - self.assertEqual(ipaddress.IPv6Address('::1') + (2**16 - 2), + self.assertEqual(ipaddress.IPv6Address('::1') + (2 ** 16 - 2), ipaddress.IPv6Address('::ffff')) - self.assertEqual(ipaddress.IPv6Address('::ffff') - (2**16 - 2), + self.assertEqual(ipaddress.IPv6Address('::ffff') - (2 ** 16 - 2), ipaddress.IPv6Address('::1')) def testInvalidIntToBytes(self): @@ -713,11 +718,11 @@ address(b'\xff\xfe\xfd\xfc')) self.assertEqual(self.ipv6_interface.ip, ipaddress.ip_interface( - b'\x20\x01\x06\x58\x02\x2a\xca\xfe' - b'\x02\x00\x00\x00\x00\x00\x00\x01').ip) + b'\x20\x01\x06\x58\x02\x2a\xca\xfe' + b'\x02\x00\x00\x00\x00\x00\x00\x01').ip) self.assertEqual(address('ffff:2:3:4:ffff::'), address(b'\xff\xff\x00\x02\x00\x03\x00\x04' + - b'\xff\xff' + b'\x00' * 6)) + b'\xff\xff' + b'\x00' * 6)) self.assertEqual(address('::'), address(b'\x00' * 16)) @@ -834,23 +839,23 @@ self.ipv4_network.subnets(new_prefix=23)) self.assertRaises(ValueError, list, self.ipv4_network.subnets(prefixlen_diff=3, - new_prefix=27)) + new_prefix=27)) self.assertEqual(sorted(self.ipv6_network.subnets(prefixlen_diff=4)), sorted(self.ipv6_network.subnets(new_prefix=68))) self.assertRaises(ValueError, list, self.ipv6_network.subnets(new_prefix=63)) self.assertRaises(ValueError, list, self.ipv6_network.subnets(prefixlen_diff=4, - new_prefix=68)) + new_prefix=68)) def testGetSubnets(self): self.assertEqual(list(self.ipv4_network.subnets())[0].prefixlen, 25) self.assertEqual(str(list( - self.ipv4_network.subnets())[0].network_address), - '1.2.3.0') + self.ipv4_network.subnets())[0].network_address), + '1.2.3.0') self.assertEqual(str(list( - self.ipv4_network.subnets())[1].network_address), - '1.2.3.128') + self.ipv4_network.subnets())[1].network_address), + '1.2.3.128') self.assertEqual(list(self.ipv6_network.subnets())[0].prefixlen, 65) @@ -931,7 +936,7 @@ # issue 61, bad network comparison on like-ip'd network objects # with identical broadcast addresses. self.assertFalse(ipaddress.IPv4Network('1.1.0.0/16').__contains__( - ipaddress.IPv4Network('1.0.0.0/15'))) + ipaddress.IPv4Network('1.0.0.0/15'))) def testNth(self): self.assertEqual(str(self.ipv4_network[5]), '1.2.3.5') @@ -952,70 +957,70 @@ self.assertEqual(addr_list[-1], addr[-1]) def testEqual(self): - self.assertTrue(self.ipv4_interface == - ipaddress.IPv4Interface('1.2.3.4/24')) - self.assertFalse(self.ipv4_interface == - ipaddress.IPv4Interface('1.2.3.4/23')) - self.assertFalse(self.ipv4_interface == - ipaddress.IPv6Interface('::1.2.3.4/24')) + self.assertTrue(self.ipv4_interface == ipaddress.IPv4Interface( + '1.2.3.4/24')) + self.assertFalse(self.ipv4_interface == ipaddress.IPv4Interface( + '1.2.3.4/23')) + self.assertFalse(self.ipv4_interface == ipaddress.IPv6Interface( + '::1.2.3.4/24')) self.assertFalse(self.ipv4_interface == '') self.assertFalse(self.ipv4_interface == []) self.assertFalse(self.ipv4_interface == 2) - self.assertTrue(self.ipv6_interface == - ipaddress.IPv6Interface('2001:658:22a:cafe:200::1/64')) - self.assertFalse(self.ipv6_interface == - ipaddress.IPv6Interface('2001:658:22a:cafe:200::1/63')) - self.assertFalse(self.ipv6_interface == - ipaddress.IPv4Interface('1.2.3.4/23')) + self.assertTrue(self.ipv6_interface == ipaddress.IPv6Interface( + '2001:658:22a:cafe:200::1/64')) + self.assertFalse(self.ipv6_interface == ipaddress.IPv6Interface( + '2001:658:22a:cafe:200::1/63')) + self.assertFalse(self.ipv6_interface == ipaddress.IPv4Interface( + '1.2.3.4/23')) self.assertFalse(self.ipv6_interface == '') self.assertFalse(self.ipv6_interface == []) self.assertFalse(self.ipv6_interface == 2) def testNotEqual(self): - self.assertFalse(self.ipv4_interface != - ipaddress.IPv4Interface('1.2.3.4/24')) - self.assertTrue(self.ipv4_interface != - ipaddress.IPv4Interface('1.2.3.4/23')) - self.assertTrue(self.ipv4_interface != - ipaddress.IPv6Interface('::1.2.3.4/24')) + self.assertFalse(self.ipv4_interface != ipaddress.IPv4Interface( + '1.2.3.4/24')) + self.assertTrue(self.ipv4_interface != ipaddress.IPv4Interface( + '1.2.3.4/23')) + self.assertTrue(self.ipv4_interface != ipaddress.IPv6Interface( + '::1.2.3.4/24')) self.assertTrue(self.ipv4_interface != '') self.assertTrue(self.ipv4_interface != []) self.assertTrue(self.ipv4_interface != 2) - self.assertTrue(self.ipv4_address != - ipaddress.IPv4Address('1.2.3.5')) + self.assertTrue(self.ipv4_address != ipaddress.IPv4Address( + '1.2.3.5')) self.assertTrue(self.ipv4_address != '') self.assertTrue(self.ipv4_address != []) self.assertTrue(self.ipv4_address != 2) - self.assertFalse(self.ipv6_interface != - ipaddress.IPv6Interface('2001:658:22a:cafe:200::1/64')) - self.assertTrue(self.ipv6_interface != - ipaddress.IPv6Interface('2001:658:22a:cafe:200::1/63')) - self.assertTrue(self.ipv6_interface != - ipaddress.IPv4Interface('1.2.3.4/23')) + self.assertFalse(self.ipv6_interface != ipaddress.IPv6Interface( + '2001:658:22a:cafe:200::1/64')) + self.assertTrue(self.ipv6_interface != ipaddress.IPv6Interface( + '2001:658:22a:cafe:200::1/63')) + self.assertTrue(self.ipv6_interface != ipaddress.IPv4Interface( + '1.2.3.4/23')) self.assertTrue(self.ipv6_interface != '') self.assertTrue(self.ipv6_interface != []) self.assertTrue(self.ipv6_interface != 2) - self.assertTrue(self.ipv6_address != - ipaddress.IPv4Address('1.2.3.4')) + self.assertTrue(self.ipv6_address != ipaddress.IPv4Address( + '1.2.3.4')) self.assertTrue(self.ipv6_address != '') self.assertTrue(self.ipv6_address != []) self.assertTrue(self.ipv6_address != 2) def testSlash32Constructor(self): self.assertEqual(str(ipaddress.IPv4Interface( - '1.2.3.4/255.255.255.255')), '1.2.3.4/32') + '1.2.3.4/255.255.255.255')), '1.2.3.4/32') def testSlash128Constructor(self): self.assertEqual(str(ipaddress.IPv6Interface('::1/128')), - '::1/128') + '::1/128') def testSlash0Constructor(self): self.assertEqual(str(ipaddress.IPv4Interface('1.2.3.4/0.0.0.0')), - '1.2.3.4/0') + '1.2.3.4/0') def testCollapsing(self): # test only IP addresses including some duplicates @@ -1029,8 +1034,8 @@ collapsed = ipaddress.collapse_addresses( [ip1, ip2, ip3, ip4, ip5, ip6]) self.assertEqual(list(collapsed), - [ipaddress.IPv4Network('1.1.1.0/30'), - ipaddress.IPv4Network('1.1.1.4/32')]) + [ipaddress.IPv4Network('1.1.1.0/30'), + ipaddress.IPv4Network('1.1.1.4/32')]) # test a mix of IP addresses and networks including some duplicates ip1 = ipaddress.IPv4Address('1.1.1.0') @@ -1054,8 +1059,8 @@ # [].sort ip6 = ipaddress.IPv4Network('1.1.0.0/22') # check that addreses are subsumed properly. - collapsed = ipaddress.collapse_addresses([ip1, ip2, ip3, ip4, ip5, - ip6]) + collapsed = ipaddress.collapse_addresses([ + ip1, ip2, ip3, ip4, ip5, ip6]) self.assertEqual(list(collapsed), [ipaddress.IPv4Network('1.1.0.0/22'), ipaddress.IPv4Network('1.1.4.0/24')]) @@ -1068,14 +1073,14 @@ # test same IP networks ip_same1 = ip_same2 = ipaddress.IPv4Network('1.1.1.1/32') self.assertEqual(list(ipaddress.collapse_addresses( - [ip_same1, ip_same2])), - [ip_same1]) + [ip_same1, ip_same2])), + [ip_same1]) # test same IP addresses ip_same1 = ip_same2 = ipaddress.IPv4Address('1.1.1.1') self.assertEqual(list(ipaddress.collapse_addresses( - [ip_same1, ip_same2])), - [ipaddress.ip_network('1.1.1.1/32')]) + [ip_same1, ip_same2])), + [ipaddress.ip_network('1.1.1.1/32')]) ip1 = ipaddress.IPv6Network('2001::/100') ip2 = ipaddress.IPv6Network('2001::/120') ip3 = ipaddress.IPv6Network('2001::/96') @@ -1085,12 +1090,12 @@ # the toejam test addr_tuples = [ - (ipaddress.ip_address('1.1.1.1'), - ipaddress.ip_address('::1')), - (ipaddress.IPv4Network('1.1.0.0/24'), - ipaddress.IPv6Network('2001::/120')), - (ipaddress.IPv4Network('1.1.0.0/32'), - ipaddress.IPv6Network('2001::/128')), + (ipaddress.ip_address('1.1.1.1'), + ipaddress.ip_address('::1')), + (ipaddress.IPv4Network('1.1.0.0/24'), + ipaddress.IPv6Network('2001::/120')), + (ipaddress.IPv4Network('1.1.0.0/32'), + ipaddress.IPv6Network('2001::/128')), ] for ip1, ip2 in addr_tuples: self.assertRaises(TypeError, ipaddress.collapse_addresses, @@ -1254,7 +1259,7 @@ self.assertTrue(ipaddress.ip_network('1.1.1.1') <= ipaddress.ip_network('1.1.1.2')) self.assertFalse(ipaddress.ip_network('1.1.1.2') <= - ipaddress.ip_network('1.1.1.1')) + ipaddress.ip_network('1.1.1.1')) self.assertTrue(ipaddress.ip_network('::1') <= ipaddress.ip_network('::1')) self.assertTrue(ipaddress.ip_network('::1') <= @@ -1288,10 +1293,10 @@ def testIPv6AddressTooLarge(self): # RFC4291 2.5.5.2 self.assertEqual(ipaddress.ip_address('::FFFF:192.0.2.1'), - ipaddress.ip_address('::FFFF:c000:201')) + ipaddress.ip_address('::FFFF:c000:201')) # RFC4291 2.2 (part 3) x::d.d.d.d self.assertEqual(ipaddress.ip_address('FFFF::192.0.2.1'), - ipaddress.ip_address('FFFF::c000:201')) + ipaddress.ip_address('FFFF::c000:201')) def testIPVersion(self): self.assertEqual(self.ipv4_address.version, 4) @@ -1310,8 +1315,8 @@ b'\x20\x01\x06\x58\x02\x2a\xca\xfe' b'\x02\x00\x00\x00\x00\x00\x00\x01') self.assertEqual(ipaddress.IPv6Interface('ffff:2:3:4:ffff::').packed, - b'\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff' - + b'\x00' * 6) + b'\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff' + + b'\x00' * 6) self.assertEqual(ipaddress.IPv6Interface('::1:0:0:0:0').packed, b'\x00' * 6 + b'\x00\x01' + b'\x00' * 8) @@ -1328,39 +1333,40 @@ def testReservedIpv4(self): # test networks self.assertEqual(True, ipaddress.ip_interface( - '224.1.1.1/31').is_multicast) + '224.1.1.1/31').is_multicast) self.assertEqual(False, ipaddress.ip_network('240.0.0.0').is_multicast) self.assertEqual(True, ipaddress.ip_network('240.0.0.0').is_reserved) self.assertEqual(True, ipaddress.ip_interface( - '192.168.1.1/17').is_private) + '192.168.1.1/17').is_private) self.assertEqual(False, ipaddress.ip_network('192.169.0.0').is_private) self.assertEqual(True, ipaddress.ip_network( - '10.255.255.255').is_private) + '10.255.255.255').is_private) self.assertEqual(False, ipaddress.ip_network('11.0.0.0').is_private) self.assertEqual(False, ipaddress.ip_network('11.0.0.0').is_reserved) self.assertEqual(True, ipaddress.ip_network( - '172.31.255.255').is_private) + '172.31.255.255').is_private) self.assertEqual(False, ipaddress.ip_network('172.32.0.0').is_private) self.assertEqual(True, ipaddress.ip_network('169.254.1.0/24').is_link_local) self.assertEqual(True, - ipaddress.ip_interface( - '169.254.100.200/24').is_link_local) + ipaddress.ip_interface( + '169.254.100.200/24').is_link_local) self.assertEqual(False, - ipaddress.ip_interface( - '169.255.100.200/24').is_link_local) + ipaddress.ip_interface( + '169.255.100.200/24').is_link_local) self.assertEqual(True, - ipaddress.ip_network( - '127.100.200.254/32').is_loopback) + ipaddress.ip_network( + '127.100.200.254/32').is_loopback) self.assertEqual(True, ipaddress.ip_network( - '127.42.0.0/16').is_loopback) + '127.42.0.0/16').is_loopback) self.assertEqual(False, ipaddress.ip_network('128.0.0.0').is_loopback) self.assertEqual(False, ipaddress.ip_network('100.64.0.0/10').is_private) - self.assertEqual(False, ipaddress.ip_network('100.64.0.0/10').is_global) + self.assertEqual(False, + ipaddress.ip_network('100.64.0.0/10').is_global) self.assertEqual(True, ipaddress.ip_network('192.0.2.128/25').is_private) @@ -1378,10 +1384,10 @@ self.assertEqual(True, ipaddress.ip_address('192.168.1.1').is_private) self.assertEqual(False, ipaddress.ip_address('192.169.0.0').is_private) self.assertEqual(True, ipaddress.ip_address( - '10.255.255.255').is_private) + '10.255.255.255').is_private) self.assertEqual(False, ipaddress.ip_address('11.0.0.0').is_private) self.assertEqual(True, ipaddress.ip_address( - '172.31.255.255').is_private) + '172.31.255.255').is_private) self.assertEqual(False, ipaddress.ip_address('172.32.0.0').is_private) self.assertEqual(True, @@ -1390,7 +1396,7 @@ ipaddress.ip_address('169.255.100.200').is_link_local) self.assertEqual(True, - ipaddress.ip_address('127.100.200.254').is_loopback) + ipaddress.ip_address('127.100.200.254').is_loopback) self.assertEqual(True, ipaddress.ip_address('127.42.0.0').is_loopback) self.assertEqual(False, ipaddress.ip_address('128.0.0.0').is_loopback) self.assertEqual(True, ipaddress.ip_network('0.0.0.0').is_unspecified) @@ -1398,28 +1404,28 @@ def testReservedIpv6(self): self.assertEqual(True, ipaddress.ip_network('ffff::').is_multicast) - self.assertEqual(True, ipaddress.ip_network(2**128 - 1).is_multicast) + self.assertEqual(True, ipaddress.ip_network(2 ** 128 - 1).is_multicast) self.assertEqual(True, ipaddress.ip_network('ff00::').is_multicast) self.assertEqual(False, ipaddress.ip_network('fdff::').is_multicast) self.assertEqual(True, ipaddress.ip_network('fecf::').is_site_local) self.assertEqual(True, ipaddress.ip_network( - 'feff:ffff:ffff:ffff::').is_site_local) + 'feff:ffff:ffff:ffff::').is_site_local) self.assertEqual(False, ipaddress.ip_network( - 'fbf:ffff::').is_site_local) + 'fbf:ffff::').is_site_local) self.assertEqual(False, ipaddress.ip_network('ff00::').is_site_local) self.assertEqual(True, ipaddress.ip_network('fc00::').is_private) self.assertEqual(True, ipaddress.ip_network( - 'fc00:ffff:ffff:ffff::').is_private) + 'fc00:ffff:ffff:ffff::').is_private) self.assertEqual(False, ipaddress.ip_network('fbff:ffff::').is_private) self.assertEqual(False, ipaddress.ip_network('fe00::').is_private) self.assertEqual(True, ipaddress.ip_network('fea0::').is_link_local) self.assertEqual(True, ipaddress.ip_network( - 'febf:ffff::').is_link_local) + 'febf:ffff::').is_link_local) self.assertEqual(False, ipaddress.ip_network( - 'fe7f:ffff::').is_link_local) + 'fe7f:ffff::').is_link_local) self.assertEqual(False, ipaddress.ip_network('fec0::').is_link_local) self.assertEqual(True, ipaddress.ip_interface('0:0::0:01').is_loopback) @@ -1437,28 +1443,28 @@ ipaddress.ip_network('200::1/128').is_global) # test addresses self.assertEqual(True, ipaddress.ip_address('ffff::').is_multicast) - self.assertEqual(True, ipaddress.ip_address(2**128 - 1).is_multicast) + self.assertEqual(True, ipaddress.ip_address(2 ** 128 - 1).is_multicast) self.assertEqual(True, ipaddress.ip_address('ff00::').is_multicast) self.assertEqual(False, ipaddress.ip_address('fdff::').is_multicast) self.assertEqual(True, ipaddress.ip_address('fecf::').is_site_local) self.assertEqual(True, ipaddress.ip_address( - 'feff:ffff:ffff:ffff::').is_site_local) + 'feff:ffff:ffff:ffff::').is_site_local) self.assertEqual(False, ipaddress.ip_address( - 'fbf:ffff::').is_site_local) + 'fbf:ffff::').is_site_local) self.assertEqual(False, ipaddress.ip_address('ff00::').is_site_local) self.assertEqual(True, ipaddress.ip_address('fc00::').is_private) self.assertEqual(True, ipaddress.ip_address( - 'fc00:ffff:ffff:ffff::').is_private) + 'fc00:ffff:ffff:ffff::').is_private) self.assertEqual(False, ipaddress.ip_address('fbff:ffff::').is_private) self.assertEqual(False, ipaddress.ip_address('fe00::').is_private) self.assertEqual(True, ipaddress.ip_address('fea0::').is_link_local) self.assertEqual(True, ipaddress.ip_address( - 'febf:ffff::').is_link_local) + 'febf:ffff::').is_link_local) self.assertEqual(False, ipaddress.ip_address( - 'fe7f:ffff::').is_link_local) + 'fe7f:ffff::').is_link_local) self.assertEqual(False, ipaddress.ip_address('fec0::').is_link_local) self.assertEqual(True, ipaddress.ip_address('0:0::0:01').is_loopback) @@ -1474,8 +1480,8 @@ def testIpv4Mapped(self): self.assertEqual( - ipaddress.ip_address('::ffff:192.168.1.1').ipv4_mapped, - ipaddress.ip_address('192.168.1.1')) + ipaddress.ip_address('::ffff:192.168.1.1').ipv4_mapped, + ipaddress.ip_address('192.168.1.1')) self.assertEqual(ipaddress.ip_address('::c0a8:101').ipv4_mapped, None) self.assertEqual(ipaddress.ip_address('::ffff:c0a8:101').ipv4_mapped, ipaddress.ip_address('192.168.1.1')) @@ -1504,7 +1510,7 @@ # i70 self.assertEqual(hash(ipaddress.ip_address('1.2.3.4')), hash(ipaddress.ip_address( - int(ipaddress.ip_address('1.2.3.4')._ip)))) + int(ipaddress.ip_address('1.2.3.4')._ip)))) ip1 = ipaddress.ip_address('10.1.1.0') ip2 = ipaddress.ip_address('1::') dummy = {} @@ -1519,7 +1525,7 @@ net = self.ipv4_network self.assertEqual('1.2.3.0/24', net.compressed) net = self.ipv6_network - self.assertRaises(ValueError, net._string_from_ip_int, 2**128 + 1) + self.assertRaises(ValueError, net._string_from_ip_int, 2 ** 128 + 1) def testIPv6NetworkHelpers(self): net = self.ipv6_network @@ -1572,7 +1578,7 @@ '::7:6:5:4:3:2:0': '0:7:6:5:4:3:2:0/128', '7:6:5:4:3:2:1::': '7:6:5:4:3:2:1:0/128', '0:6:5:4:3:2:1::': '0:6:5:4:3:2:1:0/128', - } + } for uncompressed, compressed in list(test_addresses.items()): self.assertEqual(compressed, str(ipaddress.IPv6Interface( uncompressed)))