Your IP : 216.73.216.52


Current Path : /opt/alt/python39/lib64/python3.9/test/__pycache__/
Upload File :
Current File : //opt/alt/python39/lib64/python3.9/test/__pycache__/test_ipaddress.cpython-39.pyc

a

XC?h���@sbdZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
Gdd�dej�ZGdd�d�Z
Gdd	�d	e
�ZGd
d�de
�ZGdd
�d
ee�ZGdd�dee�ZGdd�de�ZGdd�dee�ZGdd�dee�ZGdd�de�ZGdd�dee�ZGdd�dee�ZGdd�de�ZGdd�dej�ZGd d!�d!ej�Zed"k�r^e��dS)#zUnittest for ipaddress module.�N)�LARGEST�SMALLESTc@s>eZdZedd��Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�BaseTestCasecCst�dS�N)�NotImplementedError��self�r	�8/opt/alt/python39/lib64/python3.9/test/test_ipaddress.py�factory$szBaseTestCase.factorycgs`|r||}|�||�}|�}|VWd�n1s80Y|jjdur\|�|jj�dS)z{
        Ensure exception does not display a context by default

        Wraps unittest.TestCase.assertRaisesRegex
        N)ZassertRaisesRegexZ	exception�__context__�
assertTrue�__suppress_context__)r�exc_type�details�args�cm�excr	r	r
�assertCleanError(s$zBaseTestCase.assertCleanErrorcGs|jtj|g|�R�S)z Ensure a clean AddressValueError)r�	ipaddress�AddressValueError�rrrr	r	r
�assertAddressError8s
��zBaseTestCase.assertAddressErrorcGs|jtj|g|�R�S)z Ensure a clean NetmaskValueError)rrZNetmaskValueErrorrr	r	r
�assertNetmaskError=s
��zBaseTestCase.assertNetmaskErrorcCs|�|�|�|�|��dS)z8Check constructor arguments produce equivalent instancesN)�assertEqualr�r�lhs�rhsr	r	r
�assertInstancesEqualBsz!BaseTestCase.assertInstancesEqualN)�__name__�
__module__�__qualname__�propertyr�
contextlib�contextmanagerrrrrr	r	r	r
rs

rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�CommonTestMixincCs8|�d��|�d�Wd�n1s*0YdS)N�Address cannot be empty��rrrr	r	r
�test_empty_addressIsz"CommonTestMixin.test_empty_addresscCsB|�t�td����|�d�Wd�n1s40YdS)Nz1.0g�?)r�re�escape�reprrrr	r	r
�test_floats_rejectedMsz$CommonTestMixin.test_floats_rejectedcCsB|�ttj|�d��|�tt|�d��|�tt|�d��dS)N�)�assertRaises�	TypeError�operator�indexr�hex�bytesrr	r	r
�test_not_an_index_issue15559Qsz,CommonTestMixin.test_not_an_index_issue15559c	Cslttjd�D]X}|j|d��8|�|�}t�t�||��}|�||�Wd�q1s\0YqdS)Nr.)�proto)�range�pickleZHIGHEST_PROTOCOL�subTestr�loads�dumpsr)r�addrr6�x�yr	r	r
�pickle_testXs

