python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_ipaddress.cpython-312.pyc

ΑedZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
GddejZGddZ
Gdd	e
ZGd
de
ZGdd
eeZGddeeZGddeZGddeeZGddeeZGddeZGddeeZGddeeZGddeZGddejZGd d!ejZed"k(rej8yy)#zUnittest for ipaddress module.N)LARGESTSMALLESTcReZdZedZejdZdZdZ	dZ
y)BaseTestCasectN)NotImplementedErrorselfs G/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_ipaddress.pyfactoryzBaseTestCase.factory$s!!c'K|r||z}|j||}|5}|dddjj&|j|jjyy#1swYFxYww)z{
        Ensure exception does not display a context by default

        Wraps unittest.TestCase.assertRaisesRegex
        N)assertRaisesRegex	exception__context__
assertTrue__suppress_context__)rexc_typedetailsargscmexcs      rassertCleanErrorzBaseTestCase.assertCleanError(sqnG

#
#Hg
6
	3I	==$$0OOCMM>>?1		sA4A(AA4(A1-A4cF|jtj|g|S)z Ensure a clean AddressValueError)r	ipaddressAddressValueErrorrrrs   rassertAddressErrorzBaseTestCase.assertAddressError8*$t$$Y%@%@%,5/35	5rcF|jtj|g|S)z Ensure a clean NetmaskValueError)rrNetmaskValueErrorrs   rassertNetmaskErrorzBaseTestCase.assertNetmaskError=r rcd|j|j||j|y)z8Check constructor arguments produce equivalent instancesN)assertEqualr
rlhsrhss   rassertInstancesEqualz!BaseTestCase.assertInstancesEqualBs$c*DLL,=>rN)__name__
__module____qualname__propertyr

contextlibcontextmanagerrrr#r)rrrrsA&""
@
@5
5
?rrc$eZdZdZdZdZdZy)CommonTestMixincr|jd5|jddddy#1swYyxYw)NAddress cannot be emptyrr
r
s rtest_empty_addressz"CommonTestMixin.test_empty_addressIs2

$
$%>
?	LL			s-6c|jtjtd5|j	ddddy#1swYyxYw)Nz1.0g?)rreescapereprr
r
s rtest_floats_rejectedz$CommonTestMixin.test_floats_rejectedMs>

$
$RYYtE{%;
<	LL			sA		Ac|jttj|j	d|jtt
|j	d|jtt|j	dy)N)assertRaises	TypeErroroperatorindexr
hexbytesr
s rtest_not_an_index_issue15559z,CommonTestMixin.test_not_an_index_issue15559QsV	
)X^^T\\!_E)S$,,q/:)UDLLO<rc,ttjdzD]i}|j|5|j	|}tj
tj||}|j||dddky#1swYvxYw)Nr>)proto)rangepickleHIGHEST_PROTOCOLsubTestr
loadsdumpsr%)raddrrGxys     rpickle_testzCommonTestMixin.pickle_testXs622Q67	'EE*
'LL&LLa!78  A&
'
'	'
'
'sA
B

B	N)r*r+r,r7r<rErQr0rrr2r2Gs='rr2c0eZdZdZdZdZdZdZdZy)CommonTestMixin_v4cd}gd}|D]H}|j|5|j|5|j|ddddddJy#1swYxYw#1swYaxYw)Nz(Leading zeros are not permitted in '\d+')z000.000.000.000z192.168.000.001z016.016.016.016z001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)address)rKrr
)rmsg	addressesrUs    rtest_leading_zerosz%CommonTestMixin_v4.test_leading_zerosbsv9	
	!	*Gg.
*,,S1*LL)*
*
*	***
*
*s"A!AA!AA!!A*	cL|jdd|jddy)Nr0.0.0.0P192.168.0.1r)r
s rtest_intzCommonTestMixin_v4.test_intts"!!!Y/!!*m<rc|jtjdd|jtjddy)N00000000rZc0a80001r\)r)rDfromhexr
s rtest_packedzCommonTestMixin_v4.test_packedxs4!!%--
";YG!!%--
";]Krcd}|jtj|5|jddddy#1swYyxYw)Nz,-1 (< 0) is not permitted as an IPv4 addressrr9r:r
rrVs  rtest_negative_ints_rejectedz.CommonTestMixin_v4.test_negative_ints_rejected|><

$
$RYYs^
4	LL			AAcd}|jtj|dz5|jddddy#1swYyxYw)Nz1%d (>= 2**32) is not permitted as an IPv4 addresslrfrgs  rtest_large_ints_rejectedz+CommonTestMixin_v4.test_large_ints_rejectedsCA

$
$RYYsU{%;
<	 LL	 	 	 sAAc0fd}|d|dy)Ncd|z}d}jtj|||fz5j|dddy#1swYyxYw)Nz4%r (len %d != 4) is not permitted as an IPv4 addressrflengthrNrVrs   rassertBadLengthzBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLengthsR6>DHC((3$3G)HI
#T"
#
#
#sA

Ar0rrrs` rtest_bad_packed_lengthz)CommonTestMixin_v4.test_bad_packed_lengths	#	rN)	r*r+r,rXr^rcrhrlrvr0rrrSrS`s!*$=L
 
rrSc<eZdZdZdZdZdZdZdZdZ	dZ
y	)
CommonTestMixin_v6cL|jdd|jddy)Nz
0000::0000::z000::c0a8:0001::c0a8:1r]r
s rrXz%CommonTestMixin_v6.test_leading_zeross#!!,5!!"2J?rcL|jdd|jddy)Nrrzr[r{r]r
s rr^zCommonTestMixin_v6.test_ints"!!!T*!!*j9rcdtjdz}|j|ddtjdz}|j|dtjddz}|j|dy)Nsr`rzrar{zc0a8:1::)rDrbr)rrNs  rrczCommonTestMixin_v6.test_packedsk%--
33!!$-%--
33!!$
3}}Z(83!!$
3rcd}|jtj|5|jddddy#1swYyxYw)Nz,-1 (< 0) is not permitted as an IPv6 addressrerfrgs  rrhz.CommonTestMixin_v6.test_negative_ints_rejectedrirjcd}|jtj|ddzz5|jddzdddy#1swYyxYw)Nz2%d (>= 2**128) is not permitted as an IPv6 addressrfrgs  rrlz+CommonTestMixin_v6.test_large_ints_rejectedsKB

$
$RYYsQV|%<
=	!LLC 	!	!	!sAAc0fd}|d|dy)Ncd|z}d}jtj|||fz5j|j|dddy#1swYyxYw)Nroz5%r (len %d != 16) is not permitted as an IPv6 addressrfrps   rrrzBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLengths^6>DIC((3$3G)HI
#T"T"
#
#
#s#AA'r0rus` rrvz)CommonTestMixin_v6.test_bad_packed_lengths	#	rcxd}|jd|5|j|dddy#1swYyxYw)Nz::1%Invalid IPv6 address: "%r"r6rrUs  rtest_blank_scope_idz&CommonTestMixin_v6.test_blank_scope_ids9

$
$%A7
K	"LL!	"	"	"09cxd}|jd|5|j|dddy#1swYyxYw)Nz
::1%scope%rr6rs  r"test_invalid_scope_id_with_percentz5CommonTestMixin_v6.test_invalid_scope_id_with_percents9

$
$%A7
K	"LL!	"	"	"rN)r*r+r,rXr^rcrhrlrvrrr0rrrxrxs+@:4
!
	"
"rrxcZeZdZejZdZdZdZdZ	dZ
dZdZdZ
d	Zy
)AddressTestCase_v4ctjd}gd}|D]!\}}|j|t||#y)N1.2.3.42))b 00000001000000100000001100101010)nr)rO0102032a)X0102032A)_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)#_x0x0102_032a)#_X0X0102_032A)sr)r5r)rIPv4Addressr%format)rv4v4_pairsfmttxts     rtest_formatzAddressTestCase_v4.test_formatsD

"
":
.
(#	3JS#S&S/2	3rcd}|jd|5tj|dddy#1swYyxYw)Nz127.0.0.1/24Unexpected '/' in %rrrrr~s  rtest_network_passed_as_addressz1AddressTestCase_v4.test_network_passed_as_addresss;

$
$%;T
B	(!!$'	(	(	(s4=cfd}|d|d|d|d|d|d|d|d	|d
|d|d|d
|d|d|d|d|d|d|d|d|d|d|dy)Nc~jd|5tj|dddy#1swYyxYw)NzExpected 4 octets in %rrrNrs rassertBadSplitzAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplits7(()BDI
,%%d+
,
,
,3<z127.0.1z42.42.42.42.42z42.42.42z42.4242z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016016000z0x0a.0x0a.0x0az	0x0a.0x0a0x0a.bogusz	bogus.com10001000000000000000z192.168.0.1.comr0rrs` rtest_bad_address_splitz)AddressTestCase_v4.test_bad_address_splits	,	y!'(z"wt~&~&'(~&'(}%y!uu'({#vsw{#v)*()rc0fd}|d|dy)Nc~jd|5tj|dddy#1swYyxYw)NzEmpty octet not permitted in %rrrs rassertBadOctetz;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctets:(()J)-/
,%%d+
,
,
,rz	42..42.42z...r0rrs` rtest_empty_octetz#AddressTestCase_v4.test_empty_octets	,
	{#urcfd}|dd|dd|dd|dd	|d
d|dd
|dd|dd|ddy)Ncd|d|}jtj|5tj|dddy#1swYyxYw)Nz!Only decimal digits permitted in  in rr9r:rrrNoctetrVrs   rrzBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctet
sFAFMC((38
,%%d+
,
,
,sA

Az0x0a.0x0a.0x0a.0x0arz0xa.0x0a.0x0a.0x0a0xaz42.42.42.-0-0z42.42.42.+0+0z42.42.42.-42z-42z
+1.+2.+3.4+1z	1.2.3.4e04e0	1.2.3.4::z4::1.a.2.3ar0rs` rtest_invalid_charactersz*AddressTestCase_v4.test_invalid_characters	sf	,
	,f5+U3}d+}d+~u-|T*{E*{E*y#&rc4fd}|dd|ddy)Ncd}jtj|||fz5tj|dddy#1swYyxYw)Nz*At most 3 characters permitted in %r in %rrrs   rrz<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctetsK>C((3%3F)GH
,%%d+
,
,
,AAz0000.000.000.0000000z12345.67899.-54321.-9876512345r0rs` rtest_octet_lengthz$AddressTestCase_v4.test_octet_lengths 	,
	)622G<rc4fd}|dd|ddy)Ncd||fz}jtj|5tj|dddy#1swYyxYw)Nz$Octet %d (> 255) not permitted in %rrrs   rrz;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet#sJ8E4=HC((38
