Your IP : 216.73.217.129


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_ipaddress.cpython-35.pyc



��Yf�T�@sdZddlZddlZddlZddlZddlZddlZddlZddlZGdd�dej	�Z
Gdd�d�ZGdd�de�ZGd	d
�d
e�Z
Gdd�de
e�ZGd
d�de
e
�ZGdd�de�ZGdd�de
e�ZGdd�de
e�ZGdd�de
�ZGdd�de
e�ZGdd�de
e�ZGdd�de
�ZejGdd�d��ZejGdd �d ��ZGd!d"�d"ej	�ZGd#d$�d$ej	�Zed%krej�dS)&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/python35/lib64/python3.5/test/test_ipaddress.py�factory$szBaseTestCase.factoryc	gs`|r||}|j||�}|�}|VWdQRX|jjdk	r\|j|jj�dS)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�assertAddressError8s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�assertInstancesEqualBsz!BaseTestCase.assertInstancesEqualN)�__name__�
__module__�__qualname__�propertyr�
contextlib�contextmanagerrrrrrrrrrs
rc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�CommonTestMixinc	Cs(|jd��|jd�WdQRXdS)NzAddress cannot be empty�)rr)rrrr�test_empty_addressIsz"CommonTestMixin.test_empty_addressc	Cs7|jtjtd����|jd�WdQRXdS)Nz1.0g�?)r�re�escape�reprr)rrrr�test_floats_rejectedMsz$CommonTestMixin.test_floats_rejectedcCs[|jttj|jd��|jtt|jd��|jtt|jd��dS)N�)�assertRaises�	TypeError�operator�indexr�hex�bytes)rrrr�test_not_an_index_issue15559Qsz,CommonTestMixin.test_not_an_index_issue15559cCsvxottjd�D]Z}|jd|��?|j|�}tjtj||��}|j||�WdQRXqWdS)Nr'�proto)�range�pickleZHIGHEST_PROTOCOLZsubTestr�loads�dumpsr)r�addrr/�x�yrrr�pickle_testXs
zCommonTestMixin.pickle_testN)rrrr"r&r.r7rrrrr Gs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_zerosbsz%CommonTestMixin_v4.test_leading_zeroscCs$|jdd�|jdd�dS)Nrz0.0.0.0lPz192.168.0.1)r)rrrr�test_intfszCommonTestMixin_v4.test_intcCs6|jtjd�d�|jtjd�d�dS)N�00000000z0.0.0.0�c0a80001z192.168.0.1)rr-�fromhex)rrrr�test_packedjszCommonTestMixin_v4.test_packedc	Cs7d}|jtj|���|jd�WdQRXdS)Nz,-1 (< 0) is not permitted as an IPv4 addressr'���)rr#r$r)r�msgrrr�test_negative_ints_rejectednsz.CommonTestMixin_v4.test_negative_ints_rejectedc
Cs;d}|jtj|d���|jd�WdQRXdS)Nz1%d (>= 2**32) is not permitted as an IPv4 address�� ll)rr#r$r)rr@rrr�test_large_ints_rejectedssz+CommonTestMixin_v4.test_large_ints_rejectedcs*�fdd�}|d�|d�dS)Nc	sMt|�}d}�jtj|||f����j|�WdQRXdS)Nz4%r (len %d != 4) is not permitted as an IPv4 address)r-rr#r$r)�lengthr4r@)rrr�assertBadLengthys#zBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength��r)rrFr)rr�test_bad_packed_lengthxs
z)CommonTestMixin_v4.test_bad_packed_lengthN)	rrrr9r:r>rArDrIrrrrr8`sr8c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CommonTestMixin_v6cCs$|jdd�|jdd�dS)Nz
0000::0000z::z000::c0a8:0001z::c0a8:1)r)rrrrr9�sz%CommonTestMixin_v6.test_leading_zeroscCs$|jdd�|jdd�dS)Nrz::lPz::c0a8:1)r)rrrrr:�szCommonTestMixin_v6.test_intcCstd�tjd�}|j|d�td�tjd�}|j|d�tjd�td�}|j|d�dS)N�r;z::r<z::c0a8:1zc0a8:1::)r-r=r)rr4rrrr>�szCommonTestMixin_v6.test_packedc	Cs7d}|jtj|���|jd�WdQRXdS)Nz,-1 (< 0) is not permitted as an IPv6 addressr'r?)rr#r$r)rr@rrrrA�sz.CommonTestMixin_v6.test_negative_ints_rejectedc
Cs;d}|jtj|d���|jd�WdQRXdS)Nz2%d (>= 2**128) is not permitted as an IPv6 addressrB�l	l	)rr#r$r)rr@rrrrD�sz+CommonTestMixin_v6.test_large_ints_rejectedcs*�fdd�}|d�|d�dS)Nc	sZt|�}d}�jtj|||f����j|��j|�WdQRXdS)Nz5%r (len %d != 16) is not permitted as an IPv6 address)r-rr#r$r)rEr4r@)rrrrF�s
#
zBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength��r)rrFr)rrrI�s
z)CommonTestMixin_v6.test_bad_packed_lengthN)	rrrr9r:r>rArDrIrrrrrJ�srJc@s�eZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZdS)�AddressTestCase_v4c	Cs1d}|jd|��tj|�WdQRXdS)Nz127.0.0.1/24zUnexpected '/' in %r)rr�IPv4Address)rr4rrr�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|�WdQRXdS)NzExpected 4 octets in %r)rrrP)r4)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)rrRr)rr�test_bad_address_split�s0





















z)AddressTestCase_v4.test_bad_address_splitcs*�fdd�}|d�|d�dS)Nc	s+�jd|��tj|�WdQRXdS)NzEmpty octet not permitted in %r)rrrP)r4)rrr�assertBadOctet�s	
z;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctetz	42..42.42z...r)rrXr)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	sAd||f}�jtj|���tj|�WdQRXdS)Nz)Only decimal digits permitted in %r in %r)rr#r$rrP)r4�octetr@)rrrrX�szBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctetz0x0a.0x0a.0x0a.0x0arTz0xa.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)rrXr)rr�test_invalid_characters�s







z*AddressTestCase_v4.test_invalid_characterscs0�fdd�}|dd�|dd�dS)Nc	sAd}�jtj|||f���tj|�WdQRXdS)Nz9Ambiguous (octal/decimal) value in %r not permitted in %r)rr#r$rrP)r4rZr@)rrrrX�s#zGAddressTestCase_v4.test_octal_decimal_ambiguity.<locals>.assertBadOctetz016.016.016.016rSz001.000.008.016Z008r)rrXr)rr�test_octal_decimal_ambiguity�s
z/AddressTestCase_v4.test_octal_decimal_ambiguitycs0�fdd�}|dd�|dd�dS)Nc	sAd}�jtj|||f���tj|�WdQRXdS)Nz*At most 3 characters permitted in %r in %r)rr#r$rrP)r4rZr@)rrrrX�s#z<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctetz0000.000.000.000Z0000z12345.67899.-54321.-98765Z12345r)rrXr)rr�test_octet_length�s
z$AddressTestCase_v4.test_octet_lengthcs0�fdd�}|dd�|dd�dS)Nc	sAd||f}�jtj|���tj|�WdQRXdS)Nz$Octet %d (> 255) not permitted in %r)rr#r$rrP)r4rZr@)rrrrX�sz;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctetz	257.0.0.0iz
192.168.0.999i�r)rrXr)rr�test_octet_limit�s
z#AddressTestCase_v4.test_octet_limitcCs|jd�dS)Nz	192.0.2.1)r7)rrrr�test_pickleszAddressTestCase_v4.test_picklecCstj|jd��dS)Nz	192.0.2.1)�weakref�refr)rrrr�test_weakrefszAddressTestCase_v4.test_weakrefN)rrrrrPrrQrWrYr\r]r^r_r`rcrrrrrO�s					rOc@s�eZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS)�AddressTestCase_v6c	Cs1d}|jd|��tj|�WdQRXdS)Nz::1/24zUnexpected '/' in %r)rr�IPv6Address)rr4rrrrQsz1AddressTestCase_v6.test_network_passed_as_addresscs4�fdd�}|d�|d�|d�dS)Nc	s1d}�j||��tj|�WdQRXdS)NzAt least 3 parts expected in %r)rrre)r4r@)rrrrRszUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplit�:z:1z	FEDC:9878r)rrRr)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	s1d}�j||��tj|�WdQRXdS)Nz At most 8 colons permitted in %r)rrre)r4r@)rrrrRszTAddressTestCase_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)rrRr)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	s1d}�j||��tj|�WdQRXdS)Nz+Exactly 8 parts expected without '::' in %r)rrre)r4r@)rrrrR+szSAddressTestCase_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)rrRr)rr�(test_bad_address_split_v6_too_many_parts*s



z;AddressTestCase_v6.test_bad_address_split_v6_too_many_partscs �fdd�}|d�dS)Nc	s1d}�j||��tj|�WdQRXdS)Nz.Expected at most 7 other parts with '::' in %r)rrre)r4r@)rrrrR8szeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplitz1:2:3:4::5:6:7:8r)rrRr)rr�:test_bad_address_split_v6_too_many_parts_with_double_colon7szMAddressTestCase_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	s1d}�j||��tj|�WdQRXdS)Nz At most one '::' permitted in %r)rrre)r4r@)rrrrR@szZAddressTestCase_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)rrRr)rr�/test_bad_address_split_v6_repeated_double_colon?s








zBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_coloncs>�fdd�}|d�|d�|d�|d�dS)Nc	s1d}�j||��tj|�WdQRXdS)Nz0Leading ':' only permitted as part of '::' in %r)rrre)r4r@)rrrrRQszRAddressTestCase_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)rrRr)rr�'test_bad_address_split_v6_leading_colonPs



z:AddressTestCase_v6.test_bad_address_split_v6_leading_coloncs>�fdd�}|d�|d�|d�|d�dS)Nc	s1d}�j||��tj|�WdQRXdS)Nz1Trailing ':' only permitted as part of '::' in %r)rrre)r4r@)rrrrR\szSAddressTestCase_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)rrRr)rr�(test_bad_address_split_v6_trailing_colon[s



z;AddressTestCase_v6.test_bad_address_split_v6_trailing_coloncsW�fdd�}|dd�|dd�|dd�|d	d
�|dd�dS)
Nc	s.�jd||��tj|�WdQRXdS)Nz%s in %r)rrre)r4Zv4_error)rrr�assertBadAddressPartgszDAddressTestCase_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)rrnr)rr�test_bad_v4_part_infs
z&AddressTestCase_v6.test_bad_v4_part_incsd�fdd�}|dd�|dd�|dd�|d	d
�|dd�|d
d�dS)Nc	sAd||f}�jtj|���tj|�WdQRXdS)Nz%Only hex digits permitted in %r in %r)rr#r$rre)r4�partr@)rrr�
assertBadPartwszAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPartz
3ffe::googZgoogz3ffe::-0z-0z3ffe::+0z+0z3ffe::-1z-1z	1.2.3.4::z1.2.3.4z1234:axy::bZaxyr)rrqr)rrr\vs