zCommonTestMixin.pickle_testN)rr r!r)r-r5r?r	r	r	r
r%Gsr%c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CommonTestMixin_v4c
Cszd}gd�}|D]d}|j|d��D|�|��|�|�Wd�n1sL0YWd�q1sj0YqdS)Nz(Leading zeros are not permitted in '\d+')	z000.000.000.000�192.168.000.001z016.016.016.016rAz001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)�address)r9rr)r�msgZ	addressesrBr	r	r
�test_leading_zerosbsz%CommonTestMixin_v4.test_leading_zeroscCs|�dd�|�dd�dS)Nr�0.0.0.0�P�192.168.0.1�rrr	r	r
�test_intuszCommonTestMixin_v4.test_intcCs(|�t�d�d�|�t�d�d�dS)N�00000000rE�c0a80001rG)rr4�fromhexrr	r	r
�test_packedyszCommonTestMixin_v4.test_packedcCsBd}|�t�|���|�d�Wd�n1s40YdS)Nz,-1 (< 0) is not permitted as an IPv4 address����rr*r+r�rrCr	r	r
�test_negative_ints_rejected}sz.CommonTestMixin_v4.test_negative_ints_rejectedcCsFd}|�t�|d���|�d�Wd�n1s80YdS)Nz1%d (>= 2**32) is not permitted as an IPv4 addresslrOrPr	r	r
�test_large_ints_rejected�sz+CommonTestMixin_v4.test_large_ints_rejectedcs �fdd�}|d�|d�dS)NcsRd|}d}��t�|||f�����|�Wd�n1sD0YdS)N�z4%r (len %d != 4) is not permitted as an IPv4 addressrO�Zlengthr<rCrr	r
�assertBadLength�szBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength��r	�rrUr	rr
�test_bad_packed_length�sz)CommonTestMixin_v4.test_bad_packed_lengthN)	rr r!rDrIrMrQrRrYr	r	r	r
r@`sr@c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�CommonTestMixin_v6cCs|�dd�|�dd�dS)Nz
0000::0000�::z000::c0a8:0001�::c0a8:1rHrr	r	r
rD�sz%CommonTestMixin_v6.test_leading_zeroscCs|�dd�|�dd�dS)Nrr[rFr\rHrr	r	r
rI�szCommonTestMixin_v6.test_intcCsRdt�d�}|�|d�dt�d�}|�|d�t�d�d}|�|d�dS)NsrJr[rKr\zc0a8:1::)r4rLr�rr<r	r	r
rM�szCommonTestMixin_v6.test_packedcCsBd}|�t�|���|�d�Wd�n1s40YdS)Nz,-1 (< 0) is not permitted as an IPv6 addressrNrOrPr	r	r
rQ�sz.CommonTestMixin_v6.test_negative_ints_rejectedcCsNd}|�t�|dd���|�dd�Wd�n1s@0YdS)Nz2%d (>= 2**128) is not permitted as an IPv6 address��rOrPr	r	r
rR�sz+CommonTestMixin_v6.test_large_ints_rejectedcs �fdd�}|d�|d�dS)Ncs\d|}d}��t�|||f���$��|���|�Wd�n1sN0YdS)NrSz5%r (len %d != 16) is not permitted as an IPv6 addressrOrTrr	r
rU�s

zBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength��r	rXr	rr
rY�sz)CommonTestMixin_v6.test_bad_packed_lengthcCs>d}|�d|��|�|�Wd�n1s00YdS)Nz::1%�Invalid IPv6 address: "%r"r(�rrBr	r	r
�test_blank_scope_id�sz&CommonTestMixin_v6.test_blank_scope_idcCs>d}|�d|��|�|�Wd�n1s00YdS)Nz
::1%scope%rbr(rcr	r	r
�"test_invalid_scope_id_with_percent�sz5CommonTestMixin_v6.test_invalid_scope_id_with_percentN)rr r!rDrIrMrQrRrYrdrer	r	r	r
rZ�srZc@sZeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZdS)�AddressTestCase_v4cCs6t�d�}gd�}|D]\}}|�|t||��qdS)N�1.2.3.42))�b� 00000001000000100000001100101010)�nri)r=Z0102032a)�XZ0102032A)�_b�'0000_0001_0000_0010_0000_0011_0010_1010)�_nrm)�_xZ	0102_032a)�_XZ	0102_032A)�#b�"0b00000001000000100000001100101010)�#nrr)�#xZ
0x0102032a)�#XZ
0X0102032A)�#_b�)0b0000_0001_0000_0010_0000_0011_0010_1010)�#_nrw)�#_xZ0x0102_032a)�#_XZ0X0102_032A)�srg)r'rg)r�IPv4Addressr�format)rZv4Zv4_pairs�fmt�txtr	r	r
�test_format�s
zAddressTestCase_v4.test_formatcCs>d}|�d|��t�|�Wd�n1s00YdS)Nz127.0.0.1/24�Unexpected '/' in %r�rrr|r]r	r	r
�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)Ncs:��d|��t�|�Wd�n1s,0YdS)NzExpected 4 octets in %rr��r<rr	r
�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.016Z016Z000z0x0a.0x0a.0x0az	0x0a.0x0a�0x0a�.�bogusz	bogus.comZ1000Z1000000000000000z192.168.0.1.comr	�rr�r	rr
�test_bad_address_split�s0z)AddressTestCase_v4.test_bad_address_splitcs �fdd�}|d�|d�dS)Ncs:��d|��t�|�Wd�n1s,0YdS)NzEmpty octet not permitted in %rr�r�rr	r
�assertBadOctets�z;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctetz	42..42.42z...r	�rr�r	rr
�test_empty_octetsz#AddressTestCase_v4.test_empty_octetcsj�fdd�}|dd�|dd�|dd�|d	d
�|dd�|d
d�|dd�|dd�|dd�dS)NcsJd||f}��t�|���t�|�Wd�n1s<0YdS)Nz)Only decimal digits permitted in %r in %r�rr*r+rr|�r<ZoctetrCrr	r
r�szBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctetz0x0a.0x0a.0x0a.0x0ar�z0xa.0x0a.0x0a.0x0aZ0xaz42.42.42.-0�-0z42.42.42.+0�+0z42.42.42.-42z-42z
+1.+2.+3.4�+1z	1.2.3.4e0Z4e0�	1.2.3.4::z4::�1.a.2.3�ar	r�r	rr
�test_invalid_characters
s







z*AddressTestCase_v4.test_invalid_characterscs$�fdd�}|dd�|dd�dS)NcsJd}��t�|||f���t�|�Wd�n1s<0YdS)Nz*At most 3 characters permitted in %r in %rr�r�rr	r
r�sz<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctetz0000.000.000.000Z0000z12345.67899.-54321.-98765Z12345r	r�r	rr
�test_octet_lengths
z$AddressTestCase_v4.test_octet_lengthcs$�fdd�}|dd�|dd�dS)NcsJd||f}��t�|���t�|�Wd�n1s<0YdS)Nz$Octet %d (> 255) not permitted in %rr�r�rr	r
r�$sz;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctetz	257.0.0.0iz
192.168.0.999i�r	r�r	rr
�test_octet_limit#s
z#AddressTestCase_v4.test_octet_limitcCs|�d�dS�N�	192.0.2.1�r?rr	r	r
�test_pickle,szAddressTestCase_v4.test_picklecCst�|�d��dSr���weakref�refrrr	r	r
�test_weakref/szAddressTestCase_v4.test_weakrefN)rr r!rr|rr�r�r�r�r�r�r�r�r�r	r	r	r
rf�s			rfc@s�eZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS) �AddressTestCase_v6cCs6t�d�}gd�}|D]\}}|�|t||��qdS)Nz
::1.2.3.42))rhZ�00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)rj� 0000000000000000000000000102032a)r=r�)rkZ 0000000000000000000000000102032A)rlZ�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)rn�'0000_0000_0000_0000_0000_0000_0102_032a)ror�)rpZ'0000_0000_0000_0000_0000_0000_0102_032A)rqZ�0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)rs�"0x0000000000000000000000000102032a)rtr�)ruZ"0X0000000000000000000000000102032A)rvZ�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)rx�)0x0000_0000_0000_0000_0000_0000_0102_032a)ryr�)rzZ)0X0000_0000_0000_0000_0000_0000_0102_032A)r{�	::102:32a)r'r�)r�IPv6Addressrr})rZv6Zv6_pairsr~rr	r	r
r�6s
#zAddressTestCase_v6.test_formatcs �fdd�}|d�|d�dS)Ncs>d}��||��t�|�Wd�n1s00YdS)Nr�)rrr��r<rCrr	r
r�`szIAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplitz::1/24z::1%scope_id/24r	r�r	rr
r�_sz1AddressTestCase_v6.test_network_passed_as_addresscs@�fdd�}|d�|d�|d�|d�|d�|d�dS)	NcsHd}��||�d�d��t�|�Wd�n1s:0YdS)NzAt least 3 parts expected in %r�%r�r�splitrr�r�rr	r
r�hszUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplit�:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper	r�r	rr
�*test_bad_address_split_v6_not_enough_partsgsz=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partscs`�fdd�}|d�|d�|d�|d�|d�|d�|d	�|d
�|d�|d�dS)
NcsHd}��||�d�d��t�|�Wd�n1s:0YdS)Nz At most 8 colons permitted in %rr�rr�r�rr	r
r�uszTAddressTestCase_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.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%scoper	r�r	rr
�)test_bad_address_split_v6_too_many_colonstsz<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonscsH�fdd�}ddd}||�||d�||d�||d�dS)	NcsLd}��|t�|dd����t�|�Wd�n1s>0YdS)Nz%At most 45 characters expected in '%s�-)rr*r+rr�r�rr	r
r��szMAddressTestCase_v6.test_bad_address_split_v6_too_long.<locals>.assertBadSplitz0:i'�0z%zoneidz:255.255.255.255z:ffff:255.255.255.255r	)rr�Z	long_addrr	rr
�"test_bad_address_split_v6_too_long�sz5AddressTestCase_v6.test_bad_address_split_v6_too_longcs`�fdd�}|d�|d�|d�|d�|d�|d�|d	�|d
�|d�|d�dS)
NcsHd}��||�d�d��t�|�Wd�n1s:0YdS)Nz+Exactly 8 parts expected without '::' in %rr�rr�r�rr	r
r��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.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%scoper	r�r	rr
�(test_bad_address_split_v6_too_many_parts�sz;AddressTestCase_v6.test_bad_address_split_v6_too_many_partscs �fdd�}|d�|d�dS)NcsHd}��||�d�d��t�|�Wd�n1s:0YdS)Nz.Expected at most 7 other parts with '::' in %rr�rr�r�rr	r
r��szeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplitz1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper	r�r	rr
�:test_bad_address_split_v6_too_many_parts_with_double_colon�szMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_coloncs��fdd�}|d�|d�|d�|d�|d�|d�|d	�|d
�|d�|d�|d
�|d�|d�|d�|d�|d�|d�|d�|d�|d�dS)NcsHd}��||�d�d��t�|�Wd�n1s:0YdS)Nz At most one '::' permitted in %rr�rr�r�rr	r
r��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:::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%scoper	r�r	rr
�/test_bad_address_split_v6_repeated_double_colon�s*zBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_coloncsP�fdd�}|d�|d�|d�|d�|d�|d�|d	�|d
�dS)NcsHd}��||�d�d��t�|�Wd�n1s:0YdS)Nz0Leading ':' only permitted as part of '::' in %rr�rr�r�rr	r
r��szRAddressTestCase_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::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::%scoper	r�r	rr
�'test_bad_address_split_v6_leading_colon�sz:AddressTestCase_v6.test_bad_address_split_v6_leading_coloncsP�fdd�}|d�|d�|d�|d�|d�|d�|d	�|d
�dS)NcsHd}��||�d�d��t�|�Wd�n1s:0YdS)Nz1Trailing ':' only permitted as part of '::' in %rr�rr�r�rr	r
r��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:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper	r�r	rr
�(test_bad_address_split_v6_trailing_colon�sz;AddressTestCase_v6.test_bad_address_split_v6_trailing_coloncst�fdd�}|dd�|dd�|dd�|d	d
�|dd�|d
d�|dd�|dd�|dd
�|dd�dS)NcsF��d||�d�d��t�|�Wd�n1s80YdS)Nz%s in %rr�rr�)r<Zv4_errorrr	r
�assertBadAddressPart�szDAddressTestCase_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'z3ffe::1.net%scopez3ffe::127.0.1%scopez
::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper	)rr�r	rr
�test_bad_v4_part_in�s6
����
����z&AddressTestCase_v6.test_bad_v4_part_incs��fdd�}|dd�|dd�|dd�|d	d
�|dd�|d
d�|dd�|dd�|dd�|dd
�|dd�|dd�dS)NcsTd||�d�df}��t�|���t�|�Wd�n1sF0YdS)Nz%Only hex digits permitted in %r in %rr�r)r�rr*r+rr��r<�partrCrr	r
�
assertBadPart
szAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPartz
3ffe::googZgoogz3ffe::-0r�z3ffe::+0r�z3ffe::-1�-1r��1.2.3.4�1234:axy::bZaxyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope�1234:axy::b%scoper	�rr�r	rr
r�	s