,%%d+
,
,
,rz	257.0.0.0iz
192.168.0.999ir0rs` rtest_octet_limitz#AddressTestCase_v4.test_octet_limit"s	,
	{C(,rc&|jdyN	192.0.2.1rQr
s rtest_picklezAddressTestCase_v4.test_pickle+s%rcLtj|jdyrweakrefrefr
r
s rtest_weakrefzAddressTestCase_v4.test_weakref.sDLL-.rN)r*r+r,rrr
rrrrrrrrrr0rrrrs:##G32(
*:' =-&/rrcxeZdZejZdZdZdZdZ	dZ
dZdZdZ
d	Zd
ZdZdZd
ZdZy)AddressTestCase_v6ctjd}gd}|D]!\}}|j|t||#y)Nz
::1.2.3.42))rڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r 0000000000000000000000000102032a)rOr)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)rr)r'0000_0000_0000_0000_0000_0000_0102_032A)rڂ0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r"0x0000000000000000000000000102032a)rr)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)rr)r)0X0000_0000_0000_0000_0000_0000_0102_032A)r	::102:32a)r5r)rIPv6Addressr%r)rv6v6_pairsrrs     rrzAddressTestCase_v6.test_format5sE

"
"<
0!
F#	3JS#S&S/2	3rc0fd}|d|dy)Ncd}j||5tj|dddy#1swYyxYw)Nr)rrrrNrVrs  rrzIAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplit_s;(C((d3
,%%d+
,
,
,s5>z::1/24z::1%scope_id/24r0rs` rrz1AddressTestCase_v6.test_network_passed_as_address^s	,	x ()rcpfd}|d|d|d|d|d|dy)Ncd}j||jdd5tj|dddy#1swYyxYw)NzAt least 3 parts expected in %r%rrsplitrrrs  rrzUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplitgsH3C((djjoa.@A
,%%d+
,
,
,AA:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper0rs` r*test_bad_address_split_v6_not_enough_partsz=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsfs;	,
	st{#y!z"()rcfd}|d|d|d|d|d|d|d|d	|d
|dy)Ncd}j||jdd5tj|dddy#1swYyxYw)Nz At most 8 colons permitted in %rrrrrs  rrzTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplittH4C((djjoa.@A
,%%d+
,
,
,r
z9:8:7:6:5:4:3::2:1z10:9:8:7:6:5:4:3:2:1z::8:7:6:5:4:3:2:1z8:7:6:5:4:3:2:1::z10:9:8:7:6:5:4:3:42.42.42.42z9:8:7:6:5:4:3::2:1%scopez10:9:8:7:6:5:4:3:2:1%scopez::8:7:6:5:4:3:2:1%scopez8:7:6:5:4:3:2:1::%scopez"10:9:8:7:6:5:4:3:42.42.42.42%scoper0rs` r)test_bad_address_split_v6_too_many_colonsz<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonsssd	,
	+,-.*+*+5612340101;<rcfd}|d|d|d|d|d|d|d|d	|d
|dy)Ncd}j||jdd5tj|dddy#1swYyxYw)Nz+Exactly 8 parts expected without '::' in %rrrrrs  rrzSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplitsH?C((djjoa.@A
,%%d+
,
,
,r
z3ffe:0:0:0:0:0:0:0:1z9:8:7:6:5:4:3:2:1z
7:6:5:4:3:2:1z9:8:7:6:5:4:3:42.42.42.42z7:6:5:4:3:42.42.42.42z3ffe:0:0:0:0:0:0:0:1%scopez9:8:7:6:5:4:3:2:1%scopez7:6:5:4:3:2:1%scopez9:8:7:6:5:4:3:42.42.42.42%scopez7:6:5:4:3:42.42.42.42%scoper0rs` r(test_bad_address_split_v6_too_many_partsz;AddressTestCase_v6.test_bad_address_split_v6_too_many_partssc	,
	-.*+'23./3401,-8945rc0fd}|d|dy)Ncd}j||jdd5tj|dddy#1swYyxYw)Nz.Expected at most 7 other parts with '::' in %rrrrrs  rrzeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplitsHBC((djjoa.@A
,%%d+
,
,
,r
z1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper0rs` r:test_bad_address_split_v6_too_many_parts_with_double_colonzMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colons	,
	)*/0rcPfd}|d|d|d|d|d|d|d|d	|d
|d|d|d
|d|d|d|d|d|d|d|dy)Ncd}j||jdd5tj|dddy#1swYyxYw)Nz At most one '::' permitted in %rrrrrs  rrzZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplitrr
z
3ffe::1::1z1::2::3::4:5z2001::db:::1z	3ffe::1::z	::3ffe::1z:3ffe::1::1z3ffe::1::1:z:3ffe::1::1:z:::z2001:db8:::1z3ffe::1::1%scopez1::2::3::4:5%scopez2001::db:::1%scopez3ffe::1::%scopez::3ffe::1%scopez:3ffe::1::1%scopez3ffe::1::1:%scopez:3ffe::1::1:%scopez	:::%scopez2001:db8:::1%scoper0rs` r/test_bad_address_split_v6_repeated_double_colonzBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colons	,
	|$~&~&{#{#}%}%~&u~&)*+,+,()()*+*++,{#+,rcfd}|d|d|d|d|d|d|d|d	y)
Ncd}j||jdd5tj|dddy#1swYyxYw)Nz0Leading ':' only permitted as part of '::' in %rrrrrs  rrzRAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplitsHDC((djjoa.@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::%scoper0rs` r'test_bad_address_split_v6_leading_colonz:AddressTestCase_v6.test_bad_address_split_v6_leading_colonsP	,
	~&'(''(+,-.,--.rcfd}|d|d|d|d|d|d|d|d	y)
Ncd}j||jdd5tj|dddy#1swYyxYw)Nz1Trailing ':' only permitted as part of '::' in %rrrrrs  rrzSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplitsHEC((djjoa.@A
,%%d+
,
,
,r
z2001:db8::1:z1:2:3:4:5:6:7:z
::1.2.3.4:z::7:6:5:4:3:2:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper0rs` r(test_bad_address_split_v6_trailing_colonz;AddressTestCase_v6.test_bad_address_split_v6_trailing_colonsP	,
	~&'(|$'(+,-.)*-.rcfd}|dd|dd|dd|dd	|d
d|dd|d
d|dd|dd	|ddy)Ncjd||jdd5tj|dddy#1swYyxYw)Nz%s in %rrrr)rNv4_errorrs  rassertBadAddressPartzDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPartsE((Xtzz#q?QR
,%%d+
,
,
,sAAz3ffe::1.netzExpected 4 octets in '1.net'z
3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez
::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper0)rr#s` rtest_bad_v4_part_inz&AddressTestCase_v6.test_bad_v4_part_ins	,	],JK_=	?Y;	=]?	A..	/	02PQ2=	?_;	=0?	A4.	/rcfd}|dd|dd|dd|dd	|d
d|dd
|dd|dd|dd|dd	|dd|dd
y)Ncd|d|jdd}jtj|5t	j
|dddy#1swYyxYw)NzOnly hex digits permitted in rrr)r	rr9r:rrrNpartrVrs   r
assertBadPartzAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPartsT=A4::c?STCUVC((38
,%%d+
,
,
,sAA(z
3ffe::googgoogz3ffe::-0rz3ffe::+0rz3ffe::-1-1r1.2.3.41234:axy::baxyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope1234:axy::b%scoper0rr)s` rrz*AddressTestCase_v6.test_invalid_characterss	,
	lF+j$'j$'j$'k9-mU+(&1&-&-&-'3)51rcfd}|dd|dd|dd|dd	|d
d|dd|dd|d
d	y)Ncd}j|||jdd5tj|dddy#1swYyxYw)Nz*At most 4 characters permitted in %r in %rrrrr's   rr)z:AddressTestCase_v6.test_part_length.<locals>.assertBadPartsJ>C((dDJJsOA4FG
,%%d+
,
,
,sAAz::0000000000z3ffe::1000010000z02001:db8::02001z2001:888888::1888888z
::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper0r0s` rtest_part_lengthz#AddressTestCase_v6.test_part_lengths^	,
	i)mW-mW-&1ow/)73)73,h7rc&|jdy)N
2001:db8::rr
s rrzAddressTestCase_v6.test_pickles&rctj|jdtj|jdy)Nr92001:db8::%scoperr
s rrzAddressTestCase_v6.test_weakref"s-DLL./DLL!345rN)r*r+r,rrr
rrrrrrrrrr$rr7rrr0rrrr2sT##G'3R**=(6(1-8/ / /62(8 '6rrc:eZdZdZdZdZdZdZdZdZ	dZ
y	)
NetmaskTestMixin_v4;Input validation on interfaces and networks is very similarcdD]x}|j|}|jt|d|jt|jd|jt|jdzy)N)r,
1.2.3.4/32255.255.255.255rZr
r%strnetmaskhostmask)rrUnets   rtest_no_maskz NetmaskTestMixin_v4.test_no_mask*sfC	;G,,w'CSX|4S-/@AS.	:		;rc|d}|jd|z5|j|dddy#1swYyxYw)Nz
1.2.3.4/32/24Only one '/' permitted in %rr6r~s  rtest_split_netmaskz&NetmaskTestMixin_v4.test_split_netmask3s<

