diff options
Diffstat (limited to 'Lib/test/test_ipaddress.py')
| -rw-r--r-- | Lib/test/test_ipaddress.py | 76 |
1 files changed, 65 insertions, 11 deletions
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 5bfcf41..95e3f04 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -7,9 +7,11 @@ import unittest import re import contextlib +import functools 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 +54,18 @@ class BaseTestCase(unittest.TestCase): 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): @@ -115,6 +118,7 @@ class CommonTestMixin_v4(CommonTestMixin): assertBadLength(3) assertBadLength(5) + class CommonTestMixin_v6(CommonTestMixin): def test_leading_zeros(self): @@ -195,7 +199,7 @@ class AddressTestCase_v4(BaseTestCase, CommonTestMixin_v4): 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 +447,7 @@ class NetmaskTestMixin_v4(CommonTestMixin_v4): class InterfaceTestCase_v4(BaseTestCase, NetmaskTestMixin_v4): factory = ipaddress.IPv4Interface + class NetworkTestCase_v4(BaseTestCase, NetmaskTestMixin_v4): factory = ipaddress.IPv4Network @@ -496,9 +501,11 @@ class NetmaskTestMixin_v6(CommonTestMixin_v6): assertBadNetmask("::1", "pudding") assertBadNetmask("::", "::") + class InterfaceTestCase_v6(BaseTestCase, NetmaskTestMixin_v6): factory = ipaddress.IPv6Interface + class NetworkTestCase_v6(BaseTestCase, NetmaskTestMixin_v6): factory = ipaddress.IPv6Network @@ -522,6 +529,20 @@ class FactoryFunctionErrors(BaseTestCase): self.assertFactoryError(ipaddress.ip_network, "network") +@functools.total_ordering +class LargestObject: + def __eq__(self, other): + return isinstance(other, LargestObject) + def __lt__(self, other): + return False + +@functools.total_ordering +class SmallestObject: + def __eq__(self, other): + return isinstance(other, SmallestObject) + def __gt__(self, other): + return False + class ComparisonTests(unittest.TestCase): v4addr = ipaddress.IPv4Address(1) @@ -575,6 +596,28 @@ class ComparisonTests(unittest.TestCase): self.assertRaises(TypeError, lambda: lhs <= rhs) self.assertRaises(TypeError, lambda: lhs >= rhs) + def test_foreign_type_ordering(self): + other = object() + smallest = SmallestObject() + largest = LargestObject() + for obj in self.objects: + with self.assertRaises(TypeError): + obj < other + with self.assertRaises(TypeError): + obj > other + with self.assertRaises(TypeError): + obj <= other + with self.assertRaises(TypeError): + obj >= other + self.assertTrue(obj < largest) + self.assertFalse(obj > largest) + self.assertTrue(obj <= largest) + self.assertFalse(obj >= largest) + self.assertFalse(obj < smallest) + self.assertTrue(obj > smallest) + self.assertFalse(obj <= smallest) + self.assertTrue(obj >= smallest) + def test_mixed_type_key(self): # with get_mixed_type_key, you can sort addresses and network. v4_ordered = [self.v4addr, self.v4net, self.v4intf] @@ -595,7 +638,7 @@ class ComparisonTests(unittest.TestCase): v4addr = ipaddress.ip_address('1.1.1.1') v4net = ipaddress.ip_network('1.1.1.1') v6addr = ipaddress.ip_address('::1') - v6net = ipaddress.ip_address('::1') + v6net = ipaddress.ip_network('::1') self.assertRaises(TypeError, v4addr.__lt__, v6addr) self.assertRaises(TypeError, v4addr.__gt__, v6addr) @@ -608,7 +651,6 @@ class ComparisonTests(unittest.TestCase): self.assertRaises(TypeError, v6net.__gt__, v4net) - class IpaddrUnitTest(unittest.TestCase): def setUp(self): @@ -1118,7 +1160,7 @@ class IpaddrUnitTest(unittest.TestCase): # test a /24 is summarized properly self.assertEqual(list(summarize(ip1, ip2))[0], ipaddress.ip_network('1.1.1.0/24')) - # test an IPv4 range that isn't on a network byte boundary + # test an IPv4 range that isn't on a network byte boundary ip2 = ipaddress.ip_address('1.1.1.8') self.assertEqual(list(summarize(ip1, ip2)), [ipaddress.ip_network('1.1.1.0/29'), @@ -1131,7 +1173,7 @@ class IpaddrUnitTest(unittest.TestCase): ip1 = ipaddress.ip_address('1::') ip2 = ipaddress.ip_address('1:ffff:ffff:ffff:ffff:ffff:ffff:ffff') - # test a IPv6 is sumamrized properly + # test an IPv6 is summarized properly self.assertEqual(list(summarize(ip1, ip2))[0], ipaddress.ip_network('1::/16')) # test an IPv6 range that isn't on a network byte boundary @@ -1243,10 +1285,10 @@ class IpaddrUnitTest(unittest.TestCase): unsorted = [ip4, ip1, ip3, ip2] unsorted.sort() self.assertEqual(sorted, unsorted) - self.assertRaises(TypeError, ip1.__lt__, - ipaddress.ip_address('10.10.10.0')) - self.assertRaises(TypeError, ip2.__lt__, - ipaddress.ip_address('10.10.10.0')) + self.assertIs(ip1.__lt__(ipaddress.ip_address('10.10.10.0')), + NotImplemented) + self.assertIs(ip2.__lt__(ipaddress.ip_address('10.10.10.0')), + NotImplemented) # <=, >= self.assertTrue(ipaddress.ip_network('1.1.1.1') <= @@ -1358,6 +1400,14 @@ class IpaddrUnitTest(unittest.TestCase): self.assertEqual(True, ipaddress.ip_network( '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(True, + ipaddress.ip_network('192.0.2.128/25').is_private) + self.assertEqual(True, + ipaddress.ip_network('192.0.3.0/24').is_global) # test addresses self.assertEqual(True, ipaddress.ip_address('0.0.0.0').is_unspecified) @@ -1423,6 +1473,10 @@ class IpaddrUnitTest(unittest.TestCase): self.assertEqual(False, ipaddress.ip_network('::1').is_unspecified) self.assertEqual(False, ipaddress.ip_network('::/127').is_unspecified) + self.assertEqual(True, + ipaddress.ip_network('2001::1/128').is_private) + self.assertEqual(True, + 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) |
