mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-20825: Containment test for ip_network in ip_network.
This commit is contained in:
parent
04e36af9b8
commit
91dc64ba3f
4 changed files with 136 additions and 7 deletions
|
@ -92,7 +92,6 @@ class CommonTestMixin:
|
|||
y = pickle.loads(pickle.dumps(x, proto))
|
||||
self.assertEqual(y, x)
|
||||
|
||||
|
||||
class CommonTestMixin_v4(CommonTestMixin):
|
||||
|
||||
def test_leading_zeros(self):
|
||||
|
@ -477,6 +476,56 @@ class InterfaceTestCase_v4(BaseTestCase, NetmaskTestMixin_v4):
|
|||
class NetworkTestCase_v4(BaseTestCase, NetmaskTestMixin_v4):
|
||||
factory = ipaddress.IPv4Network
|
||||
|
||||
def test_subnet_of(self):
|
||||
# containee left of container
|
||||
self.assertFalse(
|
||||
self.factory('10.0.0.0/30').subnet_of(
|
||||
self.factory('10.0.1.0/24')))
|
||||
# containee inside container
|
||||
self.assertTrue(
|
||||
self.factory('10.0.0.0/30').subnet_of(
|
||||
self.factory('10.0.0.0/24')))
|
||||
# containee right of container
|
||||
self.assertFalse(
|
||||
self.factory('10.0.0.0/30').subnet_of(
|
||||
self.factory('10.0.1.0/24')))
|
||||
# containee larger than container
|
||||
self.assertFalse(
|
||||
self.factory('10.0.1.0/24').subnet_of(
|
||||
self.factory('10.0.0.0/30')))
|
||||
|
||||
def test_supernet_of(self):
|
||||
# containee left of container
|
||||
self.assertFalse(
|
||||
self.factory('10.0.0.0/30').supernet_of(
|
||||
self.factory('10.0.1.0/24')))
|
||||
# containee inside container
|
||||
self.assertFalse(
|
||||
self.factory('10.0.0.0/30').supernet_of(
|
||||
self.factory('10.0.0.0/24')))
|
||||
# containee right of container
|
||||
self.assertFalse(
|
||||
self.factory('10.0.0.0/30').supernet_of(
|
||||
self.factory('10.0.1.0/24')))
|
||||
# containee larger than container
|
||||
self.assertTrue(
|
||||
self.factory('10.0.0.0/24').supernet_of(
|
||||
self.factory('10.0.0.0/30')))
|
||||
|
||||
def test_subnet_of_mixed_types(self):
|
||||
with self.assertRaises(TypeError):
|
||||
ipaddress.IPv4Network('10.0.0.0/30').supernet_of(
|
||||
ipaddress.IPv6Network('::1/128'))
|
||||
with self.assertRaises(TypeError):
|
||||
ipaddress.IPv6Network('::1/128').supernet_of(
|
||||
ipaddress.IPv4Network('10.0.0.0/30'))
|
||||
with self.assertRaises(TypeError):
|
||||
ipaddress.IPv4Network('10.0.0.0/30').subnet_of(
|
||||
ipaddress.IPv6Network('::1/128'))
|
||||
with self.assertRaises(TypeError):
|
||||
ipaddress.IPv6Network('::1/128').subnet_of(
|
||||
ipaddress.IPv4Network('10.0.0.0/30'))
|
||||
|
||||
|
||||
class NetmaskTestMixin_v6(CommonTestMixin_v6):
|
||||
"""Input validation on interfaces and networks is very similar"""
|
||||
|
@ -540,6 +589,42 @@ class InterfaceTestCase_v6(BaseTestCase, NetmaskTestMixin_v6):
|
|||
class NetworkTestCase_v6(BaseTestCase, NetmaskTestMixin_v6):
|
||||
factory = ipaddress.IPv6Network
|
||||
|
||||
def test_subnet_of(self):
|
||||
# containee left of container
|
||||
self.assertFalse(
|
||||
self.factory('2000:999::/56').subnet_of(
|
||||
self.factory('2000:aaa::/48')))
|
||||
# containee inside container
|
||||
self.assertTrue(
|
||||
self.factory('2000:aaa::/56').subnet_of(
|
||||
self.factory('2000:aaa::/48')))
|
||||
# containee right of container
|
||||
self.assertFalse(
|
||||
self.factory('2000:bbb::/56').subnet_of(
|
||||
self.factory('2000:aaa::/48')))
|
||||
# containee larger than container
|
||||
self.assertFalse(
|
||||
self.factory('2000:aaa::/48').subnet_of(
|
||||
self.factory('2000:aaa::/56')))
|
||||
|
||||
def test_supernet_of(self):
|
||||
# containee left of container
|
||||
self.assertFalse(
|
||||
self.factory('2000:999::/56').supernet_of(
|
||||
self.factory('2000:aaa::/48')))
|
||||
# containee inside container
|
||||
self.assertFalse(
|
||||
self.factory('2000:aaa::/56').supernet_of(
|
||||
self.factory('2000:aaa::/48')))
|
||||
# containee right of container
|
||||
self.assertFalse(
|
||||
self.factory('2000:bbb::/56').supernet_of(
|
||||
self.factory('2000:aaa::/48')))
|
||||
# containee larger than container
|
||||
self.assertTrue(
|
||||
self.factory('2000:aaa::/48').supernet_of(
|
||||
self.factory('2000:aaa::/56')))
|
||||
|
||||
|
||||
class FactoryFunctionErrors(BaseTestCase):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue