Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/test_ipaddress.cpython-34.pyo

�
g f)�@sdZddlZddlZddlZddlZddlZddlZGdd�dej�ZGdd�d�Z	Gdd�de	�Z
Gd	d
�d
e	�ZGdd�dee
�ZGd
d�dee�Z
Gdd�de
�ZGdd�dee�ZGdd�dee�ZGdd�de�ZGdd�dee�ZGdd�dee�ZGdd�de�ZejGdd�d��ZejGdd �d ��ZGd!d"�d"ej�ZGd#d$�d$ej�Zed%krej�ndS)&zUnittest for ipaddress module.�Nc@s[eZdZedd��Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�BaseTestCasecCs
t�dS)N)�NotImplementedError)�self�r�8/opt/alt/python34/lib64/python3.4/test/test_ipaddress.py�factory"szBaseTestCase.factorycgse|r||}n|j||�}|�}|VWdQX|jjdk	ra|j|jj�ndS)z{
        Ensure exception does not display a context by default

        Wraps unittest.TestCase.assertRaisesRegex
        N)�assertRaisesRegexZ	exception�__context__�
assertTrue�__suppress_context__)r�exc_type�details�args�cm�excrrr�assertCleanError&s
	zBaseTestCase.assertCleanErrorcGs|jtj||�S)z Ensure a clean AddressValueError)r�	ipaddress�AddressValueError)rr
rrrr�assertAddressError6szBaseTestCase.assertAddressErrorcGs|jtj||�S)z Ensure a clean NetmaskValueError)rrZNetmaskValueError)rr
rrrr�assertNetmaskError;szBaseTestCase.assertNetmaskErrorcCs&|j|j|�|j|��dS)z8Check constructor arguments produce equivalent instancesN)�assertEqualr)r�lhs�rhsrrr�assertInstancesEqual@sz!BaseTestCase.assertInstancesEqualN)�__name__�
__module__�__qualname__�propertyr�
contextlib�contextmanagerrrrrrrrrrs
rc@s4eZdZdd�Zdd�Zdd�ZdS)�CommonTestMixinc	Cs'|jd��|jd�WdQXdS)NzAddress cannot be empty�)rr)rrrr�test_empty_addressGsz"CommonTestMixin.test_empty_addressc	Cs6|jtjtd����|jd�WdQXdS)Nz1.0g�?)r�re�escape�reprr)rrrr�test_floats_rejectedKsz$CommonTestMixin.test_floats_rejectedcCs[|jttj|jd��|jtt|jd��|jtt|jd��dS)N�)�assertRaises�	TypeError�operator�indexr�hex�bytes)rrrr�test_not_an_index_issue15559Osz,CommonTestMixin.test_not_an_index_issue15559N)rrrr"r&r.rrrrr Esr c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CommonTestMixin_v4cCs$|jdd�|jdd�dS)Nz000.000.000.000z0.0.0.0z192.168.000.001z192.168.0.1)r)rrrr�test_leading_zerosYsz%CommonTestMixin_v4.test_leading_zeroscCs$|jdd�|jdd�dS)Nrz0.0.0.0lPz192.168.0.1)r)rrrr�test_int]szCommonTestMixin_v4.test_intcCs6|jtjd�d�|jtjd�d�dS)N�00000000z0.0.0.0�c0a80001z192.168.0.1)rr-�fromhex)rrrr�test_packedaszCommonTestMixin_v4.test_packedc	Cs6d}|jtj|���|jd�WdQXdS)Nz,-1 (< 0) is not permitted as an IPv4 addressr'���)rr#r$r)r�msgrrr�test_negative_ints_rejectedesz.CommonTestMixin_v4.test_negative_ints_rejectedc
Cs:d}|jtj|d���|jd�WdQXdS)Nz1%d (>= 2**32) is not permitted as an IPv4 address�� ll)rr#r$r)rr7rrr�test_large_ints_rejectedjsz+CommonTestMixin_v4.test_large_ints_rejectedcs*�fdd�}|d�|d�dS)Nc	sLt|�}d}�jtj|||f����j|�WdQXdS)Nz4%r (len %d != 4) is not permitted as an IPv4 address)r-rr#r$r)�length�addrr7)rrr�assertBadLengthps#zBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength��r)rr>r)rr�test_bad_packed_lengthos
z)CommonTestMixin_v4.test_bad_packed_lengthN)	rrrr0r1r5r8r;rArrrrr/Wsr/c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CommonTestMixin_v6cCs$|jdd�|jdd�dS)Nz
0000::0000z::z000::c0a8:0001z::c0a8:1)r)rrrrr0|sz%CommonTestMixin_v6.test_leading_zeroscCs$|jdd�|jdd�dS)Nrz::lPz::c0a8:1)r)rrrrr1�szCommonTestMixin_v6.test_intcCstd�tjd�}|j|d�td�tjd�}|j|d�tjd�td�}|j|d�dS)N�r2z::r3z::c0a8:1zc0a8:1::)r-r4r)rr=rrrr5�szCommonTestMixin_v6.test_packedc	Cs6d}|jtj|���|jd�WdQXdS)Nz,-1 (< 0) is not permitted as an IPv6 addressr'r6)rr#r$r)rr7rrrr8�sz.CommonTestMixin_v6.test_negative_ints_rejectedc
Cs:d}|jtj|d���|jd�WdQXdS)Nz2%d (>= 2**128) is not permitted as an IPv6 addressr9�l	l	)rr#r$r)rr7rrrr;�sz+CommonTestMixin_v6.test_large_ints_rejectedcs*�fdd�}|d�|d�dS)Nc	sYt|�}d}�jtj|||f����j|��j|�WdQXdS)Nz5%r (len %d != 16) is not permitted as an IPv6 address)r-rr#r$r)r<r=r7)rrrr>�s
#
zBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength��r)rr>r)rrrA�s
z)CommonTestMixin_v6.test_bad_packed_lengthN)	rrrr0r1r5r8r;rArrrrrBzsrBc@smeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�ZdS)�AddressTestCase_v4c	Cs0d}|jd|��tj|�WdQXdS)Nz127.0.0.1/24zUnexpected '/' in %r)rr�IPv4Address)rr=rrr�test_network_passed_as_address�sz1AddressTestCase_v4.test_network_passed_as_addresscs��fdd�}|d�|d�|d�|d�|d�|d�|d	�|d
�|d�|d�|d
�|d�|d�|d�|d�|d�|d�|d�|d�|d�|d�|d�|d�dS)Nc	s*�jd|��tj|�WdQXdS)NzExpected 4 octets in %r)rrrH)r=)rrr�assertBadSplit�szAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplitz127.0.1z42.42.42.42.42z42.42.42z42.42Z42z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016�016Z000z0x0a.0x0a.0x0az	0x0a.0x0a�0x0a�.�bogusz	bogus.comZ1000Z1000000000000000z192.168.0.1.comr)rrJr)rr�test_bad_address_split�s0





















