
    0hh                       S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
Jr   " S S\R                  5      r " S S5      r " S S	\5      r " S
 S\5      r " S S\\5      r " S S\\5      r " S S\5      r " S S\\5      r " S S\\5      r " S S\5      r " S S\\5      r " S S\\5      r " S S\5      r " S S\R                  5      r " S  S!\R                  5      r\S":X  a  \R:                  " 5         gg)#zUnittest for ipaddress module.    N)LARGESTSMALLESTc                   Z    \ rS rSr\S 5       r\R                  S 5       rS r	S r
S rSrg)	BaseTestCase   c                     [         eN)NotImplementedErrorselfs    </opt/python-3.13.8/usr/lib/python3.13/test/test_ipaddress.pyfactoryBaseTestCase.factory%   s    !!    c              '      #    U(       a  X#-  nU R                  X5      nU nUv   SSS5        WR                  R                  b&  U R                  UR                  R                  5        gg! , (       d  f       NL= f7f)zc
Ensure exception does not display a context by default

Wraps unittest.TestCase.assertRaisesRegex
N)assertRaisesRegex	exception__context__
assertTrue__suppress_context__)r   exc_typedetailsargscmexcs         r   assertCleanErrorBaseTestCase.assertCleanError)   sd      nG##H63I  ==$$0OOCMM>>? 1 Rs   A=A,AA=,
A:6A=c                 F    U R                   " [        R                  U/UQ76 $ )z Ensure a clean AddressValueError)r   	ipaddressAddressValueErrorr   r   r   s      r   assertAddressErrorBaseTestCase.assertAddressError9   (    $$Y%@%@%,5/35 	5r   c                 F    U R                   " [        R                  U/UQ76 $ )z Ensure a clean NetmaskValueError)r   r   NetmaskValueErrorr!   s      r   assertNetmaskErrorBaseTestCase.assertNetmaskError>   r$   r   c                 d    U R                  U R                  U5      U R                  U5      5        g)z8Check constructor arguments produce equivalent instancesN)assertEqualr   r   lhsrhss      r   assertInstancesEqual!BaseTestCase.assertInstancesEqualC   s$    c*DLL,=>r    N)__name__
__module____qualname____firstlineno__propertyr   
contextlibcontextmanagerr   r"   r'   r.   __static_attributes__r0   r   r   r   r      sA    & " " @ @5
5
?r   r   c                   ,    \ rS rSrS rS rS rS rSrg)CommonTestMixinH   c                 |    U R                  S5         U R                  S5        S S S 5        g ! , (       d  f       g = f)NAddress cannot be empty r"   r   r   s    r   test_empty_address"CommonTestMixin.test_empty_addressJ   s*    $$%>?LL @??s   -
;c                     U R                  [        R                  " [        S5      5      5         U R	                  S5        S S S 5        g ! , (       d  f       g = f)Nz1.0g      ?)r"   reescapereprr   r   s    r   test_floats_rejected$CommonTestMixin.test_floats_rejectedN   s5    $$RYYtE{%;<LL =<<s   A


Ac                    U R                  [        [        R                  U R	                  S5      5        U R                  [        [
        U R	                  S5      5        U R                  [        [        U R	                  S5      5        g )N   )assertRaises	TypeErroroperatorindexr   hexbytesr   s    r   test_not_an_index_issue15559,CommonTestMixin.test_not_an_index_issue15559R   sV     	)X^^T\\!_E)S$,,q/:)UDLLO<r   c                 6   [        [        R                  S-   5       Hg  nU R                  US9   U R	                  U5      n[        R
                  " [        R                  " X25      5      nU R                  XC5        S S S 5        Mi     g ! , (       d  f       M{  = f)NrI   )proto)rangepickleHIGHEST_PROTOCOLsubTestr   loadsdumpsr*   )r   addrrS   xys        r   pickle_testCommonTestMixin.pickle_testY   sl    622Q67EE*LL&LLa!78  & +* 8**s   AB		
B	r0   N)	r1   r2   r3   r4   r@   rF   rP   r]   r8   r0   r   r   r:   r:   H   s    ='r   r:   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
CommonTestMixin_v4a   c                     Sn/ SQnU HF  nU R                  US9   U R                  U5         U R                  U5        S S S 5        S S S 5        MH     g ! , (       d  f       N= f! , (       d  f       Mk  = f)Nz(Leading zeros are not permitted in '\d+')z000.000.000.000z192.168.000.001z016.016.016.016z001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)address)rW   r"   r   )r   msg	addressesrc   s       r   test_leading_zeros%CommonTestMixin_v4.test_leading_zerosc   s_    9	
	 !Gg.,,S1LL) 2 /. !11 /.s!   A%AA%
A"A%%
A4	c                 L    U R                  SS5        U R                  SS5        g )Nr   0.0.0.0    P 192.168.0.1r.   r   s    r   test_intCommonTestMixin_v4.test_intu   s"    !!!Y/!!*m<r   c                     U R                  [        R                  S5      S5        U R                  [        R                  S5      S5        g )N00000000ri   c0a80001rk   )r.   rO   fromhexr   s    r   test_packedCommonTestMixin_v4.test_packedy   s4    !!%--
";YG!!%--
";]Kr   c                     SnU R                  [        R                  " U5      5         U R                  S5        S S S 5        g ! , (       d  f       g = f)Nz,-1 (< 0) is not permitted as an IPv4 addressr"   rC   rD   r   r   rd   s     r   test_negative_ints_rejected.CommonTestMixin_v4.test_negative_ints_rejected}   5    <$$RYYs^4LL 544   A
Ac                     SnU R                  [        R                  " US-  5      5         U R                  S5        S S S 5        g ! , (       d  f       g = f)Nz1%d (>= 2**32) is not permitted as an IPv4 addressl        rw   rx   s     r   test_large_ints_rejected+CommonTestMixin_v4.test_large_ints_rejected   s:    A$$RYYsU{%;<LL =<<s   A
Ac                 2   ^  U 4S jnU" S5        U" S5        g )Nc                    > SU -  nSnTR                  [        R                  " X!U 4-  5      5         TR                  U5        S S S 5        g ! , (       d  f       g = f)N    z4%r (len %d != 4) is not permitted as an IPv4 addressrw   lengthrZ   rd   r   s      r   assertBadLengthBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength   sH    6>DHC((33G)HIT" JIIs   A
A      r0   r   r   s   ` r   test_bad_packed_length)CommonTestMixin_v4.test_bad_packed_length   s    	# 	r   r0   N)r1   r2   r3   r4   rf   rm   rs   ry   r~   r   r8   r0   r   r   r`   r`   a   s!    *$=L
 
r   r`   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)CommonTestMixin_v6   c                 L    U R                  SS5        U R                  SS5        g )Nz
0000::0000::z000::c0a8:0001::c0a8:1rl   r   s    r   rf   %CommonTestMixin_v6.test_leading_zeros   s#    !!,5!!"2J?r   c                 L    U R                  SS5        U R                  SS5        g )Nr   r   rj   r   rl   r   s    r   rm   CommonTestMixin_v6.test_int   s"    !!!T*!!*j9r   c                     S[         R                  S5      -   nU R                  US5        S[         R                  S5      -   nU R                  US5        [         R                  S5      S-   nU R                  US5        g )Ns               rp   r   rq   r   zc0a8:1::)rO   rr   r.   r   rZ   s     r   rs   CommonTestMixin_v6.test_packed   sk    %--
33!!$-%--
33!!$
3}}Z(83!!$
3r   c                     SnU R                  [        R                  " U5      5         U R                  S5        S S S 5        g ! , (       d  f       g = f)Nz,-1 (< 0) is not permitted as an IPv6 addressrv   rw   rx   s     r   ry   .CommonTestMixin_v6.test_negative_ints_rejected   r{   r|   c                     SnU R                  [        R                  " USS-  -  5      5         U R                  SS-  5        S S S 5        g ! , (       d  f       g = f)Nz2%d (>= 2**128) is not permitted as an IPv6 address      rw   rx   s     r   r~   +CommonTestMixin_v6.test_large_ints_rejected   sB    B$$RYYsQV|%<=LLC  >==s   A
Ac                 2   ^  U 4S jnU" S5        U" S5        g )Nc                    > SU -  nSnTR                  [        R                  " X!U 4-  5      5         TR                  U5        TR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   z5%r (len %d != 16) is not permitted as an IPv6 addressrw   r   s      r   r   BCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength   sT    6>DIC((33G)HIT"T" JIIs   #A
A,      r0   r   s   ` r   r   )CommonTestMixin_v6.test_bad_packed_length   s    	# 	r   c                     SnU R                  SU5         U R                  U5        S S S 5        g ! , (       d  f       g = f)Nz::1%Invalid IPv6 address: "%r"r?   r   rc   s     r   test_blank_scope_id&CommonTestMixin_v6.test_blank_scope_id   s1    $$%A7KLL! LKK   0
>c                     SnU R                  SU5         U R                  U5        S S S 5        g ! , (       d  f       g = f)Nz
::1%scope%r   r?   r   s     r   "test_invalid_scope_id_with_percent5CommonTestMixin_v6.test_invalid_scope_id_with_percent   s1    $$%A7KLL! LKKr   r0   N)r1   r2   r3   r4   rf   rm   rs   ry   r~   r   r   r   r8   r0   r   r   r   r      s+    @:4
!
	"
"r   r   c                   h    \ rS rSr\R
                  rS rS rS r	S r
S rS rS rS	 rS
 rS rSrg)AddressTestCase_v4   c                     [         R                  " S5      n/ SQnU H   u  p4U R                  U[        X5      5        M"     g )N1.2.3.42))b 00000001000000100000001100101010)nr   )r[   0102032a)X0102032A)_b'0000_0001_0000_0010_0000_0011_0010_1010)_nr   )_x	0102_032a)_X	0102_032A)#b"0b00000001000000100000001100101010)#nr   )#x
0x0102032a)#X
0X0102032A)#_b)0b0000_0001_0000_0010_0000_0011_0010_1010)#_nr   )#_x0x0102_032a)#_X0X0102_032A)sr   )r>   r   )r   IPv4Addressr*   format)r   v4v4_pairsfmttxts        r   test_formatAddressTestCase_v4.test_format   s;    "":.
( #JSS&/2 #r   c                     SnU R                  SU5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nz127.0.0.1/24Unexpected '/' in %rr"   r   r   r   s     r   test_network_passed_as_address1AddressTestCase_v4.test_network_passed_as_address   s3    $$%;TB!!$' CBB	   5
Ac                   ^  U 4S jnU" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S	5        U" S
5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        g )Nc                    > TR                  SU 5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)NzExpected 4 octets in %rr   rZ   r   s    r   assertBadSplitAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplit   s/    (()BDI%%d+ JII	   4
Az127.0.1z42.42.42.42.42z42.42.42z42.4242z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016016000z0x0a.0x0a.0x0az	0x0a.0x0a0x0a.bogusz	bogus.com10001000000000000000z192.168.0.1.comr0   r   r   s   ` r   test_bad_address_split)AddressTestCase_v4.test_bad_address_split   s    	, 	y!'(z"wt~&~&'(~&'(}%y!uu'({#vsw{#v)*()r   c                 2   ^  U 4S jnU" S5        U" S5        g )Nc                    > TR                  SU 5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)NzEmpty octet not permitted in %rr   r   s    r   assertBadOctet;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctet  s5    (()J)-/%%d+/ / /r   z	42..42.42z...r0   r   r   s   ` r   test_empty_octet#AddressTestCase_v4.test_empty_octet  s    	,
 	{#ur   c                    ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS	5        U" S
S5        U" SS5        U" SS5        U" SS5        U" SS5        g )Nc                    > SU< SU < 3nTR                  [        R                  " U5      5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz!Only decimal digits permitted in  in r"   rC   rD   r   r   rZ   octetrd   r   s      r   r   BAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctet  s=    AFMC((38%%d+ 988s   A
Az0x0a.0x0a.0x0a.0x0ar   z0xa.0x0a.0x0a.0x0a0xaz42.42.42.-0-0z42.42.42.+0+0z42.42.42.-42z-42z
+1.+2.+3.4+1z	1.2.3.4e04e0	1.2.3.4::z4::1.a.2.3ar0   r   s   ` r   test_invalid_characters*AddressTestCase_v4.test_invalid_characters
  sf    	,
 	,f5+U3}d+}d+~u-|T*{E*{E*y#&r   c                 6   ^  U 4S jnU" SS5        U" SS5        g )Nc                    > SnTR                  [        R                  " X!U 4-  5      5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz*At most 3 characters permitted in %r in %rr   r   s      r   r   <AddressTestCase_v4.test_octet_length.<locals>.assertBadOctet  sA    >C((33F)GH%%d+ IHH   A
Az0000.000.000.0000000z12345.67899.-54321.-9876512345r0   r   s   ` r   test_octet_length$AddressTestCase_v4.test_octet_length  s     	,
 	)622G<r   c                 6   ^  U 4S jnU" SS5        U" SS5        g )Nc                    > SX4-  nTR                  [        R                  " U5      5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz$Octet %d (> 255) not permitted in %rr   r   s      r   r   ;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet$  s?    8E=HC((38%%d+ 988r  z	257.0.0.0i  z192.168.0.999i  r0   r   s   ` r   test_octet_limit#AddressTestCase_v4.test_octet_limit#  s    	,
 	{C(,r   c                 &    U R                  S5        g N	192.0.2.1r]   r   s    r   test_pickleAddressTestCase_v4.test_pickle,  s    %r   c                 N    [         R                  " U R                  S5      5        g r  weakrefrefr   r   s    r   test_weakrefAddressTestCase_v4.test_weakref/  s    DLL-.r   c                    U R                  [        R                  " S5      R                  [        R                  " S5      5        U R                  [        R                  " S5      R                  [        R                  " S5      5        U R                  [        R                  " S5      R                  R
                  [        R                  " S5      5        g )N192.168.1.1::ffff:192.168.1.1::ffff:c0a8:101)r*   r   r   ipv6_mappedIPv6Addressipv4_mappedr   s    r   test_ipv6_mapped#AddressTestCase_v4.test_ipv6_mapped2  s    ..}=II"../CD	F..}=II"../@A	C..}=IIUU"..}=	?r   r0   N)r1   r2   r3   r4   r   r   r   r   r   r   r   r  r  r  r  r  r%  r8   r0   r   r   r   r      s?    ##G32(
*:' =-&/?r   r   c                       \ rS rSr\R
                  rS rS rS r	S r
S rS rS rS	 rS
 rS rS rS rS rS rS rS rSrg)AddressTestCase_v6i;  c                     [         R                  " S5      n/ SQnU H   u  p4U R                  U[        X5      5        M"     g )Nz
::1.2.3.42))r   ڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r    0000000000000000000000000102032a)r[   r+  )r    0000000000000000000000000102032A)r   ڟ0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r   '0000_0000_0000_0000_0000_0000_0102_032a)r   r.  )r   '0000_0000_0000_0000_0000_0000_0102_032A)r   ڂ0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r   "0x0000000000000000000000000102032a)r   r1  )r   "0X0000000000000000000000000102032A)r   ڡ0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r   )0x0000_0000_0000_0000_0000_0000_0102_032a)r   r4  )r   )0X0000_0000_0000_0000_0000_0000_0102_032A)r   	::102:32a)r>   r6  )r   r#  r*   r   )r   v6v6_pairsr   r   s        r   r   AddressTestCase_v6.test_format>  s<    ""<0!
F #JSS&/2 #r   c                 2   ^  U 4S jnU" S5        U" S5        g )Nc                    > SnTR                  X5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nr   )r"   r   r#  rZ   rd   r   s     r   r   IAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplith  s0    (C((3%%d+ 433r   z::1/24z::1%scope_id/24r0   r   s   ` r   r   1AddressTestCase_v6.test_network_passed_as_addressg  s    	, 	x ()r   c                 r   ^  U 4S jnU" S5        U" S5        U" S5        U" S5        U" S5        U" S5        g )Nc                    > SnTR                  XR                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)NzAt least 3 parts expected in %r%r   r"   splitr   r#  r<  s     r   r   UAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplitp  s>    3C((jjoa.@A%%d+ BAA   A
A:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper0   r   s   ` r   *test_bad_address_split_v6_not_enough_parts=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partso  s;    	,
 	st{#y!z"()r   c                    ^  U 4S jnU" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S	5        U" S
5        U" S5        g )Nc                    > SnTR                  XR                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz At most 8 colons permitted in %rrA  r   rB  r<  s     r   r   TAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplit}  >    4C((jjoa.@A%%d+ BAArE  z9:8:7:6:5:4:3::2:1z10:9:8:7:6:5:4:3:2:1z::8:7:6:5:4:3:2:1z8:7:6:5:4:3:2:1::z10:9:8:7:6:5:4:3:42.42.42.42z9:8:7:6:5:4:3::2:1%scopez10:9:8:7:6:5:4:3:2:1%scopez::8:7:6:5:4:3:2:1%scopez8:7:6:5:4:3:2:1::%scopez"10:9:8:7:6:5:4:3:42.42.42.42%scoper0   r   s   ` r   )test_bad_address_split_v6_too_many_colons<AddressTestCase_v6.test_bad_address_split_v6_too_many_colons|  sd    	,
 	+,-.*+*+5612340101;<r   c                 t   ^  U 4S jnSS-  S-   nU" U5        U" US-   5        U" US-   5        U" US-   5        g )Nc                    > SnTR                  U[        R                  " U S S 5      5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz%At most 45 characters expected in '%s-   )r"   rC   rD   r   r#  r<  s     r   r   MAddressTestCase_v6.test_bad_address_split_v6_too_long.<locals>.assertBadSplit  sB    :C((biiSb	.BC%%d+ DCCr  z0:i'  0z%zoneidz:255.255.255.255z:ffff:255.255.255.255r0   )r   r   	long_addrs   `  r   "test_bad_address_split_v6_too_long5AddressTestCase_v6.test_bad_address_split_v6_too_long  sI    	, E\S(	y!y9,-y#556y#::;r   c                    ^  U 4S jnU" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S	5        U" S
5        U" S5        g )Nc                    > SnTR                  XR                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz+Exactly 8 parts expected without '::' in %rrA  r   rB  r<  s     r   r   SAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplit  s>    ?C((jjoa.@A%%d+ BAArE  z3ffe:0:0:0:0:0:0:0:1z9:8:7:6:5:4:3:2:1z7:6:5:4:3:2:1z9:8:7:6:5:4:3:42.42.42.42z7:6:5:4:3:42.42.42.42z3ffe:0:0:0:0:0:0:0:1%scopez9:8:7:6:5:4:3:2:1%scopez7:6:5:4:3:2:1%scopez9:8:7:6:5:4:3:42.42.42.42%scopez7:6:5:4:3:42.42.42.42%scoper0   r   s   ` r   (test_bad_address_split_v6_too_many_parts;AddressTestCase_v6.test_bad_address_split_v6_too_many_parts  sc    	,
 	-.*+'23./3401,-8945r   c                 2   ^  U 4S jnU" S5        U" S5        g )Nc                    > SnTR                  XR                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz.Expected at most 7 other parts with '::' in %rrA  r   rB  r<  s     r   r   eAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplit  s>    BC((jjoa.@A%%d+ BAArE  z1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper0   r   s   ` r   :test_bad_address_split_v6_too_many_parts_with_double_colonMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon  s    	,
 	)*/0r   c                 R  ^  U 4S jnU" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S	5        U" S
