
    z%i                       	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	  G d de j                        Z G d d      Z G d de      Z G d	 d
e      Z G d dee      Z G d dee      Z G d de      Z G d dee      Z G d dee      Z G d de      Z G d dee      Z G d dee      Z G d de      Z G d de j                        Z G d d e j                        Zed!k(  r e j6                          yy)"    N)LARGESTSMALLESTc                   R    e Zd Zed        Zej                  d        Zd Zd Z	d Z
y)BaseTestCasec                     t         N)NotImplementedErrorselfs    G/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_ipaddress.pyfactoryzBaseTestCase.factory$   s    !!    c              '      K   	 |r||z  }| j                  ||      }|5 }| d d d        j                  j                  &| j                  |j                  j                         y y # 1 sw Y   FxY wwr   )assertRaisesRegex	exception__context__
assertTrue__suppress_context__)r   exc_typedetailsargscmexcs         r   assertCleanErrorzBaseTestCase.assertCleanError(   sv     	
 nG##Hg6 	3I	 ==$$0OOCMM>>? 1	 	s   A5A)AA5)A2.A5c                 H    	  | j                   t        j                  |g| S r   )r   	ipaddressAddressValueErrorr   r   r   s      r   assertAddressErrorzBaseTestCase.assertAddressError8   -    .$t$$Y%@%@%,5/35 	5r   c                 H    	  | j                   t        j                  |g| S r   )r   r   NetmaskValueErrorr   s      r   assertNetmaskErrorzBaseTestCase.assertNetmaskError=   r    r   c                 f    	 | j                  | j                  |      | j                  |             y r   )assertEqualr   r   lhsrhss      r   assertInstancesEqualz!BaseTestCase.assertInstancesEqualB   s'    Fc*DLL,=>r   N)__name__
__module____qualname__propertyr   
contextlibcontextmanagerr   r   r#   r)    r   r   r   r      sA    & " " @ @5
5
?r   r   c                   $    e Zd Zd Zd Zd Zd Zy)CommonTestMixinc                 r    | j                  d      5  | j                  d       d d d        y # 1 sw Y   y xY w)NAddress cannot be empty r   r   r
   s    r   test_empty_addressz"CommonTestMixin.test_empty_addressI   s2    $$%>? 	LL	 	 	s   -6c                     | j                  t        j                  t        d                  5  | j	                  d       d d d        y # 1 sw Y   y xY w)Nz1.0g      ?)r   reescapereprr   r
   s    r   test_floats_rejectedz$CommonTestMixin.test_floats_rejectedM   s>    $$RYYtE{%;< 	LL	 	 	s   A		Ac                    | j                  t        t        j                  | j	                  d             | j                  t        t
        | j	                  d             | j                  t        t        | j	                  d             y )N   )assertRaises	TypeErroroperatorindexr   hexbytesr
   s    r   test_not_an_index_issue15559z,CommonTestMixin.test_not_an_index_issue15559Q   sV     	)X^^T\\!_E)S$,,q/:)UDLLO<r   c                 ,   t        t        j                  dz         D ]i  }| j                  |      5  | j	                  |      }t        j
                  t        j                  ||            }| j                  ||       d d d        k y # 1 sw Y   vxY w)Nr>   )proto)rangepickleHIGHEST_PROTOCOLsubTestr   loadsdumpsr%   )r   addrrG   xys        r   pickle_testzCommonTestMixin.pickle_testX   s    622Q67 	'EE* 'LL&LLa!78  A&' '	'' 's   AB

B	N)r*   r+   r,   r7   r<   rE   rQ   r0   r   r   r2   r2   G   s    ='r   r2   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)CommonTestMixin_v4c                     d}g d}|D ]H  }| j                  |      5  | j                  |      5  | j                  |       d d d        d d d        J y # 1 sw Y   xY w# 1 sw Y   axY w)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)rK   r   r   )r   msg	addressesrU   s       r   test_leading_zerosz%CommonTestMixin_v4.test_leading_zerosb   sv    9	
	 ! 	*Gg. *,,S1 *LL)** *	** ** *s"   A!AA!AA!!A*	c                 L    | j                  dd       | j                  dd       y )Nr   0.0.0.0    P 192.168.0.1r)   r
   s    r   test_intzCommonTestMixin_v4.test_intt   s"    !!!Y/!!*m<r   c                     | j                  t        j                  d      d       | j                  t        j                  d      d       y )N00000000rZ   c0a80001r\   )r)   rD   fromhexr
   s    r   test_packedzCommonTestMixin_v4.test_packedx   s4    !!%--
";YG!!%--
";]Kr   c                     d}| j                  t        j                  |            5  | j                  d       d d d        y # 1 sw Y   y xY w)Nz,-1 (< 0) is not permitted as an IPv4 addressr   r9   r:   r   r   rV   s     r   test_negative_ints_rejectedz.CommonTestMixin_v4.test_negative_ints_rejected|   >    <$$RYYs^4 	LL	 	 	   AAc                     d}| j                  t        j                  |dz              5  | j                  d       d d d        y # 1 sw Y   y xY w)Nz1%d (>= 2**32) is not permitted as an IPv4 addressl        rf   rg   s     r   test_large_ints_rejectedz+CommonTestMixin_v4.test_large_ints_rejected   sC    A$$RYYsU{%;< 	 LL	  	  	 s   AAc                 0      fd} |d        |d       y )Nc                     d| z  }d}j                  t        j                  ||| fz              5  j                  |       d d d        y # 1 sw Y   y xY w)N    z4%r (len %d != 4) is not permitted as an IPv4 addressrf   lengthrN   rV   r   s      r   assertBadLengthzBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength   sR    6>DHC((3$3G)HI #T"# # #s   AA      r0   r   rr   s   ` r   test_bad_packed_lengthz)CommonTestMixin_v4.test_bad_packed_length   s    	# 	r   N)	r*   r+   r,   rX   r^   rc   rh   rl   rv   r0   r   r   rS   rS   `   s!    *$=L
 
r   rS   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
CommonTestMixin_v6c                 L    | j                  dd       | j                  dd       y )Nz
0000::0000::z000::c0a8:0001::c0a8:1r]   r
   s    r   rX   z%CommonTestMixin_v6.test_leading_zeros   s#    !!,5!!"2J?r   c                 L    | j                  dd       | j                  dd       y )Nr   rz   r[   r{   r]   r
   s    r   r^   zCommonTestMixin_v6.test_int   s"    !!!T*!!*j9r   c                     dt         j                  d      z   }| j                  |d       dt         j                  d      z   }| j                  |d       t         j                  d      dz   }| j                  |d       y )Ns               r`   rz   ra   r{   zc0a8:1::)rD   rb   r)   r   rN   s     r   rc   zCommonTestMixin_v6.test_packed   sk    %--
33!!$-%--
33!!$
3}}Z(83!!$
3r   c                     d}| j                  t        j                  |            5  | j                  d       d d d        y # 1 sw Y   y xY w)Nz,-1 (< 0) is not permitted as an IPv6 addressre   rf   rg   s     r   rh   z.CommonTestMixin_v6.test_negative_ints_rejected   ri   rj   c                     d}| j                  t        j                  |ddz  z              5  | j                  ddz         d d d        y # 1 sw Y   y xY w)Nz2%d (>= 2**128) is not permitted as an IPv6 address      rf   rg   s     r   rl   z+CommonTestMixin_v6.test_large_ints_rejected   sK    B$$RYYsQV|%<= 	!LLC 	! 	! 	!s   AAc                 0      fd} |d        |d       y )Nc                     d| z  }d}j                  t        j                  ||| fz              5  j                  |       j                  |       d d d        y # 1 sw Y   y xY w)Nro   z5%r (len %d != 16) is not permitted as an IPv6 addressrf   rp   s      r   rr   zBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength   s^    6>DIC((3$3G)HI #T"T"# # #s   #AA'      r0   ru   s   ` r   rv   z)CommonTestMixin_v6.test_bad_packed_length   s    	# 	r   c                 x    d}| j                  d|      5  | j                  |       d d d        y # 1 sw Y   y xY w)Nz::1%Invalid IPv6 address: "%r"r6   r   rU   s     r   test_blank_scope_idz&CommonTestMixin_v6.test_blank_scope_id   s9    $$%A7K 	"LL!	" 	" 	"   09c                 x    d}| j                  d|      5  | j                  |       d d d        y # 1 sw Y   y xY w)Nz
::1%scope%r   r6   r   s     r   "test_invalid_scope_id_with_percentz5CommonTestMixin_v6.test_invalid_scope_id_with_percent   s9    $$%A7K 	"LL!	" 	" 	"r   N)r*   r+   r,   rX   r^   rc   rh   rl   rv   r   r   r0   r   r   rx   rx      s+    @:4
!
	"
"r   rx   c                   Z    e Zd Zej                  Zd Zd Zd Zd Z	d Z
d Zd Zd Zd	 Zy
)AddressTestCase_v4c                     t        j                  d      }g d}|D ]!  \  }}| j                  |t        ||             # y )N1.2.3.42))b 00000001000000100000001100101010)nr   )rO   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   )r5   r   )r   IPv4Addressr%   format)r   v4v4_pairsfmttxts        r   test_formatzAddressTestCase_v4.test_format   sD    "":.
( # 	3JS#S&S/2	3r   c                     d}| j                  d|      5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nz127.0.0.1/24Unexpected '/' in %rr   r   r   r~   s     r   test_network_passed_as_addressz1AddressTestCase_v4.test_network_passed_as_address   s;    $$%;TB 	(!!$'	( 	( 	(s   4=c                      fd} |d        |d        |d        |d        |d        |d        |d        |d	        |d
        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d       y )Nc                 ~    j                  d|       5  t        j                  |        d d d        y # 1 sw Y   y xY w)NzExpected 4 octets in %rr   rN   r   s    r   assertBadSplitzAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplit   s7    (()BDI ,%%d+, , ,   3<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_splitz)AddressTestCase_v4.test_bad_address_split   s    	, 	y!'(z"wt~&~&'(~&'(}%y!uu'({#vsw{#v)*()r   c                 0      fd} |d        |d       y )Nc                 ~    j                  d|       5  t        j                  |        d d d        y # 1 sw Y   y xY w)NzEmpty octet not permitted in %rr   r   s    r   assertBadOctetz;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctet  s:    (()J)-/ ,%%d+, , ,r   z	42..42.42z...r0   r   r   s   ` r   test_empty_octetz#AddressTestCase_v4.test_empty_octet   s    	,
 	{#ur   c                       fd} |dd        |dd        |dd        |dd	        |d
d        |dd        |dd        |dd        |dd       y )Nc                     d|d| }j                  t        j                  |            5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz!Only decimal digits permitted in  in r   r9   r:   r   r   rN   octetrV   r   s      r   r   zBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctet
  sF    AFMC((38 ,%%d+, , ,s   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_charactersz*AddressTestCase_v4.test_invalid_characters	  sf    	,
 	,f5+U3}d+}d+~u-|T*{E*{E*y#&r   c                 4      fd} |dd        |dd       y )Nc                     d}j                  t        j                  ||| fz              5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz*At most 3 characters permitted in %r in %rr   r   s      r   r   z<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctet  sK    >C((3%3F)GH ,%%d+, , ,   AAz0000.000.000.0000000z12345.67899.-54321.-9876512345r0   r   s   ` r   test_octet_lengthz$AddressTestCase_v4.test_octet_length  s     	,
 	)622G<r   c                 4      fd} |dd        |dd       y )Nc                     d|| fz  }j                  t        j                  |            5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz$Octet %d (> 255) not permitted in %rr   r   s      r   r   z;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet#  sJ    8E4=HC((38 ,%%d+, , ,r   z	257.0.0.0i  z192.168.0.999i  r0   r   s   ` r   test_octet_limitz#AddressTestCase_v4.test_octet_limit"  s    	,
 	{C(,r   c                 &    | j                  d       y N	192.0.2.1rQ   r
   s    r   test_picklezAddressTestCase_v4.test_pickle+  s    %r   c                 L    t        j                  | j                  d             y r   weakrefrefr   r
   s    r   test_weakrefzAddressTestCase_v4.test_weakref.  s    DLL-.r   N)r*   r+   r,   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   r   r      s:    ##G32(
*:' =-&/r   r   c                   x    e Zd Zej                  Zd Zd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zy)AddressTestCase_v6c                     t        j                  d      }g d}|D ]!  \  }}| j                  |t        ||             # y )Nz
::1.2.3.42))r   ڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r    0000000000000000000000000102032a)rO   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   r   )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   r   )r   )0X0000_0000_0000_0000_0000_0000_0102_032A)r   	::102:32a)r5   r   )r   IPv6Addressr%   r   )r   v6v6_pairsr   r   s        r   r   zAddressTestCase_v6.test_format5  sE    ""<0!
F # 	3JS#S&S/2	3r   c                 0      fd} |d        |d       y )Nc                     d}j                  ||       5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nr   )r   r   r   rN   rV   r   s     r   r   zIAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplit_  s;    (C((d3 ,%%d+, , ,s   5>z::1/24z::1%scope_id/24r0   r   s   ` r   r   z1AddressTestCase_v6.test_network_passed_as_address^  s    	, 	x ()r   c                 p      fd} |d        |d        |d        |d        |d        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)NzAt least 3 parts expected in %r%r   r   splitr   r   r  s     r   r   zUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplitg  sH    3C((djjoa.@A ,%%d+, , ,   AA:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper0   r   s   ` r   *test_bad_address_split_v6_not_enough_partsz=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsf  s;    	,
 	st{#y!z"()r   c                       fd} |d        |d        |d        |d        |d        |d        |d        |d	        |d
        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz At most 8 colons permitted in %rr  r   r  r  s     r   r   zTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplitt  H    4C((djjoa.@A ,%%d+, , ,r
  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_colonsz<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonss  sd    	,
 	+,-.*+*+5612340101;<r   c                       fd} |d        |d        |d        |d        |d        |d        |d        |d	        |d
        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz+Exactly 8 parts expected without '::' in %rr  r   r  r  s     r   r   zSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplit  sH    ?C((djjoa.@A ,%%d+, , ,r
  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_partsz;AddressTestCase_v6.test_bad_address_split_v6_too_many_parts  sc    	,
 	-.*+'23./3401,-8945r   c                 0      fd} |d        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz.Expected at most 7 other parts with '::' in %rr  r   r  r  s     r   r   zeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplit  sH    BC((djjoa.@A ,%%d+, , ,r
  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_colonzMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon  s    	,
 	)*/0r   c                 P     fd} |d        |d        |d        |d        |d        |d        |d        |d	        |d
        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d       y )Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz At most one '::' permitted in %rr  r   r  r  s     r   r   zZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplit  r  r
  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_colonzBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon  s    	,
 	|$~&~&{#{#}%}%~&u~&)*+,+,()()*+*++,{#+,r   c                       fd} |d        |d        |d        |d        |d        |d        |d        |d	       y )
Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz0Leading ':' only permitted as part of '::' in %rr  r   r  r  s     r   r   zRAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplit  sH    DC((djjoa.@A ,%%d+, , ,r
  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_colonz:AddressTestCase_v6.test_bad_address_split_v6_leading_colon  sP    	,
 	~&'(''(+,-.,--.r   c                       fd} |d        |d        |d        |d        |d        |d        |d        |d	       y )
Nc                     d}j                  || j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz1Trailing ':' only permitted as part of '::' in %rr  r   r  r  s     r   r   zSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplit  sH    EC((djjoa.@A ,%%d+, , ,r
  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_colonz;AddressTestCase_v6.test_bad_address_split_v6_trailing_colon  sP    	,
 	~&'(|$'(+,-.)*-.r   c                       fd} |dd        |dd        |dd        |dd	        |d
d        |dd        |dd        |dd        |dd	        |dd       y )Nc                     j                  d|| j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz%s in %rr  r   r  )rN   v4_errorr   s     r   assertBadAddressPartzDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPart  sE    ((Xtzz#q?QR ,%%d+, , ,s   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   r#  s   ` r   test_bad_v4_part_inz&AddressTestCase_v6.test_bad_v4_part_in  s    	, 	],JK_=	?Y;	=]?	A..	/ 	02PQ2=	?_;	=0?	A4.	/r   c                       fd} |dd        |dd        |dd        |dd	        |d
d        |dd        |dd        |dd        |dd        |dd	        |dd        |dd       y )Nc                     d|d| j                  d      d   }j                  t        j                  |            5  t	        j
                  |        d d d        y # 1 sw Y   y xY w)NzOnly hex digits permitted in r   r  r   )r	  r   r9   r:   r   r   rN   partrV   r   s      r   assertBadPartzAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPart  sT    =A4::c?STCUVC((38 ,%%d+, , ,s    AA(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   z*AddressTestCase_v6.test_invalid_characters  s    	,
 	lF+j$'j$'j$'k9-mU+(&1&-&-&-'3)51r   c                       fd} |dd        |dd        |dd        |dd	        |d
d        |dd        |dd        |dd	       y )Nc                     d}j                  ||| j                  d      d         5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nz*At most 4 characters permitted in %r in %rr  r   r  r'  s      r   r)  z:AddressTestCase_v6.test_part_length.<locals>.assertBadPart  sJ    >C((dDJJsOA4FG ,%%d+, , ,s   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   r0  s   ` r   test_part_lengthz#AddressTestCase_v6.test_part_length  s^    	,
 	i)mW-mW-&1ow/)73)73,h7r   c                 &    | j                  d       y )N
2001:db8::r   r
   s    r   r   zAddressTestCase_v6.test_pickle  s    &r   c                     t        j                  | j                  d             t        j                  | j                  d             y )Nr9  2001:db8::%scoper   r
   s    r   r   zAddressTestCase_v6.test_weakref"  s-    DLL./DLL!345r   N)r*   r+   r,   r   r   r   r   r   r  r  r  r  r  r  r  r$  r   r7  r   r   r0   r   r   r   r   2  sT    ##G'3R**=(6(1-8/ / /62(8 '6r   r   c                   8    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	y)	NetmaskTestMixin_v4c                     dD ]x  }| j                  |      }| j                  t        |      d       | j                  t        |j                        d       | j                  t        |j                        d       z y )N)r,     
1.2.3.4/32255.255.255.255rZ   r   r%   strnetmaskhostmask)r   rU   nets      r   test_no_maskz NetmaskTestMixin_v4.test_no_mask*  sf    C 	;G,,w'CSX|4S-/@AS.	:		;r   c                 |    d}| j                  d|z        5  | j                  |       d d d        y # 1 sw Y   y xY w)Nz1.2.3.4/32/24Only one '/' permitted in %rr6   r~   s     r   test_split_netmaskz&NetmaskTestMixin_v4.test_split_netmask3  s<    $$%Cd%JK 	LL	 	 	s   2;c                       fd} |dd        |dd        |dd        |dd        |dd        |d	d
        |dt        j                  d             y )Nc                 t    j                  |      5  j                  |        d d d        y # 1 sw Y   y xY wr   r6   rN   r   r   s     r   assertBadAddresszANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress9  2    ((1 #T"# # #   .7/r4   /8r   zExpected 4 octets