z)AddressTestCase_v4.test_bad_address_splitcs*�fdd�}|d�|d�dS)Nc	s*�jd|��tj|�WdQXdS)NzEmpty octet not permitted in %r)rrrH)r=)rrr�assertBadOctet�s	
z;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctetz	42..42.42z...r)rrPr)rr�test_empty_octet�s
z#AddressTestCase_v4.test_empty_octetcs��fdd�}|dd�|dd�|dd�|d	d
�|dd�|d
d�|dd�|dd�|dd�dS)Nc	s@d||f}�jtj|���tj|�WdQXdS)Nz)Only decimal digits permitted in %r in %r)rr#r$rrH)r=�octetr7)rrrrP�szBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctetz0x0a.0x0a.0x0a.0x0arLz0xa.0x0a.0x0a.0x0aZ0xaz42.42.42.-0z-0z42.42.42.+0z+0z42.42.42.-42z-42z
+1.+2.+3.4z+1z	1.2.3.4e0Z4e0z	1.2.3.4::z4::z1.a.2.3�ar)rrPr)rr�test_invalid_characters�s







z*AddressTestCase_v4.test_invalid_characterscs0�fdd�}|dd�|dd�dS)Nc	s@d}�jtj|||f���tj|�WdQXdS)Nz9Ambiguous (octal/decimal) value in %r not permitted in %r)rr#r$rrH)r=rRr7)rrrrP�s#zGAddressTestCase_v4.test_octal_decimal_ambiguity.<locals>.assertBadOctetz016.016.016.016rKz001.000.008.016Z008r)rrPr)rr�test_octal_decimal_ambiguity�s
z/AddressTestCase_v4.test_octal_decimal_ambiguitycs0�fdd�}|dd�|dd�dS)Nc	s@d}�jtj|||f���tj|�WdQXdS)Nz*At most 3 characters permitted in %r in %r)rr#r$rrH)r=rRr7)rrrrP�s#z<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctetz0000.000.000.000Z0000z12345.67899.-54321.-98765Z12345r)rrPr)rr�test_octet_length�s
z$AddressTestCase_v4.test_octet_lengthcs0�fdd�}|dd�|dd�dS)Nc	s@d||f}�jtj|���tj|�WdQXdS)Nz$Octet %d (> 255) not permitted in %r)rr#r$rrH)r=rRr7)rrrrP�sz;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctetz	257.0.0.0iz
192.168.0.999i�r)rrPr)rr�test_octet_limit�s
z#AddressTestCase_v4.test_octet_limitN)
rrrrrHrrIrOrQrTrUrVrWrrrrrG�s				rGc@s�eZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�ZdS)�AddressTestCase_v6c	Cs0d}|jd|��tj|�WdQXdS)Nz::1/24zUnexpected '/' in %r)rr�IPv6Address)rr=rrrrI�sz1AddressTestCase_v6.test_network_passed_as_addresscs4�fdd�}|d�|d�|d�dS)Nc	s0d}�j||��tj|�WdQXdS)NzAt least 3 parts expected in %r)rrrY)r=r7)rrrrJszUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplit�:z:1z	FEDC:9878r)rrJr)rr�*test_bad_address_split_v6_not_enough_partss

z=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partscsH�fdd�}|d�|d�|d�|d�|d�dS)Nc	s0d}�j||��tj|�WdQXdS)Nz At most 8 colons permitted in %r)rrrY)r=r7)rrrrJszTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplitz9: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.42r)rrJr)rr�)test_bad_address_split_v6_too_many_colonss



z<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonscsH�fdd�}|d�|d�|d�|d�|d�dS)Nc	s0d}�j||��tj|�WdQXdS)Nz+Exactly 8 parts expected without '::' in %r)rrrY)r=r7)rrrrJszSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplitz3ffe: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.42r)rrJr)rr�(test_bad_address_split_v6_too_many_partss



z;AddressTestCase_v6.test_bad_address_split_v6_too_many_partscs �fdd�}|d�dS)Nc	s0d}�j||��tj|�WdQXdS)Nz.Expected at most 7 other parts with '::' in %r)rrrY)r=r7)rrrrJ)szeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplitz1:2:3:4::5:6:7:8r)rrJr)rr�:test_bad_address_split_v6_too_many_parts_with_double_colon(szMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_coloncsz�fdd�}|d�|d�|d�|d�|d�|d�|d	�|d
�|d�|d�dS)
Nc	s0d}�j||��tj|�WdQXdS)Nz At most one '::' permitted in %r)rrrY)r=r7)rrrrJ1szZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplitz
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:::1r)rrJr)rr�/test_bad_address_split_v6_repeated_double_colon0s








zBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_coloncs>�fdd�}|d�|d�|d�|d�dS)Nc	s0d}�j||��tj|�WdQXdS)Nz0Leading ':' only permitted as part of '::' in %r)rrrY)r=r7)rrrrJBszRAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplitz:2001:db8::1z:1:2:3:4:5:6:7z
:1:2:3:4:5:6:z:6:5:4:3:2:1::r)rrJr)rr�'test_bad_address_split_v6_leading_colonAs



z:AddressTestCase_v6.test_bad_address_split_v6_leading_coloncs>�fdd�}|d�|d�|d�|d�dS)Nc	s0d}�j||��tj|�WdQXdS)Nz1Trailing ':' only permitted as part of '::' in %r)rrrY)r=r7)rrrrJMszSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplitz2001:db8::1:z1:2:3:4:5:6:7:z
::1.2.3.4:z::7:6:5:4:3:2:r)rrJr)rr�(test_bad_address_split_v6_trailing_colonLs



z;AddressTestCase_v6.test_bad_address_split_v6_trailing_coloncsW�fdd�}|dd�|dd�|dd�|d	d
�|dd�dS)
Nc	s-�jd||��tj|�WdQXdS)Nz%s in %r)rrrY)r=Zv4_error)rrr�assertBadAddressPartXszDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPartz3ffe::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'r)rrbr)rr�test_bad_v4_part_inWs
z&AddressTestCase_v6.test_bad_v4_part_incsd�fdd�}|dd�|dd�|dd�|d	d
�|dd�|d
d�dS)Nc	s@d||f}�jtj|���tj|�WdQXdS)Nz%Only hex digits permitted in %r in %r)rr#r$rrY)r=�partr7)rrr�
assertBadParthszAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPartz
3ffe::googZgoogz3ffe::-0z-0z3ffe::+0z+0z3ffe::-1z-1z	1.2.3.4::z1.2.3.4z1234:axy::bZaxyr)rrer)rrrTgs