5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        g )Nc                    > SnTR                  XR                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz At most one '::' permitted in %rrA  r   rB  r<  s     r   r   ZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplit  rL  rE  z
3ffe::1::1z1::2::3::4:5z2001::db:::1z	3ffe::1::z	::3ffe::1z:3ffe::1::1z3ffe::1::1:z:3ffe::1::1:z:::z2001:db8:::1z3ffe::1::1%scopez1::2::3::4:5%scopez2001::db:::1%scopez3ffe::1::%scopez::3ffe::1%scopez:3ffe::1::1%scopez3ffe::1::1:%scopez:3ffe::1::1:%scopez	:::%scopez2001:db8:::1%scoper0   r   s   ` r   /test_bad_address_split_v6_repeated_double_colonBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon  s    	,
 	|$~&~&{#{#}%}%~&u~&)*+,+,()()*+*++,{#+,r   c                    ^  U 4S jnU" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S	5        g )
Nc                    > SnTR                  XR                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz0Leading ':' only permitted as part of '::' in %rrA  r   rB  r<  s     r   r   RAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplit  s>    DC((jjoa.@A%%d+ BAArE  z:2001:db8::1z:1:2:3:4:5:6:7z:1:2:3:4:5:6:z:6:5:4:3:2:1::z:2001:db8::1%scopez:1:2:3:4:5:6:7%scopez:1:2:3:4:5:6:%scopez:6:5:4:3:2:1::%scoper0   r   s   ` r   'test_bad_address_split_v6_leading_colon:AddressTestCase_v6.test_bad_address_split_v6_leading_colon  sP    	,
 	~&'(''(+,-.,--.r   c                    ^  U 4S jnU" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S	5        g )
Nc                    > SnTR                  XR                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz1Trailing ':' only permitted as part of '::' in %rrA  r   rB  r<  s     r   r   SAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplit  s>    EC((jjoa.@A%%d+ BAArE  z2001:db8::1:z1:2:3:4:5:6:7:z
::1.2.3.4:z::7:6:5:4:3:2:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper0   r   s   ` r   (test_bad_address_split_v6_trailing_colon;AddressTestCase_v6.test_bad_address_split_v6_trailing_colon  sP    	,
 	~&'(|$'(+,-.)*-.r   c                    ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS	5        U" S
S5        U" SS5        U" SS5        U" SS5        U" SS	5        U" SS5        g )Nc                    > TR                  SXR                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz%s in %rrA  r   rB  )rZ   v4_errorr   s     r   assertBadAddressPartDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPart  s;    ((Xzz#q?QR%%d+ SRRs   A
Az3ffe::1.netzExpected 4 octets in '1.net'z3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper0   )r   rs  s   ` r   test_bad_v4_part_in&AddressTestCase_v6.test_bad_v4_part_in  s    	, 	],JK_=	?Y;	=]?	A..	/ 	02PQ2=	?_;	=0?	A4.	/r   c                    ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS	5        U" S
S5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS	5        U" SS5        U" SS5        g )Nc                    > SU< SU R                  S5      S   < 3nTR                  [        R                  " U5      5         [        R
                  " U 5        S S S 5        g ! , (       d  f       g = f)NzOnly hex digits permitted in r   rA  r   )rC  r"   rC   rD   r   r#  rZ   partrd   r   s      r   assertBadPartAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPart  sK    =A4::c?STCUVC((38%%d+ 988s   A##
A1z
3ffe::googgoogz3ffe::-0r   z3ffe::+0r   z3ffe::-1-1r   1.2.3.41234:axy::baxyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope1234:axy::b%scoper0   r   r{  s   ` r   r  *AddressTestCase_v6.test_invalid_characters  s    	,
 	lF+j$'j$'j$'k9-mU+(&1&-&-&-'3)51r   c                    ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS	5        U" S
S5        U" SS5        U" SS5        U" SS	5        g )Nc                    > SnTR                  X!U R                  S5      S   5         [        R                  " U 5        S S S 5        g ! , (       d  f       g = f)Nz*At most 4 characters permitted in %r in %rrA  r   rB  ry  s      r   r{  :AddressTestCase_v6.test_part_length.<locals>.assertBadPart&  s@    >C((DJJsOA4FG%%d+ HGGs   A
Az::0000000000z3ffe::1000010000z02001:db8::02001z2001:888888::1888888z::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper0   r  s   ` r   test_part_length#AddressTestCase_v6.test_part_length%  s^    	,
 	i)mW-mW-&1ow/)73)73,h7r   c                 H    U R                  S5        U R                  S5        g N
2001:db8::2001:db8::%scoper  r   s    r   r  AddressTestCase_v6.test_pickle5  s    &+,r   c                     [         R                  " U R                  S5      5        [         R                  " U R                  S5      5        g r  r  r   s    r   r  AddressTestCase_v6.test_weakref9  s-    DLL./DLL!345r   c                     U R                  S5      nU R                  U[        R                  " U5      5        U R                  U[        R                  " U5      5        g )Nr  )r   r*   copydeepcopyr   s     r   	test_copyAddressTestCase_v6.test_copy=  sB    ||./tyy/t}}T23r   r0   N)r1   r2   r3   r4   r   r#  r   r   r   rG  rM  rU  rZ  r_  rd  ri  rn  ru  r  r  r  r  r  r8   r0   r   r   r(  r(  ;  s^    ##G'3R**=(<6(1-8/ / /62(8 -64r   r(  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)NetmaskTestMixin_v4iC  ;Input validation on interfaces and networks is very similarc                    S Hy  nU R                  U5      nU R                  [        U5      S5        U R                  [        UR                  5      S5        U R                  [        UR                  5      S5        M{     g )N)r     
1.2.3.4/32255.255.255.255ri   r   r*   strnetmaskhostmask)r   rc   nets      r   test_no_mask NetmaskTestMixin_v4.test_no_maskF  sb    CG,,w'CSX|4S-/@AS.	:	 Dr   c                     SnU R                  SU-  5         U R                  U5        S S S 5        g ! , (       d  f       g = f)Nz1.2.3.4/32/24Only one '/' permitted in %rr?   r   s     r   test_split_netmask&NetmaskTestMixin_v4.test_split_netmaskO  s4    $$%Cd%JKLL LKKs	   2
A c                    ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" S	S
5        U" S[         R                  " S5      5        g )Nc                 ~   > TR                  U5         TR                  U 5        S S S 5        g ! , (       d  f       g = fr	   r?   rZ   r   r   s     r   assertBadAddressANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddressU  )    ((1T" 211   .
</r=   /8r   zExpected 4 octets
google.com10/8	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))rC   rD   r   r  s   ` r   test_address_errors'NetmaskTestMixin_v4.test_address_errorsT  s_    	# 	7889"56':;!45&;<bii&>?r   c           	      .   U R                  [        U R                  S5      5      S5        U R                  [        U R                  S5      5      S5        U R                  [        U R                  S5      5      S5        U R                  [        U R                  S5      5      S5        [        SS5       H  nSU-  nU R                  U5      nU R                  [        U5      U5        U R                  [        U R                  S	UR                  -  5      5      U5        U R                  [        U R                  S
U-  5      5      U5        US;   a  SSU-
  -  nU R                  [        U R                  S	UR
                  -  5      5      U5        M     g )N	192.0.2.0   192.0.2.0/24)r  24r  255.255.255.0z192.0.2.0/255.255.255.0r   !   z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%d)    r   r  )r*   r  r   rT   r  r  )r   inet_strr  s       r   test_valid_netmask&NetmaskTestMixin_v4.test_valid_netmaska  sR   T\\*;<=~NT\\*=>?PT\\*HIJ'	)T\\*CDE'	)q"A"Q&G,,w'CSXw/DLL!;<=wH Sma.?!@A7K G|&"q&1DLL!<=>I r   c                   ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS	5        U" SS
5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        g )Nc                    > SU-  nTR                  [        R                  " U5      5         TR                  U < SU< 35        S S S 5        g ! , (       d  f       g = fN%r is not a valid netmaskr  r'   rC   rD   r   rZ   r  rd   r   s      r   assertBadNetmaskANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmaskz  @    -7C((38g67 988   A
Ar  r>   r~  r    1 0x133z254.254.255.256r  1.1.1.1z254.xyz.2.3z240.255.0.0z255.254.128.0z0.1.127.255puddingr   r0   r   r  s   ` r   test_netmask_errors'NetmaskTestMixin_v4.test_netmask_errorsy  s    	8
 	B'D)D)E*E*D)$56I.M2M2O4M2I.D)r   c                 6   ^  U 4S jnU" SS5        U" SS5        g )Nc                    > SU-  nTR                  [        R                  " U5      5         TR                  X45        S S S 5        g ! , (       d  f       g = fNr  r  r  s      r   r  JNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmask  =    -7C((38d_- 988   A