z*AddressTestCase_v6.test_invalid_characterscsJ�fdd�}|dd�|dd�|dd�|d	d
�dS)Nc	s4d}�j|||��tj|�WdQRXdS)Nz*At most 4 characters permitted in %r in %r)rrre)r4rpr@)rrrrq�sz:AddressTestCase_v6.test_part_length.<locals>.assertBadPartz::00000Z00000z3ffe::10000Z10000z02001:db8::Z02001z2001:888888::1Z888888r)rrqr)rr�test_part_length�s



z#AddressTestCase_v6.test_part_lengthcCs|jd�dS)Nz
2001:db8::)r7)rrrrr`�szAddressTestCase_v6.test_picklecCstj|jd��dS)Nz
2001:db8::)rarbr)rrrrrc�szAddressTestCase_v6.test_weakrefN)rrrrrerrQrgrhrirjrkrlrmror\rrr`rcrrrrrds	



rdc@sReZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�NetmaskTestMixin_v4z;Input validation on interfaces and networks is very similarc	Cs2d}|jd|��|j|�WdQRXdS)Nz
1.2.3.4/32/24zOnly one '/' permitted in %r)rr)rr4rrr�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|�WdQRXdS)N)rr)r4r
)rrr�assertBadAddress�szANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress�/zAddress cannot be emptyz/8rVzExpected 4 octetsz
google.comz10/8z	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r#r$)rrur)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|}|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%drC)rCr)r�strrr0�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)NcsEd|}�jtj|����jd||f�WdQRXdS)Nz%r is not a valid netmaskz%s/%s)rr#r$r)r4rzr@)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)rr�r)rr�test_netmask_errors�s












z'NetmaskTestMixin_v4.test_netmask_errorscCs+|jd�|jd�|jd�dS)Nz192.0.2.0/27z192.0.2.0/31z	192.0.2.0)r7)rrrrr`�s