z*AddressTestCase_v6.test_invalid_characterscsJ�fdd�}|dd�|dd�|dd�|d	d
�dS)Nc	s3d}�j|||��tj|�WdQXdS)Nz*At most 4 characters permitted in %r in %r)rrrY)r=rdr7)rrrreusz:AddressTestCase_v6.test_part_length.<locals>.assertBadPartz::00000Z00000z3ffe::10000Z10000z02001:db8::Z02001z2001:888888::1Z888888r)rrer)rr�test_part_lengthts



z#AddressTestCase_v6.test_part_lengthN)rrrrrYrrIr[r\r]r^r_r`rarcrTrfrrrrrX�s	



rXc@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�NetmaskTestMixin_v4z;Input validation on interfaces and networks is very similarc	Cs1d}|jd|��|j|�WdQXdS)Nz
1.2.3.4/32/24zOnly one '/' permitted in %r)rr)rr=rrr�test_split_netmask�sz&NetmaskTestMixin_v4.test_split_netmaskcsz�fdd�}|dd�|dd�|dd�|dd�|d	d�|d
d�|dtjd
��dS)Nc	s'�j|���j|�WdQXdS)N)rr)r=r
)rrr�assertBadAddress�szANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress�/zAddress cannot be emptyz/8rNzExpected 4 octetsz
google.comz10/8z	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r#r$)rrir)rr�test_address_errors�s





z'NetmaskTestMixin_v4.test_address_errorscCs�|jt|jd��d�x�tdd�D]�}d|}|j|�}|jt|�|�|jt|jd|j��|�|jt|jd|��|�|d	kr�dd|}n|jt|jd|j��|�q/WdS)
Nz192.0.2.0/255.255.255.0z192.0.2.0/24r�!z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%dr:)r:r)r�strr�range�netmask�hostmask)r�i�net_str�netrrr�test_valid_netmask�s
 #z&NetmaskTestMixin_v4.test_valid_netmaskcs��fdd�}|dd�|dd�|dd�|dd�|dd�|dd	�|dd
�|dd�|dd
�|dd�|dd�|dd�|dd�|dd�dS)NcsDd|}�jtj|����jd||f�WdQXdS)Nz%r is not a valid netmaskz%s/%s)rr#r$r)r=ror7)rrr�assertBadNetmask�s
zANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmaskz1.2.3.4r!z-1z+1z 1 �0x1Z33z254.254.255.256z1.a.2.3z1.1.1.1z254.xyz.2.3z240.255.0.0z
255.254.128.0z0.1.127.255�puddingz::r)rrur)rr�test_netmask_errors�s












z'NetmaskTestMixin_v4.test_netmask_errorsN)rrr�__doc__rhrkrtrxrrrrrg�s

rgc@seZdZejZdS)�InterfaceTestCase_v4N)rrrr�
IPv4Interfacerrrrrrz�srzc@seZdZejZdS)�NetworkTestCase_v4N)rrrr�IPv4Networkrrrrrr|�sr|c@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�NetmaskTestMixin_v6z;Input validation on interfaces and networks is very similarc	Cs1d}|jd|��|j|�WdQXdS)Nzcafe:cafe::/128/190zOnly one '/' permitted in %r)rr)rr=rrrrh�sz&NetmaskTestMixin_v6.test_split_netmaskcsd�fdd�}|dd�|dd�|dd�|dd�|d	d�|d
d�dS)Nc	s'�j|���j|�WdQXdS)N)rr)r=r
)rrrri�szANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddressrjzAddress cannot be emptyz/8z
google.comzAt least 3 partsz1.2.3.4z10/8z1234:axy::bzOnly hex digitsr)rrir)rrrk�s




z'NetmaskTestMixin_v6.test_address_errorscCs�|jt|jd��d�xctdd�D]R}d|}|jt|j|��|�|jt|jd|��|�q/WdS)Nz
2001:db8::/32r�z::/%dz::/0%d)rrmrrn)rrqrrrrrrt�s

z&NetmaskTestMixin_v6.test_valid_netmaskcs��fdd�}|dd�|dd�|dd�|dd�|dd�|dd�|dd	�|dd
�|dd�|dd�|d
d
�dS)NcsDd|}�jtj|����jd||f�WdQXdS)Nz%r is not a valid netmaskz%s/%s)rr#r$r)r=ror7)rrrru�s
zANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskz::1r!z1::z-1z+1z 1 rvZ129z1.2.3.4rwz::r)rrur)rrrx�s