google.com10/8	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r9   r:   r   rO  s   ` r   test_address_errorsz'NetmaskTestMixin_v4.test_address_errors8  s_    	# 	7889"56':;!45&;<bii&>?r   c           	      &   | j                  t        | j                  d            d       | j                  t        | j                  d            d       | j                  t        | j                  d            d       | j                  t        | j                  d            d       t        dd      D ]  }d|z  }| j                  |      }| j                  t        |      |       | j                  t        | j                  d	|j                  z              |       | j                  t        | j                  d
|z              |       |dv rdd|z
  z  }| j                  t        | j                  d	|j
                  z              |        y )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   rb  )r%   rD  r   rH   rE  rF  )r   inet_strrG  s       r   test_valid_netmaskz&NetmaskTestMixin_v4.test_valid_netmaskE  sY   T\\*;<=~NT\\*=>?PT\\*HIJ'	)T\\*CDE'	)q" 	IA"Q&G,,w'CSXw/DLL!;<=wH Sma.?!@A7K G|&"q&1DLL!<=>I	Ir   c                      fd} |dd        |dd        |dd        |dd        |dd        |dd        |dd	        |dd
        |dd        |dd        |dd        |dd        |dd        |dd       y )Nc                     d|z  }j                  t        j                  |            5  j                  | d|       d d d        y # 1 sw Y   y xY wN%r is not a valid netmaskrR  r#   r9   r:   r   rN   rE  rV   r   s      r   assertBadNetmaskzANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmask^  I    -7C((38 8g678 8 8   AAr,  r5   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puddingrz   r0   r   rl  s   ` r   test_netmask_errorsz'NetmaskTestMixin_v4.test_netmask_errors]  s    	8
 	B'D)D)E*E*D)$56I.M2M2O4M2I.D)r   c                 4      fd} |dd        |dd       y )Nc                     d|z  }j                  t        j                  |            5  j                  | |f       d d d        y # 1 sw Y   y xY wNri  rj  rk  s      r   rl  zJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmasks  H    -7C((38 .dG_-. . .   AArr  re   ra  r0   rt  s   ` r   test_netmask_in_tuple_errorsz0NetmaskTestMixin_v4.test_netmask_in_tuple_errorsr  s    	. 	B'B'r   c                 j    | j                  d       | j                  d       | j                  d       y )Nz192.0.2.0/27z192.0.2.0/31r[  r   r
   s    r   r   zNetmaskTestMixin_v4.test_picklez  s,    ((%r   N
r*   r+   r,   rH  rK  rX  re  ru  r{  r   r0   r   r   r=  r=  '  s*    E;
@I0**(&r   r=  c                   $    e Zd Zej                  Zy)InterfaceTestCase_v4N)r*   r+   r,   r   IPv4Interfacer   r0   r   r   r  r        %%Gr   r  c                   6    e Zd Zej                  Zd Zd Zd Zy)NetworkTestCase_v4c                    | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   y N10.0.0.0/30z10.0.1.0/24z10.0.0.0/24assertFalser   	subnet_ofr   r
   s    r   test_subnet_ofz!NetworkTestCase_v4.test_subnet_of  s    LL'11]+-	. 	LL'11]+-	. 	LL'11]+-	. 	LL'11]+-	.r   c                    | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   y r  r  r   supernet_ofr   r
   s    r   test_supernet_ofz#NetworkTestCase_v4.test_supernet_of  s    LL'33]+-	. 	LL'33]+-	. 	LL'33]+-	. 	LL'33]+-	.r   c                    | j                  t              5  t        j                  d      j	                  t        j
                  d             d d d        | j                  t              5  t        j
                  d      j	                  t        j                  d             d d d        | j                  t              5  t        j                  d      j                  t        j
                  d             d d d        | j                  t              5  t        j
                  d      j                  t        j                  d             d d d        y # 1 sw Y   
xY w# 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   y xY w)Nr  ::1/128)r?   r@   r   IPv4Networkr  IPv6Networkr  r
   s    r   test_subnet_of_mixed_typesz-NetworkTestCase_v4.test_subnet_of_mixed_types  s5   y) 	2!!-0<<%%i02	2 y) 	6!!),88%%m46	6 y) 	2!!-0::%%i02	2 y) 	6!!),66%%m46	6 	6	2 	2	6 	6	2 	2	6 	6s/   8E+8E# 8E/8E;E #E,/E8;FN)	r*   r+   r,   r   r  r   r  r  r  r0   r   r   r  r    s    ##G.$.$6r   r  c                   8    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	y)	NetmaskTestMixin_v6c                    dD ]x  }| j                  |      }| j                  t        |      d       | j                  t        |j                        d       | j                  t        |j                        d       z | j                  d      }| j                  t        |      d       | j                  t        |j                        d       | j                  t        |j                        d       y )N)::1r>   s                  r  z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffrz   	::1%scope::1%scope/128rC  )r   rU   rG  
scoped_nets       r   rH  z NetmaskTestMixin_v6.test_no_mask  s    7 	6G,,w'CSXy1S-/XYS.5		6 \\+.
Z/:Z//02[\Z00148r   c                     d}| j                  d|z        5  | j                  |       d d d        d}| j                  d|z        5  | j                  |       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)Nzcafe:cafe::/128/190rJ  zcafe:cafe::%scope/128/190r6   )r   rN   scoped_addrs      r   rK  z&NetmaskTestMixin_v6.test_split_netmask  s}    $$$%Cd%JK 	LL	 2$$%Ck%QR 	&LL%	& 	&		 		& 	&s   A"A."A+.A7c                       fd} |dd        |dd        |dd        |dd        |dd        |d	d
        |dd        |dd        |dd        |dd        |dd        |dd
       y )Nc                 t    j                  |      5  j                  |        d d d        y # 1 sw Y   y xY wr   r6   rN  s     r   rO  zANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddress  rP  rQ  rR  r4   rS  rT  zAt least 3 partsr,  rU  r-  zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez1.2.3.4%scopez
10%scope/8r/  r0   rW  s   ` r   rX  z'NetmaskTestMixin_v6.test_address_errors  s    	# 	7889'9:$67!34(9:$=>%>?+-?@*<='9:,.?@r   c           	         | j                  t        | j                  d            d       | j                  t        | j                  d            d       | j                  t        | j                  d            d       t        dd      D ]^  }d|z  }| j                  t        | j                  |            |       | j                  t        | j                  d|z              |       ` | j                  t        | j                  d            d       t        dd      D ]^  }d|z  }| j                  t        | j                  |            |       | j                  t        | j                  d|z              |       ` y )	N)r9  rb  2001:db8::/32)r9  32r      z::/%dz::/0%dz2001:db8::%scope/32)r%   rD  r   rH   )r   rc  rd  s      r   re  z&NetmaskTestMixin_v6.test_valid_netmask  sH    	T\\*<=>(	*T\\*>?@(	*T\\/:;_Mq# 	GAkGSg!67AShl!;<gF	G 	T\\*?@ACXYq# 	GAkGSg!67AShl!;<gF	Gr   c                       fd} |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd	        |dd
        |dd        |dd        |dd       y )Nc                     d|z  }j                  t        j                  |            5  j                  | d|       d d d        y # 1 sw Y   y xY wrh  rj  rk  s      r   rl  zANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmask  rm  rn  r  r5   1::r+  r   ro  rp  129r,  rs  rz   r  r0   rt  s   ` r   ru  z'NetmaskTestMixin_v6.test_netmask_errors  s    	8
 	#&&%%&&&	*	*t$i0r   c                 F      fd} |dd        |dd        |dd       y )Nc                     d|z  }j                  t        j                  |            5  j                  | |f       d d d        y # 1 sw Y   y xY wrx  rj  rk  s      r   rl  zJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmask  ry  rz  r  re   r  r  r0   rt  s   ` r   r{  z0NetmaskTestMixin_v6.test_netmask_in_tuple_errors  s(    	. 	#$c*r   c                     | j                  d       | j                  d       | j                  d       | j                  d       y )Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoper   r
   s    r   r   zNetmaskTestMixin_v6.test_pickle  s>    -.-.)*/0r   Nr}  r0   r   r   r  r    s*    E9&A&G.1(+1r   r  c                   $    e Zd Zej                  Zy)InterfaceTestCase_v6N)r*   r+   r,   r   IPv6Interfacer   r0   r   r   r  r  #  r  r   r  c                   0    e Zd Zej                  Zd Zd Zy)NetworkTestCase_v6c                    | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   y )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  z!NetworkTestCase_v6.test_subnet_of*  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                    | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   | j                  | j                  d      j                  | j                  d                   y )Nr  r  r  r  r  r
   s    r   r  z#NetworkTestCase_v6.test_supernet_ofC  s    LL)55_-/	0 	LL)55_-/	0 	LL)55_-/	0 	LL)55_-/	0r   N)r*   r+   r,   r   r  r   r  r  r0   r   r   r  r  '  s    ##G620r   r  c                   $    e Zd Zd Zd Zd Zd Zy)FactoryFunctionErrorsc                 x    	 d}d}| j                  t        |||      5   ||       d d d        y # 1 sw Y   y xY w)Ncamelotz+%r does not appear to be an IPv4 or IPv6 %s)r   
ValueError)r   r   kindrN   rV   s        r   assertFactoryErrorz(FactoryFunctionErrors.assertFactoryErrorX  s?    A;"":sD$? 	DM	 	 	s   	09c                 D    | j                  t        j                  d       y )NrU   )r  r   
ip_addressr
   s    r   test_ip_addressz%FactoryFunctionErrors.test_ip_address_      	 4 4i@r   c                 D    | j                  t        j                  d       y )N	interface)r  r   ip_interfacer
   s    r   test_ip_interfacez'FactoryFunctionErrors.test_ip_interfaceb  s    	 6 6Dr   c                 D    | j                  t        j                  d       y )Nnetwork)r  r   