Ar  rv   r  r0   r  s   ` r   test_netmask_in_tuple_errors0NetmaskTestMixin_v4.test_netmask_in_tuple_errors  s    	. 	B'B'r   c                 j    U R                  S5        U R                  S5        U R                  S5        g )Nz192.0.2.0/27z192.0.2.0/31r  r  r   s    r   r  NetmaskTestMixin_v4.test_pickle  s,    ((%r   r0   Nr1   r2   r3   r4   __doc__r  r  r  r  r  r  r  r8   r0   r   r   r  r  C  s*    E;
@I0**(&r   r  c                   ,    \ rS rSr\R
                  rSrg)InterfaceTestCase_v4i  r0   N)r1   r2   r3   r4   r   IPv4Interfacer   r8   r0   r   r   r  r        %%Gr   r  c                   >    \ rS rSr\R
                  rS rS rS r	Sr
g)NetworkTestCase_v4i  c                    U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        g N10.0.0.0/30z10.0.1.0/24z10.0.0.0/24assertFalser   	subnet_ofr   r   s    r   test_subnet_of!NetworkTestCase_v4.test_subnet_of  s    LL'11]+-	. 	LL'11]+-	. 	LL'11]+-	. 	LL'11]+-	.r   c                    U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        g r  r  r   supernet_ofr   r   s    r   test_supernet_of#NetworkTestCase_v4.test_supernet_of  s    LL'33]+-	. 	LL'33]+-	. 	LL'33]+-	. 	LL'33]+-	.r   c                 F   U R                  [        5         [        R                  " S5      R	                  [        R
                  " S5      5        S S S 5        U R                  [        5         [        R
                  " S5      R	                  [        R                  " S5      5        S S S 5        U R                  [        5         [        R                  " S5      R                  [        R
                  " S5      5        S S S 5        U R                  [        5         [        R
                  " S5      R                  [        R                  " S5      5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr  ::1/128)rJ   rK   r   IPv4Networkr  IPv6Networkr  r   s    r   test_subnet_of_mixed_types-NetworkTestCase_v4.test_subnet_of_mixed_types  s   y)!!-0<<%%i02 * y)!!),88%%m46 * y)!!-0::%%i02 * y)!!),66%%m46 *) *) *) *) *)s/   :E-:E0:F:F
E-0
E>
F
F r0   N)r1   r2   r3   r4   r   r  r   r  r  r  r8   r0   r   r   r  r    s    ##G.$.$6r   r  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)NetmaskTestMixin_v6i  r  c                    S Hy  nU R                  U5      nU R                  [        U5      S5        U R                  [        UR                  5      S5        U R                  [        UR                  5      S5        M{     U R                  S5      nU R                  [        U5      S5        U R                  [        UR                  5      S5        U R                  [        UR                  5      S5        g )N)::1rI   s                  r  z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr   	::1%scope::1%scope/128r  )r   rc   r  
scoped_nets       r   r   NetmaskTestMixin_v6.test_no_mask  s    7G,,w'CSXy1S-/XYS.5	 8 \\+.
Z/:Z//02[\Z00148r   c                    SnU R                  SU-  5         U R                  U5        S S S 5        SnU R                  SU-  5         U R                  U5        S S S 5        g ! , (       d  f       N?= f! , (       d  f       g = f)Nzcafe:cafe::/128/190r  zcafe:cafe::%scope/128/190r?   )r   rZ   scoped_addrs      r   r  &NetmaskTestMixin_v6.test_split_netmask  sq    $$$%Cd%JKLL L 2$$%Ck%QRLL% SR	 LK SRs   A"A3"
A03
Bc                    ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" S	S
5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS
5        g )Nc                 ~   > TR                  U5         TR                  U 5        S S S 5        g ! , (       d  f       g = fr	   r?   r  s     r   r  ANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddress  r  r  r  r=   r  r  zAt least 3 partsr  r  r  zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez1.2.3.4%scopez
10%scope/8r  r0   r  s   ` r   r  'NetmaskTestMixin_v6.test_address_errors  s    	# 	7889'9:$67!34(9:$=>%>?+-?@*<='9:,.?@r   c           	         U R                  [        U R                  S5      5      S5        U R                  [        U R                  S5      5      S5        U R                  [        U R                  S5      5      S5        [        SS5       H_  nSU-  nU R                  [        U R                  U5      5      U5        U R                  [        U R                  SU-  5      5      U5        Ma     U R                  [        U R                  S5      5      S5        [        SS5       H_  nSU-  nU R                  [        U R                  U5      5      U5        U R                  [        U R                  SU-  5      5      U5        Ma     g )	N)r  r  2001:db8::/32)r  32r      z::/%dz::/0%dz2001:db8::%scope/32)r*   r  r   rT   )r   r  r  s      r   r  &NetmaskTestMixin_v6.test_valid_netmask  s:    	T\\*<=>(	*T\\*>?@(	*T\\/:;_Mq#AkGSg!67AShl!;<gF  	T\\*?@ACXYq#AkGSg!67AShl!;<gF r   c                    ^  U 4S jnU" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS5        U" SS	5        U" SS
5        U" SS5        U" SS5        U" SS5        g )Nc                    > SU-  nTR                  [        R                  " U5      5         TR                  U < SU< 35        S S S 5        g ! , (       d  f       g = fr  r  r  s      r   r  ANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmask  r  r  r  r>   1::r~  r   r  r  129r  r  r   r  r0   r  s   ` r   r  'NetmaskTestMixin_v6.test_netmask_errors  s    	8
 	#&&%%&&&	*	*t$i0r   c                 H   ^  U 4S jnU" SS5        U" SS5        U" SS5        g )Nc                    > SU-  nTR                  [        R                  " U5      5         TR                  X45        S S S 5        g ! , (       d  f       g = fr  r  r  s      r   r  JNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmask/  r  r  r  rv   r  r  r0   r  s   ` r   r  0NetmaskTestMixin_v6.test_netmask_in_tuple_errors.  s(    	. 	#$c*r   c                     U R                  S5        U R                  S5        U R                  S5        U R                  S5        g )Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoper  r   s    r   r  NetmaskTestMixin_v6.test_pickle7  s>    -.-.)*/0r   r0   Nr  r0   r   r   r  r    s*    E9&A&G.1(+1r   r  c                   ,    \ rS rSr\R
                  rSrg)InterfaceTestCase_v6i?  r0   N)r1   r2   r3   r4   r   IPv6Interfacer   r8   r0   r   r   r"  r"  ?  r  r   r"  c                   8    \ rS rSr\R
                  rS rS rSr	g)NetworkTestCase_v6iC  c                    U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        g )N2000:999::/562000:aaa::/482000:aaa::/562000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56r  r   s    r   r  !NetworkTestCase_v6.test_subnet_ofF  s2   LL)33_-/	0 	LL)33_-/	0 	LL)33_-/	0 	LL)33_-/	0 	LL./99235	6 	LL./99235	6r   c                    U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        U R                  U R                  S5      R                  U R                  S5      5      5        g )Nr'  r(  r)  r*  r  r   s    r   r  #NetworkTestCase_v6.test_supernet_of_  s    LL)55_-/	0 	LL)55_-/	0 	LL)55_-/	0 	LL)55_-/	0r   r0   N)
r1   r2   r3   r4   r   r  r   r  r  r8   r0   r   r   r%  r%  C  s    ##G620r   r%  c                   ,    \ rS rSrS rS rS rS rSrg)FactoryFunctionErrorsir  c                 ~    SnSnU R                  [        XCU5         U" U5        SSS5        g! , (       d  f       g= f)z3Ensure a clean ValueError with the expected messagecamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r   
ValueError)r   r   kindrZ   rd   s        r   assertFactoryError(FactoryFunctionErrors.assertFactoryErrort  s2    ;"":s$?DM @??s   	.
<c                 D    U R                  [        R                  S5        g )Nrc   )r4  r   
ip_addressr   s    r   test_ip_address%FactoryFunctionErrors.test_ip_address{      	 4 4i@r   c                 D    U R                  [        R                  S5        g )N	interface)r4  r   ip_interfacer   s    r   test_ip_interface'FactoryFunctionErrors.test_ip_interface~  s    	 6 6Dr   c                 D    U R                  [        R                  S5        g )Nnetwork)r4  r   
ip_networkr   s    r   test_ip_network%FactoryFunctionErrors.test_ip_network  r:  r   r0   N)	r1   r2   r3   r4   r4  r8  r>  rC  r8   r0   r   r   r/  r/  r  s    AEAr   r/  c                   .   \ rS rSr\R
                  " S5      r\R                  " S5      r\R                  " S5      r