zNetmaskTestMixin_v4.test_pickleN)	rrr�__doc__rtrwrr�r`rrrrrs�s
rsc@seZdZejZdS)�InterfaceTestCase_v4N)rrrr�
IPv4Interfacerrrrrr��sr�c@seZdZejZdS)�NetworkTestCase_v4N)rrrr�IPv4Networkrrrrrr��sr�c@sReZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�NetmaskTestMixin_v6z;Input validation on interfaces and networks is very similarc	Cs2d}|jd|��|j|�WdQRXdS)Nzcafe:cafe::/128/190zOnly one '/' permitted in %r)rr)rr4rrrrt�sz&NetmaskTestMixin_v6.test_split_netmaskcsd�fdd�}|dd�|dd�|dd�|dd�|d	d�|d
d�dS)Nc	s(�j|���j|�WdQRXdS)N)rr)r4r
)rrrru�szANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddressrvzAddress cannot be emptyz/8z
google.comzAt least 3 partsz1.2.3.4z10/8z1234:axy::bzOnly hex digitsr)rrur)rrrw�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)rryrr0)rr|r}rrrr�s

z&NetmaskTestMixin_v6.test_valid_netmaskcs��fdd�}|dd�|dd�|dd�|dd�|dd�|dd�|dd	�|dd
�|dd�|dd�|d
d
�dS)NcsEd|}�jtj|����jd||f�WdQRXdS)Nz%r is not a valid netmaskz%s/%s)rr#r$r)r4rzr@)rrrr�s
zANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskz::1r!z1::z-1z+1z 1 r�Z129z1.2.3.4r�z::r)rr�r)rrr�s









z'NetmaskTestMixin_v6.test_netmask_errorscCs+|jd�|jd�|jd�dS)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000)r7)rrrrr`s