ip_networkr
   s    r   test_ip_networkz%FactoryFunctionErrors.test_ip_networke  r  r   N)r*   r+   r,   r  r  r  r  r0   r   r   r  r  V  s    AEAr   r  c                   &   e Zd Z ej                  d      Z ej                  d      Z ej                  d      Z	 ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Zee	gZeegz   ZeegZeegz   ZeegZeegz   Zeez   Zeez   Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z  ej                  d      Z! ej                  d      Z" ej                  d      Z#d Z$d Z%d Z&d Z'd	 Z(d
 Z)d Z*d Z+d Z,d Z-d Z.y)ComparisonTestsr>   r  r   	::2%scopec                    t               }| j                  D ]r  }| j                  ||       | j                  ||k(         | j	                  |j                  |      t               | j	                  |j                  |      t               t y r   )objectobjects_with_scopedassertNotEqualr  r%   __eq__NotImplemented__ne__r   otherobjs      r   test_foreign_type_equalityz*ComparisonTests.test_foreign_type_equality  st    ++ 	@CU+SE\*SZZ.?SZZ.?		@r   c                 v    | j                   D ]*  }| j                   D ]  }||u r| j                  ||        , y r   )objectsr  r&   s      r   test_mixed_type_equalityz(ComparisonTests.test_mixed_type_equality  sD     << 	.C|| .#:##C-.	.r   c                 x    t        | j                  | j                        D ]  \  }}| j                  ||        y r   )zip
v6_objectsv6_scoped_objectsr  r&   s      r   test_scoped_ipv6_equalityz)ComparisonTests.test_scoped_ipv6_equality  s6    DOOT-C-CD 	*HCS)	*r   c                 l    | j                   D ]%  }| j                  D ]  }| j                  ||        ' y r   )
v4_objectsr  r  r&   s      r   test_v4_with_v6_scoped_equalityz/ComparisonTests.test_v4_with_v6_scoped_equality  s:    ?? 	.C-- .##C-.	.r   c                     | j                   D ]8  }| j                  ||       | j                  ||       | j                  ||       : y r   )r  r%   assertLessEqualassertGreaterEqualr   r  s     r   test_same_type_equalityz'ComparisonTests.test_same_type_equality  sG    ++ 	.CS#&  c*##C-	.r   c           
      
   | j                   | j                  f| j                  | j                  f| j                  | j
                  f| j                  | j                  f| j                  | j                  f| j                  | j                  f| j                  | j                  f| j                  | j                  f| j                   | j"                  ff	D ]  \  }}| j%                  ||       | j'                  ||       | j)                  ||       | j+                  ||       | j-                  ||       | j/                  ||kD         | j/                  ||k         | j/                  ||k\         | j/                  ||k          y r   )v4addrv4addr2v4netv4net2v4intfv4intf2v6addrv6addr2v6netv6net2v6intfv6intf2v6addr_scopedv6addr2_scopedv6net_scopedv6net2_scopedv6intf_scopedv6intf2_scopedr  
assertLessr  assertGreaterr  r  r&   s      r   test_same_type_orderingz'ComparisonTests.test_same_type_ordering  sK   [[$,,'ZZ%[[$,,'[[$,,'ZZ%[[$,,'!4!45 2 23!4!45

 	)HC S)OOC%  c*sC(##C-S3Y'S3Y'SCZ(SCZ('	)r   c                    | j                   D ]  }| j                  || j                           | j                  | j                  z   D ]  }| j                  || j
                           | j                  | j                  z   D ]  }| j                  || j                           | j                  | j
                  | j                  gz   D ]  }| j                  || j
                           | j                  | j
                  | j                  gz   D ]  }| j                  || j                           | j                  | j                  z   | j                  gz   D ]  }| j                  || j                           y r   )v4_addressesassertInr  v6_addressesv6_scoped_addressesr  r  r  assertNotInr  r  r  s     r   test_containmentz ComparisonTests.test_containment  sF   $$ 	+CMM#tzz*	+$$t'?'?? 	+CMM#tzz*	+$$t'?'?? 	2CMM#t001	2 ??djj$2C2C%DD 	.CS$**-	.??djj$2C2C%DD 	5CS$"3"34	5??T%;%;;tzzlJ 	.CS$**-	.r   c                 r   | j                   D ]  | j                   D ]  t        t                    st        t                    r.| j                  t        fd       | j                  t        fd       | j                  t        fd       | j                  t        fd         y )Nc                       k  S r   r0   r'   r(   s   r   <lambda>z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>      S3Y r   c                       kD  S r   r0   r  s   r   r  z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>  r  r   c                       k  S r   r0   r  s   r   r  z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>      SCZ r   c                       k\  S r   r0   r  s   r   r  z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>  r
  r   )r  
isinstancetyper?   r@   r&   s    @@r   test_mixed_type_orderingz(ComparisonTests.test_mixed_type_ordering  s    ++ 	AC// Ac49-Cc1K!!)->?!!)->?!!)-?@!!)-?@A	Ar   c                 <   t               }| j                  D ]O  }| j                  t              5  ||k   d d d        | j                  t              5  ||kD   d d d        | j                  t              5  ||k   d d d        | j                  t              5  ||k\   d d d        | j	                  |t
        k         | j                  |t
        kD         | j	                  |t
        k         | j                  |t
        k\         | j                  |t        k         | j	                  |t        kD         | j                  |t        k         | j	                  |t        k\         R y # 1 sw Y   7xY w# 1 sw Y   !xY w# 1 sw Y   xY w# 1 sw Y   xY wr   )r  r  r?   r@   r   r   r  r   r  s      r   test_foreign_type_orderingz*ComparisonTests.test_foreign_type_ordering  sN   ++ 	-C""9- e""9- e""9- u""9- uOOC'M*S7]+OOC7N+SG^,S8^,OOC(N+SH_-OOC8O,!	-    s/   E+E86FF+E5	8F	F	F	c                    | j                   | j                  | j                  g}| j                  | j                  | j
                  g}| j                  | j                  | j                  g}| j                  |t        | j                  t        j                               | j                  |t        | j                  t        j                               | j                  |t        | j                  t        j                               | j                  ||z   t        | j                  | j                  z   t        j                               | j                  t         t        j                  t"                     y )N)key)r  r  r  r  r  r  r  r  r  r%   sortedr  r   get_mixed_type_keyr  r  r  r  )r   
v4_ordered
v6_orderedv6_scoped_ordereds       r   test_mixed_type_keyz#ComparisonTests.test_mixed_type_key  s,   kk4::t{{;
kk4::t{{;
!//1B1BDDVDVW$-$@$@B	C 	$-$@$@B	C 	* 6 6$-$@$@B	C 	&77$2H2H H$-$@$@B	C 	)E)Ef)MNr   c                     t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }| j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  |       | j                  t        |j                  |       y )Nrr  r  r  )r   r  r  r?   r@   __lt____gt__)r   r  r  r  r  r  r  s          r   test_incompatible_versionsz*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   N)/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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r0   r   r   r  r  i  s   "Y""1%F!I!!!$E$Y$$Q'F"Y""1%F!I!!!$E$Y$$Q'F)I))+6M')''4L*9**;7MF#L'JF#L'J(-8+|n<:%G!$55#i##A&G"Y""1%F%i%%a(G#i##A&G"Y""1%F%i%%a(G*Y**;7N)I))+6M,Y,,[9N@.*.
.),.A-(O&Ar   r  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHdG ZIdH ZJdI ZKdJ ZLyK)LIpaddrUnitTestc                    t        j                  d      | _        t        j                  d      | _        t        j
                  d      | _        t        j                  d      | _        t        j                  d      | _	        t        j                  d      | _        t        j                  d      | _        t        j                  d      | _        t        j                  d	      | _        y )
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/64)r   r   ipv4_addressr  ipv4_interfacer  ipv4_networkr  ipv6_addressipv6_interfacer  ipv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkr
   s    r   setUpzIpaddrUnitTest.setUp   s    %11)<'55lC%11,?%33)+'55,.%112JK#,#:#:/$1 %.%<%<2&4"#,#8#89W#X r   c                    | j                  dt        t        j                  d                   | j                  dt        t        j                  d                   | j                  dt        t        j                  d                   y )NzIPv4Interface('1.2.3.4/32')r,  zIPv6Interface('::1/128')r  zIPv6Interface('::1%scope/128')r  )r%   r;   r   r  r  r
   s    r   testReprzIpaddrUnitTest.testRepr0  sp    6i55i@A	C3i55e<=	?9i55kBC	Er   c                    t        j                  d      }t        j                  d      }| j                  t        j                  d      |       | j                  t        j                  |df      |       | j                  t        j                  d      |       | j                  t        j                  d      |       | j                  t        j                  |df      |       | j                  t        j                  d      |       | j	                  t
              5  t        j                  d	       d d d        | j	                  t
              5  t        j                  |d
f       d d d        | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  |df       d d d        | j	                  t
              5  t        j                  d       d d d        t        j                  d      }| j                  t        j                  d	d      |       | j                  t        j                  |d
fd      |       | j                  t        j                  dd      |       | j                  t        j                  dd      |       | j                  t        j                  |dfd      |       | j                  t        j                  dd      |       t        j                  d      }t        j                  d      }| j                  t        j                  d      |       | j                  t        j                  |df      |       | j                  t        j                  d      |       | j                  t        j                  d      |       | j                  t        j                  |d
f      |       | j                  t        j                  d      |       | j                  t        j                  d	      t        j                  d             | j                  t        j                  d      t        j                  d             | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   z192.0.2.1/32)r   rb  rb  )      rb  )r   rB  rB  )r2  rB  )r   r\  r\  )r2  r\  )r   r`  r`  )r2  r`  r]  Fstrictr[  r_  )       r`  rZ  )r5  r\  z192.0.2.1/24)r   z255.255.255.255.0)r   r   r  r%   r?   r  r  r  )r   iprG  s      r   testIPv4TuplezIpaddrUnitTest.testIPv4Tuple9  s   "";/##N3../@A3G..Bx8#>../?@#F.. 0C DEH	J..0A0C DEH	J.. 0C DEH	J z* 	5!!"34	5z* 	,!!2r(+	,z* 	4!!"23	4z* 	B!!"@A	Bz* 	9!!2"78	9z* 	A!!"?@	A ##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* 	F!!"DE	F z* 	E  !CD	E 	Ek	5 	5	, 	,	4 	4	B 	B	9 	9	A 	AN	F 	F	E 	Es`   "T)T6
U=U0U%U*U7
V)T36U UUU'*U47V Vc                 f   t        j                  d      }t        j                  d      }| j                  t        j                  d      |       | j                  t        j                  d      |       | j                  t        j                  |df      |       t        j                  d      }t        j                  d      }| j                  t        j                  d      |       | j                  t        j                  d      |       | j                  t        j                  |d	f      |       t        j                  d
      }t        j                  d      }| j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  |df       d d d        t        j                  d      }| j                  t        j                  dd      |       | j                  t        j                  dd      |       | j                  t        j                  |dfd      |       | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             t        j                  d      }| j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  |df       d d d        | j	                  t
              5  t        j                  d       d d d        | j	                  t
              5  t        j                  d       d d d        y # 1 sw Y   RxY w# 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   y xY w)Nr9  z2001:db8::/128)r9  128)	                n   r   r9  z2001:db8::/96)r9  96)r:  `   r;  r;  2001:db8::1)r=  r<  )	               n   r<  r<  Fr3  )r=  r;  z2001:db8::1/96)r>  r;  2001:db8::1%scope)r?  r<  )r=  r`  )r   r   r  r%   r?   r  r  r  )r   r6  rG  	ip_scopeds       r   testIPv6TuplezIpaddrUnitTest.testIPv6Tuple  s   ""<0##$45../DE	..=?	 	..E{;	""<0##O4../CD	..<>	 	..Dz:	 ))*<=	 ""=1z* 	7!!"56	7z* 	=!! #< =	= z* 	,!!2r(+	, ##O4../B6;=	 	..I$)+ 	 	..BxF	 	001FG"001AB	D00>@"001AB	D ))*=>	z* 	=!!";<	=z* 	3!!9b/2	3
 z* 	D!!"BC	D z* 	C  !AB	C 	CM	7 	7	= 	=	, 	,,	= 	=	3 	3
	D 	D	C 	CsT   6O)O)O6"PP