z*AddressTestCase_v6.test_invalid_characterscs`�fdd�}|dd�|dd�|dd�|d	d
�|dd�|dd�|d
d�|dd
�dS)NcsJd}��|||�d�d��t�|�Wd�n1s<0YdS)Nz*At most 4 characters permitted in %r in %rr�rr�r�rr	r
r�sz:AddressTestCase_v6.test_part_length.<locals>.assertBadPartz::00000Z00000z3ffe::10000Z10000z02001:db8::Z02001z2001:888888::1Z888888z
::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper	r�r	rr
�test_part_lengths






z#AddressTestCase_v6.test_part_lengthcCs|�d�dS)N�
2001:db8::r�rr	r	r
r�-szAddressTestCase_v6.test_picklecCs$t�|�d��t�|�d��dS)Nr��2001:db8::%scoper�rr	r	r
r�0szAddressTestCase_v6.test_weakrefN)rr r!rr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r	r	r
r�3s )

	r�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�NetmaskTestMixin_v4�;Input validation on interfaces and networks is very similarcCsLdD]B}|�|�}|�t|�d�|�t|j�d�|�t|j�d�qdS)N)r����
1.2.3.4/32�255.255.255.255rE�rr�str�netmask�hostmask)rrB�netr	r	r
�test_no_mask8s

z NetmaskTestMixin_v4.test_no_maskcCs@d}|�d|��|�|�Wd�n1s20YdS)Nz
1.2.3.4/32/24�Only one '/' permitted in %rr(r]r	r	r
�test_split_netmaskAsz&NetmaskTestMixin_v4.test_split_netmaskcs\�fdd�}|dd�|dd�|dd�|dd�|d	d�|d
d�|dt�d
��dS)Ncs8��|����|�Wd�n1s*0YdSrr(�r<rrr	r
�assertBadAddressGszANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress�/r&�/8r�zExpected 4 octets�
google.com�10/8�	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r*r+�rr�r	rr
�test_address_errorsFs





z'NetmaskTestMixin_v4.test_address_errorscCs�|�t|�d��d�|�t|�d��d�|�t|�d��d�|�t|�d��d�tdd�D]�}d|}|�|�}|�t|�|�|�t|�d	|j��|�|�t|�d
|��|�|dvr�dd|}|�t|�d	|j��|�qbdS)
N��	192.0.2.0��192.0.2.0/24)r�Z24�r��
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)� rr�)rr�rr7r�r�)r�i�net_strr�r	r	r
�test_valid_netmaskSs*��
��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)NcsNd|}��t�|���"��d||f�Wd�n1s@0YdS�N�%r is not a valid netmaskz%s/%s�rr*r+r�r<r�rCrr	r
�assertBadNetmasklszANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmaskr�r'r�r�� 1 �0x1Z33z254.254.255.256r��1.1.1.1z254.xyz.2.3z240.255.0.0z
255.254.128.0z0.1.127.255�puddingr[r	�rr�r	rr
�test_netmask_errorsks












z'NetmaskTestMixin_v4.test_netmask_errorscs$�fdd�}|dd�|dd�dS)NcsJd|}��t�|�����||f�Wd�n1s<0YdS�Nr�r�r�rr	r
r��szJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskr�rNr�r	r�r	rr
�test_netmask_in_tuple_errors�s
z0NetmaskTestMixin_v4.test_netmask_in_tuple_errorscCs"|�d�|�d�|�d�dS)Nz192.0.2.0/27z192.0.2.0/31r�r�rr	r	r
r��s

zNetmaskTestMixin_v4.test_pickleN�rr r!�__doc__r�r�r�r�r�r�r�r	r	r	r
r�5s	
r�c@seZdZejZdS)�InterfaceTestCase_v4N)rr r!r�
IPv4Interfacerr	r	r	r
r��sr�c@s*eZdZejZdd�Zdd�Zdd�ZdS)�NetworkTestCase_v4cCst|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���dS�N�10.0.0.0/30z10.0.1.0/24z10.0.0.0/24��assertFalser�	subnet_ofr
rr	r	r
�test_subnet_of�s(
��
��
��
��z!NetworkTestCase_v4.test_subnet_ofcCst|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���dSr��r�r�supernet_ofr
rr	r	r
�test_supernet_of�s(
��
��
��
��z#NetworkTestCase_v4.test_supernet_ofcCs|�t��&t�d��t�d��Wd�n1s60Y|�t��&t�d��t�d��Wd�n1sv0Y|�t��&t�d��t�d��Wd�n1s�0Y|�t��&t�d��t�d��Wd�n1s�0YdS)Nr��::1/128)r/r0r�IPv4Networkr��IPv6Networkr�rr	r	r
�test_subnet_of_mixed_types�s 
�"
�"
�"
�z-NetworkTestCase_v4.test_subnet_of_mixed_typesN)	rr r!rrrr�rrr	r	r	r
r��sr�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�NetmaskTestMixin_v6r�cCs�dD]B}|�|�}|�t|�d�|�t|j�d�|�t|j�d�q|�d�}|�t|�d�|�t|j�d�|�t|j�d�dS)N)�::1r.srz'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr[�	::1%scope�
::1%scope/128r�)rrBr�Z
scoped_netr	r	r
r��s

z NetmaskTestMixin_v6.test_no_maskcCs|d}|�d|��|�|�Wd�n1s20Yd}|�d|��|�|�Wd�n1sn0YdS)Nzcafe:cafe::/128/190r�zcafe:cafe::%scope/128/190r()rr<Zscoped_addrr	r	r
r��s(z&NetmaskTestMixin_v6.test_split_netmaskcs��fdd�}|dd�|dd�|dd�|dd�|d	d�|d
d�|dd�|d
d�|dd�|dd�|dd�|dd�dS)Ncs8��|����|�Wd�n1s*0YdSrr(r�rr	r
r��szANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddressr�r&r�r�zAt least 3 partsr�r�r�zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez
1.2.3.4%scopez
10%scope/8r�r	r�r	rr
r��s










z'NetmaskTestMixin_v6.test_address_errorscCs�|�t|�d��d�|�t|�d��d�|�t|�d��d�tdd�D]<}d|}|�t|�|��|�|�t|�d|��|�qL|�t|�d��d�tdd�D]<}d|}|�t|�|��|�|�t|�d|��|�q�dS)	N)r�r��
2001:db8::/32)r�Z32r�z::/%dz::/0%dz2001:db8::%scope/32)rr�rr7)rr�r�r	r	r
r��s ��z&NetmaskTestMixin_v6.test_valid_netmaskcs��fdd�}|dd�|dd�|dd�|dd�|dd�|dd�|dd	�|dd
�|dd�|dd�|d
d
�|dd�dS)NcsNd|}��t�|���"��d||f�Wd�n1s@0YdSr�r�r�rr	r
r�
szANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskrr'�1::r�r�r�r�Z129r�r�r[rr	r�r	rr
r�s










z'NetmaskTestMixin_v6.test_netmask_errorscs.�fdd�}|dd�|dd�|dd�dS)NcsJd|}��t�|�����||f�Wd�n1s<0YdSr�r�r�rr	r
r�!szJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskrrNr
rr	r�r	rr
r� s

z0NetmaskTestMixin_v6.test_netmask_in_tuple_errorscCs,|�d�|�d�|�d�|�d�dS)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoper�rr	r	r
r�)s


zNetmaskTestMixin_v6.test_pickleNr�r	r	r	r
r�s		rc@seZdZejZdS)�InterfaceTestCase_v6N)rr r!r�
IPv6Interfacerr	r	r	r
r1src@s"eZdZejZdd�Zdd�ZdS)�NetworkTestCase_v6cCs�|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���dS)N�
2000:999::/56�
2000:aaa::/48�
2000:aaa::/56�
2000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56r�rr	r	r
r�8s<
��
��
��
��
��
��z!NetworkTestCase_v6.test_subnet_ofcCst|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���dS)Nrrrrr�rr	r	r
rQs(
��
��
��
��z#NetworkTestCase_v6.test_supernet_ofN)rr r!rrrr�rr	r	r	r
r5src@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�FactoryFunctionErrorscCsDd}d}|�t|||��||�Wd�n1s60YdS)z3Ensure a clean ValueError with the expected messageZcamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r�
ValueError)rr�kindr<rCr	r	r
�assertFactoryErrorfsz(FactoryFunctionErrors.assertFactoryErrorcCs|�tjd�dS)NrB)rr�
ip_addressrr	r	r
�test_ip_addressmsz%FactoryFunctionErrors.test_ip_addresscCs|�tjd�dS)NZ	interface)rr�ip_interfacerr	r	r
�test_ip_interfacepsz'FactoryFunctionErrors.test_ip_interfacecCs|�tjd�dS)N�network)rr�
ip_networkrr	r	r
�test_ip_networkssz%FactoryFunctionErrors.test_ip_networkN)rr r!rrrrr	r	r	r
rdsrc@s^eZdZe�d�Ze�d�Ze�d�Z	e�
d�Ze�d�Z
e�d�Ze�
d�Ze�d�Ze�d�Zee	gZeegZeegZee
gZeegZeegZeeZeeZe�d�Ze�d�Ze�d�Ze�
d�Ze�d�Ze�d�Z e�
d�Z!e�d�Z"e�d�Z#dd�Z$dd�Z%d	d
�Z&dd�Z'd
d�Z(dd�Z)dd�Z*dd�Z+dd�Z,dd�Z-dd�Z.dS)�ComparisonTestsr.rr^�	::2%scopecCsTt�}|jD]B}|�||�|�||k�|�|�|�t�|�|�|�t�qdSr)�object�objects_with_scoped�assertNotEqualr�r�__eq__�NotImplemented�__ne__�r�other�objr	r	r
�test_foreign_type_equality�s
z*ComparisonTests.test_foreign_type_equalitycCs2|jD]&}|jD]}||urq|�||�qqdSr)�objectsr"rr	r	r
�test_mixed_type_equality�s


z(ComparisonTests.test_mixed_type_equalitycCs(t|j|j�D]\}}|�||�qdSr)�zip�
v6_objects�v6_scoped_objectsr"rr	r	r
�test_scoped_ipv6_equality�sz)ComparisonTests.test_scoped_ipv6_equalitycCs(|jD]}|jD]}|�||�qqdSr)�
v4_objectsr.r"rr	r	r
�test_v4_with_v6_scoped_equality�s

z/ComparisonTests.test_v4_with_v6_scoped_equalitycCs4|jD](}|�||�|�||�|�||�qdSr)r!r�assertLessEqual�assertGreaterEqual�rr(r	r	r
�test_same_type_equality�s
z'ComparisonTests.test_same_type_equalityc
Cs�|j|jf|j|jf|j|jf|j|jf|j|j	f|j
|jf|j|j
f|j|jf|j|jff	D]|\}}|�||�|�||�|�||�|�||�|�||�|�||k�|�||k�|�||k�|�||k�q^dSr)�v4addr�v4addr2�v4net�v4net2�v4intf�v4intf2�v6addr�v6addr2�v6net�v6net2�v6intf�v6intf2�
v6addr_scoped�v6addr2_scoped�v6net_scoped�
v6net2_scoped�
v6intf_scoped�v6intf2_scopedr"Z
assertLessr2Z
assertGreaterr3r�rr	r	r
�test_same_type_ordering�s&








�z'ComparisonTests.test_same_type_orderingcCs�|jD]}|�||j�q|j|jD]}|�||j�q&|j|jD]}|�||j�qF|j|j|jgD]}|�||j�ql|j|j|jgD]}|�||j�q�|j	|j
|jgD]}|�||j�q�dSr)�v4_addresses�assertInr8�v6_addresses�v6_scoped_addressesr>rDr0�assertNotInr-r.r4r	r	r
�test_containment�s
z ComparisonTests.test_containmentcs�|jD]��|jD]z�t�t���st�t���r2q|�t��fdd��|�t��fdd��|�t��fdd��|�t��fdd��qqdS)Ncs��kSrr	r	�rrr	r
�<lambda>��z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>cs��kSrr	r	rOr	r
rP�rQcs��kSrr	r	rOr	r
rP�rQcs��kSrr	r	rOr	r
rP�rQ)r!�
isinstance�typer/r0rr	rOr
�test_mixed_type_ordering�s

z(ComparisonTests.test_mixed_type_orderingc	CsPt�}|jD�]<}|�t��||kWd�n1s:0Y|�t��||kWd�n1sl0Y|�t��||kWd�n1s�0Y|�t��||kWd�n1s�0Y|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�qdSr)r r!r/r0r
rr�rr&r	r	r
�test_foreign_type_ordering�s$&&&&z*ComparisonTests.test_foreign_type_orderingcCs�|j|j|jg}|j|j|jg}|j|j|jg}|�	|t
|jtj
d��|�	|t
|jtj
d��|�	|t
|jtj
d��|�	||t
|j|jtj
d��|�	tt�
t��dS)N)�key)r6r8r:r<r>r@rBrDrFr�sortedr0rZget_mixed_type_keyr-r.r$r )rZ
v4_orderedZ
v6_orderedZv6_scoped_orderedr	r	r
�test_mixed_type_key�s0������
��z#ComparisonTests.test_mixed_type_keycCs@t�d�}t�d�}t�d�}t�d�}t�d�}t�d�}|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�dS)Nr�rr)rrrr/r0�__lt__�__gt__)rr6r8r<r>rBrDr	r	r
�test_incompatible_versionss,





z*ComparisonTests.test_incompatible_versionsN)/rr r!rr|r6rr8r�r:r�r<rr>r
r@rBrDrFrIr0rKr-rLr.r*r!r7r9r;r=r?rArCrErGr)r+r/r1r5rHrNrTrUrXr[r	r	r	r
rwsJ




















		
rc@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�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�S)��IpaddrUnitTestcCspt�d�|_t�d�|_t�d�|_t�d�|_t�d�|_	t�
d�|_t�d�|_t�d�|_
t�
d	�|_dS)
Nr��
1.2.3.4/24�
1.2.3.0/24�2001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:1/64�2001:658:22a:cafe::/64�!2001:658:22a:cafe:200:0:0:1%scopez$2001:658:22a:cafe:200:0:0:1%scope/64z2001:658:22a:cafe::%scope/64)rr|�ipv4_addressr��ipv4_interfacer�ipv4_networkr
�ipv6_address�ipv6_interfacer�ipv6_network�ipv6_scoped_address�ipv6_scoped_interface�ipv6_scoped_networkrr	r	r
�setUp.s"����zIpaddrUnitTest.setUpcCsF|�dtt�d���|�dtt�d���|�dtt�d���dS)NzIPv4Interface('1.2.3.4/32')r�zIPv6Interface('::1/128')rzIPv6Interface('::1%scope/128')r)rr,rr�r
rr	r	r
�testRepr>s���zIpaddrUnitTest.testReprcCs�t�d�}t�d�}|�t�d�|�|�t�|df�|�|�t�d�|�|�t�d�|�|�t�|df�|�|�t�d�|�|�t��t�d	�Wd�n1s�0Y|�t��t�|d
f�Wd�n1s�0Y|�t��t�d�Wd�n1�s 0Y|�t��t�d�Wd�n1�sV0Y|�t��t�|d
f�Wd�n1�s�0Y|�t��t�d�Wd�n1�s�0Yt�d�}|�tjd	dd�|�|�tj|d
fdd�|�|�tjddd�|�|�tjddd�|�|�tj|d
fdd�|�|�tjddd�|�t�d�}t�d�}|�t�d�|�|�t�|d
f�|�|�t�d�|�|�t�d�|�|�t�|d
f�|�|�t�d�|�|�t�d	�t�d��|�t�d�t�d��|�t��t�d�Wd�n1�sJ0Y|�t��t�d�Wd�n1�s�0YdS)Nr�z192.0.2.1/32)r�r�r�)�r�)r�r�r�)rmr�)r�r�r�)rmr�)r�r�r�)rmr�r�F��strictr�r�)�r�r�)rpr�z192.0.2.1/24)r�z255.255.255.255.0)rr|rrr/rr�r)r�ipr�r	r	r
�
testIPv4TupleGs�

�
���(,**.*

����
��
��
���
��

�
�����*zIpaddrUnitTest.testIPv4TuplecCs�t�d�}t�d�}|�t�d�|�|�t�d�|�|�t�|df�|�t�d�}t�d�}|�t�d�|�|�t�d�|�|�t�|d	f�|�t�d
�}t�d�}|�t��t�d�Wd�n1s�0Y|�t��t�d
�Wd�n1�s0Y|�t��t�|df�Wd�n1�sJ0Yt�d�}|�tjddd�|�|�tjd
dd�|�|�tj|dfdd�|�|�t�d�t�d��|�t�d�t�d��t�d�}|�t��t�d�Wd�n1�s
0Y|�t��t�|df�Wd�n1�sD0Y|�t��t�d�Wd�n1�sz0Y|�t��t�d�Wd�n1�s�0YdS)Nr�z2001:db8::/128)r��128)�	n� r_rsz
2001:db8::/96)r��96)rt�`rur��2001:db8::1)rwrv)�	n� rvrvFrn)rwruz2001:db8::1/96)rxru�2001:db8::1%scope)ryrv)rwr�)rr�rrr/rr
r)rrqr��	ip_scopedr	r	r
�
testIPv6Tuple�s�

����

����

(*.

��������
*.*zIpaddrUnitTest.testIPv6TuplecCs�|�t�d�dt�d��|�t�d�dt�d��|�t�d�dt�d��|�t�d�dt�d��|�t�d	�dt�d
��|�t�d
�dt�d	��dS)Nr��z1.1.2.0�z1.1.0.1ri��z::ffffrz::ffff%scope)rrr|r�r"rr	r	r
�testAddressIntMath�s$������z!IpaddrUnitTest.testAddressIntMathcCsP|�ttjd�|�ttjdtj�|�ttjd�|�ttjdtj�dS)NrNr^)r/rrZv4_int_to_packedZ
IPV4LENGTHZv6_int_to_packedZ
IPV6LENGTHrr	r	r
�testInvalidIntToBytes�s
�
�z$IpaddrUnitTest.testInvalidIntToBytescCs�t�d�}t�d�}t�d�}|�tt�|g��||fg�|�tt�||g��||f||fg�|�tt�|||g��||fg�|�dt�dd��|�dt|j��dS)Nz10.10.10.10z10.10.10.11z10.10.10.12r_rzIPv4Network('1.2.3.0/24'))rr|r�listZ_find_address_rangeZ_count_righthand_zero_bitsr,rd)r�ip1�ip2�ip3r	r	r
�
testInternals�s