zNetmaskTestMixin_v6.test_pickleN)	rrrr�rtrwrr�r`rrrrr��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	Cs:d}d}|jt|||��||�WdQRXdS)z3Ensure a clean ValueError with the expected messageZcamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r�
ValueError)rrZkindr4r@rrr�assertFactoryError"sz(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_network/sz%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__5szLargestObject.__eq__cCsdS)NFr)rr�rrr�__lt__7szLargestObject.__lt__N)rrrr�r�rrrrr�3s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@sleZdZejd�Zejd�Zejd�Z	ej
d�Zejd�Z
ejd�Zee	gZeegZeegZee
gZeeZejd�Zejd�Zejd�Zej
d�Zejd�Zejd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z dd�Z!dd�Z"dd�Z#dS)�ComparisonTestsr'rBcCsvt�}xf|jD][}|j||�|j||k�|j|j|�t�|j|j|�t�qWdS)N)�object�objects�assertNotEqual�assertFalserr��NotImplemented�__ne__)rr��objrrr�test_foreign_type_equalityXs	z*ComparisonTests.test_foreign_type_equalitycCsKxD|jD]9}x0|jD]%}||kr/q|j||�qWq
WdS)N)r�r�)rrrrrr�test_mixed_type_equalityas
z(ComparisonTests.test_mixed_type_equalitycCsHxA|jD]6}|j||�|j||�|j||�q
WdS)N)r�r�assertLessEqual�assertGreaterEqual)rr�rrr�test_same_type_equalityjsz'ComparisonTests.test_same_type_equalitycCsx
|j|jf|j|jf|j|jf|j|jf|j|j	f|j
|jffD]�\}}|j||�|j
||�|j||�|j||�|j||�|j||k�|j||k�|j||k�|j||k�qaWdS)N)�v4addr�v4addr2�v4net�v4net2�v4intf�v4intf2�v6addr�v6addr2�v6net�v6net2�v6intf�v6intf2r�Z
assertLessr�Z
assertGreaterr�r�)rrrrrr�test_same_type_orderingps z'ComparisonTests.test_same_type_orderingcCs�x$|jD]}|j||j�q
Wx$|jD]}|j||j�q1Wx.|j|jgD]}|j||j�qbWx.|j|jgD]}|j||j�q�WdS)N)�v4_addresses�assertInr��v6_addressesr��
v4_objects�assertNotIn�
v6_objects)rr�rrr�test_containment�sz ComparisonTests.test_containmentcs�x�|jD]��x�|jD]��t�t���st�t���rMq|jt��fdd��|jt��fdd��|jt��fdd��|jt��fdd��qWq
WdS)Ncs
��kS)Nrr)rrrr�<lambda>�sz:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>cs
��kS)Nrr)rrrrr��scs
��kS)Nrr)rrrrr��scs
��kS)Nrr)rrrrr��s)r�r��typer(r))rr)rrr�test_mixed_type_ordering�s*z(ComparisonTests.test_mixed_type_orderingc CsOt�}t�}t�}x-|jD]"}|jt��||kWdQRX|jt��||kWdQRX|jt��||kWdQRX|jt��||kWdQRX|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_ordering�s(			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)r�r�r�r�r�r�r�sortedr�rZget_mixed_type_keyr�r�r�r�)rZ
v4_orderedZ
v6_orderedrrr�test_mixed_type_key�s	
	


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)$rrrrrPr�r�r�r�r�rer�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�As4


		

r�c@sdeZdZdd�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�d��ZGd�d��ZHd�d��ZId�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)rrP�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.testReprc/Cs�tjd�}tjd�}|jtjd�|�|jtj|df�|�|jtjd�|�|jtjd�|�|jtj|df�|�|jtjd�|�|jt��tjd�WdQRX|jt��tj|df�WdQRX|jt��tjd�WdQRX|jt��tjd�WdQRX|jt��tj|df�WdQRX|jt��tjd�WdQRXtjd�}|jtjdd	d
�|�|jtj|dfd	d
�|�|jtjdd	d
�|�|jtjdd	d
�|�|jtj|dfd	d
�|�|jtjdd	d
�|�tjd�}tjd�}|jtjd�|�|jtj|df�|�|jtjd�|�|jtjd�|�|jtj|df�|�|jtjd�|�|jtjd�tjd
��|jtjd�tjd
��dS) N�	192.0.2.1z192.0.2.1/32rC��255.255.255.255��
255.255.255.0z192.0.2.0/24�strictF�	192.0.2.0�z192.0.2.1/24)r�rC)r�rC)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�)rrPr�rr(r�r�)r�ipr~rrr�
testIPv4Tuple�sl





	



zIpaddrUnitTest.testIPv4TuplecCstjd�}tjd�}|jtjd�|�|jtjd�|�|jtj|df�|�tjd�}tjd�}|jtjd�|�|jtjd�|�|jtj|df�|�tjd	�}|jt��tjd�WdQRX|jt��tjd�WdQRX|jt��tj|df�WdQRXtjd�}|jtjddd�|�|jtjddd�|�|jtj|dfdd�|�|jtjd�tjd
��|jtjd�tjd
��dS)N�
2001:db8::z2001:db8::/128�128�	n� rLz
2001:db8::/96�96�`�2001:db8::1�	n� r�Fz2001:db8::1/96)r�r�)r�rL)r�r�)r�r�)r�r�)r�r�)r�r�)r�r�)r�r�)r�r�)rrer�rr(r�r�)rr�r~rrr�
testIPv6Tuple!sRzIpaddrUnitTest.testIPv6TuplecCs�|jtjd�dtjd��|jtjd�dtjd��|jtjd�dtjd	��|jtjd	�d
tjd��dS)Nz1.1.1.1�z1.1.2.0�z1.1.0.1z::1rB�z::ffffii��ii��)rrrPre)rrrr�testAddressIntMathSsz!IpaddrUnitTest.testAddressIntMathcCsj|jttjd�|jttjdtj�|jttjd�|jttjdtj�dS)Nr'rBr?r?)r(r�rZv4_int_to_packedZ
IPV4LENGTHZv6_int_to_packedZ
IPV6LENGTH)rrrr�testInvalidIntToBytes]sz$IpaddrUnitTest.testInvalidIntToBytescCs�tjd�}tjd�}tjd�}|jttj|g��||fg�|jttj||g��||f||fg�|jttj|||g��||fg�|jdtjdd��|jdt|j��dS)Nz10.10.10.10z10.10.10.11z10.10.10.12rLrzIPv4Network('1.2.3.0/24'))rrPr�listZ_find_address_rangeZ_count_righthand_zero_bitsr%r�)r�ip1�ip2�ip3rrr�
testInternalses!zIpaddrUnitTest.testInternalsc	CsJGdd�dtj�}|d�}|jtd��|jWdQRXdS)Nc@seZdZdS)z8IpaddrUnitTest.testMissingNetworkVersion.<locals>.BrokenN)rrrrrrr�Brokenssr�z	127.0.0.1zBroken.*version)r�_BaseNetworkrr�version)rr��brokenrrr�testMissingNetworkVersionrsz(IpaddrUnitTest.testMissingNetworkVersionc	CsJGdd�dtj�}|d�}|jtd��|jWdQRXdS)Nc@seZdZdS)z6IpaddrUnitTest.testMissingAddressClass.<locals>.BrokenN)rrrrrrrr�zsr�z	127.0.0.1zBroken.*address)rr�rrZ_address_class)rr�r�rrr�testMissingAddressClassys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_addressryr�r{)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�r�)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�ryr�)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�rzryr��	prefixlen)rrrr�testGetNetmask�s
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�rzZ_prefix_from_prefix_stringr
�_is_valid_netmaskr�r�)rZipv4_zero_netmaskZipv6_zero_netmaskrrr�testZeroNetmask�szIpaddrUnitTest.testZeroNetmaskcCs�|j}|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��|j|jd��tjd	�}|j|jd
�dS)Nrz128.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.255r�)	r�r�rr
Z_is_hostmaskrr�rr)rr~rrr�testIPv4NetAndHostmasks�s	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_addressryr�)rrrr�testGetBroadcast�szIpaddrUnitTest.testGetBroadcastcCs6|j|jjjd�|j|jjjd�dS)Nr�r)rr�r�rr�)rrrr�testGetPrefixlen�szIpaddrUnitTest.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��supernetrryr�rr�r�r�r�r�r�)rrrr�testGetSupernet�szIpaddrUnitTest.testGetSupernetcCs�|j|jjd�jd�|jt|jjd�j�d�|j|jjd�jd�|jt|jjd�j�d�dS)NrG�z1.2.0.0�=z2001:658:22a:caf8::)rr�r
rryr�r�)rrrr�testGetSupernet3�szIpaddrUnitTest.testGetSupernet3cCs�|jt|jjdddd�|jt|jjdd�|j|jjdd�|jjdd��|jt|jjdddd�|jt|jjdd�|j|jjdd�|jjdd��dS)	N�prefixlen_diffrB�
new_prefixr'���A�>)r(r�r�r
rr�)rrrr�testGetSupernet4�s

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/31r?)r�r��hostsr�lenrrPr�)rrrrr�	testHostsszIpaddrUnitTest.testHostscCs|jt|jjdd��t|jjdd���|jtt|jjdd��|jtt|jjdddd��|jt|jjdd��t|jjdd���|jtt|jjdd��|jtt|jjdddd��dS)	NrrGr�rr��Dr)rr�r��subnetsr(r�r�r�)rrrr�testFancySubnettings
z"IpaddrUnitTest.testFancySubnettingcCs�|jt|jj��djd�|jtt|jj��dj�d�|jtt|jj��dj�d�|jt|jj��djd�dS)Nrrz1.2.3.0r'z	1.2.3.128r)rr�r�rrryr�r�)rrrr�testGetSubnets's&zIpaddrUnitTest.testGetSubnetscCsktjd�}dd�|j�D�}dd�|jd�D�}|j|dg�|j||�dS)Nz
1.2.3.4/32cSsg|]}t|��qSr)ry)�.0r5rrr�
<listcomp>4s	z;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>cSsg|]}t|��qSr)ry)r"r5rrrr#5s	rB)rr�rr)rr��subnets1�subnets2rrr�testGetSubnetForSingle322s
z'IpaddrUnitTest.testGetSubnetForSingle32cCsktjd�}dd�|j�D�}dd�|jd�D�}|j|dg�|j||�dS)Nz::1/128cSsg|]}t|��qSr)ry)r"r5rrrr#;s	z<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>cSsg|]}t|��qSr)ry)r"r5rrrr#<s	rB)rr�rr)rr�r$r%rrr�testGetSubnetForSingle1289s
z(IpaddrUnitTest.testGetSubnetForSingle128cCszdd�|jjd�D�}|j|ddddg�dd�|jjd�D�}|j|d	d
ddg�dS)
NcSsg|]}t|��qSr)ry)r"r5rrrr#As	z.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>rBz
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26cSsg|]}t|��qSr)ry)r"r5rrrr#Fs	z2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r�rrr�)rZipsZipsv6rrr�testSubnet2@szIpaddrUnitTest.testSubnet2cCsdd�|jjd�D�}|j|dd�dddg�|j|dd�dd	d
g�|jt|�d�tjd�}d
d�|jd�D�}|j|dd�dddg�|j|dd�dddg�|jt|�d�dS)NcSsg|]}t|��qSr)ry)r"r5rrrr#Os	z2IpaddrUnitTest.testGetSubnets3.<locals>.<listcomp>�rGz
1.2.3.0/32z
1.2.3.1/32z
1.2.3.2/32z1.2.3.253/32z1.2.3.254/32z1.2.3.255/32r�z2001:658:22a:cafe::/120cSsg|]}t|��qSr)ry)r"r5rrrr#Ws	z2001:658:22a:cafe::/128z2001:658:22a:cafe::1/128z2001:658:22a:cafe::2/128z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128���r*)r�rrrrr�)rrr�rrr�testGetSubnets3Ns"