P=P'O&)O36P PPP$'P0c                    | j                  t        j                  d      dz   t        j                  d             | j                  t        j                  d      dz
  t        j                  d             | j                  t        j                  d      dz   t        j                  d             | j                  t        j                  d      dz
  t        j                  d             | j	                  t        j                  d	      dz   t        j                  d
             | j	                  t        j                  d
      dz
  t        j                  d	             y )Nrr     z1.1.2.0   z1.1.0.1r  i  z::ffffr  z::ffff%scope)r%   r   r   r   r  r
   s    r   testAddressIntMathz!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   | j                  t        t        j                  d       | j                  t        t        j                  dt        j                  z         | j                  t        t        j
                  d       | j                  t        t        j
                  dt        j                  z         y )Nre   r   )r?   r  r   v4_int_to_packed
IPV4LENGTHv6_int_to_packed
IPV6LENGTHr
   s    r   testInvalidIntToBytesz$IpaddrUnitTest.testInvalidIntToBytes  s~    *i&@&@"E*i&@&@y333	5*i&@&@"E*i&@&@y333	5r   c           	      P   t        j                  d      }t        j                  d      }t        j                  d      }| j                  t        t        j                  |g            ||fg       | j                  t        t        j                  ||g            ||f||fg       | j                  t        t        j                  |||g            ||fg       | j                  dt        j
                  dd             | j                  dt        | j                               y )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_bitsr;   r'  )r   ip1ip2ip3s       r   testInternalszIpaddrUnitTest.testInternals  s    ##M2##M2##M2i;;SEBC*	'i;;S#JGH*sCj1	3i;;S#sOLM*	'iBB1cJK4d4;L;L6MNr   c                    | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t        | j
                  j                        d       | j                  t	        | j
                  j                        d       | j                  t	        | j
                  j                        d       | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t	        | j                  j                        d       y )Ni 1.2.3.0l	           /YE    2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r%   intr'  network_addressrD  r*  rF  r-  r
   s    r   testGetNetworkz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                    | j                  | j                  j                  t        j                  d      j                         t        j
                  d      }t        j
                  d      }t        j
                  d      }| j                  |t        j
                  t        |j                                     | j                  |t        j
                  t        |j                                     | j                  |t        j
                  t        |j                                     d}| j                  | j                  j                  t        j                  |      j                         | j                  | j                  j                  t        j                  |      j                         | j                  t        j
                  | j                  j                        j                  d       | j                  t        j
                  | j                  j                        j                  d       | j                  t        j
                  | j                  j                        j                  d       y )Nr?  r,  r"  r$  	         /YE          )r%   r&  _ipr   r  r  rX  rY  r  r)  r  r,  r%  versionr(  r+  )r   ipv4ipv6ipv6_scopedv6_ints        r   testIpFromIntz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                    t         j                  }| j                  | j                  j                  t        j
                  d      j                         | j                   |d       |d             | j                  | j                  j                  t        j
                  d      j                         | j                   |d       |d             | j                   |d       |d             y )	Nr@  255.254.253.252       X*      ffff:2:3:4:ffff::            rz   s                   )r   r  r%   r&  r_  r  r)  r6  r   s     r   testIpFromPackedz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   | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t        | j
                  j                        d       | j                  t	        | j
                  j                        d       | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       y )Nr?  r,  r\  2001:658:22a:cafe:200::1)r%   rX  r&  r6  rD  r)  r,  r
   s    r   	testGetIpz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                 *   | j                  | j                  j                  d        | j                  t        | j                  j                        d       | j                  | j
                  j                  d        | j                  t        | j                  j                        d       | j                  | j                  j                  j                  d        | j                  t        | j                  j                  j                        d       y )Nscope)