���zIpaddrUnitTest.testInternalscCs�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�dS)Ni�1.2.3.0l	�/YE� �2001:658:22a:cafe::�::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r�intrd�network_addressr�rgr�rjrr	r	r
�testGetNetwork�s(������zIpaddrUnitTest.testGetNetworkcCs�|�|jjt�d�j�t�d�}t�d�}t�d�}|�|t�t|j���|�|t�t|j���|�|t�t|j���d}|�|j	jt�
|�j�|�|jjt�
|�j�|�t�|jj�j
d�|�t�|jj�j
d�|�t�|jj�j
d�dS)Nr�r�r_ra�	�/YE� ��)rrc�_iprr�rr�r�r"rfr
rirb�versionrerh)r�ipv4�ipv6Zipv6_scopedZv6_intr	r	r
�
testIpFromInts2

�




�

����zIpaddrUnitTest.testIpFromIntcCsvtj}|�|jjt�d�j�|�|d�|d��|�|jjt�d�j�|�|d�|d��|�|d�|d��dS)	Nr��255.254.253.252������ X*��ffff:2:3:4:ffff::�����r[s)rrrrcr�rrfrqrcr	r	r
�testIpFromPackeds$

�
�
��
�
�zIpaddrUnitTest.testIpFromPackedcCs||�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�dS)Nr�r�r��2001:658:22a:cafe:200::1)rr�rcrqr�rfrirr	r	r
�	testGetIp-s����zIpaddrUnitTest.testGetIpcCs`d}d}d}||}t�|�}t�|�}|�t|�|�|�|j||�|�t|j�|�dS)Nz0000:0000:0000:0000:0000:ffff:�::ffff:r�)rr�r
rr��explodedrq)rZlong_prefixZshort_prefixr�Z
ipv6_ipv4_strZipv6_ipv4_addrZipv6_ipv4_ifacer	r	r
�&testIPv6IPv4MappedStringRepresentation:s

z5IpaddrUnitTest.testIPv6IPv4MappedStringRepresentationcCst|�|jjd�|�t|jj�d�|�|jjd�|�t|jj�d�|�|jjjd�|�t|j	jj�d�dS)NZscope)
rreZscope_idr�rhrfrirgr�rjrr	r	r
�testGetScopeIdEs$
��
����zIpaddrUnitTest.testGetScopeIdcCst|�t|jj�d�|�t|jj�d�|�t|jj�d�|�|jjd�|�t|jj�d�|�|jjd�dS)Nl�r�l	������@)rr�rdr�r�rg�	prefixlenrjrr	r	r
�testGetNetmaskSs��zIpaddrUnitTest.testGetNetmaskcCs�t�d�}|�t|jj�d�|�|�d�d�t�d�}|�t|jj�d�|�|�d�d�t�d�}|�t|jj�d�|�|�d�d�dS)N�	1.2.3.4/0rr�z::1/0z::1%scope/0)rr�rr�rr�Z_prefix_from_prefix_stringr
)rZipv4_zero_netmaskZipv6_zero_netmaskZipv6_scoped_zero_netmaskr	r	r
�testZeroNetmask]s


zIpaddrUnitTest.testZeroNetmaskcCst�d�}|�|jd�dS)Nz127.0.0.0/0.0.0.255r�)rrrr��rr�r	r	r
�testIPv4Netjs
zIpaddrUnitTest.testIPv4NetcCs||�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�dS)Ni��	1.2.3.255l	�����/YE� �%2001:658:22a:cafe:ffff:ffff:ffff:ffff)rr�rd�broadcast_addressr�rgrjrr	r	r
�testGetBroadcastns����zIpaddrUnitTest.testGetBroadcastcCs:|�|jjjd�|�|jjjd�|�|jjjd�dS)Nr�r�)rrcrr�rfrirr	r	r
�testGetPrefixlen|szIpaddrUnitTest.testGetPrefixlencCs�|�|j��jd�|�t|j��j�d�|�t�d�j��t�	d��|�|j
��jd�|�t|j
��j�d�|�t�d�j��t�d��|�|j
��jd�|�t|j
��j�d�dS)N�z1.2.2.0�	0.0.0.0/0�?r�z::0/0)rrd�supernetr�r�r�rr�rrrgr
rrjrr	r	r
�testGetSupernet�s&�����zIpaddrUnitTest.testGetSupernetcCs�|�|j�d�jd�|�t|j�d�j�d�|�|j�d�jd�|�t|j�d�j�d�|�|j�d�jd�|�t|j�d�j�d�dS)NrV�z1.2.0.0�=z2001:658:22a:caf8::)rrdr�r�r�r�rgrjrr	r	r
�testGetSupernet3�s���zIpaddrUnitTest.testGetSupernet3cCs�|jt|jjddd�|jt|jjdd�|�|jjdd�|jjdd��|jt|jjddd�|jt|jjdd�|�|jjdd�|jjd	d��|jt|jjddd�|jt|jjdd�|�|jjdd�|jjd	d��dS)
Nr^r.��prefixlen_diff�
new_prefix��r��r���A�>)r/rrdr�rrgrjrr	r	r
�testGetSupernet4�s6���������zIpaddrUnitTest.testGetSupernet4cCs�t|j���}|�dt|��|�t�d�|d�|�t�d�|d�t�d�}t|���}|�dt|��|�t�d�|d�|�t�d	�|d�t�d
�}t|���}|�dt|��|�t�d�|d�|�t�d	�|d�t�d�t�d�g}d
}d}|�|tt�	|�����|�|tt�	|�����|�tt�	|����tt�	|�����t�d�g}d}d}|�|tt�	|�����|�|tt�	|�����|�tt�	|����tt�	|�����t�d�t�d�g}d}d}|�|tt�	|�����|�|tt�	|�����|�tt�	|����tt�	|�����t�d�g}d}d}|�|tt�	|�����|�|tt�	|�����|�tt�	|����tt�	|�����dS)N�z1.2.3.1rz	1.2.3.254rN�2001:658:22a:cafe::/120r|�2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/120�2.0.0.0z2.0.0.1z
2.0.0.0/31)r��r�r�)r�r�r�z2001:658:22a:cafe::/127)r���2001:658:22a:cafe::1/128)r�r_)
r�rd�hostsr�lenrr|rr�r)rr�rgrjZaddrsZstr_argsZtpl_argsr	r	r
�	testHosts�sd

������zIpaddrUnitTest.testHostscCs|�t|jjdd��t|jjdd���|�tt|jjdd��|�tt|jjddd��|�t|jjdd��t|jjdd���|�tt|jjd	d��|�tt|jjddd��|�t|jjdd��t|jjdd���|�tt|jjd	d��|�tt|jjddd��dS)
NrVr��r�r�r�r��Dr�)	rrWrd�subnetsr/rr�rgrjrr	r	r
�testFancySubnetting�sB������������z"IpaddrUnitTest.testFancySubnettingcCs�|�t|j���djd�|�tt|j���dj�d�|�tt|j���dj�d�|�t|j���djd�|�t|j���djd�dS)Nrr�r�r.z	1.2.3.128r�)	rr�rdr�r�r�r�rgrjrr	r	r
�testGetSubnetss"������zIpaddrUnitTest.testGetSubnetscCsNt�d�}dd�|��D�}dd�|�d�D�}|�|dg�|�||�dS)Nr�cSsg|]}t|��qSr	�r���.0r=r	r	r
�
<listcomp>rQz;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>cSsg|]}t|��qSr	r�r�r	r	r
r�rQr^)rrr�r)rrq�subnets1�subnets2r	r	r
�testGetSubnetForSingle32s

z'IpaddrUnitTest.testGetSubnetForSingle32cCs�t�d�}dd�|��D�}dd�|�d�D�}|�|dg�|�||�t�d�}dd�|��D�}dd�|�d�D�}|�|dg�|�||�dS)	NrcSsg|]}t|��qSr	r�r�r	r	r
r�rQz<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>cSsg|]}t|��qSr	r�r�r	r	r
r�rQr^rcSsg|]}t|��qSr	r�r�r	r	r
r�rQcSsg|]}t|��qSr	r�r�r	r	r
r�rQ)rrr�r)rrqr�r�rzr	r	r
�testGetSubnetForSingle128s

z(IpaddrUnitTest.testGetSubnetForSingle128cCsPdd�|j�d�D�}|�|gd��dd�|j�d�D�}|�|gd��dS)NcSsg|]}t|��qSr	r�r�r	r	r
r�!rQz.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>r^)z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26cSsg|]}t|��qSr	r�r�r	r	r
r�&rQ)�2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)rdr�rrg)rZipsZipsv6r	r	r
�testSubnet2 s��zIpaddrUnitTest.testSubnet2cCs�dd�|j�d�D�}|�|dd�gd��|�|dd�gd��|�t|�d�t�d	�}d
d�|�d�D�}|�|dd�gd��|�|dd�gd��|�t|�d�dS)
NcSsg|]}t|��qSr	r�r�r	r	r
r�/rQz2IpaddrUnitTest.testGetSubnets3.<locals>.<listcomp>�rV)z
1.2.3.0/32z
1.2.3.1/32z
1.2.3.2/32���)z1.2.3.253/32z1.2.3.254/32z1.2.3.255/32r}r�cSsg|]}t|��qSr	r�r�r	r	r
r�7rQ)z2001:658:22a:cafe::/128r�z2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)rdr�rr�rr)rr�rgr	r	r
�testGetSubnets3.s"��
��zIpaddrUnitTest.testGetSubnets3cCs�|�tt|jj�d��|�tt|j�d��|�tt|jj�d��|�tt|j�d��|�tt|j	j�d��|�tt|j
�d��dS)N�	r��r/rr�rcrr�rdrfrgrirjrr	r	r
�testSubnetFailsForLargeCidrDiffBs$�
��
��
�z.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffcCs@|�t|jjjd�|�t|jjjd�|�t|jjjd�dS)Nr�r�)r/rrcrr�rfrirr	r	r
�!testSupernetFailsForLargeCidrDiffPs
�
�
�z0IpaddrUnitTest.testSupernetFailsForLargeCidrDiffcCs�|�tt|jj�d��|�tt|j�d��|�tt|jj�d��|�tt|j�d��|�tt|j	j�d��|�tt|j
�d��dS)NrNr�rr	r	r
�"testSubnetFailsForNegativeCidrDiffXs$�
��
��
�z1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffcCs�|�|jjd�|�t|j���djd�|�|j��jd�|�|jjd�|�t|j���djd�|�|j��jd�|�|jjd�|�t|j���djd�|�|j��jd�dS)Nr}rr_i�ll )rrdZ
num_addressesr�r�r�rgrjrr	r	r
�testGetNum_Addressesfs&�����z#IpaddrUnitTest.testGetNum_AddressescCs`|�t�d�|j�|�t�d�|j�t�d�}|�||j�|�t�d��t�d���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)	rJrr�rdrMr|r�r�__contains__)r�addr1r	r	r
�testContainsws��
�zIpaddrUnitTest.testContainscCs||�t|jd�d�|�t|jjd�|�t|jd�d�|�t|jjd�|�t|jd�d�|�t|jjd�dS)NrW�1.2.3.5r}z2001:658:22a:cafe::5r�)rr�rdr/�
IndexError�__getitem__rgrjrr	r	r
�testNth�s��zIpaddrUnitTest.testNthcCs�t�d�}|�d|j�t|�}|�dt|d��|�dt|d��|�dt|d��|�dt|d��|�|d|d�dS)Nz172.31.255.128/255.255.255.240�z172.31.255.128rz172.31.255.143rN)rrrr�r�r�)rr<Z	addr_listr	r	r
�testGetitem�s
zIpaddrUnitTest.testGetitemcCs�|�|jt�d�k�|�|jt�d�k�|�|jt�d�k�|�|jt�d�k�|�|jdk�|�|jgk�|�|jdk�|�|jt�d�k�|�|jt�d�k�|�|jt�d�k�|�|jdk�|�|jgk�|�|jdk�|�|jt�d	�k�|�|jt�d
�k�|�|jt�d�k�|�|jt�d�k�|�|jt�d�k�|�|jdk�|�|jgk�|�|jdk�dS)Nr]�
1.2.3.4/23�::1.2.3.4/24�::1.2.3.4%scope/24r'r^�2001:658:22a:cafe:200::1/64�2001:658:22a:cafe:200::1/63�!2001:658:22a:cafe:200::1%scope/64�!2001:658:22a:cafe:200::1%scope/63)r
rcrr�r�r
rfrirr	r	r
�	testEqual�sZ������������zIpaddrUnitTest.testEqualcCsn|�|jt�d�k�|�|jt�d�k�|�|jt�d�k�|�|jt�d�k�|�|jdk�|�|jgk�|�|jdk�|�|jt�d�k�|�|jdk�|�|jgk�|�|jdk�|�|jt�d�k�|�|jt�d	�k�|�|jt�d�k�|�|jdk�|�|jgk�|�|jdk�|�|j	t�d
�k�|�|j	dk�|�|j	gk�|�|j	dk�|�|j
t�d�k�|�|j
t�d�k�|�|j
t�d�k�|�|j
t�d	�k�|�|j
t�d�k�|�|j
dk�|�|j
gk�|�|j
dk�|�|jt�d
�k�|�|jdk�|�|jgk�|�|jdk�dS)
Nr]r�r�r�r'r^r�r�r�r�r�r�)r�rcrr�r
r
rbr|rfrerirhrr	r	r
�testNotEqual�s~���������������zIpaddrUnitTest.testNotEqualcCs|�tt�d��d�dS)Nz1.2.3.4/255.255.255.255r��rr�rr�rr	r	r
�testSlash32Constructor�s