zIpaddrUnitTest.testGetSubnets3cCs�|jtt|jjjd��|jtt|jjd��|jtt|jjjd��|jtt|jjd��dS)N�	r)	r(r�r�r�r�rr�r�r�)rrrr�testSubnetFailsForLargeCidrDiffbsz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffcCs<|jt|jjjd�|jt|jjjd�dS)Nrr)r(r�r�r�r
r�)rrrr�!testSupernetFailsForLargeCidrDiffls		z0IpaddrUnitTest.testSupernetFailsForLargeCidrDiffcCs�|jtt|jjjd��|jtt|jjd��|jtt|jjjd��|jtt|jjd��dS)Nr'r?r?r?r?)	r(r�r�r�r�rr�r�r�)rrrr�"testSubnetFailsForNegativeCidrDiffrsz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffcCs�|j|jjd�|jt|jj��djd�|j|jj�jd�|j|jjd�|jt|jj��djd�|j|jj�jd�dS)Nr�rrLilll )rr�Z
num_addressesr�rr
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�rPr�r��__contains__)r�addr1rrr�testContains�s

zIpaddrUnitTest.testContainscCsW|jt|jd�d�|jt|jjd�|jt|jd�d�dS)NrHz1.2.3.5r�z2001:658:22a:cafe::5)rryr�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'r?r?r?r?)rr�rrr�ry)rr4Z	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!rBz2001: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!rBz1.2.3.5z2001:658:22a:cafe:200::1/64z2001:658:22a:cafe:200::1/63z1.2.3.4)
r�r�rr�r
r�r�rPr�r�)rrrr�testNotEqual�s8zIpaddrUnitTest.testNotEqualcCs#|jttjd��d�dS)Nz1.2.3.4/255.255.255.255z
1.2.3.4/32)rryrr�)rrrr�testSlash32Constructor�sz%IpaddrUnitTest.testSlash32ConstructorcCs#|jttjd��d�dS)Nz::1/128)rryrr�)rrrr�testSlash128Constructor�sz&IpaddrUnitTest.testSlash128ConstructorcCs#|jttjd��d�dS)Nz1.2.3.4/0.0.0.0z	1.2.3.4/0)rryrr�)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)rrPZcollapse_addressesrr�r�r�r�r�r(r))rr�r�r��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�Asz;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.versionN)rrrrr�rrrr�IPv7Address@srAz::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�rer(r�r�r)rr�rPZ	_ALL_ONESr�)rZ	summarizer�r�rAZip_invalid1Zip_invalid2rrr�testSummarizing8sP	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�testAddressComparisontsz$IpaddrUnitTest.testAddressComparisoncCs
|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�|jtjd�tjd�k�dS)	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/48)r
rr�)rrrr�testInterfaceComparison~s8z&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::2r?r?r?)rr�r
rZcompare_networksZ_get_networks_keyr�r(r)r�r�r�r�r�r�r�r��sortZassertIsr�r�)	rr�r�r�r�r�r>r�Zunsortedrrr�testNetworkComparison�s�		