$
$%Cd%J
K	LL			s2;cfd}|dd|dd|dd|dd|dd|d	d
|dtjdy)
Nctj|5j|dddy#1swYyxYwrr6rNrrs  rassertBadAddresszANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress92((1
#T"
#
#
#.7/r4/8rzExpected 4 octets
google.com10/8	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r9r:rrPs` rtest_address_errorsz'NetmaskTestMixin_v4.test_address_errors8s_	#	7889"56':;!45&;<bii
&>?rc	&|jt|jdd|jt|jdd|jt|jdd|jt|jddtddD]}d|z}|j|}|jt|||jt|jd	|jz||jt|jd
|z||dvrdd|z
z}|jt|jd	|j
z|y)
N	192.0.2.0192.0.2.0/24)r\24r\
255.255.255.0z192.0.2.0/255.255.255.0r!z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%d) rrc)r%rEr
rHrFrG)rinet_strrHs    rtest_valid_netmaskz&NetmaskTestMixin_v4.test_valid_netmaskEsYT\\*;<=~NT\\*=>?PT\\*HIJ'	)T\\*CDE'	)q"	IA"Q&G,,w'CSXw/DLL!;<=w
H
Sma.?!@A7KG|&"q&1DLL!<=>
I	Ircfd}|dd|dd|dd|dd|dd|dd|dd	|dd
|dd|dd
|dd|dd|dd|ddy)Ncd|z}jtj|5j|d|dddy#1swYyxYwN%r is not a valid netmaskrSr#r9r:r
rNrFrVrs   rassertBadNetmaskzANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmask^I-7C((38
8g67
8
8
8AAr,r5r+r 1 0x133z254.254.255.256r1.1.1.1z254.xyz.2.3z240.255.0.0z
255.254.128.0z0.1.127.255puddingrzr0rrms` rtest_netmask_errorsz'NetmaskTestMixin_v4.test_netmask_errors]s	8
	B'D)D)E*E*D)$56I.M2M2O4M2I.D)rc4fd}|dd|ddy)Ncd|z}jtj|5j||fdddy#1swYyxYwNrjrkrls   rrmzJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmasksH-7C((38
.dG_-
.
.
.AArsrerbr0rus` rtest_netmask_in_tuple_errorsz0NetmaskTestMixin_v4.test_netmask_in_tuple_errorsrs	.	B'B'rcj|jd|jd|jdy)Nz192.0.2.0/27z192.0.2.0/31r\rr
s rrzNetmaskTestMixin_v4.test_picklezs,((%rNr*r+r,__doc__rIrLrYrfrvr|rr0rrr=r='s*E;
@I0**(&rr=c$eZdZejZy)InterfaceTestCase_v4N)r*r+r,r
IPv4Interfacer
r0rrrr
%%Grrc6eZdZejZdZdZdZy)NetworkTestCase_v4c|j|jdj|jd|j|jdj|jd|j|jdj|jd|j|jdj|jdyN10.0.0.0/30z10.0.1.0/24z10.0.0.0/24assertFalser
	subnet_ofrr
s rtest_subnet_ofz!NetworkTestCase_v4.test_subnet_ofsLL'11]+
-	.	
LL'11]+
-	.	
LL'11]+
-	.	
LL'11]+
-	.rc|j|jdj|jd|j|jdj|jd|j|jdj|jd|j|jdj|jdyrrr
supernet_ofrr
s rtest_supernet_ofz#NetworkTestCase_v4.test_supernet_ofsLL'33]+
-	.	
LL'33]+
-	.	
LL'33]+
-	.	
LL'33]+
-	.rc|jt5tjdj	tj
dddd|jt5tj
dj	tjdddd|jt5tjdj
tj
dddd|jt5tj
dj
tjddddy#1swY
xYw#1swYxYw#1swYxxYw#1swYyxYw)Nr::1/128)r?r@rIPv4NetworkrIPv6Networkrr
s rtest_subnet_of_mixed_typesz-NetworkTestCase_v4.test_subnet_of_mixed_typess5


y
)	2!!-0<<%%i0
2	2

y
)	6!!),88%%m4
6	6

y
)	2!!-0::%%i0
2	2

y
)	6!!),66%%m4
6	6	6	2	2	6	6	2	2	6	6s/8E+8E#8E/8E;E #E,/E8;FN)	r*r+r,rrr
rrrr0rrrrs##G.$.$6rrc:eZdZdZdZdZdZdZdZdZ	dZ
y	)
NetmaskTestMixin_v6r>cdD]x}|j|}|jt|d|jt|jd|jt|jdz|jd}|jt|d|jt|jd|jt|jdy)N)::1r>srz'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffrz	::1%scope
::1%scope/128rD)rrUrH
scoped_nets    rrIz NetmaskTestMixin_v6.test_no_masks7	6G,,w'CSXy1S-/XYS.5		6\\+.
Z/:Z//02[\Z00148rcd}|jd|z5|j|dddd}|jd|z5|j|dddy#1swY:xYw#1swYyxYw)Nzcafe:cafe::/128/190rKzcafe:cafe::%scope/128/190r6)rrNscoped_addrs   rrLz&NetmaskTestMixin_v6.test_split_netmasks}$

$
$%Cd%J
K	LL	2

$
$%Ck%Q
R	&LL%	&	&				&	&sA"A."A+.A7cfd}|dd|dd|dd|dd|dd|d	d
|dd|dd|d
d|dd|dd|dd
y)Nctj|5j|dddy#1swYyxYwrr6rOs  rrPzANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddressrQrRrSr4rTrUzAt least 3 partsr,rVr-zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez
1.2.3.4%scopez
10%scope/8r/r0rXs` rrYz'NetmaskTestMixin_v6.test_address_errorss	#	7889'9:$67!34(9:$=>%>?+-?@*<='9:,.?@rc	|jt|jdd|jt|jdd|jt|jddtddD]^}d|z}|jt|j|||jt|jd|z|`|jt|jddtddD]^}d|z}|jt|j|||jt|jd|z|`y)	N)r9rc
2001:db8::/32)r932rz::/%dz::/0%dz2001:db8::%scope/32)r%rEr
rH)rrdres   rrfz&NetmaskTestMixin_v6.test_valid_netmasksH	
T\\*<=>(	*T\\*>?@(	*T\\/:;_Mq#	GAkGSg!67AShl!;<gF	G	
T\\*?@ACXYq#	GAkGSg!67AShl!;<gF	Grcfd}|dd|dd|dd|dd|dd|dd|dd|dd	|dd
|dd|dd|d
dy)Ncd|z}jtj|5j|d|dddy#1swYyxYwrirkrls   rrmzANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskrnrorr51::r+rrprq129r,rtrzrr0rus` rrvz'NetmaskTestMixin_v6.test_netmask_errorss	8
	#&&%%&&&	*	*t$i0rcFfd}|dd|dd|ddy)Ncd|z}jtj|5j||fdddy#1swYyxYwryrkrls   rrmzJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskrzr{rrerrr0rus` rr|z0NetmaskTestMixin_v6.test_netmask_in_tuple_errorss(	.	#$c*rc|jd|jd|jd|jdy)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoperr
s rrzNetmaskTestMixin_v6.test_pickles>-.-.)*/0rNr~r0rrrrs*E9&A&G.1(+1rrc$eZdZejZy)InterfaceTestCase_v6N)r*r+r,r
IPv6Interfacer
r0rrrr#rrrc0eZdZejZdZdZy)NetworkTestCase_v6c|j|jdj|jd|j|jdj|jd|j|jdj|jd|j|jdj|jd|j|jdj|jd|j|jdj|jdy)N
2000:999::/56
2000:aaa::/48
2000:aaa::/56
2000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56rr
s rrz!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23
5	6	
LL./9923
5	6rc|j|jdj|jd|j|jdj|jd|j|jdj|jd|j|jdj|jdy)Nrrrrrr
s rrz#NetworkTestCase_v6.test_supernet_ofCsLL)55_-
/	0	
LL)55_-
/	0	
LL)55_-
/	0	
LL)55_-
/	0rN)r*r+r,rrr
rrr0rrrr's##G620rrc$eZdZdZdZdZdZy)FactoryFunctionErrorscvd}d}|jt|||5||dddy#1swYyxYw)z3Ensure a clean ValueError with the expected messagecamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r
ValueError)rr
kindrNrVs     rassertFactoryErrorz(FactoryFunctionErrors.assertFactoryErrorXs<;

"
":sD$
?	DM			s	/8cD|jtjdy)NrU)rr
ip_addressr
s rtest_ip_addressz%FactoryFunctionErrors.test_ip_address_	 4 4i@rcD|jtjdy)N	interface)rrip_interfacer
s rtest_ip_interfacez'FactoryFunctionErrors.test_ip_interfacebs	 6 6DrcD|jtjdy)Nnetwork)rr
ip_networkr
s rtest_ip_networkz%FactoryFunctionErrors.test_ip_networkerrN)r*r+r,rrrrr0rrrrVsAEArrc&eZdZejdZejdZejdZ	ejdZejdZ
ejdZejdZejdZejdZee	gZeegzZeegZee
gzZeegZeegzZeezZeezZejdZejdZejdZejdZejdZejdZ ejdZ!ejdZ"ejdZ#dZ$dZ%dZ&dZ'd	Z(d
Z)dZ*dZ+d
Z,dZ-dZ.y)ComparisonTestsr>rr	::2%scopect}|jD]r}|j|||j||k(|j	|j|t|j	|j|ttyr)objectobjects_with_scopedassertNotEqualrr%__eq__NotImplemented__ne__rotherobjs   rtest_foreign_type_equalityz*ComparisonTests.test_foreign_type_equalityst++	@CU+SE\*SZZ.?SZZ.?		@rcv|jD]*}|jD]}||ur|j||,yr)objectsrr&s   rtest_mixed_type_equalityz(ComparisonTests.test_mixed_type_equalitysD<<	.C||
.#:##C-
.	.rcxt|j|jD]\}}|j||yr)zip
v6_objectsv6_scoped_objectsrr&s   rtest_scoped_ipv6_equalityz)ComparisonTests.test_scoped_ipv6_equalitys6DOOT-C-CD	*HCS)	*rcl|jD]%}|jD]}|j||'yr)
v4_objectsrrr&s   rtest_v4_with_v6_scoped_equalityz/ComparisonTests.test_v4_with_v6_scoped_equalitys:??	.C--
.##C-
.	.rc|jD]8}|j|||j|||j||:yr)rr%assertLessEqualassertGreaterEqualrrs  rtest_same_type_equalityz'ComparisonTests.test_same_type_equalitysG++	.CS#&  c*##C-	.rc