��z%IpaddrUnitTest.testSlash32ConstructorcCs0|�tt�d��d�|�tt�d��d�dS)Nrr)rr�rr
rr	r	r
�testSlash128Constructor�s��z&IpaddrUnitTest.testSlash128ConstructorcCs|�tt�d��d�dS)Nz1.2.3.4/0.0.0.0r�r�rr	r	r
�testSlash0Constructors�z$IpaddrUnitTest.testSlash0ConstructorcCs�t�d�}t�d�}t�d�}t�d�}t�d�}t�d�}t�||||||g�}|�t|�t�d�t�d�g�t�d�}t�d�}t�d�}t�d�}t�||||g�}|�t|�t�d�g�t�d�}t�d	�}t�d
�}t�d�}t�d�}t�d
�}t�||||||g�}|�t|�t�d
�t�d�g�t�||g�}|�t|�t�d�g�t�d�}}	|�tt�||	g��|g�t�d�}}	|�tt�||	g��t�d�g�t�d�}t�d�}t�d�}t�|||g�}|�t|�|g�t�d�}t�d�}t�d�}t�|||g�}|�t|�|g�t�d�t�d�ft�d�t�d�ft�d�t�d�fg}
|
D]\}}|�	t
tj||g��qtt�d�t�d�ft�d�t�d�ft�d�t�d�fg}
|
D]\}}|�	t
tj||g��q�dS)N�1.1.1.0r��1.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)rr|Zcollapse_addressesrr�rrrrr/r0)rr�r�r��ip4Zip5Zip6Z	collapsedZip_same1Zip_same2Zaddr_tuplesr	r	r
�testCollapsings�





�
��





�





�
��

�
��
�
�





����
�����
�zIpaddrUnitTest.testCollapsingc	CsVtj}t�d�}t�d�}Gdd�dtj�}|d�}|d�}|�tt|||��|�tt||t�d���|�tt||t�d���|�t|||��dt�	d��t�d	�}|�t|||��t�	d
�t�	d	�g�t�
d�}t�
tj
j�}|�t�d�gt|||���t�d�}t�d
�}|�t|||��dt�	d��t�d�}|�t|||��t�	d�t�	d�g�t�d�}t�d�}|�t|||��dt�	d��t�d�}|�t|||��t�	d�t�	d�g�|�tt|t�d�t�d���|�tt|t�	d�t�	d���|�tt|t�	d�t�	d���|�tt|t�d�t�	d���dS)Nr�z	1.1.1.255c@seZdZedd��ZdS)z3IpaddrUnitTest.testSummarizing.<locals>.IPv7AddresscSsdS)N�r	rr	r	r
r�osz;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.versionN)rr r!r"r�r	r	r	r
�IPv7Addressnsr�rrrr�z1.1.1.8z
1.1.1.0/29r�rz$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.0r[)
rZsummarize_address_rangerr�r/rr�r0rrr|Z	_ALL_ONESr)rZ	summarizer�r�r�Zip_invalid1Zip_invalid2r	r	r
�testSummarizingfs�

����
��
�

�
��

�
��
��
��
��
��zIpaddrUnitTest.testSummarizingcCs�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�dS)Nr�r�r�::2rr)r
rrrr	r	r
�testAddressComparison�s$������z$IpaddrUnitTest.testAddressComparisoncCs�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d	�t�d	�k�|�t�d	�t�d
�k�|�t�d	�t�d�k�|�t�d�t�d	�k�|�t�d
�t�d	�k�|�t�d�t�d	�k�|�t�d	�t�d�k�|�t�d	�t�d�k�|�t�d	�t�d�k�|�t�d	�t�d�k�|�t�d�t�d�k�|�t�d
�t�d�k�|�t�d�t�d�k�|�t�d	�t�d�k�|�t�d�t�d	�k�|�t�d�t�d
�k�|�t�d�t�d�k�|�t�d�t�d	�k�|�t�d�t�d	�k�|�t�d�t�d	�k�|�t�d�t�d�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/48z::1%scope/64z::1%scope/80z::2%scope/64z::2%scope/48)r
rrr�rr	r	r
�testInterfaceComparison�s������������������������������������z&IpaddrUnitTest.testInterfaceComparisonc	Csbt�d�}t�d�}t�d�}|�||k�|�||k�|�|�|�d�|�|�|�d�|�|�|�d�|�|�|�d�|�|�|�d�|�|��|��k�t�d�}t�d�}t�d	�}|�||k�|�||k�|�|�|�d�|�|��|��k�|�t|j	j|j
�t�d
�}t�d�}|�t|j
|�|�t|j|�|�t|j
|�|�t|j|�t�d�}|�||k�|�||k�t�d
�}|�||k�|�||k�|�||k�|�||k�t�d�}|�||k�|�||k�|�||k�|�||k�t�d�}t�d�}t�d�}t�d�}||||g}||||g}|��|�||�||||g}|��|�||�|�|�
t�d��t�|�|�
t�d��t�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�dS)Nr�z
1.1.1.0/32r�rrNr.z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96�::/0r�z
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.2r�r�rr)rrr
rZcompare_networksZ_get_networks_keyrr/r0rdrgr
r�rYrZrr��sortZassertIsrr$)	rr�r�r�r�r�r�rWZunsortedr	r	r
�testNetworkComparison
s�





�








��������z$IpaddrUnitTest.testNetworkComparisoncCs4|�ttjd�|�ttjd�|�ttjd�dS)Nz192.168.1.1/24z::1/120z
::1%scope/120)r/rrrrr	r	r
�testStrictNetworksasz!IpaddrUnitTest.testStrictNetworkscCsVt�d�}t�d�}t�d�}|�|j�|��|�|j�|��|�|�|��dS)Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)rrr
rdZoverlapsr�)rr'Zother2Zother3r	r	r
�testOverlapsfs


zIpaddrUnitTest.testOverlapscCshd}t�|�}t�d|�}|�t|j�t|j��t�d|�}|�|j|j�|�tjtjd�dS)NrGz::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	rr�r
rr�rqr"r/r)rZipv4_stringr�Z
v4compat_ipv6Z
v4mapped_ipv6r	r	r
�testEmbeddedIpv4ns
�zIpaddrUnitTest.testEmbeddedIpv4cCs$|�t�d�t�d��|�t�d�t�d��|�t�d�t�d��|�t�d�t�d��|�t�d	�t�d
��|�t�d�t�d��|�t�d	�t�d��|�t�d�t�d��|�t�d�t�d
��|�t�d�t�d��|�t�d
�t�d��|�t�d�t�d��dS)Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z-0000:0000:0000:0000:0000:FFFF:192.168.255.255z::ffff:c0a8:ffffz-FFFF:0000:0000:0000:0000:0000:192.168.255.255zffff::c0a8:ffffz::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scopez30000:0000:0000:0000:0000:FFFF:192.168.255.255%scopez::ffff:c0a8:ffff%scopez3FFFF:0000:0000:0000:0000:0000:192.168.255.255%scopezffff::c0a8:ffff%scope)rrrr"rr	r	r
�testIPv6AddressTooLargeysH������������z&IpaddrUnitTest.testIPv6AddressTooLargecCs4|�|jjd�|�|jjd�|�|jjd�dS)Nr�r�)rrbr�rerhrr	r	r
�
testIPVersion�szIpaddrUnitTest.testIPVersioncCs4|�|jjd�|�|jjd�|�|jjd�dS)Nr�r_)rrcZ
max_prefixlenrfrirr	r	r
�testMaxPrefixLength�sz"IpaddrUnitTest.testMaxPrefixLengthcCs�|�|jjd�|�t�d�jd�|�|jjd�|�t�d�jd�|�t�d�jd�|�|jjd�|�t�d	�jd�|�t�d
�jd�dS)Nr�r�r�r�r�r�z::1:0:0:0:0szffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)rrbZpackedrr�rer
rhrr	r	r
�
testPacked�s0
��
���
���zIpaddrUnitTest.testPackedcCstt�d�}t�d�}t�d�}t�d�}|�tjt|��|�tjt|��|�tjt|��|�tjt|��dS)Nr�r�)	rrrrrrSr|rr�)rZipv4netZipv4addrZipv6netZipv6addrr	r	r
�
testIpType�s



zIpaddrUnitTest.testIpTypecCsT|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d	�j�|�dt�d
�j�|�dt�d�j�|�dt�d�j�|�dt�d
�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j	�|�dt�d�j�|�dt�d�j	�|�dt�
d�j�|�dt�
d�j�|�dt�
d�j�|�dt�
d�j�|�dt�
d�j�|�dt�
d�j�|�dt�
d�j�|�dt�
d�j�|�dt�
d�j�|�dt�
d	�j�|�dt�
d
�j�|�t�
d�j	�|�
t�
d�j	�|�
t�
d�j	�|�t�
d�j	�|�dt�
d�j�|�dt�
d�j�|�
t�
d�j	�|�t�
d �j	�|�dt�
d!�j�|�dt�
d"�j�|�dt�
d�j�|�dt�d�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/24rEz	224.1.1.1z	240.0.0.1z239.255.255.255�192.168.1.1z	192.0.0.0z	192.0.0.9z
192.0.0.10z192.0.0.255z169.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
rr	r	r
�testReservedIpv4�s�
�
�
�
�
�������
�
�
�
�
�
�
�
�
�
�zIpaddrUnitTest.testReservedIpv4cCsH|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d	�j�|�dt�d
�j�|�dt�d�j�|�dt�d�j�|�dt�d
�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�dS) NTr�Fz	1.0.0.0/8z	0.0.0.0/8�
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z
172.16.0.0/12z192.0.0.0/29z192.0.0.9/32z192.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::/64z2001:2::/48z2001:3::/48r	z2001:10::/28zfc00::/7z	fe80::/10)rrrrrr	r	r
�testPrivateNetworks	s:z"IpaddrUnitTest.testPrivateNetworkscCs�|�dt�d�j�|�dt�ddd�j�|�dt�d�j�|�dt�d�j�|�dt�d	�j�|�dt�d
�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d
�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j	�|�dt�d�j	�|�dt�d�j	�|�dt�d�j�|�dt�d�j
�|�dt�d�j�|�dt�ddd�j�|�dt�d�j�|�dt�d�j�|�dt�d	�j�|�dt�d
�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d
�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j�|�dt�d�j	�|�dt�d�j	�|�t�d�j
�|�t�d�j
�|�
t�d�j
�|�
t�d �j
�|�t�d!�j
�|�
t�d"�j
�|�t�d#�j
�|�
t�d$�j
�|�t�d%�j
�|�
t�d&�j
�|�
t�d'�j
�|�t�d(�j
�|�t�d)�j
�|�dt�d*�j�|�dt�d+�j�dS),NTzffff::r^r_r.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/127r[rz0::0rz::/127z2001::1/128z
200::1/128z64:ff9b:1::z2001::z	2001:1::1z	2001:1::2z2001:2::z2001:3::z2001:4::z2001:4:112::z	2001:10::z	2001:20::z	2001:30::z	2001:40::z2002::z100::z4000::1/128)rrrrZ
is_site_localrrrrrrrr�r
rrr	r	r
�testReservedIpv60	s�
�
�
�
�
�
�
�
�
�
�
�
�zIpaddrUnitTest.testReservedIpv6cCsL|�t�d�jt�d��|�t�d�jd�|�t�d�jt�d��dS)N�::ffff:192.168.1.1rz
::c0a8:101z::ffff:c0a8:101)rrrZipv4_mappedrr	r	r
�testIpv4Mapped�	s
��zIpaddrUnitTest.testIpv4Mappedc	Cs�dD]�}|�|���t�|�}t�d|���}|�|j|j�|�|j|j�|�|j|j�|�|j|j�|�|j	|j	�|�|j
|j
�|�|j|j�Wd�q1s�0YqdS)N)z178.62.3.251z169.254.169.254�	127.0.0.1z	224.0.0.1rGrEz
100.64.0.1r�)r9rr|r�rrrrrrrr)r�addr4r�r�r	r	r
�testIpv4MappedProperties�	s	
z'IpaddrUnitTest.testIpv4MappedPropertiescCs,|�dt�d�j�|�dt�d�j�dS)NTrFz::ffff:172.32.0.0)rrrrrr	r	r
�testIpv4MappedPrivateCheck�	s��z)IpaddrUnitTest.testIpv4MappedPrivateCheckc
Cst�d�}t�d�}t�d�}t�d�}t�d�}t�d�}|�tt|�|���t�d�t�d�g�|�tt|�|��|�t	t|�|��|�t	t|�|��|�t|�|��g�|�tt|�|���t�d	�t�d
�t�d�t�d�t�d
�t�d�t�d�t�d�g�dS)N�10.1.1.0/24z10.1.1.0/26z10.2.1.0/24�10.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)
rrrrrWr�Zaddress_excluder/rr0�rr��addr2�addr3rZaddr5Zaddr6r	r	r
�testAddrExclude�	s4