r%   r(  scope_idrD  r+  r)  r,  r*  rY  r-  r
   s    r   testGetScopeIdzIpaddrUnitTest.testGetScopeId,  s    **33	T55>>? 	",,55	T77@@A 	"**::CC	T55EENNO 	"r   c                    | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t        | j
                  j                        d       | j                  | j
                  j                  d       | j                  t        | j                  j                        d       | j                  | j                  j                  d       y )Nl     r`  l	            @   )r%   rX  r'  rE  rD  r*  	prefixlenr-  r
   s    r   testGetNetmaskzIpaddrUnitTest.testGetNetmask:  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                 b   t        j                  d      }| j                  t        |j                  j
                        d       | j                  |j                  d      d       t        j                  d      }| j                  t        |j                  j
                        d       | j                  |j                  d      d       t        j                  d      }| j                  t        |j                  j
                        d       | j                  |j                  d      d       y )N	1.2.3.4/0r   0z::1/0z::1%scope/0)r   r  r%   rX  r  rE  _prefix_from_prefix_stringr  )r   ipv4_zero_netmaskipv6_zero_netmaskipv6_scoped_zero_netmasks       r   testZeroNetmaskzIpaddrUnitTest.testZeroNetmaskD  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                 f    t        j                  d      }| j                  |j                  d       y )Nz127.0.0.0/0.0.0.255r\  )r   r  r%   rv  r   rG  s     r   testIPv4NetzIpaddrUnitTest.testIPv4NetQ  s'    ##$9:+r   c                 8   | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       | j                  t        | j
                  j                        d       | j                  t	        | j
                  j                        d       | j                  t        | j                  j                        d       | j                  t	        | j                  j                        d       y )Ni	1.2.3.255l	   /YE    %2001:658:22a:cafe:ffff:ffff:ffff:ffff)r%   rX  r'  broadcast_addressrD  r*  r-  r
   s    r   testGetBroadcastzIpaddrUnitTest.testGetBroadcastU  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                 $   | j                  | j                  j                  j                  d       | j                  | j                  j                  j                  d       | j                  | j
                  j                  j                  d       y )Nr\  ru  )r%   r&  r  rv  r)  r,  r
   s    r   testGetPrefixlenzIpaddrUnitTest.testGetPrefixlenc  sh    ,,44>>C,,44>>C33;;EErJr   c                    | j                  | j                  j                         j                  d       | j                  t	        | j                  j                         j
                        d       | j                  t        j                  d      j                  j                         t        j                  d             | j                  | j                  j                         j                  d       | j                  t	        | j                  j                         j
                        d       | j                  t        j                  d      j                  j                         t        j                  d             | j                  | j                  j                         j                  d       | j                  t	        | j                  j                         j
                        d       y )N   z1.2.2.0	0.0.0.0/0?   rV  z::0/0)r%   r'  supernetrv  rD  rY  r   r  r  r  r*  r  r  r-  r
   s    r   testGetSupernetzIpaddrUnitTest.testGetSuperneth  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                    | j                  | j                  j                  d      j                  d       | j                  t	        | j                  j                  d      j
                        d       | j                  | j                  j                  d      j                  d       | j                  t	        | j                  j                  d      j
                        d       | j                  | j                  j                  d      j                  d       | j                  t	        | j                  j                  d      j
                        d       y )Nrs      z1.2.0.0=   z2001:658:22a:caf8::)r%   r'  r  rv  rD  rY  r*  r-  r
   s    r   testGetSupernet3zIpaddrUnitTest.testGetSupernet3y  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                    | j                  t        | j                  j                  dd       | j                  t        | j                  j                  d       | j	                  | j                  j                  d      | j                  j                  d             | j                  t        | j
                  j                  dd       | j                  t        | j
                  j                  d       | j	                  | j
                  j                  d      | j
                  j                  d	             | j                  t        | j                  j                  dd       | j                  t        | j                  j                  d       | j	                  | j                  j                  d      | j                  j                  d	             y )
Nr   r>   prefixlen_diff
new_prefix   r  r     A   >   )r?   r  r'  r  r%   r*  r-  r
   s    r   testGetSupernet4z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                    t        | j                  j                               }| j                  dt	        |             | j                  t        j                  d      |d          | j                  t        j                  d      |d          t        j                  d      }t        |j                               }| j                  dt	        |             | j                  t        j                  d      |d          | j                  t        j                  d	      |d          t        j                  d
      }t        |j                               }| j                  dt	        |             | j                  t        j                  d      |d          | j                  t        j                  d	      |d          t        j                  d      t        j                  d      g}d}d}| j                  |t        t        j                  |      j                                      | j                  |t        t        j                  |      j                                      | j                  t        t        j                  |      j                               t        t        j                  |      j                                      t        j                  d      g}d}d}| j                  |t        t        j                  |      j                                      | j                  |t        t        j                  |      j                                      | j                  t        t        j                  |      j                               t        t        j                  |      j                                      t        j                  d      t        j                  d      g}d}d}| j                  |t        t        j                  |      j                                      | j                  |t        t        j                  |      j                                      | j                  t        t        j                  |      j                               t        t        j                  |      j                                      t        j                  d      g}d}d}| j                  |t        t        j                  |      j                                      | j                  |t        t        j                  |      j                                      | j                  t        t        j                  |      j                               t        t        j                  |      j                                      y )N   z1.2.3.1r   z	1.2.3.254re   2001:658:22a:cafe::/120rC  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)r     r,  rA  )r,  rb  rV  z2001:658:22a:cafe::/127)rV     2001:658:22a:cafe::1/128)r  r   )
rM  r'  hostsr%   lenr   r   r  r   r  )r   r  r*  r-  addrsstr_argstpl_argss          r   	testHostsz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                    | j                  t        | j                  j                  d            t        | j                  j                  d                   | j	                  t
        t        | j                  j                  d             | j	                  t
        t        | j                  j                  dd             | j                  t        | j                  j                  d            t        | j                  j                  d                   | j	                  t
        t        | j                  j                  d	             | j	                  t
        t        | j                  j                  dd             | j                  t        | j                  j                  d            t        | j                  j                  d                   | j	                  t
        t        | j                  j                  d	             | j	                  t
        t        | j                  j                  dd             y )
Nrs   r     r  r  r  r]  D   r  )	r%   r  r'  subnetsr?   r  rM  r*  r-  r
   s    r   testFancySubnettingz"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                    | j                  t        | j                  j                               d   j                  d       | j                  t        t        | j                  j                               d   j                        d       | j                  t        t        | j                  j                               d   j                        d       | j                  t        | j                  j                               d   j                  d       | j                  t        | j                  j                               d   j                  d       y )Nr   r  rU  r>   z	1.2.3.128r  )	r%   rM  r'  r  rv  rD  rY  r*  r-  r
   s    r   testGetSubnetsz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                 &   t        j                  d      }|j                         D cg c]  }t        |       }}|j                  d      D cg c]  }t        |       }}| j	                  |dg       | j	                  ||       y c c}w c c}w )NrA  r   )r   r  r  rD  r%   )r   r6  rO   subnets1subnets2s        r   testGetSubnetForSingle32z'IpaddrUnitTest.testGetSubnetForSingle32  sx    ""<0$&JJL1qCF11$&JJqM2qCF22L>28, 22s   B	Bc                 H   t        j                  d      }|j                         D cg c]  }t        |       }}|j                  d      D cg c]  }t        |       }}| j	                  |dg       | j	                  ||       t        j                  d      }|j                         D cg c]  }t        |       }}|j                  d      D cg c]  }t        |       }}| j	                  |dg       | j	                  ||       y c c}w c c}w c c}w c c}w )Nr  r   r  )r   r  r  rD  r%   )r   r6  rO   r  r  r@  s         r   testGetSubnetForSingle128z(IpaddrUnitTest.testGetSubnetForSingle128  s    ""9-$&JJL1qCF11$&JJqM2qCF22I;/8,))/:	$-$5$5$78qCF88$-$5$5a$89qCF99O#458, 22
 99s   DD/DDc                 ,   | j                   j                  d      D cg c]  }t        |       }}| j                  |g d       | j                  j                  d      D cg c]  }t        |       }}| j                  |g d       y c c}w c c}w )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'  r  rD  r%   r*  )r   rO   ipsipsv6s       r   testSubnet2zIpaddrUnitTest.testSubnet2  s    #0088;<!s1v<<I	K "&!2!2!:!:1!=>AQ>>,	- =
 ?s   B#Bc                    | j                   j                  d      D cg c]  }t        |       }}| j                  |d d g d       | j                  |dd  g d       | j                  t	        |      d       t        j                  d      }|j                  d      D cg c]  }t        |       }}| j                  |d d g d       | j                  |dd  g d	       | j                  t	        |      d       y c c}w c c}w )
N   rs   )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/32rD  r  )z2001:658:22a:cafe::/128r  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'  r  rD  r%   r  r   r  )r   rO   r  r*  s       r   testGetSubnets3zIpaddrUnitTest.testGetSubnets3  s    #'#4#4#<#<Q#?@a3q6@@!6	8<	>Ws+ ,,-FG#/#7#7#:;a3q6;;!)	* 	*	+ 	Ws+# A <s   D#Dc                    | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             y )N	   r  r?   r  rM  r&  r  r  r'  r)  r*  r,  r-  r
   s    r   testSubnetFailsForLargeCidrDiffz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiff)  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   | j                  t        | j                  j                  j                  d       | j                  t        | j
                  j                  j                  d       | j                  t        | j                  j                  j                  d       y )Nr  r  )r?   r  r&  r  r  r)  r,  r
   s    r   !testSupernetFailsForLargeCidrDiffz0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff7  sz    *--55>>	D*--55>>	D*44<<EEr	Kr   c                    | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             | j                  t        t        | j                  j                  j                  d             | j                  t        t        | j                  j                  d             y )Nre   r  r
   s    r   "testSubnetFailsForNegativeCidrDiffz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiff?  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                    | j                  | j                  j                  d       | j                  t        | j                  j	                               d   j                  d       | j                  | j                  j                         j                  d       | j                  | j                  j                  d       | j                  t        | j                  j	                               d   j                  d       | j                  | j                  j                         j                  d       | j                  | j                  j                  d       | j                  t        | j                  j	                               d   j                  d       | j                  | j                  j                         j                  d       y )NrD  r   r   i               l            l             )r%   r'  num_addressesrM  r  r  r*  r-  r
   s    r   testGetNum_Addressesz#IpaddrUnitTest.testGetNum_AddressesM  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                    | j                  t        j                  d      | j                         | j	                  t        j                  d      | j                         t        j
                  d      }| j                  || j                         | j                  t        j                  d      j                  t        j                  d                   y )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   testContainszIpaddrUnitTest.testContains^  s    i--n=''	)00>**	, %%j1eT../ 	..|<II%%l35 	6r   c                    | j                  t        | j                  d         d       | j                  t        | j                  j
                  d       | j                  t        | j                  d         d       | j                  t        | j                  j
                  d       | j                  t        | j                  d         d       | j                  t        | j                  j
                  d       y )Nrt   1.2.3.5rD  z2001:658:22a:cafe::5r  )r%   rD  r'  r?   
IndexError__getitem__r*  r-  r
   s    r   testNthzIpaddrUnitTest.testNthk  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                    t        j                  d      }| j                  d|j                         t	        |      }| j                  dt        |d                | j                  dt        |d                | j                  dt        |d                | j                  dt        |d                | j                  |d   |d          y )Nz172.31.255.128/255.255.255.240   z172.31.255.128r   z172.31.255.143re   )r   r  r%   rv  rM  rD  )r   rN   	addr_lists      r   testGetitemzIpaddrUnitTest.testGetitemv  s    $$%EFT^^,J	)3y|+<=)3tAw<8)3y}+=>)3tBx=92R1r   c                    | j                  | j                  t        j                  d      k(         | j	                  | j                  t        j                  d      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  dk(         | j	                  | j                  g k(         | j	                  | j                  dk(         | j                  | j                  t        j
                  d      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  t        j                  d      k(         | j	                  | j                  dk(         | j	                  | j                  g k(         | j	                  | j                  dk(         | j                  | j                  t        j
                  d	      k(         | j	                  | j                  t        j
                  d
      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  t        j
                  d      k(         | j	                  | j                  t        j                  d      k(         | j	                  | j                  dk(         | j	                  | j                  g k(         | j	                  | j                  dk(         y )Nr   
1.2.3.4/23::1.2.3.4/24::1.2.3.4%scope/24r5   r   2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64!2001:658:22a:cafe:200::1%scope/63)r   r&  r   r  r  r  r)  r,  r
   s    r   	testEqualz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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                 	   | j                  | j                  t        j                  d      k7         | j	                  | j                  t        j                  d      k7         | j	                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j	                  | j                  t        j                  d      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d	      k7         | j	                  | j                  t        j                  d      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j	                  | j                  t        j                  d
      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d      k7         | j	                  | j                  t        j
                  d	      k7         | j	                  | j                  t        j                  d      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         | j	                  | j                  t        j                  d
      k7         | j	                  | j                  dk7         | j	                  | j                  g k7         | j	                  | j                  dk7         y )Nr   r  r  r  r5   r   r  r  r  r,  r  r  )r  r&  r   r  r   r  r%  r   r)  r(  r,  r+  r
   s    r   testNotEqualz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                 `    | j                  t        t        j                  d            d       y )Nz1.2.3.4/255.255.255.255rA  r%   rD  r   r  r
   s    r   testSlash32Constructorz%IpaddrUnitTest.testSlash32Constructor  s*    Y44-/ 01=	?r   c                     | j                  t        t        j                  d            d       | j                  t        t        j                  d            d       y )Nr  r  )r%   rD  r   r  r
   s    r   testSlash128Constructorz&IpaddrUnitTest.testSlash128Constructor  sH    Y44Y?@"+	-Y44_EF"1	3r   c                 `    | j                  t        t        j                  d            d       y )Nz1.2.3.4/0.0.0.0ry  r  r
   s    r   testSlash0Constructorz$IpaddrUnitTest.testSlash0Constructor  s&    Y445FGH%	'r   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  ||||||g      }| j                  t	        |      t        j
                  d      t        j
                  d      g       t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  ||||g      }| j                  t	        |      t        j
                  d      g       t        j
                  d      }t        j
                  d	      }t        j
                  d
      }t        j
                  d      }t        j
                  d      }t        j
                  d      }t        j                  ||||||g      }| j                  t	        |      t        j
                  d      t        j
                  d      g       t        j                  ||g      }| j                  t	        |      t        j
                  d      g       t        j
                  d      x}}	| j                  t	        t        j                  ||	g            |g       t        j                  d      x}}	| j                  t	        t        j                  ||	g            t        j                  d      g       t        j                  d      }t        j                  d      }t        j                  d      }t        j                  |||g      }| j                  t	        |      |g       t        j                  d      }t        j                  d      }t        j                  d      }t        j                  |||g      }| j                  t	        |      |g       t        j                  d      t        j                  d      ft        j
                  d      t        j                  d      ft        j
                  d      t        j                  d      fg}
|
D ],  \  }}| j                  t        t         j                  ||g       . t        j                  d      t        j                  d      ft        j
                  d      t        j                  d      ft        j
                  d      t        j                  d      fg}
|
D ],  \  }}| j                  t        t         j                  ||g       . y )N1.1.1.0rr  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%   rM  r  r  r  r  r?   r@   )r   rP  rQ  rR  ip4ip5ip6	collapsedip_same1ip_same2addr_tupless              r   testCollapsingzIpaddrUnitTest.testCollapsing  s   ##I.##I.##I.##I.##I.##I.00#sCc*,	i&&|4&&|46	7
 ##I.##I.##I.##I. 00#sC1EF	i#//=>	@ ##L1##L1##L1##L1##L1 ##L100#sCc582: ;	i#//=#//=?	@
 00#s<	i#//=>	@ (33LAA8i::x(* +"	%
 (33I>>8i::x(* +#..|<=	? ##L1##L1##K000#sCA	i3%0##$67##$67##$5600#sCA	i3%0 %%i0%%e,.&&|4&&|46&&|4&&|46
 $ 	*HCi)E)E"Cj*	*
 %%i0%%k24&&|4&&'9:<&&|4&&'9:<
 $ 	*HCi)E)E"Cj*	*r   c           
      D	   t         j                  }t        j                  d      }t        j                  d      } G d dt         j                        } |d      } |d      }| j	                  t
        t         |||             | j	                  t        t         ||t        j                  d                   | j	                  t        t         ||t        j                  d                   | j                  t         |||            d   t        j                  d             t        j                  d	      }| j                  t         |||            t        j                  d
      t        j                  d	      g       t        j                  d      }t        j                  t         j                  j                        }| j                  t        j                  d      gt         |||                   t        j                  d      }t        j                  d      }| j                  t         |||            d   t        j                  d             t        j                  d      }| j                  t         |||            t        j                  d      t        j                  d      g       t        j                  d      }t        j                  d      }| j                  t         |||            d   t        j                  d             t        j                  d      }| j                  t         |||            t        j                  d      t        j                  d      g       | j	                  t
        t         |t        j                  d      t        j                  d                   | j	                  t        t         |t        j                  d      t        j                  d                   | j	                  t        t         |t        j                  d      t        j                  d                   | j	                  t        t         |t        j                  d      t        j                  d                   y )Nr  z	1.1.1.255c                       e Zd Zed        Zy)3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addressc                      y)N   r0   r
   s    r   r`  z;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.versionV  s    r   N)r*   r+   r,   r-   r`  r0   r   r   IPv7Addressr  U  s     r   r  r  r  r   r  z1.1.1.8z
1.1.1.0/29r  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.0rz   )r   summarize_address_ranger  r   r?   r  rM  r@   r%   r  r   	_ALL_ONESr  )r   	summarizerP  rQ  r  ip_invalid1ip_invalid2s          r   testSummarizingzIpaddrUnitTest.testSummarizingM  s    55	""9-"";/	)// 	 "%(!%(*d#K=	? 	)T#C)>)>u)EF	H)T#C)>)>{)KL	N 	iS1215"--l;	= ""9-iS12#..|<#..y9;	< ##A&##I$9$9$C$CD)//<=iS12	4 ""5)""#IJiS1215"--h7	9 ""5)iS12#..x8#..y9;	< "";/""#OPiS1215"--h7	9 "";/iS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                    | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         y )Nrr  r  r  ::2r  r  )r   r   r  r
   s    r   testAddressComparisonz$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                    | j                  t        j                  d      t        j                  d      k(         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      k(         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d	      t        j                  d	      k(         | j                  t        j                  d	      t        j                  d
      k         | j                  t        j                  d	      t        j                  d      k         | j                  t        j                  d      t        j                  d	      k         | j                  t        j                  d
      t        j                  d	      kD         | j                  t        j                  d      t        j                  d	      kD         | j                  t        j                  d	      t        j                  d      kD         | j                  t        j                  d	      t        j                  d      k(         | j                  t        j                  d	      t        j                  d      k         | j                  t        j                  d	      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d
      t        j                  d      kD         | j                  t        j                  d      t        j                  d      kD         | j                  t        j                  d	      t        j                  d      kD         | j                  t        j                  d      t        j                  d	      k(         | j                  t        j                  d      t        j                  d
      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d	      k         | j                  t        j                  d      t        j                  d	      kD         | j                  t        j                  d      t        j                  d	      kD         | j                  t        j                  d      t        j                  d      kD         y )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   testInterfaceComparisonz&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                    t        j                  d      }t        j                  d      }t        j                  d      }| j                  ||k         | j                  ||kD         | j                  |j	                  |      d       | j                  |j	                  |      d       | j                  |j	                  |      d       | j                  |j	                  |      d       | j                  |j	                  |      d       | j                  |j                         |j                         k         t        j                  d      }t        j                  d      }t        j                  d	      }| j                  ||k         | j                  ||kD         | j                  |j	                  |      d       | j                  |j                         |j                         k         | j                  t        | j                  j                  | j                         t        j                  d
      }t        j                  d      }| j                  t        |j                  |       | j                  t        |j                  |       | j                  t        |j                  |       | j                  t        |j                  |       t        j                  d      }| j!                  ||k         | j!                  ||kD         t        j                  d      }| j                  ||k         | j!                  ||k         | j!                  ||kD         | j                  ||kD         t        j                  d      }| j                  ||k         | j!                  ||k         | j!                  ||kD         | j                  ||kD         t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }||||g}||||g}|j#                          | j                  ||       ||||g}|j#                          | j                  ||       | j%                  |j                  t        j&                  d            t(               | j%                  |j                  t        j&                  d            t(               | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j!                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j                  t        j                  d      t        j                  d      k         | j!                  t        j                  d      t        j                  d      k         y )Nr  z
1.1.1.0/32r  r   re   r>   z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96::/0r  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.2rr  r  r  r
  )r   r  r   r%   compare_networks_get_networks_keyr  r?   r@   r'  r*  r  r  r  r  r  r  sortassertIsr  r  )	r   rP  rQ  rR  rb  ra  r  r  unsorteds	            r   testNetworkComparisonz$IpaddrUnitTest.testNetworkComparison  s	   ##L1##L1##L1c	"c	"--c2A6 	--c2B7--c2A6--c2B7--c2A6--/#2G2G2IIJ##$45##$45##$9:c	"c	"--c2B7--/#2G2G2IIJ 	)++<<++	- &&v.&&{3)T[[$7)T[[$7)T[[$7)T[[$7 ""?3s#s#""=1c	"s#s#c	"""=1c	"s#s#c	" ""?3""<0""?3""<0sC%c3'*c3'*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                     | j                  t        t        j                  d       | j                  t        t        j                  d       | j                  t        t        j                  d       y )Nz192.168.1.1/24z::1/120z::1%scope/120)r?   r  r   r  r
   s    r   testStrictNetworksz!IpaddrUnitTest.testStrictNetworksH  sK    *i&:&:<LM*i&:&:IF*i&:&:OLr   c                 j   t        j                  d      }t        j                  d      }t        j                  d      }| j                  | j                  j	                  |             | j                  | j                  j	                  |             | j                  |j	                  |             y )Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)r   r  r   r'  overlapsr  )r   r  other2other3s       r   testOverlapszIpaddrUnitTest.testOverlapsM  s    %%l3&&|4&&}5))2259:**33F;</0r   c                    d}t        j                  |      }t        j                  d|z        }| j                  t	        |j
                        t	        |j
                               t        j                  d|z        }| j                  |j
                  |j
                         | j                  t         j                  t         j                  d       y )Nr\   z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	r   r  r  r%   rX  r6  r  r?   r   )r   ipv4_stringra  v4compat_ipv6v4mapped_ipv6s        r   testEmbeddedIpv4zIpaddrUnitTest.testEmbeddedIpv4U  s    #&&{3!//0DE]--.DGG=!//k0IJM,,dgg6)55y7N7N0	2r   c                    | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             | j                  t        j                  d      t        j                  d             y )	Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scope)r%   r   r  r  r
   s    r   testIPv6AddressTooLargez&IpaddrUnitTest.testIPv6AddressTooLarge`  sf   --.@A#../@A	C 	--.?@#../?@	B 	--.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r   c                     | j                  | j                  j                  d       | j                  | j                  j                  d       | j                  | j                  j                  d       y )Nr]  r^  )r%   r%  r`  r(  r+  r
   s    r   testIPVersionzIpaddrUnitTest.testIPVersionu  sV    **22A6**22A611991=r   c                     | j                  | j                  j                  d       | j                  | j                  j                  d       | j                  | j                  j                  d       y )Nrb  r   )r%   r&  max_prefixlenr)  r,  r
   s    r   testMaxPrefixLengthz"IpaddrUnitTest.testMaxPrefixLengthz  sV    ,,::B?,,::C@33AA3Gr   c                    | j                  | j                  j                  d       | j                  t        j                  d      j                  d       | j                  | j
                  j                  d       | j                  t        j                  d      j                  d       | j                  t        j                  d      j                  d       | j                  | j                  j                  d       | j                  t        j                  d	      j                  d       | j                  t        j                  d
      j                  d       y )Nr@  rg  rh  ri  rj  rk  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   