|j|jf|j|jf|j|j
f|j|jf|j|jf|j|jf|j|jf|j|jf|j |j"ff	D]\}}|j%|||j'|||j)|||j+|||j-|||j/||kD|j/||k|j/||k\|j/||kyr)v4addrv4addr2v4netv4net2v4intfv4intf2v6addrv6addr2v6netv6net2v6intfv6intf2
v6addr_scopedv6addr2_scopedv6net_scoped
v6net2_scoped
v6intf_scopedv6intf2_scopedr
assertLessr
assertGreaterrrr&s   rtest_same_type_orderingz'ComparisonTests.test_same_type_orderingsK
[[$,,'
ZZ%
[[$,,'
[[$,,'
ZZ%
[[$,,'


!4!45


 2 23


!4!45

	)HC
S)OOC%  c*sC(##C-S3Y'S3Y'SCZ(SCZ('	)rc|jD]}|j||j |j|jzD]}|j||j
 |j|jzD]}|j||j |j|j
|jgzD]}|j||j
 |j|j
|jgzD]}|j||j |j|jz|jgzD]}|j||j yr)v4_addressesassertInrv6_addressesv6_scoped_addressesrrrassertNotInrrrs  rtest_containmentz ComparisonTests.test_containmentsF$$	+CMM#tzz*	+$$t'?'??	+CMM#tzz*	+$$t'?'??	2CMM#t001	2??djj$2C2C%DD	.CS$**-	.??djj$2C2C%DD	5CS$"3"34	5??T%;%;;tzzlJ	.CS$**-	.rcr|jD]|jD]ttsttr.|jtfd|jtfd|jtfd|jtfdy)NckSrr0r'r(sr<lambda>z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>S3YrckDSrr0rsrrz:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>r	rckSrr0rsrrz:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>SCZrck\Srr0rsrrz:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>rr)r
isinstancetyper?r@r&s @@rtest_mixed_type_orderingz(ComparisonTests.test_mixed_type_orderings++	AC//
Ac49-Cc1K!!)->?!!)->?!!)-?@!!)-?@

A	Arc<t}|jD]O}|jt5||kddd|jt5||kDddd|jt5||kddd|jt5||k\ddd|j	|t
k|j
|t
kD|j	|t
k|j
|t
k\|j
|tk|j	|tkD|j
|tk|j	|tk\Ry#1swY7xYw#1swY!xYw#1swYxYw#1swYxYwr)rrr?r@rrrrrs   rtest_foreign_type_orderingz*ComparisonTests.test_foreign_type_orderingsN++	-C""9-
e
""9-
e
""9-
u
""9-
u
OOC'M*S7]+OOC7N+SG^,S8^,OOC(N+SH_-OOC8O,!	-







s/E+E86FF+E5	8F	F	F	c|j|j|jg}|j|j|j
g}|j|j|jg}|j|t|jtj|j|t|jtj|j|t|jtj|j||zt|j|jztj|jt tjt"y)N)key)rrrrrrrrrr%sortedrrget_mixed_type_keyrrrr)r
v4_ordered
v6_orderedv6_scoped_ordereds    rtest_mixed_type_keyz#ComparisonTests.test_mixed_type_keys,kk4::t{{;
kk4::t{{;
!//1B1BDDVDVW$-$@$@B	C	
$-$@$@B	C	
* 6 6$-$@$@B	C	
&77$2H2H H$-$@$@B	C	
)E)Ef)MNrc tjd}tjd}tjd}tjd}tjd}tjd}|jt|j
||jt|j||jt|j
||jt|j||jt|j
||jt|j||jt|j
||jt|j||jt|j
||jt|j||jt|j
||jt|j||jt|j
||jt|j||jt|j
||jt|j|y)Nrsrr)rrrr?r@__lt____gt__)rrrrrrrs       rtest_incompatible_versionsz*ComparisonTests.test_incompatible_versionss%%i0$$Y/%%e,$$U+!,,[9
 ++K8)V]]F;)V]]F;)U\\59)U\\59)V]]F;)V]]F;)U\\59)U\\59)V]]MB)V]]MB)U\\<@)U\\<@)]%9%96B)]%9%96B)\%8%8%@)\%8%8%@rN)/r*r+r,rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0rrrris
"Y
"
"1
%F!I!!!$E
$Y
$
$Q
'F
"Y
"
"1
%F!I!!!$E
$Y
$
$Q
'F)I))+6M')''4L*9**;7MF#L'JF#L'J(-8+|n<:%G!$55#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&ArrceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!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/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLyK)LIpaddrUnitTestctjd|_tjd|_tj
d|_tjd|_tjd|_	tjd|_tjd|_tjd|_
tjd	|_y)
Nr,
1.2.3.4/24
1.2.3.0/242001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:1/642001:658:22a:cafe::/64!2001:658:22a:cafe:200:0:0:1%scopez$2001:658:22a:cafe:200:0:0:1%scope/64z2001:658:22a:cafe::%scope/64)rripv4_addressripv4_interfaceripv4_networkripv6_addressipv6_interfaceripv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkr
s rsetUpzIpaddrUnitTest.setUp s%11)<'55lC%11,?%33)+'55,.%112JK#,#:#:/$1 %.%<%<2&4"#,#8#89W#X rc|jdttjd|jdttjd|jdttjdy)NzIPv4Interface('1.2.3.4/32')r,zIPv6Interface('::1/128')rzIPv6Interface('::1%scope/128')r)r%r;rrrr
s rtestReprzIpaddrUnitTest.testRepr0sp6i55i@A	C3i55e<=	?9i55kBC	Erctjd}tjd}|jtjd||jtj|df||jtjd||jtjd||jtj|df||jtjd||j	t
5tjd	ddd|j	t
5tj|d
fddd|j	t
5tjdddd|j	t
5tjdddd|j	t
5tj|d
fddd|j	t
5tjddddtjd}|jtjd	d||jtj|d
fd||jtjdd||jtjdd||jtj|d
fd||jtjdd|tjd}tjd}|jtjd||jtj|d
f||jtjd||jtjd||jtj|d
f||jtjd||jtjd	tjd|jtjdtjd|j	t
5tjdddd|j	t
5tjddddy#1swYxYw#1swYxYw#1swYxYw#1swYxYw#1swYWxYw#1swY1xYw#1swYxYw#1swYyxYw)Nrz192.0.2.1/32)rrcrc)rc)rrCrC)r4rC)rr]r])r4r])rrara)r4rar^Fstrictr\r`)rar[)r7r]z192.0.2.1/24)rz255.255.255.255.0)rrrr%r?rrr)riprHs   r
testIPv4TuplezIpaddrUnitTest.testIPv4Tuple9s

"
";
/##N3../@A3G..Bx8#>../?@#F..0CDEH	J..0A0CDEH	J..0CDEH	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##N3../@6;=>A	C..Bx6;=>A	C../?6;=>A	C..0A6;=>A	C	
..0?0A6;=>A	C	
..0A6;=>A	C

"
";
/##N3..0ABCF	H..0?0ABCF	H..0ABCF	H../@A3G..Bx8#>../?@#F001BC"00@	B001AB"00@	B

z
*	F!!"DE	F

z
*	E  !CD	E	Ek	5	5	,	,	4	4	B	B	9	9	A	AN	F	F	E	Es`"T)T6
U=U0U%U*U7
V)T36UU
UU'*U47VVcftjd}tjd}|jtjd||jtjd||jtj|df|tjd}tjd}|jtjd||jtjd||jtj|d	f|tjd
}tjd}|j	t
5tjdddd|j	t
5tjd
ddd|j	t
5tj|dfdddtjd}|jtjdd||jtjd
d||jtj|dfd||jtjdtjd|jtjdtjdtjd}|j	t
5tjdddd|j	t
5tj|dfddd|j	t
5tjdddd|j	t
5tjddddy#1swYRxYw#1swY,xYw#1swYxYw#1swYxYw#1swYxYw#1swY|xYw#1swYyxYw)Nr9z2001:db8::/128)r9128)	n rr;z
2001:db8::/96)r996)r<`r=r;2001:db8::1)r?r>)	n r>r>Fr5)r?r=z2001:db8::1/96)r@r=2001:db8::1%scope)rAr>)r?ra)rrrr%r?rrr)rr8rH	ip_scopeds    r
testIPv6TuplezIpaddrUnitTest.testIPv6Tuples

"
"<
0##$45../DE	..=?		
..E{;	

"
"<
0##O4../CD	..<>		
..Dz:	))*<=	
"
"=
1


z
*	7!!"56	7


z
*	=!!#<
=	=

z
*	,!!2r(+	,##O4../B6;=		
..I$)+		
..BxF		
001FG"001AB	D00>@"001AB	D))*=>	


z
*	=!!";<	=


z
*	3!!9b/2	3


z
*	D!!"BC	D

z
*	C  !AB	C	CM	7	7	=	=	,	,,	=	=	3	3
	D	D	C	CsT6O)O)O6"PP