z$IpaddrUnitTest.testNetworkComparisoncCs0|jttjd�|jttjd�dS)Nz192.168.1.1/24z::1/120)r(r�rr�)rrrr�testStrictNetworks�sz!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�testOverlaps�s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�testIPv6AddressTooLarge
sz&IpaddrUnitTest.testIPv6AddressTooLargecCs0|j|jjd�|j|jjd�dS)Nr�r�)rr�r�r�)rrrr�
testIPVersionszIpaddrUnitTest.testIPVersioncCs0|j|jjd�|j|jjd�dS)NrCrL)rr�Z
max_prefixlenr�)rrrr�testMaxPrefixLengthsz"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:0sr)ss����ssss)rr�Zpackedrr�r�r�)rrrr�
testPackedszIpaddrUnitTest.testPackedcCs�tjd�}tjd�}tjd�}tjd�}|jtjt|��|jtjt|��|jtjt|��|jtjt|��dS)Nz1.2.3.4z	::1.2.3.4)	rr�r�rr�r�rPr�re)rZipv4netZipv4addrZipv6netZipv6addrrrr�
testIpType(szIpaddrUnitTest.testIpTypecCsB|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�|jtj
d�j	�|j
tj
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.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)rrr��is_multicastr��is_reserved�
is_private�
is_link_local�is_loopback�	is_globalr��is_unspecifiedr
r�)rrrr�testReservedIpv42sx



		
	
	

				

			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::rBrLr'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�rOZ