testPackedz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                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }| j                  t         j                  t        |             | j                  t         j                  t        |             | j                  t         j                  t        |             | j                  t         j                  t        |             y )Nr,  rV  )	r   r  r  r%   r  r  r   r  r   )r   ipv4netipv4addripv6netipv6addrs        r   
testIpTypezIpaddrUnitTest.testIpType  s    &&y1''	2&&{3''4..W>..X?..W>..X?r   c                 R   | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  t        j                  d      j                         | j                  t        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         y )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/24rZ   z	224.1.1.1z	240.0.0.1z239.255.255.255192.168.1.1z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_multicastr  is_reserved
is_privateis_link_localis_loopback	is_globalr  is_unspecifiedr   r  r
   s    r   testReservedIpv4zIpaddrUnitTest.testReservedIpv4  se   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"--.?@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                 L
   | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         y )NFr  z	1.0.0.0/8Tz	0.0.0.0/8z
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.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::/23z2001:2::/48r  z2001:10::/28zfc00::/7z	fe80::/10)r%   r   r  r6  r
   s    r   testPrivateNetworksz"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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3K@KKLy33MBMMN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                    | j                  dt        j                  d      j                         | j                  dt        j                  ddz  dz
        j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  ddz  dz
        j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d	      j                         | j                  dt        j                  d
      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j
                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         y )NTzffff::r   r   r>   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/127rz   r
  z0::0r  z::/127z2001::1/128z