P=P'O&)O36PPPP$'P0c|jtjddztjd|jtjddz
tjd|jtjddztjd|jtjddz
tjd|j	tjd	dztjd
|j	tjd
dz
tjd	y)Nrsz1.1.2.0z1.1.0.1riz::ffffrz::ffff%scope)r%rrrrr
s rtestAddressIntMathz!IpaddrUnitTest.testAddressIntMaths..y9C?"..y9	;..y9C?"..y9	;..u5C"..x8	:..x8IF"..u5	7I11+>)L%11.A	CI11.AYO%11+>	@rcp|jttjd|jttjdtjz|jttj
d|jttj
dtjzy)Nrer)r?rrv4_int_to_packed
IPV4LENGTHv6_int_to_packed
IPV6LENGTHr
s rtestInvalidIntToBytesz$IpaddrUnitTest.testInvalidIntToBytess~*i&@&@"E*i&@&@y333	5*i&@&@"E*i&@&@y333	5rc	Ptjd}tjd}tjd}|jttj|g||fg|jttj||g||f||fg|jttj|||g||fg|jdtj
dd|jdt
|jy)Nz10.10.10.10z10.10.10.11z10.10.10.12rrzIPv4Network('1.2.3.0/24'))rrr%list_find_address_range_count_righthand_zero_bitsr;r))rip1ip2ip3s    r
testInternalszIpaddrUnitTest.testInternalss##M2##M2##M2i;;SEBC*	'i;;S#JGH*sCj1	3i;;S#sOLM*	'iBB1cJK4d4;L;L6MNrc|jt|jjd|jt	|jjd|jt|j
jd|jt	|j
jd|jt	|j
jd|jt|jjd|jt	|jjd|jt	|jjdy)Ni1.2.3.0l	/YE 2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r%intr)network_addressrEr,rGr/r
s rtestGetNetworkzIpaddrUnitTest.testGetNetworksT..>>?JT..>>?KT..>>??	AT..>>?.	0T..7780	2T55EEF?	AT55EEF4	6T55>>?0	2rc|j|jjtjdjtj
d}tj
d}tj
d}|j|tj
t
|j|j|tj
t
|j|j|tj
t
|jd}|j|jjtj|j|j|jjtj|j|jtj
|jjjd|jtj
|jjjd|jtj
|jjjdy)Nr@r,r$r&	/YE )r%r(_iprrrrZr[rr+rr.r'versionr*r-)ripv4ipv6ipv6_scopedv6_ints     r
testIpFromIntzIpaddrUnitTest.testIpFromInts,,00"00:>>	@##I.##$AB**+NOy33C8L8L4MNOy33C8L8L4MNOK)=)=c+B]B]>^)_`7,,00"008<<	>3377"008<<	>	
--d.?.?.C.CDLL	--d.?.?.C.CDLL	--d.F.F.J.JKSS	rctj}|j|jjtj
dj|j|d|d|j|jjtj
dj|j|d|d|j|d|dy)	NrA255.254.253.252 X*ffff:2:3:4:ffff::rzs)rrr%r(rarr+r8rs  rtestIpFromPackedzIpaddrUnitTest.testIpFromPackeds&&,,00"//0CDHH	J!23 !45	7,,//"//899;	=	
!45 "67	8	
 .	0rc8|jt|jjd|jt	|jjd|jt|j
jd|jt	|j
jd|jt|jjd|jt	|jjdy)Nr@r,r^2001:658:22a:cafe:200::1)r%rZr(r8rEr+r.r
s r	testGetIpzIpaddrUnitTest.testGetIpsT00334h?T00334i@T00334?	AT003343	5T77::;?	AT77::;3	5rc*|j|jjd|jt|jjd|j|j
jd|jt|jjd|j|jjjd|jt|jjjdy)Nscope)
r%r*scope_idrEr-r+r.r,r[r/r
s rtestGetScopeIdzIpaddrUnitTest.testGetScopeId,s**33	T55>>? 	",,55	T77@@A 	"**::CC	T55EENNO 	"rc|jt|jjd|jt	|jjd|jt|j
jd|j|j
jd|jt|jjd|j|jjdy)Nlral	@)r%rZr)rFrEr,	prefixlenr/r
s rtestGetNetmaskzIpaddrUnitTest.testGetNetmask:sT..667DT..667IT..667@	B**44b9T55==>@	B11;;R@rcbtjd}|jt|jj
d|j|j
ddtjd}|jt|jj
d|j|j
ddtjd}|jt|jj
d|j|j
ddy)N	1.2.3.4/0r0z::1/0z::1%scope/0)rrr%rZrrF_prefix_from_prefix_stringr)ripv4_zero_netmaskipv6_zero_netmaskipv6_scoped_zero_netmasks    rtestZeroNetmaskzIpaddrUnitTest.testZeroNetmaskDs%33K@.66>>?C*EEcJAN%33G<.66>>?C*EEcJAN#,#:#:=#I 5==EEFJ1LLSQSTUrcftjd}|j|jdy)Nz127.0.0.0/0.0.0.255r])rrr%rxrrHs  rtestIPv4NetzIpaddrUnitTest.testIPv4NetQs'##$9:+rc8|jt|jjd|jt	|jjd|jt|j
jd|jt	|j
jd|jt|jjd|jt	|jjdy)Ni	1.2.3.255l	/YE %2001:658:22a:cafe:ffff:ffff:ffff:ffff)r%rZr)broadcast_addressrEr,r/r
s rtestGetBroadcastzIpaddrUnitTest.testGetBroadcastUsT..@@A8LT..@@A;OT..@@A?	AT..@@A@	B	
T55GGH?	AT55GGH@	Brc$|j|jjjd|j|jjjd|j|j
jjdy)Nr]rw)r%r(rrxr+r.r
s rtestGetPrefixlenzIpaddrUnitTest.testGetPrefixlencsh,,44>>C,,44>>C33;;EErJrc|j|jjjd|jt	|jjj
d|jt
jdjjt
jd|j|jjjd|jt	|jjj
d|jt
jdjjt
jd|j|jjjd|jt	|jjj
dy)Nz1.2.2.0	0.0.0.0/0?rXz::0/0)r%r)supernetrxrEr[rrrrr,rrr/r
s rtestGetSupernetzIpaddrUnitTest.testGetSupernethsk**335??DT..779IIJ"	$##K088AAC!!+.	0	
**335??DT..779IIJ.	0009AAJJL"..w7	911::<FFKT55>>@PPQ.	0rc|j|jjdjd|jt	|jjdj
d|j|jjdjd|jt	|jjdj
d|j|jjdjd|jt	|jjdj
dy)Nrsz1.2.0.0=z2001:658:22a:caf8::)r%r)rrxrEr[r,r/r
s rtestGetSupernet3zIpaddrUnitTest.testGetSupernet3ys**33A6@@"ET..77:JJK"	$	
**33A6@@"ET..77:JJK.	011::1=GGLT55>>qAQQR.	0rc|jt|jjdd|jt|jjd|j	|jjd|jjd|jt|j
jdd|jt|j
jd|j	|j
jd|j
jd	|jt|jjdd|jt|jjd|j	|jjd|jjd	y)
Nrr>prefixlen_diff
new_prefixrrA>)r?rr)rr%r,r/r
s rtestGetSupernet4zIpaddrUnitTest.testGetSupernet4s*d&7&7&@&@)*q		:*d&7&7&@&@%'		)**3313E**33r3B	D	
*d&7&7&@&@)*q		:*d&7&7&@&@%'		)**3313E**33r3B	D*d&>&>&G&G)*q		:*d&>&>&G&G%'		)11::!:L11::b:I	Krct|jj}|jdt	||jtjd|d|jtjd|dtjd}t|j}|jdt	||jtjd|d|jtjd	|dtjd
}t|j}|jdt	||jtjd|d|jtjd	|dtjdtjdg}d
}d}|j|ttj|j|j|ttj|j|jttj|jttj|jtjdg}d}d}|j|ttj|j|j|ttj|j|jttj|jttj|jtjdtjdg}d}d}|j|ttj|j|j|ttj|j|jttj|jttj|jtjdg}d}d}|j|ttj|j|j|ttj|j|jttj|jttj|jy)Nz1.2.3.1rz	1.2.3.254re2001:658:22a:cafe::/120rE2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/1202.0.0.0z2.0.0.1z
2.0.0.0/31)rr,rB)r,rcrXz2001:658:22a:cafe::/127)rX2001:658:22a:cafe::1/128)rr)
rOr)hostsr%lenrrrrr)rrr,r/addrsstr_argstpl_argss       r	testHostszIpaddrUnitTest.testHostss_T&&,,./c%j)..y958D..{;U2YG ,,-FG\'')*c%j)../EFaQ../FGrS'334ST(..01c%j)../EFaQ../FGrS&&y1&&y13"Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G&&y12"Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G&&'<=&&'=>@,/Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	G&&'=>A-0Y%9%9(%C%I%I%K LMY%9%9(%C%I%I%K LMi228<BBDEi228<BBDE	Grc|jt|jjdt|jjd|j	t
t|jjd|j	t
t|jjdd|jt|jjdt|jjd|j	t
t|jjd	|j	t
t|jjdd|jt|jjdt|jjd|j	t
t|jjd	|j	t
t|jjddy)
Nrsrrrrr_Dr)	r%rr)subnetsr?rrOr,r/r
s rtestFancySubnettingz"IpaddrUnitTest.testFancySubnettings 1 1 9 9 9 KL 1 1 9 9R 9 HI	K*d++33r3B	D*d++331>@4B	C	
 1 1 9 9 9 KL 1 1 9 9R 9 HI	K*d++33r3B	D*d++331>@4B	C	
 8 8 @ @PQ @ RS 8 8 @ @B @ OP	R*d22::b:I	K*d22::!FH;J	Krc|jt|jjdjd|jtt|jjdjd|jtt|jjdjd|jt|jjdjd|jt|jjdjdy)NrrrWr>z	1.2.3.128r)	r%rOr)rrxrEr[r,r/r
s rtestGetSubnetszIpaddrUnitTest.testGetSubnetssd//779:1=GGLT%%--/11244COE"	$	
T%%--/11244COE$	&	
d//779:1=GGLd66>>@A!DNNPRSrc&tjd}|jDcgc]
}t|}}|jdDcgc]
}t|}}|j	|dg|j	||ycc}wcc}w)NrBr)rrrrEr%)rr8rOsubnets1subnets2s     rtestGetSubnetForSingle32z'IpaddrUnitTest.testGetSubnetForSingle32sx

"
"<
0$&JJL1qCF11$&JJqM2qCF22L>28,22sB	BcHtjd}|jDcgc]
}t|}}|jdDcgc]
}t|}}|j	|dg|j	||tjd}|jDcgc]
}t|}}|jdDcgc]
}t|}}|j	|dg|j	||ycc}wcc}wcc}wcc}w)Nrrr)rrrrEr%)rr8rOrrrBs      rtestGetSubnetForSingle128z(IpaddrUnitTest.testGetSubnetForSingle128s

"
"9
-$&JJL1qCF11$&JJqM2qCF22I;/8,))/:	$-$5$5$78qCF88$-$5$5a$89qCF99O#458,22
99sDD/DDc,|jjdDcgc]
}t|}}|j|gd|jjdDcgc]
}t|}}|j|gdycc}wcc}w)Nr)z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26)2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r)rrEr%r,)rrOipsipsv6s    rtestSubnet2zIpaddrUnitTest.testSubnet2s#0088;<!s1v<<I	K"&!2!2!:!:1!=>AQ>>
,	-
=
?sB#Bc|jjdDcgc]
}t|}}|j|ddgd|j|ddgd|jt	|dtjd}|jdDcgc]
}t|}}|j|ddgd|j|ddgd	|jt	|dycc}wcc}w)
Nrs)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/32rFr)z2001:658:22a:cafe::/128rz2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)r)rrEr%rrr)rrOrr,s    rtestGetSubnets3zIpaddrUnitTest.testGetSubnets3s#'#4#4#<#<Q#?@a3q6@@!6	8<	>Ws+ ,,-FG#/#7#7#:;a3q6;;!
)	*	

