summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_ipaddress.py
diff options
context:
space:
mode:
authorCheryl Sabella <cheryl.sabella@gmail.com>2017-10-22 21:39:49 (GMT)
committerAntoine Pitrou <pitrou@free.fr>2017-10-22 21:39:49 (GMT)
commit91dc64ba3f51100540b2ab6c6cd72c3bb18a6d49 (patch)
tree011cf75c270c0a1ba07a023caa0c2f1a547e0d86 /Lib/test/test_ipaddress.py
parent04e36af9b88cd5e80fc818e51d46f07252a2ff3f (diff)
downloadcpython-91dc64ba3f51100540b2ab6c6cd72c3bb18a6d49.zip
cpython-91dc64ba3f51100540b2ab6c6cd72c3bb18a6d49.tar.gz
cpython-91dc64ba3f51100540b2ab6c6cd72c3bb18a6d49.tar.bz2
bpo-20825: Containment test for ip_network in ip_network.
Diffstat (limited to 'Lib/test/test_ipaddress.py')
-rw-r--r--Lib/test/test_ipaddress.py87
1 files changed, 86 insertions, 1 deletions
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index 5d96330..dbf68b3 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -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):