200::1/128z100::z4000::1/128)r%   r   r  r4  is_site_localr6  r7  r  r8  r:  r9  r  r5  r
   s    r   testReservedIpv6zIpaddrUnitTest.testReservedIpv6		  sv   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 	y33G<HHIy33MBNNOr   c                 j   | j                  t        j                  d      j                  t        j                  d             | j                  t        j                  d      j                  d        | j                  t        j                  d      j                  t        j                  d             y )N::ffff:192.168.1.1r3  z
::c0a8:101z::ffff:c0a8:101)r%   r   r  ipv4_mappedr
   s    r   testIpv4MappedzIpaddrUnitTest.testIpv4MappedV	  s    $$%9:FF$$]3	5 	--l;GGN--.?@LL"--m<	>r   c                     | j                  dt        j                  d      j                         | j                  dt        j                  d      j                         y )NTrC  Fz::ffff:172.32.0.0)r%   r   r  r6  r
   s    r   testIpv4MappedPrivateCheckz)IpaddrUnitTest.testIpv4MappedPrivateCheck^	  sN    i**+?@KK	My++,?@KK	Mr   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }| j                  t	        t        |j                  |                  t        j                  d      t        j                  d      g       | j                  t        t
        |j                  |             | j                  t        t
        |j                  |             | j                  t        t
        |j                  |             | j                  t        |j                  |            g        | j                  t	        t        |j                  |                  t        j                  d	      t        j                  d
      t        j                  d      t        j                  d      t        j                  d      t        j                  d      t        j                  d      t        j                  d      g       y )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   r  r  r%   r  rM  address_excluder?   r  r@   r   r  addr2addr3addr4addr5addr6s          r   testAddrExcludezIpaddrUnitTest.testAddrExcluded	  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                    | j                  t        t        j                  d            t        t        j                  d                   | j                  t        t        j                  d            t        t        j                  d                   | j                  t        t        j
                  d            t        t        j
                  d                   | j                  t        t        j
                  d            t        t        j
                  t        t        j
                  d      j                                           t        j
                  d      }t        j
                  d      }i }d || j                  <   d || j                  <   d ||<   d ||<   | j                  | j                  |       | j                  ||       y )NrI  rJ  r,  r  )r%   hashr   r  r  r  rX  r_  r%  r(  r  )r   rP  rQ  dummys       r   testHashzIpaddrUnitTest.testHash|	  sj   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 #'d c
c
d''/c5!r   c                     | j                   }| j                  d|j                         | j                  }| j	                  t
        |j                  ddz  dz          y )Nr!  r   r   r>   )r'  r%   
compressedr*  r?   r  _string_from_ip_intr  s     r   testIPBaseszIpaddrUnitTest.testIPBases	  sL    s~~6*c&=&=q#vzJr   c                     | j                   }| j                  d|j                         | j                  d|j                         | j                  d|j                         | j                  dt        |             y )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_hostmaskrD  r  s     r   testIPv6NetworkHelpersz%IpaddrUnitTest.testIPv6NetworkHelpers	  sm    133E3EFD))	+D**	,13s8<r   c                     | j                   }| j                  d|j                         | j                  d|j                         | j                  d|j                         | j                  dt        |             y )Nr!  z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r'  r%   r\  r]  r^  rD  r  s     r   testIPv4NetworkHelpersz%IpaddrUnitTest.testIPv4NetworkHelpers	  se    s'9'9:0#2B2BC,c.?.?@s3x0r   c                    t        j                  d      }t        j                  |      }t        j                  d      }t        j                  |      }t        j                  d      }t        j                  d      }| j                  ||       | j                  ||       | j                  |t        j                  |             | j                  |t        j                  |             y )NrI  r  rr  rn  )r   r  r  r   r   r%   rL  s          r   testCopyConstructorz"IpaddrUnitTest.testCopyConstructor	  s    $$]3$$U+&&'DE&&u-%%i0%%&@A&&	 5 5e <=	 5 5e <=r   c           	         i ddddddddd	d
dddddddddddddddddddddd d!d"d#d$i}t        |j                               D ]3  \  }}| j                  |t        t	        j
                  |                   5 y )%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/66r  rV  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::z0:6:5:4:3:2:1:0/128)rM  itemsr%   rD  r   r  )r   test_addressesuncompressedrX  s       r   testCompressIPv6Addressz&IpaddrUnitTest.testCompressIPv6Address	  s6   4 "5 !"7 !":	
 !"3 !"6 !"4 1 x   y 9$  %&B  4!" 4#$ 4%& 4'* )-^-A-A-C(D 	 $L*ZY-D-D. *  	 r   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }| j                  d|j                         | j                  dt        j                  d      j                         | j                  d|j                         | j                  d	|j                         | j                  d|j                         y )
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%   exploded)r   r  rM  rN  rO  s        r   testExplodeShortHandIpStrz(IpaddrUnitTest.testExplodeShortHandIpStr	  s    ''	2%%&GH%%k2%%o6F	)F"00;DD	F 	B	)E	)%..9r   c                     t        j                  d      }t        j                  d      }| j                  d|j                         | j                  d|j                         y )Nz	127.0.0.1r=  z1.0.0.127.in-addr.arpazH1.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)r   r   r   r%   reverse_pointer)r   r  rM  s      r   testReversePointerz!IpaddrUnitTest.testReversePointer	  sU    %%k2%%m4153H3HI 2..	0r   c                     | j                  dt        | j                               | j                  dt        | j                               y )Nr?  r\  )r%   rX  r%  r(  r
   s    r   testIntRepresentationz$IpaddrUnitTest.testIntRepresentation	  s<    3t'8'8#9:?T../	1r   c                     | j                  t        j                  d      j                  d       | j                  t        j                  d      j                  d       y )Nr>   r]  r^  )r%   r   r  r`  r  r
   s    r   testForceVersionzIpaddrUnitTest.testForceVersion	  sD    --a088!<..q1991=r   c                    | j                  | j                  j                  d       | j                  | j                  j                  d       | j                  | j                  j                  d       | j                  | j
                  j                  d       | j                  | j
                  j                  d       | j                  | j
                  j                  d       y )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&  r\  r]  r^  r)  r
   s    r   testWithStarzIpaddrUnitTest.testWithStar	  s    ,,;;\J,,990	2,,::,	. 	,,;;6	8,,99I	K 	,,::I	Kr   c                    | j                  d| j                  j                         | j                  d| j                  j                         | j                  | j                  j                  t        j                  d             | j                  | j                  j                  t        j                  d             | j                  d| j                  j                         | j                  d| j                  j                         | j                  d| j                  j                         | j                  d| j                  j                         | j                  | j                  j                  t        j                  d             | j                  | j                  j                  j                  t        j                  d             | j                  | j                  j                  t        j                  d             | j                  | j                  j                  t        j                  d             | j                  | j                  j                  j                  t        j                  d             | j                  | j                  j                  j                  t        j                  d             | j                  d| j                  j                         | j                  d| j                  j                         | j                  d| j                  j                  j                         | j                  d| j                  j                  j                         y )Nr  rF  r  z	0.0.0.255rV  r  rW  )r  r'  __dict__r%   r  r   r   rF  r  r*  rY  r   r)  r  r
   s    r   testNetworkElementCachingz(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                 0   t        j                  d      }t        j                  d      }d}| j                  ||ft        j                  |      j                         d}| j                  t        j                  |      j                         d}| j                  t        j                  |      j                         t        j                  d      }| j                  t        j                  d      t        j                  d      f|j                         y )	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:fdd2rj  z94.245.121.253z95.26.244.94)r   r   r%   r  teredor  r   )r   serverclientteredo_addrbad_addrs        r   
testTeredozIpaddrUnitTest.testTeredo)
  s    &&7&&|4?&&)"--k:AA	C8--h7>>?<--h7>>?  ++,MN)//0@A#//?A$++	-r   c                     t        j                  d      }t        j                  d      }| j                  t        j                  d      |j                         | j                  |j                         y )Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z172.29.45.100)r   r  r%   r   	sixtofourr  )r   sixtofouraddrr~  s      r   testsixtofourzIpaddrUnitTest.testsixtofour;
  s\    !,,-@A''(;<..?&00	2++,r   c                     t        j                  d      }t        j                  d      }| j                  |j                         |j                                y )Nr,  z2.3.4.5)r   r  r  __hash__)r   ipv4_address1ipv4_address2s      r   testV4HashIsNotConstantz&IpaddrUnitTest.testV4HashIsNotConstantC
  sD    !//	:!//	:M224m6L6L6NOr   c                     t        j                  d      }t        j                  d      }| j                  |j                         |j                                y )Nr"  z2001:658:22a:cafe:200:0:0:2)r   r  r  r  )r   ipv6_address1ipv6_address2s      r   testV6HashIsNotConstantz&IpaddrUnitTest.testV6HashIsNotConstantI
  sF    !//0MN!//0MNM224m6L6L6NOr   N)Mr*   r+   r,   r.  r0  r7  rA  rE  rK  rS  rZ  re  rl  ro  rs  rw  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  r  r!  r#  r%  r(  r+  r1  r;  r>  rA  rE  rG  rR  rV  rZ  r_  ra  rc  rh  rl  ro  rq  rs  ru  rx  r  r  r  r  r0   r   r   r  r    s   Y EDEN@CF@5O2"00 5"AV,BK
0"
0K*4GlK.
T---,(@K@/"6	U	2#:J57n?3'`*DGFR;K@ZU6nM
12H*>
H
B,@GORMBKPZ>MB0"*K=1> 4: 01
>K (HT-$-PPr   r  __main__)unittestr9   r.   rA   rI   r   r   test.supportr   r   TestCaser   r2   rS   rx   r   r   r=  r  r  r  r  r  r  r  r  r*   mainr0   r   r   <module>r     s3   %  	      *3?8$$ 3?l' '2. .b/" /"bm/'9 m/`r6'9 r6jV&, V&r&<)< &36': 36lf1, f1R&<)< &,0': ,0^AL A&rAh'' rAjnPX&& nPb1 zHMMO r   