*	+	
Ws+#A<sD#Dc|jtt|jjjd|jtt|jjd|jtt|jjjd|jtt|jjd|jtt|jjjd|jtt|jjdy)N	rr?rrOr(rrr)r+r,r.r/r
s rtestSubnetFailsForLargeCidrDiffz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiff)s*d--55==a@	B*d++33A6	8*d--55==bA	C*d++33B7	9*d44<<DDRH	J*d22::2>	@rcB|jt|jjjd|jt|j
jjd|jt|jjjdy)Nrr)r?rr(rrr+r.r
s r!testSupernetFailsForLargeCidrDiffz0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff7sz*--55>>	D*--55>>	D*44<<EEr	Krc|jtt|jjjd|jtt|jjd|jtt|jjjd|jtt|jjd|jtt|jjjd|jtt|jjdy)Nrerr
s r"testSubnetFailsForNegativeCidrDiffz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiff?s*d--55==bA	C*d++33B7	9*d--55==bA	C*d++33B7	9*d44<<DDRH	J*d22::2>	@rc|j|jjd|jt|jj	djd|j|jjjd|j|jjd|jt|jj	djd|j|jjjd|j|jjd|jt|jj	djd|j|jjjdy)NrFrrill )r%r)
num_addressesrOrrr,r/r
s rtestGetNum_Addressesz#IpaddrUnitTest.testGetNum_AddressesMsc**88#>d//779:1=KK	**335CCSI**88:NOd//779:1=KK,	.**335CC-	/11??AUVd66>>@A!DRR,	.11::<JJ-	/rc|jtjd|j|j	tjd|jtj
d}|j||j|j
tjdjtjdy)Nz1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15)	rrrr)rrrr__contains__)raddr1s  rtestContainszIpaddrUnitTest.testContains^s

i--n=''	)00>**	,%%j1