is_site_localrQrRr�rSrUrTr�rP)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�}tjd�}|jtt|j|���tjd�tjd�g�|jtt|j|��|jt	t|j|��|jt	t|j|��|jt|j|��g�|jtt|j|���tjd	�tjd
�tjd�tjd�tjd
�tjd�tjd�tjd�g�dS)Nz10.1.1.0/24z10.1.1.0/26z10.2.1.0/24z10.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)
rr�r�rr�r�Zaddress_excluder(r�r))rr2�addr2�addr3�addr4�addr5�addr6rrr�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�)rr�r�Zdummyrrr�testHash�s$	



zIpaddrUnitTest.testHashcCs?|j}|jd|j�|j}|jt|jd�dS)Nz
1.2.3.0/24rBrLr'l	l	)r�r�
compressedr�r(r�Z_string_from_ip_int)rr~rrr�testIPBases�s		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_hostmaskry)rr~rrr�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�rrcrdrery)rr~rrr�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�rPrer)rr2rYrZr[r\r]rrr�testCopyConstructorsz"IpaddrUnitTest.testCopyConstructorc$Cs�ddddddddd	d
ddd
ddddddddddddddddddd d!d"d#d$i}x?t|j��D]+\}}|j|ttj|���q�WdS)%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:0z::/128z0:0:0:0:0:0:0:0/0z::/0z0:0:0:0:0:0:0:1z::1/128z*2001:0658:022a:cafe:0000:0000:0000:0000/66z2001:658:22a:cafe::/66z	::1.2.3.4z
::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)r��itemsrryrr�)rZtest_addressesZuncompressedrarrr�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�rer�rPrZexploded)rr2rYrZr[rrr�testExplodeShortHandIpStr:s	
		
	
z(IpaddrUnitTest.testExplodeShortHandIpStrcCsLtjd�}tjd�}|jd|j�|jdd|j�dS)Nz	127.0.0.1z2001:db8::1z1.0.0.127.in-addr.arpaz21.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.zb.d.0.1.0.0.2.ip6.arpa)rrPrerZreverse_pointer)rr2rYrrr�testReversePointerJs	z!IpaddrUnitTest.testReversePointercCs6|jdt|j��|jdt|j��dS)Nil	�/YE� )rr�r�r�)rrrr�testIntRepresentationRs	z$IpaddrUnitTest.testIntRepresentationcCs<|jtjd�jd�|jtjd�jd�dS)Nr'r�r�)rrr�r�r�)rrrr�testForceVersionWszIpaddrUnitTest.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�rcrdrer�)rrrr�testWithStar[szIpaddrUnitTest.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�rr{z1.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�rrPrr{r�r�rer�r�)rrrr�testNetworkElementCachingks>	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)rrPrr�Zteredor�re)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�rrPZ	sixtofourr�)rZ
sixtofouraddrrrrrr�
testsixtofour�s

zIpaddrUnitTest.testsixtofourN)Jrrrr�r�r�r�r�r�r�r�r�r�r�r�r�rrrr	r
rrrrr r!r&r'r(r+r-r.r/r0r3r6r8r9r:r;r<r=r?rBrCrDrFrGrHrIrJrKrLrMrNrVrWrXr^r`rbrfrgrhrjrkrlrmrnrorqrsrtrrrrr��s�?2

			


!O<
V
IM	
-r��__main__)r�Zunittestr#r�	functoolsr*r1rraZTestCaserr r8rJrOrdrsr�r�r�r�r�r��total_orderingr�r�r�r�r�mainrrrr�<module>s>6#(`�D7������