����zIpaddrUnitTest.testAddrExcludec
Cs�|�tt�d��tt�d���|�tt�d��tt�d���|�tt�d��tt�d���|�tt�d��tt�tt�d�j����t�d�}t�d�}i}d||j<d||j	<d||<d||<|�
|j|�|�
||�dS)Nr!r"r�r)r�hashrrrrr�r�rbrerJ)rr�r�Zdummyr	r	r
�testHash�	s.�����



zIpaddrUnitTest.testHashcCs6|j}|�d|j�|j}|�t|jddd�dS)Nr^r^r_r.)rdr�
compressedrgr/rZ_string_from_ip_intr�r	r	r
�testIPBases�	szIpaddrUnitTest.testIPBasescCsD|j}|�d|j�|�d|j�|�d|j�|�dt|��dS)Nr`z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)rgr�with_prefixlen�with_netmask�
with_hostmaskr�r�r	r	r
�testIPv6NetworkHelpers�	s��z%IpaddrUnitTest.testIPv6NetworkHelperscCsD|j}|�d|j�|�d|j�|�d|j�|�dt|��dS)Nr^z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)rdrr+r,r-r�r�r	r	r
�testIPv4NetworkHelpers�	s
z%IpaddrUnitTest.testIPv4NetworkHelperscCs|t�d�}t�|�}t�d�}t�|�}t�d�}t�d�}|�||�|�||�|�|t�|��|�|t�|��dS)Nr!r�r�r�)rrrr|r�rr#r	r	r
�testCopyConstructor�	s





z"IpaddrUnitTest.testCopyConstructorcCs`ddddddddd	d
ddd
ddddddddd�}t|���D]\}}|�|tt�|���q<dS)Nz1:2:3:4:5:6:7:8/128z2001:0:0:4::8/128z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8/128z0:0:3::ffff/128z::4:0:0:0:ffff/128z::5:0:0:ffff/128z1::4:0:0:7:8/128rrrr�z
::102:304/128z1:2:3:4:5:ffff:102:304/128z0:7:6:5:4:3:2:1/128z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1:0/128z::ffff:ffff/128z::ffff:255.255.255.255/128z+ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128)z1:2:3:4:5:6:7:8z2001:0:0:4:0:0:0:8z2001:0:0:4:5:6:7:8z2001:0:3:4:5:6:7:8z0:0:3:0:0:0:0:ffffz0:0:0:4:0:0:0:ffffz0:0:0:0:5:0:0:ffffz1:0:0:4:0:0:7:8z0:0:0:0:0:0:0:0z0:0:0:0:0:0:0:0/0z0:0:0:0:0:0:0:1z*2001:0658:022a:cafe:0000:0000:0000:0000/66r�z1:2:3:4:5:ffff:1.2.3.4z::7:6:5:4:3:2:1z::7:6:5:4:3:2:0z7:6:5:4:3:2:1::z0:6:5:4:3:2:1::z-0000:0000:0000:0000:0000:0000:255.255.255.255z-0000:0000:0000:0000:0000:ffff:255.255.255.255z-ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255)r��itemsrr�rr
)rZtest_addressesZuncompressedr)r	r	r
�testCompressIPv6Address
s4��z&IpaddrUnitTest.testCompressIPv6AddresscCsxt�d�}t�d�}t�d�}t�d�}|�d|j�|�dt�d�j�|�d|j�|�d	|j�|�d|j�dS)
Nz2001::1�2001:0:5ef5:79fd:0:59d:a0e5:ba1r�z
192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128rz'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)rr
r�rr|rr�)rr�r$r%rr	r	r
�testExplodeShortHandIpStr
s"



�
���z(IpaddrUnitTest.testExplodeShortHandIpStrc	Cs�dD]N\}}|jd|d��(t�|�}|�|j|�Wd�q1sH0YqdD]N\}}|jd|d��(t�|�}|�|j|�Wd�qX1s�0YqXdS)N))rz1.0.0.127.in-addr.arpa)z	10.2.0.52z52.0.2.10.in-addr.arpaZipv4_reverse_pointerr�))rwzH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa)z::FFFF:192.168.1.35zH3.2.1.0.8.a.0.c.f.f.f.f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa)z4321:0:1:2:3:4:567:89abzHb.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ip6.arpaZipv6_reverse_pointer)r9rr|rZreverse_pointerr�)rZaddr_v4Zexpectedr<Zaddr_v6r	r	r
�testReversePointer/
s
.
z!IpaddrUnitTest.testReversePointercCs(|�dt|j��|�dt|j��dS)Nr�r�)rr�rbrerr	r	r
�testIntRepresentationU
s�z$IpaddrUnitTest.testIntRepresentationcCs,|�t�d�jd�|�t�d�jd�dS)Nr.r�r�)rrrr�rrr	r	r
�testForceVersionZ
szIpaddrUnitTest.testForceVersioncCsd|�|jjd�|�|jjd�|�|jjd�|�|jjd�|�|jjd�|�|jjd�dS)Nr]z1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255r�z.2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::z.2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff)rrcr+r,r-rfrr	r	r
�testWithStar^
s 
�
�
�
�
�zIpaddrUnitTest.testWithStarcCs^|�d|jj�|�d|jj�|�|jjt�d��|�|jjt�d��|�d|jj�|�d|jj�|�d|j	j�|�d|j	j�|�|j	j
t�d��|�|jj
j
t�d��|�|j	jt�d��|�|j	jt�d��|�|jj
jt�d��|�|jj
jt�d��|�d|j	j�|�d|j	j�|�d|jj
j�|�d|jj
j�dS)Nr�r�r�z	0.0.0.255r�r�r�)rMrd�__dict__rr�rr|r�rJrgr�r�rfrrr	r	r
�testNetworkElementCachingn
sH
�
�
���
���z(IpaddrUnitTest.testNetworkElementCachingcCs�t�d�}t�d�}d}|�||ft�|�j�d}|�t�|�j�d}|�t�|�j�t�d�}|�t�d�t�d�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:fdd2r3z94.245.121.253z95.26.244.94)rr|rrZteredor�r�)rZserverZclientZteredo_addr�bad_addrr	r	r
�
testTeredo�
s 



�
��zIpaddrUnitTest.testTeredocCs8t�d�}t�d�}|�t�d�|j�|�|j�dS)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z
172.29.45.100)rrrr|Z	sixtofourr�)rZ
sixtofouraddrr;r	r	r
�
testsixtofour�
s

�zIpaddrUnitTest.testsixtofourcCs,t�d�}t�d�}|�|��|���dS)Nr�z2.3.4.5)rr�r"�__hash__)rZ
ipv4_address1Z
ipv4_address2r	r	r
�testV4HashIsNotConstant�
s

z&IpaddrUnitTest.testV4HashIsNotConstantcCs,t�d�}t�d�}|�|��|���dS)Nr_z2001:658:22a:cafe:200:0:0:2)rr
r"r>)rZ
ipv6_address1Z
ipv6_address2r	r	r
�testV6HashIsNotConstant�
s

z&IpaddrUnitTest.testV6HashIsNotConstantcCsd|�t�d���t�d����|�t�d���t�d����|�t�d���t�d����dS)Nz192.168.1.255/32z192.168.1.0/24z172.24.255.0/24z
172.24.0.0/16z192.168.1.87/32z192.168.1.86/31)r"rrr>rr	r	r
�testNetworkV4HashCollisions�
s���z*IpaddrUnitTest.testNetworkV4HashCollisionscCsD|�t�d���t�d����|�t�d���t�d����dS)Nz	fe80::/64zfe80::ffff:ffff:ffff:0/112rz'ffff:ffff:ffff:ffff:ffff:ffff:aff:0/112)r"rrr>rrr	r	r
�testNetworkV6HashCollisions�
s���z*IpaddrUnitTest.testNetworkV6HashCollisionsN)Qrr r!rkrlrrr{r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr	r
rrr
rrrrrr r&r(r*r.r/r0r2r4r5r6r7r8r:r<r=r?r@rArBr	r	r	r
r\,s�	GC



6

%7bIMW
M"[	
&*r\�__main__)r�Zunittestr*r#r1r8rr�Ztest.supportrrZTestCaserr%r@rZrfr�r�r�r�rrrrrr\r�mainr	r	r	r
�<module>sR621pY6i/6;