@@ -92,7 +92,6 @@ def pickle_test(self, addr):
92
92
y = pickle .loads (pickle .dumps (x , proto ))
93
93
self .assertEqual (y , x )
94
94
95
-
96
95
class CommonTestMixin_v4 (CommonTestMixin ):
97
96
98
97
def test_leading_zeros (self ):
@@ -477,6 +476,56 @@ class InterfaceTestCase_v4(BaseTestCase, NetmaskTestMixin_v4):
477
476
class NetworkTestCase_v4 (BaseTestCase , NetmaskTestMixin_v4 ):
478
477
factory = ipaddress .IPv4Network
479
478
479
+ def test_subnet_of (self ):
480
+ # containee left of container
481
+ self .assertFalse (
482
+ self .factory ('10.0.0.0/30' ).subnet_of (
483
+ self .factory ('10.0.1.0/24' )))
484
+ # containee inside container
485
+ self .assertTrue (
486
+ self .factory ('10.0.0.0/30' ).subnet_of (
487
+ self .factory ('10.0.0.0/24' )))
488
+ # containee right of container
489
+ self .assertFalse (
490
+ self .factory ('10.0.0.0/30' ).subnet_of (
491
+ self .factory ('10.0.1.0/24' )))
492
+ # containee larger than container
493
+ self .assertFalse (
494
+ self .factory ('10.0.1.0/24' ).subnet_of (
495
+ self .factory ('10.0.0.0/30' )))
496
+
497
+ def test_supernet_of (self ):
498
+ # containee left of container
499
+ self .assertFalse (
500
+ self .factory ('10.0.0.0/30' ).supernet_of (
501
+ self .factory ('10.0.1.0/24' )))
502
+ # containee inside container
503
+ self .assertFalse (
504
+ self .factory ('10.0.0.0/30' ).supernet_of (
505
+ self .factory ('10.0.0.0/24' )))
506
+ # containee right of container
507
+ self .assertFalse (
508
+ self .factory ('10.0.0.0/30' ).supernet_of (
509
+ self .factory ('10.0.1.0/24' )))
510
+ # containee larger than container
511
+ self .assertTrue (
512
+ self .factory ('10.0.0.0/24' ).supernet_of (
513
+ self .factory ('10.0.0.0/30' )))
514
+
515
+ def test_subnet_of_mixed_types (self ):
516
+ with self .assertRaises (TypeError ):
517
+ ipaddress .IPv4Network ('10.0.0.0/30' ).supernet_of (
518
+ ipaddress .IPv6Network ('::1/128' ))
519
+ with self .assertRaises (TypeError ):
520
+ ipaddress .IPv6Network ('::1/128' ).supernet_of (
521
+ ipaddress .IPv4Network ('10.0.0.0/30' ))
522
+ with self .assertRaises (TypeError ):
523
+ ipaddress .IPv4Network ('10.0.0.0/30' ).subnet_of (
524
+ ipaddress .IPv6Network ('::1/128' ))
525
+ with self .assertRaises (TypeError ):
526
+ ipaddress .IPv6Network ('::1/128' ).subnet_of (
527
+ ipaddress .IPv4Network ('10.0.0.0/30' ))
528
+
480
529
481
530
class NetmaskTestMixin_v6 (CommonTestMixin_v6 ):
482
531
"""Input validation on interfaces and networks is very similar"""
@@ -540,6 +589,42 @@ class InterfaceTestCase_v6(BaseTestCase, NetmaskTestMixin_v6):
540
589
class NetworkTestCase_v6 (BaseTestCase , NetmaskTestMixin_v6 ):
541
590
factory = ipaddress .IPv6Network
542
591
592
+ def test_subnet_of (self ):
593
+ # containee left of container
594
+ self .assertFalse (
595
+ self .factory ('2000:999::/56' ).subnet_of (
596
+ self .factory ('2000:aaa::/48' )))
597
+ # containee inside container
598
+ self .assertTrue (
599
+ self .factory ('2000:aaa::/56' ).subnet_of (
600
+ self .factory ('2000:aaa::/48' )))
601
+ # containee right of container
602
+ self .assertFalse (
603
+ self .factory ('2000:bbb::/56' ).subnet_of (
604
+ self .factory ('2000:aaa::/48' )))
605
+ # containee larger than container
606
+ self .assertFalse (
607
+ self .factory ('2000:aaa::/48' ).subnet_of (
608
+ self .factory ('2000:aaa::/56' )))
609
+
610
+ def test_supernet_of (self ):
611
+ # containee left of container
612
+ self .assertFalse (
613
+ self .factory ('2000:999::/56' ).supernet_of (
614
+ self .factory ('2000:aaa::/48' )))
615
+ # containee inside container
616
+ self .assertFalse (
617
+ self .factory ('2000:aaa::/56' ).supernet_of (
618
+ self .factory ('2000:aaa::/48' )))
619
+ # containee right of container
620
+ self .assertFalse (
621
+ self .factory ('2000:bbb::/56' ).supernet_of (
622
+ self .factory ('2000:aaa::/48' )))
623
+ # containee larger than container
624
+ self .assertTrue (
625
+ self .factory ('2000:aaa::/48' ).supernet_of (
626
+ self .factory ('2000:aaa::/56' )))
627
+
543
628
544
629
class FactoryFunctionErrors (BaseTestCase ):
545
630
0 commit comments