\R                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S5      r\\
/r\\/-   r\\/r\\/-   r\\/r\\/-   r\\-   r\\-   r\R
                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S5      r \R                  " S5      r!\R                  " S5      r"\R                  " S5      r#\R                  " S5      r$S r%S r&S r'S	 r(S
 r)S r*S r+S r,S r-S r.S r/Sr0g)ComparisonTestsi  rI   r  r   	::2%scopec                    [        5       nU R                   Hq  nU R                  X!5        U R                  X!:H  5        U R	                  UR                  U5      [        5        U R	                  UR                  U5      [        5        Ms     g r	   )objectobjects_with_scopedassertNotEqualr  r*   __eq__NotImplemented__ne__r   otherobjs      r   test_foreign_type_equality*ComparisonTests.test_foreign_type_equality  si    ++C+S\*SZZ.?SZZ.?	 ,r   c                 ~    U R                    H-  nU R                    H  nXL a  M	  U R                  X5        M     M/     g r	   )objectsrK  r+   s      r   test_mixed_type_equality(ComparisonTests.test_mixed_type_equality  s6     <<C||:##C- $  r   c                 x    [        U R                  U R                  5       H  u  pU R                  X5        M     g r	   )zip
v6_objectsv6_scoped_objectsrK  r+   s      r   test_scoped_ipv6_equality)ComparisonTests.test_scoped_ipv6_equality  s.    DOOT-C-CDHC) Er   c                 r    U R                    H'  nU R                   H  nU R                  X5        M     M)     g r	   )
v4_objectsr[  rK  r+   s      r   test_v4_with_v6_scoped_equality/ComparisonTests.test_v4_with_v6_scoped_equality  s.    ??C--##C- . #r   c                     U R                    H6  nU R                  X5        U R                  X5        U R                  X5        M8     g r	   )rJ  r*   assertLessEqualassertGreaterEqualr   rQ  s     r   test_same_type_equality'ComparisonTests.test_same_type_equality  s<    ++CS&  *##C- ,r   c           
         U R                   U R                  4U R                  U R                  4U R                  U R
                  4U R                  U R                  4U R                  U R                  4U R                  U R                  4U R                  U R                  4U R                  U R                  4U R                   U R"                  44	 H  u  pU R%                  X5        U R'                  X5        U R)                  X5        U R+                  X!5        U R-                  X!5        U R/                  X:  5        U R/                  X!:  5        U R/                  X:  5        U R/                  X!:*  5        M     g r	   )v4addrv4addr2v4netv4net2v4intfv4intf2v6addrv6addr2v6netv6net2v6intfv6intf2v6addr_scopedv6addr2_scopedv6net_scopedv6net2_scopedv6intf_scopedv6intf2_scopedrK  
assertLessrc  assertGreaterrd  r  r+   s      r   test_same_type_ordering'ComparisonTests.test_same_type_ordering  s2   [[$,,'ZZ%[[$,,'[[$,,'ZZ%[[$,,'!4!45 2 23!4!45

HC )OOC%  *s(##C-SY'SY'SZ(SZ('

r   c                    U R                    H  nU R                  XR                  5        M      U R                  U R                  -    H  nU R                  XR
                  5        M      U R                  U R                  -    H  nU R                  XR                  5        M      U R                  U R
                  U R                  /-    H  nU R                  XR
                  5        M      U R                  U R
                  U R                  /-    H  nU R                  XR                  5        M      U R                  U R                  -   U R                  /-    H  nU R                  XR                  5        M      g r	   )v4_addressesassertInrk  v6_addressesv6_scoped_addressesrq  rw  r_  assertNotInrZ  r[  re  s     r   test_containment ComparisonTests.test_containment  s!   $$CMM#zz* %$$t'?'??CMM#zz* @$$t'?'??CMM#001 @ ??djj$2C2C%DDCS**- E??djj$2C2C%DDCS"3"34 E??T%;%;;tzzlJCS**- Kr   c                   ^^ U R                    H  mU R                    H  m[        T[        T5      5      (       d  [        T[        T5      5      (       a  M9  U R                  [        UU4S j5        U R                  [        UU4S j5        U R                  [        UU4S j5        U R                  [        UU4S j5        M     M     g )Nc                     > T T:  $ r	   r0   r,   r-   s   r   <lambda>:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>  	    S3Yr   c                     > T T:  $ r	   r0   r  s   r   r  r    r  r   c                     > T T:*  $ r	   r0   r  s   r   r  r    	    SCZr   c                     > T T:  $ r	   r0   r  s   r   r  r    r  r   )rJ  
isinstancetyperJ   rK   r+   s    @@r   test_mixed_type_ordering(ComparisonTests.test_mixed_type_ordering  s    ++C//c49--Cc1K1K!!)->?!!)->?!!)-?@!!)-?@ 0 ,r   c                 b   [        5       nU R                   GHL  nU R                  [        5         X!:    S S S 5        U R                  [        5         X!:    S S S 5        U R                  [        5         X!:*    S S S 5        U R                  [        5         X!:    S S S 5        U R	                  U[
        :  5        U R                  U[
        :  5        U R	                  U[
        :*  5        U R                  U[
        :  5        U R                  U[        :  5        U R	                  U[        :  5        U R                  U[        :*  5        U R	                  U[        :  5        GMO     g ! , (       d  f       GN;= f! , (       d  f       GN+= f! , (       d  f       GN= f! , (       d  f       GN= fr	   )rI  rJ  rJ   rK   r   r   r  r   rO  s      r   test_foreign_type_ordering*ComparisonTests.test_foreign_type_ordering  s   ++C""9- .""9- .""9- .""9- .OOC'M*S7]+OOC7N+SG^,S8^,OOC(N+SH_-OOC8O,! ,--------s/   E)E;4FF)
E8	;
F
	
F	
F.	c                    U R                   U R                  U R                  /nU R                  U R                  U R
                  /nU R                  U R                  U R                  /nU R                  U[        U R                  [        R                  S95        U R                  U[        U R                  [        R                  S95        U R                  U[        U R                  [        R                  S95        U R                  X-   [        U R                  U R                  -   [        R                  S95        U R                  [         [        R                  " ["        5      5        g )N)key)ri  rk  rm  ro  rq  rs  ru  rw  ry  r*   sortedr_  r   get_mixed_type_keyrZ  r[  rM  rI  )r   
v4_ordered
v6_orderedv6_scoped_ordereds       r   test_mixed_type_key#ComparisonTests.test_mixed_type_key	  s)   kk4::t{{;
kk4::t{{;
!//1B1BDDVDVW$-$@$@B	C 	$-$@$@B	C 	* 6 6$-$@$@B	C 	7$2H2H H$-$@$@B	C 	)E)Ef)MNr   c                 ,   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU R                  [        UR
                  U5        U R                  [        UR                  U5        U R                  [        UR
                  U5        U R                  [        UR                  U5        U R                  [        UR
                  U5        U R                  [        UR                  U5        U R                  [        UR
                  U5        U R                  [        UR                  U5        U R                  [        UR
                  U5        U R                  [        UR                  U5        U R                  [        UR
                  U5        U R                  [        UR                  U5        U R                  [        UR
                  U5        U R                  [        UR                  U5        U R                  [        UR
                  U5        U R                  [        UR                  U5        g )Nr  r  r  )r   r7  rB  rJ   rK   __lt____gt__)r   ri  rk  ro  rq  ru  rw  s          r   test_incompatible_versions*ComparisonTests.test_incompatible_versions  s   %%i0$$Y/%%e,$$U+!,,[9 ++K8)V]]F;)V]]F;)U\\59)U\\59)V]]F;)V]]F;)U\\59)U\\59)V]]MB)V]]MB)U\\<@)U\\<@)]%9%96B)]%9%96B)\%8%8%@)\%8%8%@r   r0   N)1r1   r2   r3   r4   r   r   ri  r  rk  r  rm  r#  ro  r  rq  r#  rs  ru  rw  ry  r  r_  r  rZ  r  r[  rU  rJ  rj  rl  rn  rp  rr  rt  rv  rx  rz  rR  rV  r\  r`  rf  r}  r  r  r  r  r  r8   r0   r   r   rF  rF    s   ""1%F!!!$E$$Q'F""1%F!!!$E$$Q'F))+6M((5L++K8MF#L'JF#L'J(-8+|n<:%G!$55##A&G""1%F%%a(G##A&G""1%F%%a(G**;7N))+6M,,[9N@.*.
.),.A-(O&Ar   rF  c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<S; r=S< r>S= r?S> r@S? rAS@ rBSA rCSB rDSC rESD rFSE rGSF rHSG rISH rJSI rKSJ rLSK rMSL rNSM rOSN rPSO rQSP rRSQrSgR)SIpaddrUnitTesti:  c                     [         R                  " S5      U l        [         R                  " S5      U l        [         R
                  " S5      U l        [         R                  " S5      U l        [         R                  " S5      U l	        [         R                  " S5      U l        [         R                  " S5      U l        [         R                  " S5      U l        [         R                  " S	5      U l        [         R                  " S
5      U l        g )Nr  
1.2.3.4/24
1.2.3.0/242001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:1/642001:658:22a:cafe::/64!2001:658:22a:cafe:200:0:0:1%scopez$2001:658:22a:cafe:200:0:0:1%scope/64z2001:658:22a:cafe::%scope/64r  )r   r   ipv4_addressr  ipv4_interfacer  ipv4_networkr#  ipv6_addressipv6_interfacer  ipv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkipv6_with_ipv4_partr   s    r   setUpIpaddrUnitTest.setUp<  s    %11)<'55lC%11,?%33)+'55,.%112JK#,#:#:/$1 %.%<%<2&4"#,#8#89W#X #,#:#:;#G r   c                    U R                  S[        [        R                  " S5      5      5        U R                  S[        [        R                  " S5      5      5        U R                  S[        [        R                  " S5      5      5        g )NzIPv4Interface('1.2.3.4/32')r  zIPv6Interface('::1/128')r  zIPv6Interface('::1%scope/128')r  )r*   rE   r   r  r#  r   s    r   testReprIpaddrUnitTest.testReprM  sp    6i55i@A	C3i55e<=	?9i55kBC	Er   c                    [         R                  " S5      n[         R                  " S5      nU R                  [         R                  " S5      U5        U R                  [         R                  " US45      U5        U R                  [         R                  " S5      U5        U R                  [         R                  " S5      U5        U R                  [         R                  " US45      U5        U R                  [         R                  " S5      U5        U R	                  [
        5         [         R                  " S	5        S S S 5        U R	                  [
        5         [         R                  " US
45        S S S 5        U R	                  [
        5         [         R                  " S5        S S S 5        U R	                  [
        5         [         R                  " S5        S S S 5        U R	                  [
        5         [         R                  " US45        S S S 5        U R	                  [
        5         [         R                  " S5        S S S 5        [         R                  " S5      nU R                  [         R                  " S	SS9U5        U R                  [         R                  " US
4SS9U5        U R                  [         R                  " SSS9U5        U R                  [         R                  " SSS9U5        U R                  [         R                  " US4SS9U5        U R                  [         R                  " SSS9U5        [         R                  " S5      n[         R                  " S5      nU R                  [         R                  " S5      U5        U R                  [         R                  " US45      U5        U R                  [         R                  " S5      U5        U R                  [         R                  " S5      U5        U R                  [         R                  " US
45      U5        U R                  [         R                  " S5      U5        U R                  [         R                  " S	5      [         R                  " S5      5        U R                  [         R                  " S5      [         R                  " S5      5        U R	                  [
        5         [         R                  " S5        S S S 5        U R	                  [
        5         [         R                  " S5        S S S 5        g ! , (       d  f       GN = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNt= f! , (       d  f       GNR= f! , (       d  f       N= f! , (       d  f       g = f)Nr  z192.0.2.1/32)r  r  r  )      r  )r  r  r  )r  r  )r  r  r  )r  r  )r  r  r  )r  r  r  Fstrictr  r  )       r  r  )r  r  z192.0.2.1/24)r  z255.255.255.255.0)r   r   r  r*   rJ   r2  r  rB  )r   ipr  s      r   testIPv4TupleIpaddrUnitTest.testIPv4TupleV  s   "";/##N3../@A3G..Bx8#>../?@#F.. 0C DEH	J..0A0C DEH	J.. 0C DEH	J z*!!"34 +z*!!2r(+ +z*!!"23 +z*!!"@A +z*!!2"78 +z*!!"?@ + ##N3../@6;=>A	C..Bx6;=>A	C../?6;=>A	C.. 0A6;=>A	C 	..0?0A6;=>A	C 	.. 0A6;=>A	C
 "";/##N3.. 0A BCF	H..0?0A BCF	H.. 0A BCF	H../@A3G..Bx8#>../?@#F001BC"00@	B001AB"00@	B z*!!"DE + z*  !CD +*k +***********N +* +*s`   *T:UUU0<V2V&V&V7:
U	
U
U-0
U?
V
V#&
V47
Wc                    [         R                  " S5      n[         R                  " S5      nU R                  [         R                  " S5      U5        U R                  [         R                  " S5      U5        U R                  [         R                  " US45      U5        [         R                  " S5      n[         R                  " S5      nU R                  [         R                  " S5      U5        U R                  [         R                  " S5      U5        U R                  [         R                  " US	45      U5        [         R                  " S
5      n[         R                  " S5      nU R	                  [
        5         [         R                  " S5        S S S 5        U R	                  [
        5         [         R                  " S5        S S S 5        U R	                  [
        5         [         R                  " US45        S S S 5        [         R                  " S5      nU R                  [         R                  " SSS9U5        U R                  [         R                  " SSS9U5        U R                  [         R                  " US4SS9U5        U R                  [         R                  " S5      [         R                  " S5      5        U R                  [         R                  " S5      [         R                  " S5      5        [         R                  " S5      nU R	                  [
        5         [         R                  " S5        S S S 5        U R	                  [
        5         [         R                  " US45        S S S 5        U R	                  [
        5         [         R                  " S5        S S S 5        U R	                  [
        5         [         R                  " S5        S S S 5        g ! , (       d  f       GN]= f! , (       d  f       GN;= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr  z2001:db8::/128)r  128)	                n   r   r  z2001:db8::/96)r  96)r  `   r  r  2001:db8::1)r  r  )	               n   r  r  Fr  )r  r  z2001:db8::1/96)r  r  2001:db8::1%scope)r  r  )r  r  )r   r#  r  r*   rJ   r2  r#  rB  )r   r  r  	ip_scopeds       r   testIPv6TupleIpaddrUnitTest.testIPv6Tuple  sa   ""<0##$45../DE	..=?	 	..E{;	""<0##O4../CD	..<>	 	..Dz:	 ))*<=	 ""=1z*!!"56 +z*!! #< = + z*!!2r(+ + ##O4../B6;=	 	..I$)+ 	 	..BxF	 	001FG"001AB	D00>@"001AB	D ))*=>	z*!!";< +z*!!9b/2 +
 z*!!"BC + z*  !AB +*M +*** +*, +***
 +* +*sT   O/6P*P1P%%P6QQ/
O>
P
P"%
P36
Q
Q
Q&c                    U R                  [        R                  " S5      S-   [        R                  " S5      5        U R                  [        R                  " S5      S-
  [        R                  " S5      5        U R                  [        R                  " S5      S-   [        R                  " S5      5        U R                  [        R                  " S5      S-
  [        R                  " S5      5        U R	                  [        R                  " S	5      S-   [        R                  " S
5      5        U R	                  [        R                  " S
5      S-
  [        R                  " S	5      5        g )Nr     z1.1.2.0   z1.1.0.1r  i  z::ffffr  z::ffff%scope)r*   r   r   r#  rK  r   s    r   testAddressIntMath!IpaddrUnitTest.testAddressIntMath  s   ..y9C?"..y9	;..y9C?"..y9	;..u5C"..x8	:..x8IF"..u5	7I11+>)L%11.A	CI11.AYO%11+>	@r   c                 p   U R                  [        [        R                  S5        U R                  [        [        R                  S[        R                  -  5        U R                  [        [        R
                  S5        U R                  [        [        R
                  S[        R                  -  5        g )Nrv   r   )rJ   r2  r   v4_int_to_packed
IPV4LENGTHv6_int_to_packed
IPV6LENGTHr   s    r   testInvalidIntToBytes$IpaddrUnitTest.testInvalidIntToBytes  s~    *i&@&@"E*i&@&@y333	5*i&@&@"E*i&@&@y333	5r   c           	      R   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU R                  [        [         R                  " U/5      5      X4/5        U R                  [        [         R                  " X/5      5      X4X34/5        U R                  [        [         R                  " XU/5      5      X4/5        U R                  S[         R
                  " SS5      5        U R                  S[        U R                  5      5        g )Nz10.10.10.10z10.10.10.11z10.10.10.12r   r   zIPv4Network('1.2.3.0/24'))r   r   r*   list_find_address_range_count_righthand_zero_bitsrE   r  )r   ip1ip2ip3s       r   testInternalsIpaddrUnitTest.testInternals  s    ##M2##M2##M2i;;SEBC*	'i;;SJGH*sj1	3i;;SsOLM*	'iBB1cJK4d4;L;L6MNr   c                    U R                  [        U R                  R                  5      S5        U R                  [	        U R                  R                  5      S5        U R                  [        U R
                  R                  5      S5        U R                  [	        U R
                  R                  5      S5        U R                  [	        U R
                  R                  5      S5        U R                  [        U R                  R                  5      S5        U R                  [	        U R                  R                  5      S5        U R                  [	        U R                  R                  5      S5        g )Ni 1.2.3.0l	           /YE    2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r*   intr  network_addressr  r  r  r  r   s    r   testGetNetworkIpaddrUnitTest.testGetNetwork  s   T..>>?JT..>>?KT..>>??	AT..>>?.	0T..7780	2T55EEF?	AT55EEF4	6T55>>?0	2r   c                    U R                  U R                  R                  [        R                  " S5      R                  5        [        R
                  " S5      n[        R
                  " S5      n[        R
                  " S5      nU R                  U[        R
                  " [        UR                  5      5      5        U R                  U[        R
                  " [        UR                  5      5      5        U R                  U[        R
                  " [        UR                  5      5      5        SnU R                  U R                  R                  [        R                  " U5      R                  5        U R                  U R                  R                  [        R                  " U5      R                  5        U R                  [        R
                  " U R                  R                  5      R                  S5        U R                  [        R
                  " U R                  R                  5      R                  S5        U R                  [        R
                  " U R                  R                  5      R                  S5        g )Nr  r  r  r  	         /YE          )r*   r  _ipr   r  rB  r  r  rK  r  r#  r  r  versionr  r  )r   ipv4ipv6ipv6_scopedv6_ints        r   testIpFromIntIpaddrUnitTest.testIpFromInt  s   ,,00"00:>>	@ ##I.##$AB**+NOy33C8L8L4MNOy33C8L8L4MNOK)=)=c+B]B]>^)_`7,,00"008<<	>3377"008<<	> 	--d.?.?.C.CDLL	--d.?.?.C.CDLL	--d.F.F.J.JKSS	r   c                    [         R                  nU R                  U R                  R                  [         R
                  " S5      R                  5        U R                  U" S5      U" S5      5        U R                  U R                  R                  [         R
                  " S5      R                  5        U R                  U" S5      U" S5      5        U R                  U" S5      U" S5      5        g )	Nr  255.254.253.252       X*      ffff:2:3:4:ffff::            r   s                   )r   r7  r*   r  r  r=  r  r  r   s     r   testIpFromPackedIpaddrUnitTest.testIpFromPacked,  s    &&,,00"//0CDHH	J!23 !45	7,,//"//899;	= 	!45  "6 7	8 	 .	0r   c                 8   U R                  [        U R                  R                  5      S5        U R                  [	        U R                  R                  5      S5        U R                  [        U R
                  R                  5      S5        U R                  [	        U R
                  R                  5      S5        U R                  [        U R                  R                  5      S5        U R                  [	        U R                  R                  5      S5        g )Nr  r  r  2001:658:22a:cafe:200::1)r*   r  r  r  r  r  r  r   s    r   	testGetIpIpaddrUnitTest.testGetIp<  s    T00334h?T00334i@T00334?	AT003343	5T77::;?	AT77::;3	5r   c                 ,   SnSnSnX#-   n[         R                  " U5      n[         R                  " U5      nU R                  [	        U5      U5        U R                  UR
                  X-   5        U R                  [	        UR                  5      U5        g )Nz0000:0000:0000:0000:0000:ffff:::ffff:r  )r   r#  r#  r*   r  explodedr  )r   long_prefixshort_prefixr  ipv6_ipv4_stripv6_ipv4_addripv6_ipv4_ifaces          r   &testIPv6IPv4MappedStringRepresentation5IpaddrUnitTest.testIPv6IPv4MappedStringRepresentationI  s    6 $+"..}=#11-@^,m<00+2DE_//0-@r   c                 *   U R                  U R                  R                  S 5        U R                  [        U R                  R                  5      S5        U R                  U R
                  R                  S 5        U R                  [        U R                  R                  5      S5        U R                  U R                  R                  R                  S 5        U R                  [        U R                  R                  R                  5      S5        g )Nscope)
r*   r  scope_idr  r  r  r  r  r  r  r   s    r   testGetScopeIdIpaddrUnitTest.testGetScopeIdT  s    **33	T55>>? 	",,55	T77@@A 	"**::CC	T55EENNO 	"r   c                    U R                  [        U R                  R                  5      S5        U R                  [	        U R                  R                  5      S5        U R                  [        U R
                  R                  5      S5        U R                  U R
                  R                  S5        U R                  [        U R                  R                  5      S5        U R                  U R                  R                  S5        g )Nl     r  l	            @   )r*   r  r  r  r  r  	prefixlenr  r   s    r   testGetNetmaskIpaddrUnitTest.testGetNetmaskb  s    T..667DT..667IT..667@	B**44b9T55==>@	B11;;R@r   c                 h   [         R                  " S5      nU R                  [        UR                  R
                  5      S5        U R                  UR                  S5      S5        [         R                  " S5      nU R                  [        UR                  R
                  5      S5        U R                  UR                  S5      S5        [         R                  " S5      nU R                  [        UR                  R
                  5      S5        U R                  UR                  S5      S5        g )N	1.2.3.4/0r   rS  z::1/0z::1%scope/0)r   r  r*   r  rA  r  _prefix_from_prefix_stringr#  )r   ipv4_zero_netmaskipv6_zero_netmaskipv6_scoped_zero_netmasks       r   testZeroNetmaskIpaddrUnitTest.testZeroNetmaskl  s    %33K@.66>>?C*EEcJAN%33G<.66>>?C*EEcJAN#,#:#:=#I 5==EEFJ1LLSQSTUr   c                 h    [         R                  " S5      nU R                  UR                  S5        g )Nz127.0.0.0/0.0.0.255r  )r   r  r*   r  r   r  s     r   testIPv4NetIpaddrUnitTest.testIPv4Nety  s'    ##$9:+r   c                 8   U R                  [        U R                  R                  5      S5        U R                  [	        U R                  R                  5      S5        U R                  [        U R
                  R                  5      S5        U R                  [	        U R
                  R                  5      S5        U R                  [        U R                  R                  5      S5        U R                  [	        U R                  R                  5      S5        g )Ni	1.2.3.255l	   /YE    %2001:658:22a:cafe:ffff:ffff:ffff:ffff)r*   r  r  broadcast_addressr  r  r  r   s    r   testGetBroadcastIpaddrUnitTest.testGetBroadcast}  s    T..@@A8LT..@@A;OT..@@A?	AT..@@A@	B 	T55GGH?	AT55GGH@	Br   c                 $   U R                  U R                  R                  R                  S5        U R                  U R                  R                  R                  S5        U R                  U R
                  R                  R                  S5        g )Nr  r  )r*   r  rA  r  r  r  r   s    r   testGetPrefixlenIpaddrUnitTest.testGetPrefixlen  sh    ,,44>>C,,44>>C33;;EErJr   c                    U R                  U R                  R                  5       R                  S5        U R                  [	        U R                  R                  5       R
                  5      S5        U R                  [        R                  " S5      R                  R                  5       [        R                  " S5      5        U R                  U R                  R                  5       R                  S5        U R                  [	        U R                  R                  5       R
                  5      S5        U R                  [        R                  " S5      R                  R                  5       [        R                  " S5      5        U R                  U R                  R                  5       R                  S5        U R                  [	        U R                  R                  5       R
                  5      S5        g )N   z1.2.2.0	0.0.0.0/0?   r  z::0/0)r*   r  supernetr  r  r  r   r  rA  r  r  r#  r  r  r   s    r   testGetSupernetIpaddrUnitTest.testGetSupernet  sk   **335??DT..779IIJ"	$##K088AAC!!+.	0 	**335??DT..779IIJ.	0009AAJJL"..w7	911::<FFKT55>>@PPQ.	0r   c                    U R                  U R                  R                  S5      R                  S5        U R                  [	        U R                  R                  S5      R
                  5      S5        U R                  U R                  R                  S5      R                  S5        U R                  [	        U R                  R                  S5      R
                  5      S5        U R                  U R                  R                  S5      R                  S5        U R                  [	        U R                  R                  S5      R
                  5      S5        g )Nr      z1.2.0.0=   z2001:658:22a:caf8::)r*   r  r2  r  r  r  r  r  r   s    r   testGetSupernet3IpaddrUnitTest.testGetSupernet3  s   **33A6@@"ET..77:JJK"	$ 	**33A6@@"ET..77:JJK.	011::1=GGLT55>>qAQQR.	0r   c                 v   U R                  [        U R                  R                  SSS9  U R                  [        U R                  R                  SS9  U R	                  U R                  R                  SS9U R                  R                  SS95        U R                  [        U R
                  R                  SSS9  U R                  [        U R
                  R                  SS9  U R	                  U R
                  R                  SS9U R
                  R                  S	S95        U R                  [        U R                  R                  SSS9  U R                  [        U R                  R                  SS9  U R	                  U R                  R                  SS9U R                  R                  S	S95        g )
Nr   rI   prefixlen_diff
new_prefix   r=  r<     A   >   )rJ   r2  r  r2  r*   r  r  r   s    r   testGetSupernet4IpaddrUnitTest.testGetSupernet4  s   *d&7&7&@&@)*q 	 	:*d&7&7&@&@%' 	 	)**3313E**33r3B	D 	*d&7&7&@&@)*q 	 	:*d&7&7&@&@%' 	 	)**3313E**33r3B	D*d&>&>&G&G)*q 	 	:*d&>&>&G&G%' 	 	)11::!:L11::b:I	Kr   c                    [        U R                  R                  5       5      nU R                  S[	        U5      5        U R                  [
        R                  " S5      US   5        U R                  [
        R                  " S5      US   5        [
        R                  " S5      n[        UR                  5       5      nU R                  S[	        U5      5        U R                  [
        R                  " S5      US   5        U R                  [
        R                  " S	5      US   5        [
        R                  " S
5      n[        UR                  5       5      nU R                  S[	        U5      5        U R                  [
        R                  " S5      US   5        U R                  [
        R                  " S	5      US   5        [
        R                  " S5      [
        R                  " S5      /nSnSnU R                  U[        [
        R                  " U5      R                  5       5      5        U R                  U[        [
        R                  " U5      R                  5       5      5        U R                  [        [
        R                  " U5      R                  5       5      [        [
        R                  " U5      R                  5       5      5        [
        R                  " S5      /nSnSnU R                  U[        [
        R                  " U5      R                  5       5      5        U R                  U[        [
        R                  " U5      R                  5       5      5        U R                  [        [
        R                  " U5      R                  5       5      [        [
        R                  " U5      R                  5       5      5        [
        R                  " S5      [
        R                  " S5      /nSnSnU R                  U[        [
        R                  " U5      R                  5       5      5        U R                  U[        [
        R                  " U5      R                  5       5      5        U R                  [        [
        R                  " U5      R                  5       5      [        [
        R                  " U5      R                  5       5      5        [
        R                  " S5      /nSnSnU R                  U[        [
        R                  " U5      R                  5       5      5        U R                  U[        [
        R                  " U5      R                  5       5      5        U R                  [        [
        R                  " U5      R                  5       5      [        [
        R                  " U5      R                  5       5      5        g )N   z1.2.3.1r   z	1.2.3.254rv   2001:658:22a:cafe::/120r  2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/1202.0.0.0z2.0.0.1z
2.0.0.0/31)rJ     r  r  )r  r  r  z2001:658:22a:cafe::/127)r     2001:658:22a:cafe::1/128)rI  r   )
r  r  hostsr*   lenr   r   r  r#  rB  )r   rN  r  r  addrsstr_argstpl_argss          r   	testHostsIpaddrUnitTest.testHosts  s_   T&&,,./c%j)..y958D..{;U2YG ,,-FG\'')*c%j)../EFaQ../FGrS'334ST(..01c%j)../EFaQ../FGrS &&y1&&y13"Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G &&y12"Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G &&'<=&&'=>@,/Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G &&'=>A-0Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	Gr   c           	      N   U R                  [        U R                  R                  SS95      [        U R                  R                  SS95      5        U R	                  [
        [        U R                  R                  SS95        U R	                  [
        [        U R                  R                  SSS95        U R                  [        U R                  R                  SS95      [        U R                  R                  SS95      5        U R	                  [
        [        U R                  R                  S	S95        U R	                  [
        [        U R                  R                  SSS95        U R                  [        U R                  R                  SS95      [        U R                  R                  SS95      5        U R	                  [
        [        U R                  R                  S	S95        U R	                  [
        [        U R                  R                  SSS95        g )
Nr   r@     r?  r/  r;  r  D   r1  )	r*   r  r  subnetsrJ   r2  r  r  r  r   s    r   testFancySubnetting"IpaddrUnitTest.testFancySubnetting  s    1 1 9 9 9 KL 1 1 9 9R 9 HI	K*d++33r3B	D*d++331>@ 4 B	C 	 1 1 9 9 9 KL 1 1 9 9R 9 HI	K*d++33r3B	D*d++331>@ 4 B	C 	 8 8 @ @PQ @ RS 8 8 @ @B @ OP	R*d22::b:I	K*d22::!FH ; J	Kr   c                    U R                  [        U R                  R                  5       5      S   R                  S5        U R                  [        [        U R                  R                  5       5      S   R                  5      S5        U R                  [        [        U R                  R                  5       5      S   R                  5      S5        U R                  [        U R                  R                  5       5      S   R                  S5        U R                  [        U R                  R                  5       5      S   R                  S5        g )Nr   r>  r  rI   z	1.2.3.128rB  )	r*   r  r  rX  r  r  r  r  r  r   s    r   testGetSubnetsIpaddrUnitTest.testGetSubnets  s   d//779:1=GGLT%%--/11244COE"	$ 	T%%--/11244COE$	& 	d//779:1=GGLd66>>@A!DNNPRSr   c                 2   [         R                  " S5      nUR                  5        Vs/ s H  n[        U5      PM     nnUR                  S5       Vs/ s H  n[        U5      PM     nnU R	                  US/5        U R	                  X45        g s  snf s  snf )Nr  r   )r   r  rX  r  r*   )r   r  r[   subnets1subnets2s        r   testGetSubnetForSingle32'IpaddrUnitTest.testGetSubnetForSingle32  sx    ""<0$&JJL1LqCFL1$&JJqM2MqCFM2L>2, 22s   BBc                 `   [         R                  " S5      nUR                  5        Vs/ s H  n[        U5      PM     nnUR                  S5       Vs/ s H  n[        U5      PM     nnU R	                  US/5        U R	                  X45        [         R                  " S5      nUR                  5        Vs/ s H  n[        U5      PM     nnUR                  S5       Vs/ s H  n[        U5      PM     nnU R	                  US/5        U R	                  X45        g s  snf s  snf s  snf s  snf )Nr  r   r  )r   r  rX  r  r*   )r   r  r[   r_  r`  r  s         r   testGetSubnetForSingle128(IpaddrUnitTest.testGetSubnetForSingle128"  s    ""9-$&JJL1LqCFL1$&JJqM2MqCFM2I;/,))/:	$-$5$5$78$7qCF$78$-$5$5a$89$8qCF$89O#45, 22
 99s   DD!6D& D+c                 8   U R                   R                  S5       Vs/ s H  n[        U5      PM     nnU R                  U/ SQ5        U R                  R                  S5       Vs/ s H  n[        U5      PM     nnU R                  U/ SQ5        g s  snf s  snf )Nr   )z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26)2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r  rX  r  r*   r  )r   r[   ipsipsv6s       r   testSubnet2IpaddrUnitTest.testSubnet2/  s    #0088;<;!s1v;<I	K "&!2!2!:!:1!=>!=AQ!=>,	- =
 ?s   B&Bc                 $   U R                   R                  S5       Vs/ s H  n[        U5      PM     nnU R                  US S / SQ5        U R                  USS  / SQ5        U R                  [	        U5      S5        [
        R                  " S5      nUR                  S5       Vs/ s H  n[        U5      PM     nnU R                  US S / SQ5        U R                  USS  / S	Q5        U R                  [	        U5      S5        g s  snf s  snf )
N   r   )z
1.2.3.0/32z
1.2.3.1/32z
1.2.3.2/32)z1.2.3.253/32z1.2.3.254/32z1.2.3.255/32r  rH  )z2001:658:22a:cafe::/128rM  z2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)r  rX  r  r*   rO  r   r  )r   r[   rX  r  s       r   testGetSubnets3IpaddrUnitTest.testGetSubnets3=  s   #'#4#4#<#<Q#?@#?a3q6#?@!6	8<	>Ws+ ,,-FG#/#7#7#:;#:a3q6#:;!)	* 	*	+ 	Ws+# A <s   D'Dc                    U R                  [        [        U R                  R                  R                  S5      5        U R                  [        [        U R                  R                  S5      5        U R                  [        [        U R                  R                  R                  S5      5        U R                  [        [        U R                  R                  S5      5        U R                  [        [        U R                  R                  R                  S5      5        U R                  [        [        U R                  R                  S5      5        g )N	   rB  rJ   r2  r  r  rA  rX  r  r  r  r  r  r   s    r   testSubnetFailsForLargeCidrDiff.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffQ  s    *d--55==a@	B*d++33A6	8*d--55==bA	C*d++33B7	9*d44<<DDRH	J*d22::2>	@r   c                 B   U R                  [        U R                  R                  R                  S5        U R                  [        U R
                  R                  R                  S5        U R                  [        U R                  R                  R                  S5        g )Nr>  rB  )rJ   r2  r  rA  r2  r  r  r   s    r   !testSupernetFailsForLargeCidrDiff0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff_  sz    *--55>>	D*--55>>	D*44<<EEr	Kr   c                    U R                  [        [        U R                  R                  R                  S5      5        U R                  [        [        U R                  R                  S5      5        U R                  [        [        U R                  R                  R                  S5      5        U R                  [        [        U R                  R                  S5      5        U R                  [        [        U R                  R                  R                  S5      5        U R                  [        [        U R                  R                  S5      5        g )Nrv   rs  r   s    r   "testSubnetFailsForNegativeCidrDiff1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffg  s    *d--55==bA	C*d++33B7	9*d--55==bA	C*d++33B7	9*d44<<DDRH	J*d22::2>	@r   c                    U R                  U R                  R                  S5        U R                  [        U R                  R	                  5       5      S   R                  S5        U R                  U R                  R                  5       R                  S5        U R                  U R                  R                  S5        U R                  [        U R                  R	                  5       5      S   R                  S5        U R                  U R                  R                  5       R                  S5        U R                  U R                  R                  S5        U R                  [        U R                  R	                  5       5      S   R                  S5        U R                  U R                  R                  5       R                  S5        g )Nr  r   r   i               l            l             )r*   r  num_addressesr  rX  r2  r  r  r   s    r   testGetNum_Addresses#IpaddrUnitTest.testGetNum_Addressesu  sc   **88#>d//779:1=KK	**335CCSI**88:NOd//779:1=KK,	.**335CC-	/11??AUVd66>>@A!DRR,	.11::<JJ-	/r   c                    U R                  [        R                  " S5      U R                  5        U R	                  [        R                  " S5      U R                  5        [        R
                  " S5      nU R                  XR                  5        U R                  [        R                  " S5      R                  [        R                  " S5      5      5        g )Nz1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15)	r  r   r  r  r  r   r  r  __contains__)r   addr1s     r   testContainsIpaddrUnitTest.testContains  s    i--n=''	)00>**	, %%j1e../ 	..|<II%%l35 	6r   c                    U R                  [        U R                  S   5      S5        U R                  [        U R                  R
                  S5        U R                  [        U R                  S   5      S5        U R                  [        U R                  R
                  S5        U R                  [        U R                  S   5      S5        U R                  [        U R                  R
                  S5        g )Nr   1.2.3.5r  z2001:658:22a:cafe::5r}  )r*   r  r  rJ   
IndexError__getitem__r  r  r   s    r   testNthIpaddrUnitTest.testNth  s    T..q12I>*d&7&7&C&CSIT..q12/	1*d&7&7&C&CWMT55a89/	1*d&>&>&J&JGTr   c                    [         R                  " S5      nU R                  SUR                  5        [	        U5      nU R                  S[        US   5      5        U R                  S[        US   5      5        U R                  S[        US   5      5        U R                  S[        US   5      5        U R                  US   US   5        g )Nz172.31.255.128/255.255.255.240   z172.31.255.128r   z172.31.255.143rv   )r   r  r*   r  r  r  )r   rZ   	addr_lists      r   testGetitemIpaddrUnitTest.testGetitem  s    $$%EFT^^,J	)3y|+<=)3tAw<8)3y}+=>)3tBx=92R1r   c                 4   U R                  U R                  [        R                  " S5      :H  5        U R	                  U R                  [        R                  " S5      :H  5        U R	                  U R                  [        R
                  " S5      :H  5        U R	                  U R                  [        R
                  " S5      :H  5        U R	                  U R                  S:H  5        U R	                  U R                  / :H  5        U R	                  U R                  S:H  5        U R                  U R                  [        R
                  " S5      :H  5        U R	                  U R                  [        R
                  " S5      :H  5        U R	                  U R                  [        R                  " S5      :H  5        U R	                  U R                  S:H  5        U R	                  U R                  / :H  5        U R	                  U R                  S:H  5        U R                  U R                  [        R
                  " S	5      :H  5        U R                  U R                  [        R
                  " S
5      :H  5        U R	                  U R                  [        R
                  " S5      :H  5        U R	                  U R                  [        R
                  " S5      :H  5        U R	                  U R                  [        R
                  " S5      :H  5        U R	                  U R                  [        R                  " S5      :H  5        U R	                  U R                  S:H  5        U R	                  U R                  / :H  5        U R	                  U R                  S:H  5        g )Nr  
1.2.3.4/23::1.2.3.4/24::1.2.3.4%scope/24r>   r   2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64z'0000:0000:0000:0000:0000:0000:0102:0304!2001:658:22a:cafe:200::1%scope/63)	r   r  r   r  r  r#  r  r  r  r   s    r   	testEqualIpaddrUnitTest.testEqual  s   ++!//=> 	?,,"00>? 	@,,"00@A 	B,,"001EFG 	H,,23,,23,,12++##$ABC 	D,,##$ABC 	D,,"00>? 	@,,23,,23,,1222##$GHI 	J00##$MNO 	P33##$GHI 	J33##$ABC 	D33##$ABC 	D33"00>? 	@33r9:33r9:33q89r   c                 
   U R                  U R                  [        R                  " S5      :g  5        U R	                  U R                  [        R                  " S5      :g  5        U R	                  U R                  [        R
                  " S5      :g  5        U R	                  U R                  [        R
                  " S5      :g  5        U R	                  U R                  S:g  5        U R	                  U R                  / :g  5        U R	                  U R                  S:g  5        U R	                  U R                  [        R                  " S5      :g  5        U R	                  U R                  S:g  5        U R	                  U R                  / :g  5        U R	                  U R                  S:g  5        U R                  U R                  [        R
                  " S5      :g  5        U R	                  U R                  [        R
                  " S	5      :g  5        U R	                  U R                  [        R                  " S5      :g  5        U R	                  U R                  S:g  5        U R	                  U R                  / :g  5        U R	                  U R                  S:g  5        U R	                  U R                  [        R                  " S
5      :g  5        U R	                  U R                  S:g  5        U R	                  U R                  / :g  5        U R	                  U R                  S:g  5        U R                  U R                  [        R
                  " S5      :g  5        U R	                  U R                  [        R
                  " S5      :g  5        U R	                  U R                  [        R
                  " S5      :g  5        U R	                  U R                  [        R
                  " S	5      :g  5        U R	                  U R                  [        R                  " S5      :g  5        U R	                  U R                  S:g  5        U R	                  U R                  / :g  5        U R	                  U R                  S:g  5        U R	                  U R                  [        R                  " S
5      :g  5        U R	                  U R                  S:g  5        U R	                  U R                  / :g  5        U R	                  U R                  S:g  5        g )Nr  r  r  r  r>   r   r  r  r  r  r  r  )r  r  r   r  r   r#  r  r   r  r  r  r  r   s    r   testNotEqualIpaddrUnitTest.testNotEqual  s   ,,"00>? 	@++!//=> 	?++!//?@ 	A++!//0DEF 	G++r12++r12++q01))"..y9: 	;))R/0))R/0))Q./,,##$ABC 	D++##$ABC 	D++!//=> 	?++r12++r12++q01))!--i89 	:))R/0))R/0))Q./33##$GHI 	J22##$GHI 	J22##$ABC 	D22##$ABC 	D22!//=> 	?22b8922b8922a7800!--i89 	:00B6700B6700A56r   c                 b    U R                  [        [        R                  " S5      5      S5        g )Nz1.2.3.4/255.255.255.255r  r*   r  r   r  r   s    r   testSlash32Constructor%IpaddrUnitTest.testSlash32Constructor  s*    Y44-/ 01=	?r   c                     U R                  [        [        R                  " S5      5      S5        U R                  [        [        R                  " S5      5      S5        g )Nr  r  )r*   r  r   r#  r   s    r   testSlash128Constructor&IpaddrUnitTest.testSlash128Constructor  sH    Y44Y?@"+	-Y44_EF"1	3r   c                 b    U R                  [        [        R                  " S5      5      S5        g )Nz1.2.3.4/0.0.0.0r  r  r   s    r   testSlash0Constructor$IpaddrUnitTest.testSlash0Constructor  s&    Y445FGH%	'r   c                 L   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " XX4XV/5      nU R                  [	        U5      [         R
                  " S5      [         R
                  " S5      /5        [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " XX4/5      nU R                  [	        U5      [         R
                  " S5      /5        [         R
                  " S5      n[         R
                  " S	5      n[         R
                  " S
5      n[         R
                  " S5      n[         R
                  " S5      n[         R
                  " S5      n[         R                  " XX4UU/5      nU R                  [	        U5      [         R
                  " S5      [         R
                  " S5      /5        [         R                  " X/5      nU R                  [	        U5      [         R
                  " S5      /5        [         R
                  " S5      =pU R                  [	        [         R                  " X/5      5      U/5        [         R                  " S5      =pU R                  [	        [         R                  " X/5      5      [         R                  " S5      /5        [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " XU/5      nU R                  [	        U5      U/5        [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " XU/5      nU R                  [	        U5      U/5        [         R                  " S5      [         R                  " S5      4[         R
                  " S5      [         R                  " S5      4[         R
                  " S5      [         R                  " S5      4/n
U
 H+  u  pU R                  [        [         R                  X/5        M-     [         R                  " S5      [         R                  " S5      4[         R
                  " S5      [         R                  " S5      4[         R
                  " S5      [         R                  " S5      4/n
U
 H+  u  pU R                  [        [         R                  X/5        M-     g )N1.1.1.0r  1.1.1.2z1.1.1.3z1.1.1.4z
1.1.1.0/30z
1.1.1.4/32z
1.1.0.0/24
1.1.1.0/24
1.1.2.0/24z
1.1.3.0/24z
1.1.4.0/24z
1.1.0.0/22z
1.1.0.0/23z
1.1.1.1/32z
2001::/100z
2001::/120	2001::/96z2001::%scope/100z2001::%scope/120z2001::%scope/96r  z
1.1.0.0/32z
2001::/128r  z2001::%scope/128)r   r   collapse_addressesr*   r  r  rB  r  r7  rJ   rK   )r   r  r  r  ip4ip5ip6	collapsedip_same1ip_same2addr_tupless              r   testCollapsingIpaddrUnitTest.testCollapsing  s   ##I.##I.##I.##I.##I.##I.00s*,	i&&|4&&|46	7
 ##I.##I.##I.##I. 00#C1EF	i#//=>	@ ##L1##L1##L1##L1##L1 ##L100#Cc582: ;	i#//=#//=?	@
 00#<	i#//=>	@ (33LAAi::(* +"	%
 (33I>>i::(* +#..|<=	? ##L1##L1##K000#CA	i3%0##$67##$67##$5600#CA	i3%0 %%i0%%e,.&&|4&&|46&&|4&&|46
 $HCi)E)E"j* $
 %%i0%%k24&&|4&&'9:<&&|4&&'9:<
 $HCi)E)E"j* $r   c           
      r	   [         R                  n[         R                  " S5      n[         R                  " S5      n " S S[         R                  5      nU" S5      nU" S5      nU R	                  [
        [        U" XV5      5        U R	                  [        [        U" U[         R                  " S5      5      5        U R	                  [        [        U" U[         R                  " S5      5      5        U R                  [        U" X#5      5      S   [         R                  " S5      5        [         R                  " S	5      nU R                  [        U" X#5      5      [         R                  " S
5      [         R                  " S	5      /5        [         R                  " S5      n[         R                  " [         R                  R                  5      nU R                  [         R                  " S5      /[        U" X#5      5      5        [         R                  " S5      n[         R                  " S5      nU R                  [        U" X#5      5      S   [         R                  " S5      5        [         R                  " S5      nU R                  [        U" X#5      5      [         R                  " S5      [         R                  " S5      /5        [         R                  " S5      n[         R                  " S5      nU R                  [        U" X#5      5      S   [         R                  " S5      5        [         R                  " S5      nU R                  [        U" X#5      5      [         R                  " S5      [         R                  " S5      /5        U R	                  [
        [        U" [         R                  " S5      [         R                  " S5      5      5        U R	                  [        [        U" [         R                  " S5      [         R                  " S5      5      5        U R	                  [        [        U" [         R                  " S5      [         R                  " S5      5      5        U R	                  [        [        U" [         R                  " S5      [         R                  " S5      5      5        g )Nr  z	1.1.1.255c                   $    \ rS rSr\S 5       rSrg)3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addressi  c                     g)N   r0   r   s    r   r  ;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.version  s    r   r0   N)r1   r2   r3   r4   r5   r  r8   r0   r   r   IPv7Addressr    s     r   r  r  r  r   r  z1.1.1.8z
1.1.1.0/29r0  r  z$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z	1::%scopez*1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scopez	2::%scopez1.1.0.0r   )r   summarize_address_ranger7  r#  rJ   r2  r  rK   r*   rB  r   	_ALL_ONESr  )r   	summarizer  r  r  ip_invalid1ip_invalid2s          r   testSummarizingIpaddrUnitTest.testSummarizingw  s    55	""9-"";/	)// 	 "%(!%(*d#K=	? 	)T#C)>)>u)EF	H)T#C)>)>{)KL	N 	i1215"--l;	= ""9-i12#..|<#..y9;	< ##A&##I$9$9$C$CD)//<=i12	4 ""5)""#IJi1215"--h7	9 ""5)i12#..x8#..y9;	< "";/""#OPi1215"--h7	9 "";/i12#..x8#..y9;	<
 	*d#I$8$8$C$-$8$8$CE	F 	)T#I$8$8$C$-$8$8$CE	F 	)T#I$8$8$C$-$8$8$CE	F 	)T#I$8$8$>$-$8$8$CE	Fr   c                    U R                  [        R                  " S5      [        R                  " S5      :*  5        U R                  [        R                  " S5      [        R                  " S5      :*  5        U R                  [        R                  " S5      [        R                  " S5      :*  5        U R                  [        R                  " S5      [        R                  " S5      :*  5        U R                  [        R                  " S5      [        R                  " S5      :*  5        U R                  [        R                  " S5      [        R                  " S5      :*  5        g )Nr  r  r  ::2r  rG  )r   r   r7  r   s    r   testAddressComparison$IpaddrUnitTest.testAddressComparison  s
   	,,Y7!,,Y78 	9	,,Y7!,,Y78 	9	,,U3!,,U34 	5	,,U3!,,U34 	5	,,[9!,,[9: 	;	,,[9!,,[9: 	;r   c                 l   U R                  [        R                  " S5      [        R                  " S5      :H  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :H  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S	5      [        R                  " S	5      :H  5        U R                  [        R                  " S	5      [        R                  " S
5      :  5        U R                  [        R                  " S	5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S	5      :  5        U R                  [        R                  " S
5      [        R                  " S	5      :  5        U R                  [        R                  " S5      [        R                  " S	5      :  5        U R                  [        R                  " S	5      [        R                  " S5      :  5        U R                  [        R                  " S	5      [        R                  " S5      :H  5        U R                  [        R                  " S	5      [        R                  " S5      :  5        U R                  [        R                  " S	5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S
5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S	5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S	5      :H  5        U R                  [        R                  " S5      [        R                  " S
5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        U R                  [        R                  " S5      [        R                  " S	5      :  5        U R                  [        R                  " S5      [        R                  " S	5      :  5        U R                  [        R                  " S5      [        R                  " S	5      :  5        U R                  [        R                  " S5      [        R                  " S5      :  5        g )Nz
1.1.1.1/24z
1.1.1.1/16z
1.1.1.2/24z
1.1.1.2/16z::1/64z::1/80z::2/64z::2/48z::1%scope/64z::1%scope/80z::2%scope/64z::2%scope/48)r   r   r=  r  r   s    r   testInterfaceComparison&IpaddrUnitTest.testInterfaceComparison  s    	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	>	..|<!..|<= 	> 		..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	:	..x8!..x89 	: 		..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@	..~>!..~>? 	@ 	//?!..x89 	:	..~>!..x89 	:	..~>!..x89 	:	..~>!..x89 	:	..~>!..x89 	:	..~>!..x89 	:	..~>!..x89 	: 	//9!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@	..x8!..~>? 	@r   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU R                  X:  5        U R                  X2:  5        U R                  UR	                  U5      S5        U R                  UR	                  U5      S5        U R                  UR	                  U5      S5        U R                  UR	                  U5      S5        U R                  UR	                  U5      S5        U R                  UR                  5       UR                  5       :  5        [         R                  " S5      n[         R                  " S5      n[         R                  " S	5      nU R                  X:  5        U R                  X2:  5        U R                  UR	                  U5      S5        U R                  UR                  5       UR                  5       :  5        U R                  [        U R                  R                  U R                  5        [         R                  " S
5      n[         R                  " S5      nU R                  [        UR                  U5        U R                  [        UR                  U5        U R                  [        UR                  U5        U R                  [        UR                  U5        [         R                  " S5      nU R!                  X:  5        U R!                  X:  5        [         R                  " S5      nU R                  X:  5        U R!                  X!:  5        U R!                  X:  5        U R                  X!:  5        [         R                  " S5      nU R                  X#:  5        U R!                  X2:  5        U R!                  X#:  5        U R                  X2:  5        [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nXX6/nX&X/nUR#                  5         U R                  Xx5        XaX2/nUR#                  5         U R                  Xx5        U R%                  UR                  [         R&                  " S5      5      [(        5        U R%                  UR                  [         R&                  " S5      5      [(        5        U R                  [         R                  " S5      [         R                  " S5      :*  5        U R                  [         R                  " S5      [         R                  " S5      :*  5        U R!                  [         R                  " S5      [         R                  " S5      :*  5        U R                  [         R                  " S5      [         R                  " S5      :*  5        U R                  [         R                  " S5      [         R                  " S5      :*  5        U R!                  [         R                  " S5      [         R                  " S5      :*  5        g )Nr  z
1.1.1.0/32r  r   rv   rI   z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96::/0r0  z10.1.2.128/25z10.1.3.0/24z10.1.3.0/25z10.10.10.0/31z
10.10.10.0z10.10.10.2/31z
10.10.10.2r  r  r  r  )r   r  r   r*   compare_networks_get_networks_keyr  rJ   rK   r  r  r#  r  r  r  rB  r  sortassertIsr7  rM  )	r   r  r  r  r  r  r  r  unsorteds	            r   testNetworkComparison$IpaddrUnitTest.testNetworkComparison  s   ##L1##L1##L1	"	"--c2A6 	--c2B7--c2A6--c2B7--c2A6--/#2G2G2IIJ##$45##$45##$9:	"	"--c2B7--/#2G2G2IIJ 	)++<<++	- &&v.&&{3)T[[$7)T[[$7)T[[$7)T[[$7 ""?3##""=1	"##	"""=1	"##	" ""?3""<0""?3""<0C%c'*c'*cjj!5!5l!CD$	&cjj!5!5l!CD$	& 		,,Y7!,,Y78 	9	,,Y7!,,Y78 	9--i8!,,Y78 	9 		,,U3!,,U34 	5	,,U3!,,U34 	5--e4"--e45 	6r   c                     U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R                  S5        g )Nz192.168.1.1/24z::1/120z::1%scope/120)rJ   r2  r   rB  r   s    r   testStrictNetworks!IpaddrUnitTest.testStrictNetworksr  sK    *i&:&:<LM*i&:&:IF*i&:&:OLr   c                 p   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU R                  U R                  R	                  U5      5        U R                  U R                  R	                  U5      5        U R                  UR	                  U5      5        g )Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)r   r  r   r  overlapsr  )r   rP  other2other3s       r   testOverlapsIpaddrUnitTest.testOverlapsw  s    %%l3&&|4&&}5))2259:**33F;</0r   c                    Sn[         R                  " U5      n[         R                  " SU-  5      nU R                  [	        UR
                  5      [	        UR
                  5      5        [         R                  " SU-  5      nU R                  UR
                  UR
                  5        U R                  [         R                  [         R                  S5        g )Nrk   z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	r   r  r#  r*   r  r  rK  rJ   r    )r   ipv4_stringr  v4compat_ipv6v4mapped_ipv6s        r   testEmbeddedIpv4IpaddrUnitTest.testEmbeddedIpv4  s    #&&{3!//0DE]--.DGG=!//k0IJM,,dgg6)55y7N7N0	2r   c                 t   U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S	5      [        R                  " S
5      5        U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S	5      [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S
5      5        U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S5      5        g )Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z-0000:0000:0000:0000:0000:FFFF:192.168.255.255z::ffff:c0a8:ffffz-FFFF:0000:0000:0000:0000:0000:192.168.255.255zffff::c0a8:ffffz::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scopez30000:0000:0000:0000:0000:FFFF:192.168.255.255%scopez::ffff:c0a8:ffff%scopez3FFFF:0000:0000:0000:0000:0000:192.168.255.255%scopezffff::c0a8:ffff%scope)r*   r   r7  rK  r   s    r   testIPv6AddressTooLarge&IpaddrUnitTest.testIPv6AddressTooLarge  s   --.@A#../@A	C 	--.?@#../?@	B 	--.]^#../AB	D--.]^#../@A	C 	--.FG#../FG	I--.EF#../EF	HI001IJ%001BC	EI001HI%001AB	DI001CD#../FG	II001BC#../EF	H--.cd#../GH	J--.cd#../FG	Ir   c                 4   U R                  U R                  R                  S5        U R                  U R                  R                  S5        U R                  U R                  R                  S5        U R                  U R
                  R                  S5        g )Nr  r  )r*   r  r  r  r  r  r   s    r   testIPVersionIpaddrUnitTest.testIPVersion  sr    **22A6**22A611991=11991=r   c                     U R                  U R                  R                  S5        U R                  U R                  R                  S5        U R                  U R                  R                  S5        g )Nr  r   )r*   r  max_prefixlenr  r  r   s    r   testMaxPrefixLength"IpaddrUnitTest.testMaxPrefixLength  sV    ,,::B?,,::C@33AA3Gr   c                    U R                  U R                  R                  S5        U R                  [        R                  " S5      R                  S5        U R                  U R
                  R                  S5        U R                  [        R                  " S5      R                  S5        U R                  [        R                  " S5      R                  S5        U R                  U R                  R                  S5        U R                  [        R                  " S	5      R                  S5        U R                  [        R                  " S
5      R                  S5        g )Nr  r  r  r  r  r  z::1:0:0:0:0s                  zffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)r*   r  packedr   r  r  r#  r  r   s    r   
testPackedIpaddrUnitTest.testPacked  s)   **11,	.001BCJJ,	.**11=	> 	001DELL*	+ 	00?FF@	B1188=	> 	001JKRR*	+ 	001DELL@	Br   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU R                  [         R                  [        U5      5        U R                  [         R                  [        U5      5        U R                  [         R                  [        U5      5        U R                  [         R                  [        U5      5        g )Nr  r  )	r   rB  r7  r*   r  r  r   r  r#  )r   ipv4netipv4addripv6netipv6addrs        r   
testIpTypeIpaddrUnitTest.testIpType  s    &&y1''	2&&{3''4..W>..X?..W>..X?r   c                    U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S	5      R                  5        U R                  S[        R                  " S
5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S	5      R                  5        U R                  S[        R                  " S
5      R                  5        U R                  [        R                  " S5      R                  5        U R                  [        R                  " S5      R                  5        U R                  [        R                  " S5      R                  5        U R                  [        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  [        R                  " S5      R                  5        U R                  [        R                  " S 5      R                  5        U R                  S[        R                  " S!5      R                  5        U R                  S[        R                  " S"5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        g )#NTz224.1.1.1/31Fz	240.0.0.0z192.168.1.1/17z192.169.0.0z10.255.255.255z11.0.0.0z172.31.255.255z
172.32.0.0z169.254.1.0/24z169.254.100.200/24z169.255.100.200/24z127.100.200.254/32z127.42.0.0/16z	128.0.0.0z100.64.0.0/10z192.0.2.128/25z192.0.3.0/24ri   z	224.1.1.1z	240.0.0.1z239.255.255.255r  z	192.0.0.0z	192.0.0.9z
192.0.0.10z192.0.0.255z169.254.100.200z169.255.100.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)r*   r   r=  is_multicastrB  is_reserved
is_privateis_link_localis_loopback	is_globalr7  is_unspecifiedr  r   r   s    r   testReservedIpv4IpaddrUnitTest.testReservedIpv4  s   y55   ,	.	 4 4[ A N NOy33K@LLMy55  "",*	.	 4 4] C N NOy33  "",*	.	 4 4Z @ K KL	 4 4Z @ L LMy33  "",*	.	 4 4\ B M MN"--.>?MM	O 	#00244AM	C 	#00244AM	C 	#..244?K	A 	y33 !!,	.	 4 4[ A M MN"--o>II	K	 4 4_ E O OP"--.>?JJ	L"--n=GG	I 	y33I>MMNy33K@MMN	 4 4[ A N NOy33K@LLM"--.?@LL	N 	y33MBMMN	 4 4] C N NOy33  "",*	.	 4 4Z @ K KLy33  "",*	.	 4 4\ B M MN--k:DDE	,,[9CCD	,,\:DDE--m<FFG"--.?@NN	P"--.?@NN	P 		,,[9CCD--m<FFG#../@AMM	Oy33LAMMN	 4 4[ A M MNy33I>MMNr   c                 
   U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S	5      R                  5        U R                  S[        R                  " S
5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        g ) NFr0  z	1.0.0.0/8Tz	0.0.0.0/8
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z172.16.0.0/12z192.0.0.0/29z192.0.0.9/32z192.0.0.170/31r  z192.168.0.0/16z198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32r  z::ff/128r  ::/128z::ffff:0:0/96z100::/64z2001:2::/48z2001:3::/48r  z2001:10::/28zfc00::/7z	fe80::/10)r*   r   rB  r  r   s    r   testPrivateNetworks"IpaddrUnitTest.testPrivateNetworks 	  s   	 4 4[ A L LM	 4 4[ A L LMy33K@KKLy33LALLMy33MBMMNy334DEPPQy33ODOOPy33NCNNO	 4 4^ D O OPy334DEPPQy33NCNNOy334DEPPQy33ODOOPy334EFQQRy334DEPPQy33MBMMNy334HITTU	 4 4V < G GH	 4 4Z @ K KLy33I>IIJy33H=HHIy33ODOOPy33J?JJKy33MBMMN	 4 4] C N NOy33ODOOPy33NCNNOy33J?JJKy33K@KKLr   c                 @   U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " SS-  S-
  5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S	5      R                  5        U R                  S[        R                  " S
5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " SS-  S-
  5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S	5      R                  5        U R                  S[        R                  " S
5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R
                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  [        R                  " S5      R                  5        U R                  [        R                  " S5      R                  5        U R                  [        R                  " S5      R                  5        U R                  [        R                  " S 5      R                  5        U R                  [        R                  " S!5      R                  5        U R                  [        R                  " S"5      R                  5        U R                  [        R                  " S#5      R                  5        U R                  [        R                  " S$5      R                  5        U R                  [        R                  " S%5      R                  5        U R                  [        R                  " S&5      R                  5        U R                  [        R                  " S'5      R                  5        U R                  [        R                  " S(5      R                  5        U R                  [        R                  " S)5      R                  5        U R                  [        R                  " S*5      R                  5        U R                  S[        R                  " S+5      R                  5        U R                  S[        R                  " S,5      R                  5        g )-NTzffff::r   r   rI   zff00::Fzfdff::zfecf::zfeff:ffff:ffff:ffff::z
fbf:ffff::zfc00::zfc00:ffff:ffff:ffff::zfbff:ffff::zfe00::zfea0::zfebf:ffff::zfe7f:ffff::zfec0::z	0:0::0:01z::1/127r   r  z0::0r  z::/127z2001::1/128z
200::1/128z64:ff9b:1::z2001::z	2001:1::1z	2001:1::2z2001:2::z2001:3::z2001:4::z2001:4:112::z	2001:10::z	2001:20::z	2001:30::z	2001:40::z2002::z3fff::z100::z4000::1/128)r*   r   rB  r  is_site_localr  r  r=  r  r  r   r7  r  r   r  r   s    r   testReservedIpv6IpaddrUnitTest.testReservedIpv6B	  s   y33H=JJKy33AsFQJ?LLMy33H=JJK	 4 4X > K KLy33H=KKLy33' ))6	8	 4 4!+m	-	 4 4X > L LMy33H=HHIy33' ))3	5	 4 4] C N NO	 4 4X > I IJy33H=KKLy33 ,}	.	 4 4!,}	.	 4 4X > L LMy55kBNNO	 6 6y A M MN	 4 4T : F FG	 4 4U ; G GHy33F;JJK	 4 4U ; J JK	 4 4X > M MN"--m<GG	I"--l;EE	G 	y33H=JJKy33AsFQJ?LLMy33H=JJK	 4 4X > K KLy33H=KKLy33' ))6	8	 4 4!+m	-	 4 4X > L LMy33H=HHIy33' ))3	5	 4 4] C N NO	 4 4X > I IJy33H=KKLy33 ,}	.	 4 4!,}	.	 4 4X > L LMy33K@LLMy33E:FFG	 4 4U ; G GHy33F;JJK	 4 4U ; J JK--m<FFG--h7AAB	,,[9CCD	,,[9CCD--j9CCD	,,Z8BBC--j9CCD	,,^<FFG--k:DDE	,,[9CCD	,,[9CCD--k:DDE--h7AAB--h7AAB 	y33G<HHIy33MBNNOr   c                 t   U R                  [        R                  " S5      R                  [        R                  " S5      5        U R                  [        R                  " S5      R                  S 5        U R                  [        R                  " S5      R                  [        R                  " S5      5        g )Nr   r  z
::c0a8:101r!  )r*   r   r7  r$  r   s    r   testIpv4MappedIpaddrUnitTest.testIpv4Mapped	  s    $$%9:FF$$]3	5 	--l;GGN--.?@LL"--m<	>r   c                    S GHW  nU R                  U5         [        R                  " U5      n[        R                  " SU 35      nU R	                  UR
                  UR
                  5        U R	                  UR                  UR                  5        U R	                  UR                  UR                  5        U R	                  UR                  UR                  5        U R	                  UR                  UR                  5        U R	                  UR                  UR                  5        U R	                  UR                  UR                  5        S S S 5        GMZ     g ! , (       d  f       GMm  = f)N)z178.62.3.251z169.254.169.254	127.0.0.1z	224.0.0.1rk   ri   z
100.64.0.1r  )rW   r   r   r#  r*   r   r  r  r  r  r  r  )r   addr4r  r  s       r   testIpv4MappedProperties'IpaddrUnitTest.testIpv4MappedProperties	  s   
E e$ ,,U3 ,,wug->?  @  $//B  !1!143C3CD  !2!2D4E4EF  !4!4d6I6IJ  !3!3T5G5GH  !1!143C3CD %$
 %$s   D:E  
E0	c                     U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        g )NTr   Fz::ffff:172.32.0.0)r*   r   r7  r  r   s    r   testIpv4MappedPrivateCheck)IpaddrUnitTest.testIpv4MappedPrivateCheck	  sN    i**+?@KK	My++,?@KK	Mr   c                 D   U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        U R                  S[        R                  " S5      R                  5        g )NTz::ffff:127.100.200.254/128z::ffff:127.42.0.0/112Fz::ffff:128.0.0.0z::ffff:127.100.200.254z::ffff:127.42.0.0)r*   r   rB  r  r7  r   s    r   testIpv4MappedLoopbackCheck*IpaddrUnitTest.testIpv4MappedLoopbackCheck	  s    y33, ..9k	;y33' ))4	6	 4 4"!$$/K	1 	y33( **5+	7y33# %%0[	2	 4 4"!$$/K	1r   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU R                  [	        [        UR                  U5      5      5      [         R                  " S5      [         R                  " S5      /5        U R                  [        [
        UR                  U5      5        U R                  [        [
        UR                  U5      5        U R                  [        [
        UR                  U5      5        U R                  [        UR                  U5      5      / 5        U R                  [	        [        UR                  U5      5      5      [         R                  " S	5      [         R                  " S
5      [         R                  " S5      [         R                  " S5      [         R                  " S5      [         R                  " S5      [         R                  " S5      [         R                  " S5      /5        g )N10.1.1.0/24z10.1.1.0/26z10.2.1.0/2410.1.1.0z2001:db8::0/32z10.1.1.5/32z10.1.1.64/26z10.1.1.128/25z10.1.1.0/30z10.1.1.4/32z10.1.1.6/31z10.1.1.8/29z10.1.1.16/28z10.1.1.32/27)
r   rB  r7  r*   r  r  address_excluderJ   r2  rK   r   r  addr2addr3r  addr5addr6s          r   testAddrExcludeIpaddrUnitTest.testAddrExclude	  s   $$]3$$]3$$]3$$Z0$$%56$$]3U%:%:5%A BC#..~>#..?A	B 	*dE,A,A%,HI)T5+@+@+GH)T5+@+@+GHe33E:;R@U%:%:5%A BC#..}=#..}=#..}=#..}=#..~>#..~>#..~>#..?A	Br   c                    U R                  [        [        R                  " S5      5      [        [        R                  " S5      5      5        U R                  [        [        R                  " S5      5      [        [        R                  " S5      5      5        U R                  [        [        R
                  " S5      5      [        [        R
                  " S5      5      5        U R                  [        [        R
                  " S5      5      [        [        R
                  " [        [        R
                  " S5      R                  5      5      5      5        [        R
                  " S5      n[        R
                  " S5      n0 nS X0R                  '   S X0R                  '   S X1'   S X2'   U R                  U R                  U5        U R                  X#5        g )Nr  r  r  r  )r*   hashr   r=  rB  r7  r  r  r  r  r  )r   r  r  dummys       r   testHashIpaddrUnitTest.testHash	  s`   i44]CDi44]CD	Fi22=ABi22=AB	Di22:>?i22:>?	A 	i229=>i22	,,Y7;;<> ?	@ "":.""5)#' #' 

d''/c!r   c                     U R                   nU R                  SUR                  5        U R                  nU R	                  [
        UR                  SS-  S-   5        g )Nr  r   r   rI   )r  r*   
compressedr  rJ   r2  _string_from_ip_intr"  s     r   testIPBasesIpaddrUnitTest.testIPBases
  sL    s~~6*c&=&=q#vzJr   c                     U R                   nU R                  SUR                  5        U R                  SUR                  5        U R                  SUR                  5        U R                  S[        U5      5        g )Nr  z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)r  r*   with_prefixlenwith_netmaskwith_hostmaskr  r"  s     r   testIPv6NetworkHelpers%IpaddrUnitTest.testIPv6NetworkHelpers
  sm    133E3EFD))	+D**	,13s8<r   c                     U R                   nU R                  SUR                  5        U R                  SUR                  5        U R                  SUR                  5        U R                  S[        U5      5        g )Nr  z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r  r*   r1  r2  r3  r  r"  s     r   testIPv4NetworkHelpers%IpaddrUnitTest.testIPv4NetworkHelpers
  se    s'9'9:0#2B2BC,c.?.?@s3x0r   c                    [         R                  " S5      n[         R                  " U5      n[         R                  " S5      n[         R                  " U5      n[         R                  " S5      n[         R                  " S5      nU R                  X5        U R                  X45        U R                  U[         R                  " U5      5        U R                  U[         R                  " U5      5        g )Nr  r  r  r  )r   rB  r=  r   r#  r*   r  s          r   testCopyConstructor"IpaddrUnitTest.testCopyConstructor
  s    $$]3$$U+&&'DE&&u-%%i0%%&@A&&	 5 5e <=	 5 5e <=r   c           	         0 SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$S%S&S'.En[        UR                  5       5       H4  u  p#U R                  U[        [        R
                  " U5      5      5        M6     g )(Nz1:2:3:4:5:6:7:8z1:2:3:4:5:6:7:8/128z2001:0:0:4:0:0:0:8z2001:0:0:4::8/128z2001:0:0:4:5:6:7:8z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8z2001:0:3:4:5:6:7:8/128z0:0:3:0:0:0:0:ffffz0:0:3::ffff/128z0:0:0:4:0:0:0:ffffz::4:0:0:0:ffff/128z0:0:0:0:5:0:0:ffffz::5:0:0:ffff/128z1:0:0:4:0:0:7:8z1::4:0:0:7:8/128z0:0:0:0:0:0:0:0r  z0:0:0:0:0:0:0:0/0r  z0:0:0:0:0:0:0:1r  z*2001:0658:022a:cafe:0000:0000:0000:0000/66rg  r  z::102:304/128z1:2:3:4:5:ffff:1.2.3.4z1:2:3:4:5:ffff:102:304/128z::7:6:5:4:3:2:1z0:7:6:5:4:3:2:1/128z::7:6:5:4:3:2:0z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1::z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1:0/128z::ffff:ffff/128z::ffff:255.255.255.255/128z+ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128)z0:6:5:4:3:2:1::z-0000:0000:0000:0000:0000:0000:255.255.255.255z-0000:0000:0000:0000:0000:ffff:255.255.255.255z-ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255)r  itemsr*   r  r   r#  )r   test_addressesuncompressedr,  s       r   testCompressIPv6Address&IpaddrUnitTest.testCompressIPv6Address%
  s6   4 "5 !"7 !":	
 !"3 !"6 !"4 1 x   y 9$  %&B  4!" 4#$ 4%&  5=N=Y=/2 )-^-A-A-C(D$LZY-D-D. *   )Er   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nU R                  SUR                  5        U R                  S[         R                  " S5      R                  5        U R                  SUR                  5        U R                  S	UR                  5        U R                  SUR                  5        g )
Nz2001::12001:0:5ef5:79fd:0:59d:a0e5:ba1r  z192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128r  z'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)r   r#  r#  r  r   r*   r  )r   r  r   r!  r  s        r   testExplodeShortHandIpStr(IpaddrUnitTest.testExplodeShortHandIpStrC
  s    ''	2%%&GH%%k2%%o6F	)F"00;DD	F 	B	)E	)%..9r   c                    S HP  u  pU R                  SUS9   [        R                  " U5      nU R                  UR                  U5        S S S 5        MR     S HP  u  pBU R                  SUS9   [        R
                  " U5      nU R                  UR                  U5        S S S 5        MR     g ! , (       d  f       M  = f! , (       d  f       Mv  = f)N))r  z1.0.0.127.in-addr.arpa)z	10.2.0.52z52.0.2.10.in-addr.arpaipv4_reverse_pointer)rZ   ))r  zH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa)z::FFFF:192.168.1.35zH3.2.1.0.8.a.0.c.f.f.f.f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa)z4321:0:1:2:3:4:567:89abzHb.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ip6.arpaipv6_reverse_pointer)rW   r   r   r*   reverse_pointerr#  )r   addr_v4expectedrZ   addr_v6s        r   testReversePointer!IpaddrUnitTest.testReversePointerS
  s    "
G
 47C ,,W5  !5!5x@ DC"
"
G0 47C ,,W5  !5!5x@ DC1"
	 DC8 DCs   3B..3C .
B=	 
C	c                     U R                  S[        U R                  5      5        U R                  S[        U R                  5      5        g )Nr  r  )r*   r  r  r  r   s    r   testIntRepresentation$IpaddrUnitTest.testIntRepresentationy
  s<    3t'8'8#9:?T../	1r   c                     U R                  [        R                  " S5      R                  S5        U R                  [        R                  " S5      R                  S5        g )NrI   r  r  )r*   r   rB  r  r  r   s    r   testForceVersionIpaddrUnitTest.testForceVersion~
  sD    --a088!<..q1991=r   c                    U R                  U R                  R                  S5        U R                  U R                  R                  S5        U R                  U R                  R                  S5        U R                  U R
                  R                  S5        U R                  U R
                  R                  S5        U R                  U R
                  R                  S5        g )Nr  z1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255r  z.2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::z.2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff)r*   r  r1  r2  r3  r  r   s    r   testWithStarIpaddrUnitTest.testWithStar
  s    ,,;;\J,,990	2,,::,	. 	,,;;6	8,,99I	K 	,,::I	Kr   c                     U R                  SU R                  R                  5        U R                  SU R                  R                  5        U R                  U R                  R                  [
        R                  " S5      5        U R                  U R                  R                  [
        R                  " S5      5        U R                  SU R                  R                  5        U R                  SU R                  R                  5        U R                  SU R                  R                  5        U R                  SU R                  R                  5        U R                  U R                  R                  [
        R                  " S5      5        U R                  U R                  R                  R                  [
        R                  " S5      5        U R                  U R                  R                  [
        R                  " S5      5        U R                  U R                  R                  [
        R                  " S5      5        U R                  U R                  R                  R                  [
        R                  " S5      5        U R                  U R                  R                  R                  [
        R                  " S5      5        U R                  SU R                  R                  5        U R                  SU R                  R                  5        U R                  SU R                  R                  R                  5        U R                  SU R                  R                  R                  5        g )Nr(  r  r&  z	0.0.0.255r  r'  r  )r  r  __dict__r*   r(  r   r   r  r  r  r  r#  r  rA  r   s    r   testNetworkElementCaching(IpaddrUnitTest.testNetworkElementCaching
  s   ,d.?.?.H.HIT%6%6%?%?@ 	**<<"..{;	=**33"..{;	= 	)4+<+<+E+EFj$"3"3"<"<= 	,d.?.?.H.HIT%6%6%?%?@ 	**::"../DE	G,,44DD"../DE	G 	//!!"IJ	L 	**33"../FG	I''99!!"IJ	L 	,,44=="../FG	I 	)4+<+<+E+EFj$"3"3"<"<=)4+>+>+F+F+O+OPj$"5"5"="="F"FGr   c                 >   [         R                  " S5      n[         R                  " S5      nSnU R                  X4[         R                  " U5      R                  5        SnU R                  [         R                  " U5      R                  5        SnU R                  [         R                  " U5      R                  5        [         R                  " S5      nU R                  [         R                  " S5      [         R                  " S5      4UR                  5        g )	Nz65.54.227.120z
192.0.2.45z'2001:0000:4136:e378:8000:63bf:3fff:fdd2z#2000::4136:e378:8000:63bf:3fff:fdd2z'2001:0001:4136:e378:8000:63bf:3fff:fdd2rC  z94.245.121.253z95.26.244.94)r   r   r*   r7  teredor  r#  )r   serverclientteredo_addrbad_addrs        r   
testTeredoIpaddrUnitTest.testTeredo
  s    &&7&&|4?&)"--k:AA	C8--h7>>?<--h7>>?  ++,MN)//0@A#//?A$++	-r   c                     [         R                  " S5      n[         R                  " S5      nU R                  [         R                  " S5      UR                  5        U R                  UR                  5        g )Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z172.29.45.100)r   r7  r*   r   	sixtofourr  )r   sixtofouraddrra  s      r   testsixtofourIpaddrUnitTest.testsixtofour
  s\    !,,-@A''(;<..?&00	2++,r   c                     [         R                  " S5      n[         R                  " S5      nU R                  UR                  5       UR                  5       5        g )Nr  z2.3.4.5)r   r  rK  __hash__)r   ipv4_address1ipv4_address2s      r   testV4HashIsNotConstant&IpaddrUnitTest.testV4HashIsNotConstant
  sD    !//	:!//	:M224m6L6L6NOr   c                     [         R                  " S5      n[         R                  " S5      nU R                  UR                  5       UR                  5       5        g )Nr  z2001:658:22a:cafe:200:0:0:2)r   r#  rK  rj  )r   ipv6_address1ipv6_address2s      r   testV6HashIsNotConstant&IpaddrUnitTest.testV6HashIsNotConstant
  sF    !//0MN!//0MNM224m6L6L6NOr   c                    U R                  [        R                  " S5      R                  5       [        R                  " S5      R                  5       5        U R                  [        R                  " S5      R                  5       [        R                  " S5      R                  5       5        U R                  [        R                  " S5      R                  5       [        R                  " S5      R                  5       5        g )Nz192.168.1.255/32z192.168.1.0/24z172.24.255.0/24z172.24.0.0/16z192.168.1.87/32z192.168.1.86/31)rK  r   r  rj  r   s    r   testNetworkV4HashCollisions*IpaddrUnitTest.testNetworkV4HashCollisions
  s    !!"45>>@!!"23<<>	
 	!!"34==?!!/2;;=	
 	!!"34==?!!"34==?	
r   c                 \   U R                  [        R                  " S5      R                  5       [        R                  " S5      R                  5       5        U R                  [        R                  " S5      R                  5       [        R                  " S5      R                  5       5        g )Nz	fe80::/64zfe80::ffff:ffff:ffff:0/112r  z'ffff:ffff:ffff:ffff:ffff:ffff:aff:0/112)rK  r   r  rj  r  r   s    r   testNetworkV6HashCollisions*IpaddrUnitTest.testNetworkV6HashCollisions
  s~    !!+.779!!">?HHJ	
 	!!,/88:!!9hj		
r   )
r  r  r  r  r  r  r  r  r  r  N)Tr1   r2   r3   r4   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r)  r,  r3  r8  rD  rS  rY  r\  ra  rd  rj  ro  rt  rw  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r)  r.  r4  r7  r:  r@  rD  rM  rP  rS  rV  rZ  rb  rg  rm  rr  ru  rx  r8   r0   r   r   r  r  :  s   H"EDEN@CF@5O2"00 5	A"AV,BK
0"
0K*4GlK.
T---,(@K@/"6	U	2%:N57n?3'`*DGFR;K@ZU6nM
12I<>H
B,@KOZ MD[Pz>E0M1 B0"*K=1> <: $AL1
>K (HT-$-PP


r   r  __main__)r  r  unittestrC   r6   rL   rU   r   r  test.supportr   r   TestCaser   r:   r`   r   r   r(  r  r  r  r  r"  r%  r/  rF  r  r1   mainr0   r   r   <module>r     s2   %   	      *3?8$$ 3?l' '2. .b/" /"bu?'9 u?pE4'9 E4PV&, V&r&<)< &36': 36lf1, f1R&<)< &,0': ,0^AL A&rAh'' rAjA
X&& A
H6 zMMO r   