aboutsummaryrefslogtreecommitdiff
path: root/test_ipaddress.py
diff options
context:
space:
mode:
authorPhilipp Hagemeister <phihag@phihag.de>2015-07-13 04:57:55 +0200
committerPhilipp Hagemeister <phihag@phihag.de>2015-07-13 04:57:55 +0200
commitcaa4192d70a288a83b67213b7bdbe54318dc8dd8 (patch)
tree196bba20c9bd226c100bae2422eb4fb71841a70b /test_ipaddress.py
parent802b1e4233f248aff40d15f384d7c728b018e703 (diff)
downloadipaddress-caa4192d70a288a83b67213b7bdbe54318dc8dd8.tar.gz
Add subnet_of / supernet_of (fixes #18)
Diffstat (limited to 'test_ipaddress.py')
-rw-r--r--test_ipaddress.py82
1 files changed, 81 insertions, 1 deletions
diff --git a/test_ipaddress.py b/test_ipaddress.py
index af0fac6..9c8ffe1 100644
--- a/test_ipaddress.py
+++ b/test_ipaddress.py
@@ -106,7 +106,6 @@ class CommonTestMixin:
y = pickle.loads(pickle.dumps(x, proto))
self.assertEqual(y, x)
-
class CommonTestMixin_v4(CommonTestMixin):
def test_leading_zeros(self):
@@ -503,6 +502,42 @@ 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.0.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')))
+
class NetmaskTestMixin_v6(CommonTestMixin_v6):
"""Input validation on interfaces and networks is very similar"""
@@ -565,6 +600,43 @@ 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):
@@ -1986,5 +2058,13 @@ class SingleIssuesTest(unittest.TestCase):
def test_issue_14(self):
self.assertTrue(ipaddress.ip_address('127.0.0.1').is_private)
+ def test_issue_18(self):
+ net1 = ipaddress.ip_network("192.0.2.0/24")
+ net2 = ipaddress.ip_network("192.0.2.112/29")
+ self.assertFalse(net1.subnet_of(net2))
+ self.assertTrue(net1.supernet_of(net2))
+ self.assertTrue(net2.subnet_of(net1))
+ self.assertFalse(net2.supernet_of(net1))
+
if __name__ == '__main__':
unittest.main()