eT../	
..|<II%%l35	6rc|jt|jdd|jt|jj
d|jt|jdd|jt|jj
d|jt|jdd|jt|jj
dy)Nrt1.2.3.5rFz2001:658:22a:cafe::5r)r%rEr)r?
IndexError__getitem__r,r/r
s rtestNthzIpaddrUnitTest.testNthksT..q12I>*d&7&7&C&CSIT..q12/	1*d&7&7&C&CWMT55a89/	1*d&>&>&J&JGTrctjd}|jd|jt	|}|jdt|d|jdt|d|jdt|d|jdt|d|j|d|dy)Nz172.31.255.128/255.255.255.240z172.31.255.128rz172.31.255.143re)rrr%rxrOrE)rrN	addr_lists   rtestGetitemzIpaddrUnitTest.testGetitemvs$$%EFT^^,J	)3y|+<=)3tAw<8)3y}+=>)3tBx=92R1rc|j|jtjdk(|j	|jtjdk(|j	|jtj
dk(|j	|jtj
dk(|j	|jdk(|j	|jgk(|j	|jdk(|j|jtj
dk(|j	|jtj
dk(|j	|jtjdk(|j	|jdk(|j	|jgk(|j	|jdk(|j|jtj
d	k(|j	|jtj
d
k(|j	|jtj
dk(|j	|jtj
dk(|j	|jtjdk(|j	|jdk(|j	|jgk(|j	|jdk(y)Nr"
1.2.3.4/23::1.2.3.4/24::1.2.3.4%scope/24r5r2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64!2001:658:22a:cafe:200::1%scope/63)rr(rrrrr+r.r
s r	testEqualzIpaddrUnitTest.testEquals++!//=>	?,,"00>?	@,,"00@A	B,,"001EFG	H,,23,,23,,12++##$ABC	D,,##$ABC	D,,"00>?	@,,23,,23,,1222##$GHI	J33##$GHI	J33##$ABC	D33##$ABC	D33"00>?	@33r9:33r9:33q89rc	|j|jtjdk7|j	|jtjdk7|j	|jtj
dk7|j	|jtj
dk7|j	|jdk7|j	|jgk7|j	|jdk7|j	|jtjdk7|j	|jdk7|j	|jgk7|j	|jdk7|j|jtj
dk7|j	|jtj
d	k7|j	|jtjdk7|j	|jdk7|j	|jgk7|j	|jdk7|j	|jtjd
k7|j	|jdk7|j	|jgk7|j	|jdk7|j|jtj
dk7|j	|jtj
dk7|j	|jtj
dk7|j	|jtj
d	k7|j	|jtjdk7|j	|jdk7|j	|jgk7|j	|jdk7|j	|jtjd
k7|j	|jdk7|j	|jgk7|j	|jdk7y)
Nr"rrrr5rrrrr,rr)rr(rrrrr'rr+r*r.r-r
s rtestNotEqualzIpaddrUnitTest.testNotEquals,,"00>?	@++!//=>	?++!//?@	A++!//0DEF	G++r12++r12++q01))"..y9:	;))R/0))R/0))Q./,,##$ABC	D++##$ABC	D++!//=>	?++r12++r12++q01))!--i89	:))R/0))R/0))Q./33##$GHI	J22##$GHI	J22##$ABC	D22##$ABC	D22!//=>	?22b8922b8922a7800!--i89	:00B6700B6700A56rc`|jttjddy)Nz1.2.3.4/255.255.255.255rBr%rErrr
s rtestSlash32Constructorz%IpaddrUnitTest.testSlash32Constructors*Y44-/01=	?rc|jttjdd|jttjddy)Nrr)r%rErrr
s rtestSlash128Constructorz&IpaddrUnitTest.testSlash128ConstructorsHY44Y?@"+	-Y44_EF"1	3rc`|jttjddy)Nz1.2.3.4/0.0.0.0r{rr
s rtestSlash0Constructorz$IpaddrUnitTest.testSlash0Constructors&Y445FGH%	'rctjd}tjd}tjd}tjd}tjd}tjd}tj||||||g}|jt	|tj
dtj
dgtjd}tjd}tjd}tjd}tj||||g}|jt	|tj
dgtj
d}tj
d	}tj
d
}tj
d}tj
d}tj
d
}tj||||||g}|jt	|tj
d
tj
dgtj||g}|jt	|tj
dgtj
dx}}	|jt	tj||	g|gtjdx}}	|jt	tj||	gtjdgtjd}tjd}tjd}tj|||g}|jt	||gtjd}tjd}tjd}tj|||g}|jt	||gtjdtjdftj
dtjdftj
dtjdfg}
|
D],\}}|jttj||g.tjdtjdftj
dtjdftj
dtjdfg}
|
D],\}}|jttj||g.y)N1.1.1.0rs1.1.1.2z1.1.1.3z1.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::/96z2001::%scope/100z2001::%scope/120z2001::%scope/96rz
1.1.0.0/32z
2001::/128rz2001::%scope/128)rrcollapse_addressesr%rOrrrrr?r@)rrRrSrTip4ip5ip6	collapsedip_same1ip_same2addr_tupless           rtestCollapsingzIpaddrUnitTest.testCollapsings##I.##I.##I.##I.##I.##I.00
#sCc*,	i&&|4&&|46	7
##I.##I.##I.##I.00#sC1EF	i#//=>	@##L1##L1##L1##L1##L1##L100#sCc582:;	i#//=#//=?	@
00#s<	i#//=>	@(33LAA8i::x(*+"	%
(33I>>8i::x(*+#..|<=	?##L1##L1##K000#sCA	i3%0##$67##$67##$5600#sCA	i3%0%%i0%%e,.&&|4&&|46&&|4&&|46
$	*HCi)E)E"Cj
*	*
%%i0%%k24&&|4&&'9:<&&|4&&'9:<
$	*HCi)E)E"Cj
*	*rc
D	tj}tjd}tjd}Gddtj}|d}|d}|j	t
t||||j	tt||tjd|j	tt||tjd|jt
|||dtjdtjd	}|jt
|||tjd
tjd	gtjd}tjtjj}|jtjdgt
|||tjd}tjd
}|jt
|||dtjdtjd}|jt
|||tjdtjdgtjd}tjd}|jt
|||dtjdtjd}|jt
|||tjdtjdg|j	t
t|tjdtjd|j	tt|tjdtjd|j	tt|tjdtjd|j	tt|tjdtjdy)Nrz	1.1.1.255ceZdZedZy)3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addresscy)Nr0r
s rrbz;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.versionVsrN)r*r+r,r-rbr0rrIPv7AddressrUs


rrrrrrz1.1.1.8z
1.1.1.0/29rrz$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z	1::%scopez*1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scopez	2::%scopez1.1.0.0rz)
rsummarize_address_rangerrr?rrOr@r%rr	_ALL_ONESr)r	summarizerRrSrip_invalid1ip_invalid2s       rtestSummarizingzIpaddrUnitTest.testSummarizingMs55	""9-"";/	)//	"%(!%(*d#K=	?	
)T#C)>)>u)EF	H)T#C)>)>{)KL	N	
iS1215"--l;	=""9-iS12#..|<#..y9;	<##A&##I$9$9$C$CD)//<=iS12	4""5)""#IJiS1215"--h7	9""5)iS12#..x8#..y9;	<"";/""#OPiS1215"--h7	9"";/iS12#..x8#..y9;	<
	
*d#I$8$8$C$-$8$8$CE	F	
)T#I$8$8$C$-$8$8$CE	F	
)T#I$8$8$C$-$8$8$CE	F	
)T#I$8$8$>$-$8$8$CE	Frc|jtjdtjdk|jtjdtjdk|jtjdtjdk|jtjdtjdk|jtjdtjdk|jtjdtjdky)Nrsrr::2rr)rrrr
s rtestAddressComparisonz$IpaddrUnitTest.testAddressComparisons
	,,Y7!,,Y78	9	,,Y7!,,Y78	9	,,U3!,,U34	5	,,U3!,,U34	5	,,[9!,,[9:	;	,,[9!,,[9:	;rc|jtjdtjdk(|jtjdtjdk|jtjdtjdk|jtjdtjdk|jtjdtjdkD|jtjdtjdkD|jtjdtjdkD|jtjdtjdk(|jtjdtjdk|jtjdtjdk|jtjdtjdk|jtjdtjdkD|jtjdtjdkD|jtjdtjdkD|jtjd	tjd	k(|jtjd	tjd
k|jtjd	tjdk|jtjdtjd	k|jtjd
tjd	kD|jtjdtjd	kD|jtjd	tjdkD|jtjd	tjdk(|jtjd	tjdk|jtjd	tjdk|jtjdtjdk|jtjd
tjdkD|jtjdtjdkD|jtjd	tjdkD|jtjdtjd	k(|jtjdtjd
k|jtjdtjdk|jtjdtjd	k|jtjdtjd	kD|jtjdtjd	kD|jtjdtjdkDy)
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)rrrrr
s rtestInterfaceComparisonz&IpaddrUnitTest.testInterfaceComparisons 	..|<!..|<=	>	..|<!..|<=	>	..|<!..|<=	>	..|<!..|<=	>	..|<!..|<=	>	..|<!..|<=	>	..|<!..|<=	>	
	..x8!..x89	:	..x8!..x89	:	..x8!..x89	:	..x8!..x89	:	..x8!..x89	:	..x8!..x89	:	..x8!..x89	:	
	..~>!..~>?	@	..~>!..~>?	@	..~>!..~>?	@	..~>!..~>?	@	..~>!..~>?	@	..~>!..~>?	@	..~>!..~>?	@	
//?!..x89	:	..~>!..x89	:	..~>!..x89	:	..~>!..x89	:	..~>!..x89	:	..~>!..x89	:	..~>!..x89	:	
//9!..~>?	@	..x8!..~>?	@	..x8!..~>?	@	..x8!..~>?	@	..x8!..~>?	@	..x8!..~>?	@	..x8!..~>?	@rctjd}tjd}tjd}|j||k|j||kD|j|j	|d|j|j	|d|j|j	|d|j|j	|d|j|j	|d|j|j|jktjd}tjd}tjd	}|j||k|j||kD|j|j	|d|j|j|jk|jt|jj|jtjd
}tjd}|jt|j||jt|j||jt|j||jt|j|tjd}|j!||k|j!||kDtjd
}|j||k|j!||k|j!||kD|j||kDtjd}|j||k|j!||k|j!||kD|j||kDtjd}tjd}tjd}tjd}||||g}||||g}|j#|j||||||g}|j#|j|||j%|jtj&dt(|j%|jtj&dt(|jtjdtjdk|jtjdtjdk|j!tjdtjdk|jtjdtjdk|jtjdtjdk|j!tjdtjdky)Nrz
1.1.1.0/32rrrer>z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96::/0rz
10.1.2.128/25z10.1.3.0/24z10.1.3.0/25z
10.10.10.0/31z
10.10.10.0z
10.10.10.2/31z
10.10.10.2rsrrr)rrrr%compare_networks_get_networks_keyrr?r@r)r,rrrrrrsortassertIsrr)	rrRrSrTrdrcrrunsorteds	         rtestNetworkComparisonz$IpaddrUnitTest.testNetworkComparisons	##L1##L1##L1c	"c	"--c2A6	
--c2B7--c2A6--c2B7--c2A6--/#2G2G2IIJ##$45##$45##$9:c	"c	"--c2B7--/#2G2G2IIJ	
)++<<++	-&&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""<0sC%c3'

*c3'

*

cjj!5!5l!CD$	&

cjj!5!5l!CD$	&	
	,,Y7!,,Y78	9	,,Y7!,,Y78	9--i8!,,Y78	9	
	,,U3!,,U34	5	,,U3!,,U34	5--e4"--e45	6rc|jttjd|jttjd|jttjdy)Nz192.168.1.1/24z::1/120z
::1%scope/120)r?rrrr
s rtestStrictNetworksz!IpaddrUnitTest.testStrictNetworksHsK*i&:&:<LM*i&:&:IF*i&:&:OLrcjtjd}tjd}tjd}|j|jj	||j|jj	||j|j	|y)Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)rrrr)overlapsr)rrother2other3s    rtestOverlapszIpaddrUnitTest.testOverlapsMs%%l3&&|4&&}5))2259:**33F;</0rcd}tj|}tjd|z}|jt	|j
t	|j
tjd|z}|j
|j
|j
|jtjtjdy)Nr\z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	rrrr%rZr8rr?r)ripv4_stringrc
v4compat_ipv6
v4mapped_ipv6s     rtestEmbeddedIpv4zIpaddrUnitTest.testEmbeddedIpv4Us#&&{3!//0DE
]--.DGG=!//k0IJ
M,,dgg6)55y7N7N0	2rc|jtjdtjd|jtjdtjd|jtjdtjd|jtjdtjd|jtjdtjd|jtjdtjd|jtjdtjd|jtjdtjdy)	Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scope)r%rrrr
s rtestIPv6AddressTooLargez&IpaddrUnitTest.testIPv6AddressTooLarge`sf--.@A#../@A	C	
--.?@#../?@	B	
--.FG#../FG	I--.EF#../EF	HI001IJ%001BC	EI001HI%001AB	DI001CD#../FG	II001BC#../EF	Hrc|j|jjd|j|jjd|j|jjdy)Nr_r`)r%r'rbr*r-r
s r
testIPVersionzIpaddrUnitTest.testIPVersionusV**22A6**22A611991=rc|j|jjd|j|jjd|j|jjdy)Nrcr)r%r(
max_prefixlenr+r.r
s rtestMaxPrefixLengthz"IpaddrUnitTest.testMaxPrefixLengthzsV,,::B?,,::C@33AA3Grc|j|jjd|jtjdjd|j|j
jd|jtjdjd|jtjdjd|j|jjd|jtjd	jd|jtjd
jdy)NrArirjrkrlrmz::1:0:0:0:0szffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)r%r'packedrrr*rr-r
s r
testPackedzIpaddrUnitTest.testPackeds)**11,	.001BCJJ,	.**11=	>	
001DELL*	+	
00?FF@	B1188=	>	
001JKRR*	+	
001DELL@	Brctjd}tjd}tjd}tjd}|jtjt||jtjt||jtjt||jtjt|y)Nr,rW)	rrrr%rrrrr)ripv4netipv4addripv6netipv6addrs     r
testIpTypezIpaddrUnitTest.testIpTypes&&y1''	2&&{3''4..W
>..X?..W
>..X?rcR|jdtjdj|jdtjdj|jdtjdj
|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj
|jdtjd	j|jdtjd
j|jdtjdj|jdtjdj|jdtjd
j|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj
|jdtjdj
|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjd	j|jdtjd
j|jdtjdj|jdtjdj|jtjdj|jtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdjy)NTz224.1.1.1/31Fz	240.0.0.0z192.168.1.1/17z192.169.0.0z10.255.255.255z11.0.0.0z172.31.255.255z
172.32.0.0z169.254.1.0/24z169.254.100.200/24z169.255.100.200/24z127.100.200.254/32z
127.42.0.0/16z	128.0.0.0z
100.64.0.0/10z192.0.2.128/25z192.0.3.0/24rZz	224.1.1.1z	240.0.0.1z239.255.255.255192.168.1.1z169.254.100.200z169.255.100.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)r%rris_multicastris_reserved
is_private
is_link_localis_loopback	is_globalris_unspecifiedrrr
s rtestReservedIpv4zIpaddrUnitTest.testReservedIpv4sey55   ,	.	 4 4[ A N NOy33K@LLMy55  "",*	.	 4 4] C N NOy33  "",*	.	 4 4Z @ K KL	 4 4Z @ L LMy33  "",*	.	 4 4\ B M MN"--.>?MM	O	
#00244AM	C	
#00244AM	C	
#..244?K	A	
y33 !!,	.	 4 4[ A M MN"--o>II	K	 4 4_ E O OP"--.>?JJ	L"--n=GG	I	
y33I>MMNy33K@MMN	 4 4[ A N NOy33K@LLM"--.?@LL	N	
y33MBMMN	 4 4] C N NOy33  "",*	.	 4 4Z @ K KLy33  "",*	.	 4 4\ B M MN"--.?@NN	P"--.?@NN	P	
	,,[9CCD--m<FFG#../@AMM	Oy33LAMMN	 4 4[ A M MNy33I>MMNrcL
|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjd	j|jdtjd
j|jdtjdj|jdtjdj|jdtjd
j|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdjy)NFrz	1.0.0.0/8Tz	0.0.0.0/8z
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z
172.16.0.0/12z192.0.0.0/29z192.0.0.170/31r^z192.168.0.0/16z
198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32rz::ff/128r::/128z
::ffff:0:0/96z100::/64z	2001::/23z2001:2::/48rz2001:10::/28zfc00::/7z	fe80::/10)r%rrr8r
s rtestPrivateNetworksz"IpaddrUnitTest.testPrivateNetworkss	 4 4[ A L LM	 4 4[ A L LMy33K@KKLy33LALLMy33MBMMNy334DEPPQy33ODOOPy33NCNNOy334DEPPQy33NCNNOy334DEPPQy33ODOOPy334EFQQRy334DEPPQy33MBMMNy334HITTU	 4 4V < G GH	 4 4Z @ K KLy33I>IIJy33H=HHIy33ODOOPy33J?JJKy33K@KKLy33MBMMNy33ODOOPy33NCNNOy33J?JJKy33K@KKLrc|jdtjdj|jdtjddzdz
j|jdtjdj|jdtjdj|jdtjd	j|jdtjd
j|jdtjdj|jdtjdj|jdtjdj
|jdtjd
j
|jdtjdj
|jdtjdj
|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj
|jdtjdj|jdtjdj|jdtjddzdz
j|jdtjdj|jdtjdj|jdtjd	j|jdtjd
j|jdtjdj|jdtjdj|jdtjdj
|jdtjd
j
|jdtjdj
|jdtjdj
|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdj|jdtjdjy)NTzffff::rrr>zff00::Fzfdff::zfecf::zfeff:ffff:ffff:ffff::z
fbf:ffff::zfc00::zfc00:ffff:ffff:ffff::zfbff:ffff::zfe00::zfea0::zfebf:ffff::zfe7f:ffff::zfec0::z	0:0::0:01z::1/127rzrz0::0rz::/127z2001::1/128z
200::1/128z100::z4000::1/128)
r%rrr6
is_site_localr8r9rr:r<r;rr7r
s rtestReservedIpv6zIpaddrUnitTest.testReservedIpv6		svy33H=JJKy33AsFQJ?LLMy33H=JJK	 4 4X > K KLy33H=KKLy33' ))6	8	 4 4!+m	-	 4 4X > L LMy33H=HHIy33' ))3	5	 4 4] C N NO	 4 4X > I IJy33H=KKLy33 ,}	.	 4 4!,}	.	 4 4X > L LMy55kBNNO	 6 6y A M MN	 4 4T : F FG	 4 4U ; G GHy33F;JJK	 4 4U ; J JK	 4 4X > M MN"--m<GG	I"--l;EE	G	
y33H=JJKy33AsFQJ?LLMy33H=JJK	 4 4X > K KLy33H=KKLy33' ))6	8	 4 4!+m	-	 4 4X > L LMy33H=HHIy33' ))3	5	 4 4] C N NO	 4 4X > I IJy33H=KKLy33 ,}	.	 4 4!,}	.	 4 4X > L LMy33K@LLMy33E:FFG	 4 4U ; G GHy33F;JJK	 4 4U ; J JK	
y33G<HHIy33MBNNOrcj|jtjdjtjd|jtjdjd|jtjdjtjdy)N::ffff:192.168.1.1r5z
::c0a8:101z::ffff:c0a8:101)r%rripv4_mappedr
s rtestIpv4MappedzIpaddrUnitTest.testIpv4MappedV	s$$%9:FF$$]3	5	
--l;GGN--.?@LL"--m<	>rc|jdtjdj|jdtjdjy)NTrEFz::ffff:172.32.0.0)r%rrr8r
s rtestIpv4MappedPrivateCheckz)IpaddrUnitTest.testIpv4MappedPrivateCheck^	sNi**+?@KK	My++,?@KK	Mrc
tjd}tjd}tjd}tjd}tjd}tjd}|jt	t|j
|tjdtjdg|jtt
|j
||jtt
|j
||jtt
|j
||jt|j
|g|jt	t|j
|tjd	tjd
tjdtjdtjd
tjdtjdtjdgy)N10.1.1.0/24z10.1.1.0/26z10.2.1.0/2410.1.1.0z2001:db8::0/32z10.1.1.5/32z10.1.1.64/26z
10.1.1.128/25z10.1.1.0/30z10.1.1.4/32z10.1.1.6/31z10.1.1.8/29z10.1.1.16/28z10.1.1.32/27)
rrrr%rrOaddress_excluder?rr@rraddr2addr3addr4addr5addr6s       rtestAddrExcludezIpaddrUnitTest.testAddrExcluded	s$$]3$$]3$$]3$$Z0$$%56$$]3U%:%:5%A BC#..~>#..?A	B	
*dE,A,A%,HI)T5+@+@+GH)T5+@+@+GHe33E:;R@U%:%:5%A BC#..}=#..}=#..}=#..}=#..~>#..~>#..~>#..?A	Brc|jttjdttjd|jttjdttjd|jttj
dttj
d|jttj
dttj
t
tj
djtj
d}tj
d}i}d||j<d||j<d||<d||<|j|j||j||y)NrKrLr,r)r%hashrrrrrZrar'r*r)rrRrSdummys    rtestHashzIpaddrUnitTest.testHash|	sji44]CDi44]CD	Fi22=ABi22=AB	Di22:>?i22:>?	A	
i229=>i22	,,Y7;;<>?	@"":.""5)#'d #'d c
c