z'NetmaskTestMixin_v6.test_netmask_errorsN)rrrryrhrkrtrxrrrrr~�s
r~c@seZdZejZdS)�InterfaceTestCase_v6N)rrrr�
IPv6Interfacerrrrrr��sr�c@seZdZejZdS)�NetworkTestCase_v6N)rrrr�IPv6Networkrrrrrr��sr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�FactoryFunctionErrorsc	Cs9d}d}|jt|||��||�WdQXdS)z3Ensure a clean ValueError with the expected messageZcamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r�
ValueError)rrZkindr=r7rrr�assertFactoryErrorsz(FactoryFunctionErrors.assertFactoryErrorcCs|jtjd�dS)N�address)r�r�
ip_address)rrrr�test_ip_address
sz%FactoryFunctionErrors.test_ip_addresscCs|jtjd�dS)NZ	interface)r�r�ip_interface)rrrr�test_ip_interface
sz'FactoryFunctionErrors.test_ip_interfacecCs|jtjd�dS)N�network)r�r�
ip_network)rrrr�test_ip_networksz%FactoryFunctionErrors.test_ip_networkN)rrrr�r�r�r�rrrrr�sr�c@s(eZdZdd�Zdd�ZdS)�
LargestObjectcCs
t|t�S)N)�
isinstancer�)r�otherrrr�__eq__szLargestObject.__eq__cCsdS)NFr)rr�rrr�__lt__szLargestObject.__lt__N)rrrr�r�rrrrr�sr�c@s(eZdZdd�Zdd�ZdS)�SmallestObjectcCs
t|t�S)N)r�r�)rr�rrrr�szSmallestObject.__eq__cCsdS)NFr)rr�rrr�__gt__szSmallestObject.__gt__N)rrrr�r�rrrrr�sr�c@s�eZdZejd�Zejd�Zejd�Z	ej
d�Zejd�Z
ejd�Zee	gZeegZeegZee
gZeeZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�ZdS)�ComparisonTestsr'cCsvt�}xf|jD][}|j||�|j||k�|j|j|�t�|j|j|�t�qWdS)N)�object�objects�assertNotEqual�assertFalserr��NotImplemented�__ne__)rr��objrrr�test_foreign_type_equality1s	z*ComparisonTests.test_foreign_type_equalitycCsNxG|jD]<}x3|jD](}||kr2qn|j||�qWq
WdS)N)r�r�)rrrrrr�test_mixed_type_equality:s
z(ComparisonTests.test_mixed_type_equalitycCs�x$|jD]}|j||j�q
Wx$|jD]}|j||j�q1Wx.|j|jgD]}|j||j�qbWx.|j|jgD]}|j||j�q�WdS)N)�v4_addresses�assertIn�v4net�v6_addresses�v6net�
v4_objects�assertNotIn�
v6_objects)rr�rrr�test_containmentCsz ComparisonTests.test_containmentcs�x�|jD]��x�|jD]��t�t���st�t���rPqn|jt��fdd��|jt��fdd��|jt��fdd��|jt��fdd��qWq
WdS)Ncs
��kS)Nrr)rrrr�<lambda>Rsz:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>cs
��kS)Nrr)rrrrr�Sscs
��kS)Nrr)rrrrr�Tscs
��kS)Nrr)rrrrr�Us)r�r��typer(r))rr)rrr�test_mixed_type_orderingMs*z(ComparisonTests.test_mixed_type_orderingcCsKt�}t�}t�}x)|jD]}|jt��||kWdQX|jt��||kWdQX|jt��||kWdQX|jt��||kWdQX|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�q%WdS)N)r�r�r�r�r(r)r
r�)rr�ZsmallestZlargestr�rrr�test_foreign_type_orderingWs(			z*ComparisonTests.test_foreign_type_orderingcCs�|j|j|jg}|j|j|jg}|j|t|jdt	j
��|j|t|jdt	j
��|j||t|jdt	j
��|jt
t	j
t��dS)N�key)�v4addrr��v4intf�v6addrr��v6intfr�sortedr�rZget_mixed_type_keyr�r�r�r�)rZ
v4_orderedZ
v6_orderedrrr�test_mixed_type_keyms	
	


z#ComparisonTests.test_mixed_type_keycCs�tjd�}tjd�}tjd�}tjd�}|jt|j|�|jt|j|�|jt|j|�|jt|j|�|jt|j|�|jt|j|�|jt|j|�|jt|j|�dS)Nz1.1.1.1z::1)rr�r�r(r)r�r�)rr�r�r�r�rrr�test_incompatible_versions|sz*ComparisonTests.test_incompatible_versionsN)rrrrrHr�r}r�r{r�rYr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�"s$


		

r�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1d_d`�Z2dadb�Z3dcdd�Z4dedf�Z5dgdh�Z6didj�Z7dkdl�Z8dmdn�Z9dodp�Z:dqdr�Z;dsdt�Z<dudv�Z=dwdx�Z>dydz�Z?d{d|�Z@d}d~�ZAdd��ZBd�d��ZCd�d��ZDd�d��ZEd�d��ZFd�S)��IpaddrUnitTestcCsptjd�|_tjd�|_tjd�|_tjd�|_tjd�|_	tj
d�|_dS)Nz1.2.3.4z
1.2.3.4/24z
1.2.3.0/24z2001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:1/64z2001:658:22a:cafe::/64)rrH�ipv4_addressr{�ipv4_interfacer}�ipv4_networkr��ipv6_address�ipv6_interfacer��ipv6_network)rrrr�setUp�szIpaddrUnitTest.setUpcCsB|jdttjd���|jdttjd���dS)NzIPv4Interface('1.2.3.4/32')z1.2.3.4zIPv6Interface('::1/128')z::1)rr%rr{r�)rrrr�testRepr�s		zIpaddrUnitTest.testReprcCs�|jtjd�dtjd��|jtjd�dtjd��|jtjd�dtjd	��|jtjd	�d
tjd��dS)Nz1.1.1.1�z1.1.2.0�z1.1.0.1z::1r9�z::ffffii��ii��)rrrHrY)rrrr�testAddressIntMath�sz!IpaddrUnitTest.testAddressIntMathcCsj|jttjd�|jttjdtj�|jttjd�|jttjdtj�dS)Nr'r9r6r6)r(r�rZv4_int_to_packedZ
IPV4LENGTHZv6_int_to_packedZ
IPV6LENGTH)rrrr�testInvalidIntToBytes�sz$IpaddrUnitTest.testInvalidIntToBytescCsvtjtjd�tjd�g�\}}|j||�|jdtjdd��|jdt|j��dS)Nz10.10.10.10z10.10.10.12rDrzIPv4Network('1.2.3.0/24'))rZ_find_address_rangerHrZ_count_righthand_zero_bitsr%r�)r�first�lastrrr�
testInternals�szIpaddrUnitTest.testInternalscCsIGdd�dtj�}|d�}|jtd��|jWdQXdS)Nc@seZdZdS)z8IpaddrUnitTest.testMissingAddressVersion.<locals>.BrokenN)rrrrrrr�Broken�sr�z	127.0.0.1zBroken.*version)rZ_BaseAddressrr�version)rr��brokenrrr�testMissingAddressVersion�sz(IpaddrUnitTest.testMissingAddressVersioncCsIGdd�dtj�}|d�}|jtd��|jWdQXdS)Nc@seZdZdS)z8IpaddrUnitTest.testMissingNetworkVersion.<locals>.BrokenN)rrrrrrrr��sr�z	127.0.0.1zBroken.*version)r�_BaseNetworkrrr�)rr�r�rrr�testMissingNetworkVersion�sz(IpaddrUnitTest.testMissingNetworkVersioncCsIGdd�dtj�}|d�}|jtd��|jWdQXdS)Nc@seZdZdS)z6IpaddrUnitTest.testMissingAddressClass.<locals>.BrokenN)rrrrrrrr��sr�z	127.0.0.1zBroken.*address)rr�rrZ_address_class)rr�r�rrr�testMissingAddressClass�sz&IpaddrUnitTest.testMissingAddressClasscCs�|jt|jj�d�|jt|jj�d�|jt|jj�d�|jt|jj�d�|jt|jj�d�dS)Niz1.2.3.0l	�/YE� z2001:658:22a:cafe::z::ffff:ffff:ffff:ffff)r�intr��network_addressrmr�rp)rrrr�testGetNetwork�szIpaddrUnitTest.testGetNetworkcCs�|j|jjtjd�j�tjd�}tjd�}|j|tjt|j���|j|tjt|j���d}|j|jjtj	|�j�|jtj|j
j�jd�|jtj|jj�jd�dS)Niz1.2.3.4z2001:658:22a:cafe:200:0:0:1l	�/YE� ��)
rr��_iprr{r�r�r�r�r�r�r�r�)r�ipv4�ipv6Zv6_intrrr�
testIpFromInt�s""zIpaddrUnitTest.testIpFromIntcCs�tj}|j|jjtjd�j�|j|d�|d��|j|jjtjd�j�|j|d�|d��|j|d
�|d��dS)Nsz255.254.253.252s����s X*�zffff:2:3:4:ffff::s��s��sr�z::r�s
����ss����s)rr�rr�r�r�r��ip)rr�rrr�testIpFromPacked�s	


zIpaddrUnitTest.testIpFromPackedcCst|jt|jj�d�|jt|jj�d�|jt|jj�d�|jt|jj�d�dS)Niz1.2.3.4l	�/YE� z2001:658:22a:cafe:200::1)rr�r�r�rmr�)rrrr�	testGetIp�szIpaddrUnitTest.testGetIpcCsn|jt|jj�d�|jt|jj�d�|jt|jj�d�|j|jjd�dS)Nl�z
255.255.255.0l	������@)rr�r�rormr��	prefixlen)rrrr�testGetNetmasks
zIpaddrUnitTest.testGetNetmaskcCs�tjd�}|jt|jj�d�|j|jd�d�|j|jd��|j|jd��|j	|jd��tj
d�}|jt|jj�d�|j|jd�d�dS)Nz	1.2.3.4/0r�0z0.0.0.0�invalidz::1/0)rr{rr�r�roZ_prefix_from_prefix_stringr
�_is_valid_netmaskr�r�)rZipv4_zero_netmaskZipv6_zero_netmaskrrr�testZeroNetmaskszIpaddrUnitTest.testZeroNetmaskcCs�|j}|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��tjd	�}|j|jd
�dS)Nr�z128.128.128.128z128.128.128.127z128.128.128.255z255.128.128.128z128.255.255.255z255.255.255.255z1.2.3.4z127.0.0.0/0.0.0.255�)	r�r�r�r
Z_is_hostmaskrr}rr�)rrsrrr�testIPv4NetAndHostmaskss	z&IpaddrUnitTest.testIPv4NetAndHostmaskscCst|jt|jj�d�|jt|jj�d�|jt|jj�d�|jt|jj�d�dS)Ni�z	1.2.3.255l	�����/YE� z%2001:658:22a:cafe:ffff:ffff:ffff:ffff)rr�r��broadcast_addressrmr�)rrrr�testGetBroadcast*szIpaddrUnitTest.testGetBroadcastcCs6|j|jjjd�|j|jjjd�dS)Nr�r�)rr�r�r�r�)rrrr�testGetPrefixlen3szIpaddrUnitTest.testGetPrefixlencCs�|j|jj�jd�|jt|jj�j�d�|jtjd�jj�tj	d��|j|j
j�jd�|jt|j
j�j�d�|jtjd�jj�tjd��dS)N�z1.2.2.0z	0.0.0.0/0�?z2001:658:22a:cafe::z::0/0)
rr��supernetr�rmr�rr{r�r}r�r�r�)rrrr�testGetSupernet7szIpaddrUnitTest.testGetSupernetcCs�|j|jjd�jd�|jt|jjd�j�d�|j|jjd�jd�|jt|jjd�j�d�dS)Nr?�z1.2.0.0�=z2001:658:22a:caf8::)rr�r�r�rmr�r�)rrrr�testGetSupernet3EszIpaddrUnitTest.testGetSupernet3cCs�|jt|jjdddd�|jt|jjdd�|j|jjdd�|jjdd��|jt|jjdddd�|jt|jjdd�|j|jjdd�|jjdd��dS)	N�prefixlen_diffr9�
new_prefixr'���A�>)r(r�r�r�rr�)rrrr�testGetSupernet4Ns

zIpaddrUnitTest.testGetSupernet4cCs�t|jj��}|jdt|��|jtjd�|d�|jtjd�|d	�|jtjd�tjd�gttjd�j���dS)
N�z1.2.3.1rz	1.2.3.254r'z2.0.0.0z2.0.0.1z
2.0.0.0/31r6)�listr��hostsr�lenrrHr�)rr�rrr�	testHosts]szIpaddrUnitTest.testHostscCs|jt|jjdd��t|jjdd���|jtt|jjdd��|jtt|jjdddd��|jt|jjdd��t|jjdd���|jtt|jjdd��|jtt|jjdddd��dS)	Nr�r?r��r�r��Dr�)rr�r��subnetsr(r�r�r�)rrrr�testFancySubnettinghs
z"IpaddrUnitTest.testFancySubnettingcCs�|jt|jj��djd�|jtt|jj��dj�d�|jtt|jj��dj�d�|jt|jj��djd�dS)Nrr�z1.2.3.0r'z	1.2.3.128r�)rr�r�r�r�rmr�r�)rrrr�testGetSubnetsxs&zIpaddrUnitTest.testGetSubnetscCsktjd�}dd�|j�D�}dd�|jd�D�}|j|dg�|j||�dS)Nz
1.2.3.4/32cSsg|]}t|��qSr)rm)�.0�xrrr�
<listcomp>�s	z;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>cSsg|]}t|��qSr)rm)r�r�rrrr��s	r9)rr}r�r)rr��subnets1�subnets2rrr�testGetSubnetForSingle32�s
z'IpaddrUnitTest.testGetSubnetForSingle32cCsktjd�}dd�|j�D�}dd�|jd�D�}|j|dg�|j||�dS)Nz::1/128cSsg|]}t|��qSr)rm)r�r�rrrr��s	z<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>cSsg|]}t|��qSr)rm)r�r�rrrr��s	r9)rr�r�r)rr�rrrrr�testGetSubnetForSingle128�s
z(IpaddrUnitTest.testGetSubnetForSingle128cCszdd�|jjd�D�}|j|ddddg�dd�|jjd�D�}|j|d	d
ddg�dS)
NcSsg|]}t|��qSr)rm)r�r�rrrr��s	z.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>r9z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26cSsg|]}t|��qSr)rm)r�r�rrrr��s	z2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r�r�rr�)rZipsZipsv6rrr�testSubnet2�szIpaddrUnitTest.testSubnet2cCs�|jtt|jjjd��|jtt|jjd��|jtt|jjjd��|jtt|jjd��dS)N�	r�)	r(r�r�r�r�r�r�r�r�)rrrr�testSubnetFailsForLargeCidrDiff�sz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffcCs<|jt|jjjd�|jt|jjjd�dS)Nr�r�)r(r�r�r�r�r�)rrrr�!testSupernetFailsForLargeCidrDiff�s		z0IpaddrUnitTest.testSupernetFailsForLargeCidrDiffcCs�|jtt|jjjd��|jtt|jjd��|jtt|jjjd��|jtt|jjd��dS)Nr'r6r6r6r6)	r(r�r�r�r�r�r�r�r�)rrrr�"testSubnetFailsForNegativeCidrDiff�sz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffcCs�|j|jjd�|jt|jj��djd�|j|jj�jd�|j|jjd�|jt|jj��djd�|j|jj�jd�dS)Nr�rrDilll )rr�Z
num_addressesr�r�r�r�)rrrr�testGetNum_Addresses�sz#IpaddrUnitTest.testGetNum_AddressescCs�|jtjd�|j�|jtjd�|j�tjd�}|j||j�|jtjd�jtjd���dS)Nz1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15)	r�rr{r�r�rHr�r}�__contains__)r�addr1rrr�testContains�s

zIpaddrUnitTest.testContainscCsW|jt|jd�d�|jt|jjd�|jt|jd�d�dS)Nr@z1.2.3.5r�z2001:658:22a:cafe::5)rrmr�r(�
IndexError�__getitem__r�)rrrr�testNth�szIpaddrUnitTest.testNthcCs�tjd�}|jd|j�t|�}|jdt|d��|jdt|d��|jdt|d��|jdt|d��|j|d	|d
�dS)Nz172.31.255.128/255.255.255.240�z172.31.255.128rz172.31.255.143r'r6r6r6r6)rr}rr�r�rm)rr=Z	addr_listrrr�testGetitem�szIpaddrUnitTest.testGetitemcCsB|j|jtjd�k�|j|jtjd�k�|j|jtjd�k�|j|jdk�|j|jgk�|j|jdk�|j|jtjd�k�|j|jtjd�k�|j|jtjd�k�|j|jdk�|j|jgk�|j|jdk�dS)Nz
1.2.3.4/24z
1.2.3.4/23z::1.2.3.4/24r!r9z2001:658:22a:cafe:200::1/64z2001:658:22a:cafe:200::1/63)r
r�rr{r�r�r�)rrrr�	testEqual�s$zIpaddrUnitTest.testEqualcCs|j|jtjd�k�|j|jtjd�k�|j|jtjd�k�|j|jdk�|j|jgk�|j|jdk�|j|jtjd�k�|j|jdk�|j|jgk�|j|jdk�|j|jtjd�k�|j|jtjd�k�|j|jtjd�k�|j|jdk�|j|jgk�|j|jdk�|j|j	tjd	�k�|j|j	dk�|j|j	gk�|j|j	dk�dS)
Nz
1.2.3.4/24z
1.2.3.4/23z::1.2.3.4/24r!r9z1.2.3.5z2001:658:22a:cafe:200::1/64z2001:658:22a:cafe:200::1/63z1.2.3.4)
r�r�rr{r
r�r�rHr�r�)rrrr�testNotEqual�s8zIpaddrUnitTest.testNotEqualcCs#|jttjd��d�dS)Nz1.2.3.4/255.255.255.255z
1.2.3.4/32)rrmrr{)rrrr�testSlash32Constructorsz%IpaddrUnitTest.testSlash32ConstructorcCs#|jttjd��d�dS)Nz::1/128)rrmrr�)rrrr�testSlash128Constructorsz&IpaddrUnitTest.testSlash128ConstructorcCs#|jttjd��d�dS)Nz1.2.3.4/0.0.0.0z	1.2.3.4/0)rrmrr{)rrrr�testSlash0Constructor"sz$IpaddrUnitTest.testSlash0ConstructorcCsmtjd�}tjd�}tjd�}tjd�}tjd�}tjd�}tj||||||g�}|jt|�tjd�tjd�g�tjd�}tjd�}tjd�}tjd�}tj||||g�}|jt|�tjd�g�tjd�}tjd	�}tjd
�}tjd�}tjd�}tjd
�}tj||||||g�}|jt|�tjd
�tjd�g�tj||g�}|jt|�tjd�g�tjd�}}	|jttj||	g��|g�tjd�}}	|jttj||	g��tjd�g�tjd�}tjd�}tjd�}tj|||g�}|jt|�|g�tjd�tjd�ftjd�tjd�ftjd�tjd�fg}
x0|
D](\}}|j	t
tj||g�q=WdS)Nz1.1.1.0z1.1.1.1z1.1.1.2z1.1.1.3z1.1.1.4z
1.1.1.0/30z
1.1.1.4/32z
1.1.0.0/24z
1.1.1.0/24z
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::/120z	2001::/96z::1z
1.1.0.0/32z
2001::/128)rrHZcollapse_addressesrr�r}r�r�r�r(r))r�ip1�ip2�ip3�ip4Zip5Zip6Z	collapsedZip_same1Zip_same2Zaddr_tuplesrrr�testCollapsing&sl
zIpaddrUnitTest.testCollapsingcCs�tj}tjd�}tjd�}Gdd�dtj�}|d�}|d�}|jtt|||��|jtt||tjd���|jt|||��dtj	d��tjd�}|jt|||��tj	d	�tj	d�g�tj
d�}tj
tj
j�}|jtjd
�gt|||���tjd�}tjd�}|jt|||��dtj	d
��tjd�}|jt|||��tj	d
�tj	d�g�|jtt|tjd�tjd���|jtt|tj	d�tj	d���|jtt|tj	d�tj	d���|jtt|tjd�tj	d���dS)Nz1.1.1.0z	1.1.1.255c@s"eZdZedd��ZdS)z3IpaddrUnitTest.testSummarizing.<locals>.IPv7AddresscSsdS)N�r)rrrrr�~sz;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.versionN)rrrrr�rrrr�IPv7Address}srz::1rz
1.1.1.0/24z1.1.1.8z
1.1.1.0/29z	0.0.0.0/0z1::z$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z1.1.0.0z::)
rZsummarize_address_ranger�rYr(r�r�r)rr�rHZ	_ALL_ONESr})rZ	summarizerrrZip_invalid1Zip_invalid2rrr�testSummarizingusP	zIpaddrUnitTest.testSummarizingcCs�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�dS)Nz1.1.1.1z1.1.1.2z::1z::2)r
rr�)rrrr�testAddressComparison�sz$IpaddrUnitTest.testAddressComparisoncCs�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�dS)Nz1.1.1.1z1.1.1.2z::1z::2)r
rr�)rrrr�testInterfaceComparison�sz&IpaddrUnitTest.testInterfaceComparisonc	Cs�tjd�}tjd�}tjd�}|j||k�|j||k�|j|j|�d�|j|j|�d�|j|j|�d�|j|j|�d�|j|j|�d�|j|j�|j�k�tjd�}tjd�}tjd�}|j||k�|j||k�|j|j|�d�|j|j�|j�k�|jt|j	j|j
�tjd	�}tjd
�}|jt|j
|�|jt|j|�|jt|j
|�|jt|j|�tjd�}|j||k�|j||k�tjd�}|j||k�|j||k�|j||k�|j||k�tjd
�}|j||k�|j||k�|j||k�|j||k�tjd�}tjd�}tjd�}tjd�}||||g}||||g}|j�|j||�||||g}|j�|j||�|j|j
tjd��t�|j|j
tjd��t�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�dS)Nz
1.1.1.0/24z
1.1.1.0/32z
1.1.2.0/24rr'z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96z::/0z	0.0.0.0/0z
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.2z1.1.1.1z1.1.1.2z::1z::2r6r6r6)rr}r
rZcompare_networksZ_get_networks_keyr�r(r)r�r�r�r{r�r�r�r��sortZassertIsr�r�)	rrrrr�r�rr�Zunsortedrrr�testNetworkComparison�s�		


z$IpaddrUnitTest.testNetworkComparisoncCs0|jttjd�|jttjd�dS)Nz192.168.1.1/24z::1/120)r(r�rr�)rrrr�testStrictNetworkssz!IpaddrUnitTest.testStrictNetworkscCsytjd�}tjd�}tjd�}|j|jj|��|j|jj|��|j|j|��dS)Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)rr}r
r�Zoverlapsr�)rr�Zother2Zother3rrr�testOverlapsszIpaddrUnitTest.testOverlapscCs�d}tj|�}tjd|�}|jt|j�t|j��tjd|�}|j|j|j�|jtjtjd�dS)Nz192.168.0.1z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	rr{r�rr�r�r�r(r)rZipv4_stringr�Z
v4compat_ipv6Z
v4mapped_ipv6rrr�testEmbeddedIpv4's"zIpaddrUnitTest.testEmbeddedIpv4cCsH|jtjd�tjd��|jtjd�tjd��dS)Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201)rrr�)rrrr�testIPv6AddressTooLarge2sz&IpaddrUnitTest.testIPv6AddressTooLargecCs0|j|jjd�|j|jjd�dS)Nr�r�)rr�r�r�)rrrr�
testIPVersion:szIpaddrUnitTest.testIPVersioncCs0|j|jjd�|j|jjd�dS)Nr:rD)rr�Z
max_prefixlenr�)rrrr�testMaxPrefixLength>sz"IpaddrUnitTest.testMaxPrefixLengthcCs�|j|jjd�|jtjd�jd�|j|jjd�|jtjd�jd
�|jtjd	�jd�dS)Nsz255.254.253.252s����s X*�zffff:2:3:4:ffff::s
����sr�z::1:0:0:0:0s�ss����ssss)rr�Zpackedrr{r�r�)rrrr�
testPackedBszIpaddrUnitTest.testPackedcCs�tjd�}tjd�}tjd�}tjd�}|jtjt|��|jtjt|��|jtjt|��|jtjt|��dS)Nz1.2.3.4z	::1.2.3.4)	rr�r�rr}r�rHr�rY)rZipv4netZipv4addrZipv6netZipv6addrrrr�
testIpTypePszIpaddrUnitTest.testIpTypecCs|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd	�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j	�|jdtjd�j�|jdtjd�j	�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d	�j�|jdtj
d
�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtj
d�j�|jdtjd�j�dS)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/24z0.0.0.0z	224.1.1.1z	240.0.0.1z239.255.255.255z192.168.1.1z169.254.100.200z169.255.100.200z127.100.200.254z
127.42.0.0)rrr��is_multicastr��is_reserved�
is_private�
is_link_local�is_loopback�	is_globalr��is_unspecified)rrrr�testReservedIpv4Zst



		
	
	

				

			zIpaddrUnitTest.testReservedIpv4cCsD|jdtjd�j�|jdtjd �j�|jdtjd�j�|jdtjd�j�|jdtjd	�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j	�|jdtjd�j	�|jdtjd�j	�|jdtjd�j�|jdtjd�j
�|jdtjd�j�|jdtjd"�j�|jdtjd�j�|jdtjd�j�|jdtjd	�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd
�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j�|jdtjd�j	�|jdtjd�j	�|jdtjd�j�|jdtjd�j�dS)#NTzffff::r9rDr'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/127z::z::2z0::0z::1z::/127z2001::1/128z
200::1/128z100::z4000::1/128l	l	���������l	l	���������)
rrr�r,Z
is_site_localr.r/r�r0r2r1r�r-)rrrr�testReservedIpv6�sx




		




zIpaddrUnitTest.testReservedIpv6cCsj|jtjd�jtjd��|jtjd�jd�|jtjd�jtjd��dS)Nz::ffff:192.168.1.1z192.168.1.1z
::c0a8:101z::ffff:c0a8:101)rrr�Zipv4_mapped)rrrr�testIpv4Mapped�szIpaddrUnitTest.testIpv4MappedcCs�tjd�}tjd�}tjd�}tjd�}tjd�}|jtt|j|���tjd�tjd�g�|jtt|j|��|jt	t|j|��|jt	t|j|��|jt|j|��g�dS)Nz10.1.1.0/24z10.1.1.0/26z10.2.1.0/24z10.1.1.0z2001:db8::0/32z10.1.1.64/26z
10.1.1.128/25)
rr�r�rr�r�Zaddress_excluder(r�r))rr�addr2�addr3�addr4�addr5rrr�testAddrExclude�szIpaddrUnitTest.testAddrExcludecCsC|jttjd��ttjd���|jttjd��ttjd���|jttjd��ttjd���|jttjd��ttjttjd�j����tjd�}tjd�}i}d||j<d||j	<d||<d||<|j
|j|�|j
||�dS)Nz10.1.1.0/24z10.1.1.0z1.2.3.4z1::)r�hashrr�r�r�r�r�r�r�r�)rrrZdummyrrr�testHashs$	



zIpaddrUnitTest.testHashcCs?|j}|jd|j�|j}|jt|jd�dS)Nz
1.2.3.0/24r9rDr'l	l	)r�r�
compressedr�r(r�Z_string_from_ip_int)rrsrrr�testIPBasess		zIpaddrUnitTest.testIPBasescCs\|j}|jd|j�|jd|j�|jd|j�|jdt|��dS)Nz2001:658:22a:cafe::/64z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)r�r�with_prefixlen�with_netmask�
with_hostmaskrm)rrsrrr�testIPv6NetworkHelperss		
	
z%IpaddrUnitTest.testIPv6NetworkHelperscCs\|j}|jd|j�|jd|j�|jd|j�|jdt|��dS)Nz
1.2.3.0/24z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r�rr?r@rArm)rrsrrr�testIPv4NetworkHelpers's
	z%IpaddrUnitTest.testIPv4NetworkHelperscCs�tjd�}tj|�}tjd�}tj|�}tjd�}tjd�}|j||�|j||�|j|tj|��|j|tj|��dS)Nz10.1.1.0/24z2001:658:22a:cafe:200::1/64z1.1.1.1z2001:658:22a:cafe:200::1)rr�r�rHrYr)rrr6r7r8r9Zaddr6rrr�testCopyConstructor.sz"IpaddrUnitTest.testCopyConstructorcCs�idd6dd6dd6dd6dd6d	d
6dd6d
d6dd6dd6dd6dd6dd6dd6dd6dd6dd 6d!d"6d#d$6}x?t|j��D]+\}}|j|ttj|���q�WdS)%Nz1:2:3:4:5:6:7:8/128z1:2:3:4:5:6:7:8z2001:0:0:4::8/128z2001:0:0:4:0:0:0:8z2001::4:5:6:7:8/128z2001:0:0:4:5:6:7:8z2001:0:3:4:5:6:7:8/128z2001:0:3:4:5:6:7:8z0:0:3::ffff/128z0:0:3:0:0:0:0:ffffz::4:0:0:0:ffff/128z0:0:0:4:0:0:0:ffffz::5:0:0:ffff/128z0:0:0:0:5:0:0:ffffz1::4:0:0:7:8/128z1:0:0:4:0:0:7:8z::/128z0:0:0:0:0:0:0:0z::/0z0:0:0:0:0:0:0:0/0z::1/128z0:0:0:0:0:0:0:1z2001:658:22a:cafe::/66z*2001:0658:022a:cafe:0000:0000:0000:0000/66z
::102:304/128z	::1.2.3.4z1:2:3:4:5:ffff:102:304/128z1:2:3:4:5:ffff:1.2.3.4z0:7:6:5:4:3:2:1/128z::7:6:5:4:3:2:1z0:7:6:5:4:3:2:0/128z::7:6:5:4:3:2:0z7:6:5:4:3:2:1:0/128z7:6:5:4:3:2:1::z0:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1::)r��itemsrrmrr�)rZtest_addressesZuncompressedr=rrr�testCompressIPv6Address;s.
z&IpaddrUnitTest.testCompressIPv6AddresscCs�tjd�}tjd�}tjd�}tjd�}|jd|j�|jdtjd�j�|jd|j�|jd	|j�|jd|j�dS)
Nz2001::1z2001:0:5ef5:79fd:0:59d:a0e5:ba1z	2001::/96z
192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128z::1/128z'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)rr�rYr�rHrZexploded)rrr6r7r8rrr�testExplodeShortHandIpStrVs	
		
	
z(IpaddrUnitTest.testExplodeShortHandIpStrcCs6|jdt|j��|jdt|j��dS)Nil	�/YE� )rr�r�r�)rrrr�testIntRepresentationfs	z$IpaddrUnitTest.testIntRepresentationcCs<|jtjd�jd�|jtjd�jd�dS)Nr'r�r�)rrr�r�r�)rrrr�testForceVersionkszIpaddrUnitTest.testForceVersioncCs�|j|jjd�|j|jjd�|j|jjd�|j|jjd�|j|jjd�|j|jjd�dS)Nz
1.2.3.4/24z1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255z2001:658:22a:cafe:200::1/64z.2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::z.2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff)rr�r?r@rAr�)rrrr�testWithStaroszIpaddrUnitTest.testWithStarcCs|jd|jj�|jd|jj�|jd|jj�|j|jjtjd��|j|jjtjd��|j|jjtjd��|j	d|jj�|j	d|jj�|jd|j
j�|jd|j
j�|j|j
jtjd��|j|jj
jtjd��|j|j
jtjd��|j|j
jtjd	��|j|jj
jtjd��|j|jj
jtjd	��|j	d|j
j�|j	d|j
j�|j	d|jj
j�|j	d|jj
j�dS)
Nr�r�rpz1.2.3.0z	1.2.3.255z	0.0.0.255z2001:658:22a:cafe::z%2001:658:22a:cafe:ffff:ffff:ffff:ffffz::ffff:ffff:ffff:ffff)r�r��_cacherr�rrHr�rpr�r�rYr�r�)rrrr�testNetworkElementCachings>	z(IpaddrUnitTest.testNetworkElementCachingcCs�tjd�}tjd�}d}|j||ftj|�j�d}|jtj|�j�d}|jtj|�j�tjd�}|jtjd�tjd�f|j�dS)	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:fdd2z2001:0:5ef5:79fd:0:59d:a0e5:ba1z94.245.121.253z95.26.244.94)rrHrr�Zteredor�rY)rZserverZclientZteredo_addr�bad_addrrrr�
testTeredo�szIpaddrUnitTest.testTeredocCsNtjd�}tjd�}|jtjd�|j�|j|j�dS)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z
172.29.45.100)rr�rrHZ	sixtofourr�)rZ
sixtofouraddrrMrrr�
testsixtofour�s

zIpaddrUnitTest.testsixtofourN)Grrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr	rrrrrrrrrrrr r"r#r$r%r&r'r(r*r+r3r4r5r:r<r>rBrCrDrFrGrHrIrJrLrNrOrrrrr��s�
			


!O<

V
FM	
-r��__main__)ryZunittestr#r�	functoolsr*rZTestCaserr r/rBrGrXrgrzr|r~r�r�r��total_orderingr�r�r�r�r�mainrrrr�<module>s:6#(Z�?2l����<