d''/

c5!rc|j}|jd|j|j}|j	t
|jddzdzy)Nr#rrr>)r)r%
compressedr,r?r_string_from_ip_intrs  rtestIPBaseszIpaddrUnitTest.testIPBases	sLs~~6*c&=&=q#vzJrc|j}|jd|j|jd|j|jd|j|jdt|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_hostmaskrErs  rtestIPv6NetworkHelpersz%IpaddrUnitTest.testIPv6NetworkHelpers	sm133E3EFD))	+D**	,13s8<rc|j}|jd|j|jd|j|jd|j|jdt|y)Nr#z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r)r%r^r_r`rErs  rtestIPv4NetworkHelpersz%IpaddrUnitTest.testIPv4NetworkHelpers	ses'9'9:0#2B2BC,c.?.?@s3x0rctjd}tj|}tjd}tj|}tjd}tjd}|j|||j|||j|tj||j|tj|y)NrKrrsrp)rrrrrr%rNs       rtestCopyConstructorz"IpaddrUnitTest.testCopyConstructor	s$$]3$$U+&&'DE&&u-%%i0%%&@A&&	 5 5e <=	 5 5e <=rc	iddddddddd	d
ddd
ddddddddddddddddddd d!d"d#d$i}t|jD]3\}}|j|tt	j
|5y)%Nz1:2:3:4:5:6:7:8z1:2:3:4:5:6:7:8/128z2001:0:0:4:0:0:0:8z2001:0:0:4::8/128z2001:0:0:4:5:6:7:8z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8z2001:0:3:4:5:6:7:8/128z0:0:3:0:0:0:0:ffffz0:0:3::ffff/128z0:0:0:4:0:0:0:ffffz::4:0:0:0:ffff/128z0:0:0:0:5:0:0:ffffz::5:0:0:ffff/128z1:0:0:4:0:0:7:8z1::4:0:0:7:8/128z0:0:0:0:0:0:0:0r?z0:0:0:0:0:0:0:0/0rz0:0:0:0:0:0:0:1rz*2001:0658:022a:cafe:0000:0000:0000:0000/66rrWz
::102:304/128z1:2:3:4:5:ffff:1.2.3.4z1:2:3:4:5:ffff:102:304/128z::7:6:5:4:3:2:1z0:7:6:5:4:3:2:1/128z::7:6:5:4:3:2:0z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1::z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1::z0:6:5:4:3:2:1:0/128)rOitemsr%rErr)rtest_addressesuncompressedrZs    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*ZY-D-D.*
 	 rctjd}tjd}tjd}tjd}|jd|j|jdtjdj|jd|j|jd	|j|jd|jy)
Nz2001::12001:0:5ef5:79fd:0:59d:a0e5:ba1rz
192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128rz'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)rrrrrr%exploded)rrrOrPrQs     rtestExplodeShortHandIpStrz(IpaddrUnitTest.testExplodeShortHandIpStr	s''	2%%&GH%%k2%%o6F	)F"00;DD	F	
B	)E	)%..9rctjd}tjd}|jd|j|jd|jy)Nz	127.0.0.1r?z1.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)rrrr%reverse_pointer)rrrOs   rtestReversePointerz!IpaddrUnitTest.testReversePointer	sU%%k2%%m4153H3HI2..	0rc|jdt|j|jdt|jy)Nr@r^)r%rZr'r*r
s rtestIntRepresentationz$IpaddrUnitTest.testIntRepresentation	s<3t'8'8#9:?T../	1rc|jtjdjd|jtjdjdy)Nr>r_r`)r%rrrbrr
s rtestForceVersionzIpaddrUnitTest.testForceVersion	sD--a088!<..q1991=rc|j|jjd|j|jjd|j|jjd|j|j
jd|j|j
jd|j|j
jdy)Nr"z1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255rz.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testWithStarzIpaddrUnitTest.testWithStar	s,,;;\J,,990	2,,::,	.	
,,;;6	8,,99I	K	
,,::I	Krc|jd|jj|jd|jj|j|jjtjd|j|jjtjd|jd|jj|jd|jj|jd|jj|jd|jj|j|jjtjd|j|jjjtjd|j|jjtjd|j|jjtjd|j|jjjtjd|j|jjjtjd|jd|jj|jd|jj|jd|jjj|jd|jjjy)NrrGrz	0.0.0.255rXrrY)rr)__dict__r%rrrrGrr,r[rr+rr
s rtestNetworkElementCachingz(IpaddrUnitTest.testNetworkElementCaching	s,d.?.?.H.HIT%6%6%?%?@	
**<<"..{;	=**33"..{;	=	


)4+<+<+E+EF

j$"3"3"<"<=	
,d.?.?.H.HIT%6%6%?%?@	
**::"../DE	G,,44DD"../DE	G	
//!!"IJ	L	
**33"../FG	I''99!!"IJ	L	
,,44=="../FG	I	


)4+<+<+E+EF

j$"3"3"<"<=

)4+>+>+F+F+O+OP

j$"5"5"="="F"FGrc0tjd}tjd}d}|j||ftj|jd}|jtj|jd}|jtj|jtjd}|jtjdtjdf|jy)	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:fdd2rlz94.245.121.253z95.26.244.94)rrr%rteredorr)rserverclientteredo_addrbad_addrs     r
testTeredozIpaddrUnitTest.testTeredo)
s&&7&&|4?&&)"--k:AA	C8--h7>>?<--h7>>? ++,MN)//0@A#//?A$++	-rctjd}tjd}|jtjd|j|j|jy)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z
172.29.45.100)rrr%r	sixtofourr)r
sixtofouraddrrs   r
testsixtofourzIpaddrUnitTest.testsixtofour;
s\!,,-@A
''(;<..?&00	2++,rctjd}tjd}|j|j|jy)Nr,z2.3.4.5)rrr__hash__)r
ipv4_address1
ipv4_address2s   rtestV4HashIsNotConstantz&IpaddrUnitTest.testV4HashIsNotConstantC
sD!//	:
!//	:
M224m6L6L6NOrctjd}tjd}|j|j|jy)Nr$z2001:658:22a:cafe:200:0:0:2)rrrr)r
ipv6_address1
ipv6_address2s   rtestV6HashIsNotConstantz&IpaddrUnitTest.testV6HashIsNotConstantI
sF!//0MN
!//0MN
M224m6L6L6NOrN)Mr*r+r,r0r2r9rCrGrMrUr\rgrnrqruryrrrrrrrrrrrrrrrrrrrrrrrrrrrr
r
rrrrr#r%r'r*r-r3r=r@rCrGrIrTrXr\rarcrerjrnrqrsrurwrzrrrrr0rrr r sY EDEN@CF@5O2"00 5"AV,BK
0"
0K*4GlK.
T---,(@K@/"6	U	2#:J57n?3'`*DGFR;K@ZU6nM
12H*>
H
B,@GORMBKPZ>MB0"*K=1> 4: 01
>K (HT-$-PPrr __main__)runittestr9r.rArIrrtest.supportrrTestCaserr2rSrxrrr=rrrrrrrr r*mainr0rr<module>rs3%	
*3?8$$3?l''2..b/"/"bm/'9m/`r6'9r6jV&,V&r&<)<&36':36lf1,f1R&<)<&,0':,0^ALA&rAh''rAjnPX&&nPb1zHMMOr