HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_ipaddress.cpython-37.pyc
B

��g�m�@sjdZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZGdd�dej�Z
Gdd�d�ZGdd	�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�rfe��dS)#zUnittest for ipaddress module.�N)�LARGEST�SMALLESTc@s>eZdZedd��Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�BaseTestCasecCst�dS)N)�NotImplementedError)�self�r�//usr/local/lib/python3.7/test/test_ipaddress.py�factory%szBaseTestCase.factoryc	gsL|r||}|�||�}|�}|VWdQRX|jjdk	rH|�|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|f|��S)z Ensure a clean AddressValueError)r�	ipaddress�AddressValueError)rrrrrr�assertAddressError9szBaseTestCase.assertAddressErrorcGs|jtj|f|��S)z Ensure a clean NetmaskValueError)rrZNetmaskValueError)rrrrrr�assertNetmaskError>szBaseTestCase.assertNetmaskErrorcCs|�|�|�|�|��dS)z8Check constructor arguments produce equivalent instancesN)�assertEqualr	)r�lhs�rhsrrr�assertInstancesEqualCsz!BaseTestCase.assertInstancesEqualN)�__name__�
__module__�__qualname__�propertyr	�
contextlib�contextmanagerrrrrrrrrrs
rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�CommonTestMixinc	Cs$|�d��|�d�WdQRXdS)NzAddress cannot be empty�)rr	)rrrr�test_empty_addressJsz"CommonTestMixin.test_empty_addressc	Cs.|�t�td����|�d�WdQRXdS)Nz1.0g�?)r�re�escape�reprr	)rrrr�test_floats_rejectedNsz$CommonTestMixin.test_floats_rejectedcCsB|�ttj|�d��|�tt|�d��|�tt|�d��dS)N�)�assertRaises�	TypeError�operator�indexr	�hex�bytes)rrrr�test_not_an_index_issue15559Rsz,CommonTestMixin.test_not_an_index_issue15559c
Cs\xVttjd�D]D}|j|d��.|�|�}t�t�||��}|�||�WdQRXqWdS)Nr))�proto)�range�pickleZHIGHEST_PROTOCOLZsubTestr	�loads�dumpsr)r�addrr1�x�yrrr�pickle_testYs

zCommonTestMixin.pickle_testN)rrrr$r(r0r9rrrrr"Hsr"c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CommonTestMixin_v4cCs|�dd�|�dd�dS)Nz000.000.000.000z0.0.0.0z192.168.000.001z192.168.0.1)r)rrrr�test_leading_zerosbsz%CommonTestMixin_v4.test_leading_zeroscCs|�dd�|�dd�dS)Nrz0.0.0.0lPz192.168.0.1)r)rrrr�test_intfszCommonTestMixin_v4.test_intcCs(|�t�d�d�|�t�d�d�dS)N�00000000z0.0.0.0�c0a80001z192.168.0.1)rr/�fromhex)rrrr�test_packedjszCommonTestMixin_v4.test_packedc	Cs.d}|�t�|���|�d�WdQRXdS)Nz,-1 (< 0) is not permitted as an IPv4 address���)rr%r&r	)r�msgrrr�test_negative_ints_rejectednsz.CommonTestMixin_v4.test_negative_ints_rejectedc	Cs2d}|�t�|d���|�d�WdQRXdS)Nz1%d (>= 2**32) is not permitted as an IPv4 addressl)rr%r&r	)rrBrrr�test_large_ints_rejectedssz+CommonTestMixin_v4.test_large_ints_rejectedcs �fdd�}|d�|d�dS)Nc	s>d|}d}��t�|||f�����|�WdQRXdS)N�z4%r (len %d != 4) is not permitted as an IPv4 address)rr%r&r	)�lengthr6rB)rrr�assertBadLengthyszBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength��r)rrGr)rr�test_bad_packed_lengthxsz)CommonTestMixin_v4.test_bad_packed_lengthN)	rrrr;r<r@rCrDrJrrrrr:`sr:c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CommonTestMixin_v6cCs|�dd�|�dd�dS)Nz
0000::0000z::z000::c0a8:0001z::c0a8:1)r)rrrrr;�sz%CommonTestMixin_v6.test_leading_zeroscCs|�dd�|�dd�dS)Nrz::lPz::c0a8:1)r)rrrrr<�szCommonTestMixin_v6.test_intcCsRdt�d�}|�|d�dt�d�}|�|d�t�d�d}|�|d�dS)Nsr=z::r>z::c0a8:1zc0a8:1::)r/r?r)rr6rrrr@�szCommonTestMixin_v6.test_packedc	Cs.d}|�t�|���|�d�WdQRXdS)Nz,-1 (< 0) is not permitted as an IPv6 addressrA)rr%r&r	)rrBrrrrC�sz.CommonTestMixin_v6.test_negative_ints_rejectedc	Cs:d}|�t�|dd���|�dd�WdQRXdS)Nz2%d (>= 2**128) is not permitted as an IPv6 address��)rr%r&r	)rrBrrrrD�sz+CommonTestMixin_v6.test_large_ints_rejectedcs �fdd�}|d�|d�dS)Nc	sHd|}d}��t�|||f�����|���|�WdQRXdS)NrEz5%r (len %d != 16) is not permitted as an IPv6 address)rr%r&r	)rFr6rB)rrrrG�s

zBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength��r)rrGr)rrrJ�sz)CommonTestMixin_v6.test_bad_packed_lengthN)	rrrr;r<r@rCrDrJrrrrrK�srKc@sZeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZdS)�AddressTestCase_v4c	Cs*d}|�d|��t�|�WdQRXdS)Nz127.0.0.1/24zUnexpected '/' in %r)rr�IPv4Address)rr6rrr�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&��d|��t�|�WdQRXdS)NzExpected 4 octets in %r)rrrQ)r6)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)rrSr)rr�test_bad_address_split�s0z)AddressTestCase_v4.test_bad_address_splitcs �fdd�}|d�|d�dS)Nc	s&��d|��t�|�WdQRXdS)NzEmpty octet not permitted in %r)rrrQ)r6)rrr�assertBadOctet�sz;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctetz	42..42.42z...r)rrYr)rr�test_empty_octet�sz#AddressTestCase_v4.test_empty_octetcsj�fdd�}|dd�|dd�|dd�|d	d
�|dd�|d
d�|dd�|dd�|dd�dS)Nc	s6d||f}��t�|���t�|�WdQRXdS)Nz)Only decimal digits permitted in %r in %r)rr%r&rrQ)r6�octetrB)rrrrY�szBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctetz0x0a.0x0a.0x0a.0x0arUz0xa.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)rrYr)rr�test_invalid_characters�s







z*AddressTestCase_v4.test_invalid_characterscs$�fdd�}|dd�|dd�dS)Nc	s6d}��t�|||f���t�|�WdQRXdS)Nz9Ambiguous (octal/decimal) value in %r not permitted in %r)rr%r&rrQ)r6r[rB)rrrrY�szGAddressTestCase_v4.test_octal_decimal_ambiguity.<locals>.assertBadOctetz016.016.016.016rTz001.000.008.016Z008r)rrYr)rr�test_octal_decimal_ambiguity�s
z/AddressTestCase_v4.test_octal_decimal_ambiguitycs$�fdd�}|dd�|dd�dS)Nc	s6d}��t�|||f���t�|�WdQRXdS)Nz*At most 3 characters permitted in %r in %r)rr%r&rrQ)r6r[rB)rrrrY�sz<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctetz0000.000.000.000Z0000z12345.67899.-54321.-98765Z12345r)rrYr)rr�test_octet_length�s
z$AddressTestCase_v4.test_octet_lengthcs$�fdd�}|dd�|dd�dS)Nc	s6d||f}��t�|���t�|�WdQRXdS)Nz$Octet %d (> 255) not permitted in %r)rr%r&rrQ)r6r[rB)rrrrY�sz;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctetz	257.0.0.0iz
192.168.0.999i�r)rrYr)rr�test_octet_limit�s
z#AddressTestCase_v4.test_octet_limitcCs|�d�dS)Nz	192.0.2.1)r9)rrrr�test_pickleszAddressTestCase_v4.test_picklecCst�|�d��dS)Nz	192.0.2.1)�weakref�refr	)rrrr�test_weakrefszAddressTestCase_v4.test_weakrefN)rrrrrQr	rRrXrZr]r^r_r`rardrrrrrP�s				rPc@szeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS)�AddressTestCase_v6c	Cs*d}|�d|��t�|�WdQRXdS)Nz::1/24zUnexpected '/' in %r)rr�IPv6Address)rr6rrrrRsz1AddressTestCase_v6.test_network_passed_as_addresscs(�fdd�}|d�|d�|d�dS)Nc	s*d}��||��t�|�WdQRXdS)NzAt least 3 parts expected in %r)rrrf)r6rB)rrrrSszUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplit�:z:1z	FEDC:9878r)rrSr)rr�*test_bad_address_split_v6_not_enough_partssz=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partscs8�fdd�}|d�|d�|d�|d�|d�dS)Nc	s*d}��||��t�|�WdQRXdS)Nz At most 8 colons permitted in %r)rrrf)r6rB)rrrrSszTAddressTestCase_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)rrSr)rr�)test_bad_address_split_v6_too_many_colonssz<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonscs8�fdd�}|d�|d�|d�|d�|d�dS)Nc	s*d}��||��t�|�WdQRXdS)Nz+Exactly 8 parts expected without '::' in %r)rrrf)r6rB)rrrrS+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)rrSr)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	s*d}��||��t�|�WdQRXdS)Nz.Expected at most 7 other parts with '::' in %r)rrrf)r6rB)rrrrS8szeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplitz1:2:3:4::5:6:7:8r)rrSr)rr�:test_bad_address_split_v6_too_many_parts_with_double_colon7szMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_coloncs`�fdd�}|d�|d�|d�|d�|d�|d�|d	�|d
�|d�|d�dS)
Nc	s*d}��||��t�|�WdQRXdS)Nz At most one '::' permitted in %r)rrrf)r6rB)rrrrS@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)rrSr)rr�/test_bad_address_split_v6_repeated_double_colon?szBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_coloncs0�fdd�}|d�|d�|d�|d�dS)Nc	s*d}��||��t�|�WdQRXdS)Nz0Leading ':' only permitted as part of '::' in %r)rrrf)r6rB)rrrrSQszRAddressTestCase_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)rrSr)rr�'test_bad_address_split_v6_leading_colonPs
z:AddressTestCase_v6.test_bad_address_split_v6_leading_coloncs0�fdd�}|d�|d�|d�|d�dS)Nc	s*d}��||��t�|�WdQRXdS)Nz1Trailing ':' only permitted as part of '::' in %r)rrrf)r6rB)rrrrS\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)rrSr)rr�(test_bad_address_split_v6_trailing_colon[s
z;AddressTestCase_v6.test_bad_address_split_v6_trailing_coloncsB�fdd�}|dd�|dd�|dd�|d	d
�|dd�dS)
Nc	s(��d||��t�|�WdQRXdS)Nz%s in %r)rrrf)r6Zv4_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)rror)rr�test_bad_v4_part_infs
z&AddressTestCase_v6.test_bad_v4_part_incsL�fdd�}|dd�|dd�|dd�|d	d
�|dd�|d
d�dS)Nc	s6d||f}��t�|���t�|�WdQRXdS)Nz%Only hex digits permitted in %r in %r)rr%r&rrf)r6�partrB)rrr�
assertBadPartwszAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPartz
3ffe::googZgoogz3ffe::-0z-0z3ffe::+0z+0z3ffe::-1z-1z	1.2.3.4::z1.2.3.4z1234:axy::bZaxyr)rrrr)rrr]vs




z*AddressTestCase_v6.test_invalid_characterscs8�fdd�}|dd�|dd�|dd�|d	d
�dS)Nc	s,d}��|||��t�|�WdQRXdS)Nz*At most 4 characters permitted in %r in %r)rrrf)r6rqrB)rrrrr�sz:AddressTestCase_v6.test_part_length.<locals>.assertBadPartz::00000Z00000z3ffe::10000Z10000z02001:db8::Z02001z2001:888888::1Z888888r)rrrr)rr�test_part_length�s



z#AddressTestCase_v6.test_part_lengthcCs|�d�dS)Nz
2001:db8::)r9)rrrrra�szAddressTestCase_v6.test_picklecCst�|�d��dS)Nz
2001:db8::)rbrcr	)rrrrrd�szAddressTestCase_v6.test_weakrefN)rrrrrfr	rRrhrirjrkrlrmrnrpr]rsrardrrrrres



rec@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�NetmaskTestMixin_v4z;Input validation on interfaces and networks is very similarcCsPxJdD]B}|�|�}|�t|�d�|�t|j�d�|�t|j�d�qWdS)N)z1.2.3.4isz
1.2.3.4/32z255.255.255.255z0.0.0.0)r	r�str�netmask�hostmask)r�address�netrrr�test_no_mask�s


z NetmaskTestMixin_v4.test_no_maskc	Cs,d}|�d|��|�|�WdQRXdS)Nz
1.2.3.4/32/24zOnly one '/' permitted in %r)rr	)rr6rrr�test_split_netmask�sz&NetmaskTestMixin_v4.test_split_netmaskcs\�fdd�}|dd�|dd�|dd�|dd�|d	d�|d
d�|dt�d
��dS)Nc	s$��|����|�WdQRXdS)N)rr	)r6r)rrr�assertBadAddress�szANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress�/zAddress cannot be emptyz/8rWzExpected 4 octetsz
google.comz10/8z	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r%r&)rr|r)rr�test_address_errors�s





z'NetmaskTestMixin_v4.test_address_errorscCs�|�t|�d��d�x�tdd�D]�}d|}|�|�}|�t|�|�|�t|�d|j��|�|�t|�d|��|�|dkr�dd	|}|�t|�d|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%d)� rr�)rrur	r2rvrw)r�i�net_strryrrr�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)Nc	s:d|}��t�|�����d||f�WdQRXdS)Nz%r is not a valid netmaskz%s/%s)rr%r&r	)r6rvrB)rrr�assertBadNetmask�szANetmaskTestMixin_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_errorscs$�fdd�}|dd�|dd�dS)Nc	s6d|}��t�|�����||f�WdQRXdS)Nz%r is not a valid netmask)rr%r&r	)r6rvrB)rrrr��szJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskz1.1.1.1rArr)rr�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/31z	192.0.2.0)r9)rrrrra�s

zNetmaskTestMixin_v4.test_pickleN)rrr�__doc__rzr{r~r�r�r�rarrrrrt�s	
rtc@seZdZejZdS)�InterfaceTestCase_v4N)rrrr�
IPv4Interfacer	rrrrr��sr�c@s*eZdZejZdd�Zdd�Zdd�ZdS)�NetworkTestCase_v4cCst|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���dS)Nz10.0.0.0/30z10.0.1.0/24z10.0.0.0/24)�assertFalser	�	subnet_ofr)rrrr�test_subnet_of�s



z!NetworkTestCase_v4.test_subnet_ofcCst|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���dS)Nz10.0.0.0/30z10.0.1.0/24z10.0.0.0/24)r�r	�supernet_ofr)rrrr�test_supernet_ofs



z#NetworkTestCase_v4.test_supernet_ofc	Cs�|�t��t�d��t�d��WdQRX|�t��t�d��t�d��WdQRX|�t��t�d��t�d��WdQRX|�t��t�d��t�d��WdQRXdS)Nz10.0.0.0/30z::1/128)r*r+r�IPv4Networkr��IPv6Networkr�)rrrr�test_subnet_of_mixed_typess



z-NetworkTestCase_v4.test_subnet_of_mixed_typesN)	rrrrr�r	r�r�r�rrrrr��sr�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�NetmaskTestMixin_v6z;Input validation on interfaces and networks is very similarcCsPxJdD]B}|�|�}|�t|�d�|�t|j�d�|�t|j�d�qWdS)N)z::1r)sz::1/128z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffz::)r	rrurvrw)rrxryrrrrz's


z NetmaskTestMixin_v6.test_no_maskc	Cs,d}|�d|��|�|�WdQRXdS)Nzcafe:cafe::/128/190zOnly one '/' permitted in %r)rr	)rr6rrrr{0sz&NetmaskTestMixin_v6.test_split_netmaskcsL�fdd�}|dd�|dd�|dd�|dd�|d	d�|d
d�dS)Nc	s$��|����|�WdQRXdS)N)rr	)r6r)rrrr|6szANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddressr}zAddress cannot be emptyz/8z
google.comzAt least 3 partsz1.2.3.4z10/8z1234:axy::bzOnly hex digitsr)rr|r)rrr~5s




z'NetmaskTestMixin_v6.test_address_errorscCsf|�t|�d��d�xJtdd�D]<}d|}|�t|�|��|�|�t|�d|��|�q"WdS)Nz
2001:db8::/32r�z::/%dz::/0%d)rrur	r2)rr�r�rrrr�As
z&NetmaskTestMixin_v6.test_valid_netmaskcs~�fdd�}|dd�|dd�|dd�|dd�|dd�|dd�|dd	�|dd
�|dd�|dd�|d
d
�dS)Nc	s:d|}��t�|�����d||f�WdQRXdS)Nz%r is not a valid netmaskz%s/%s)rr%r&r	)r6rvrB)rrrr�MszANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskz::1r#z1::z-1z+1z 1 r�Z129z1.2.3.4r�z::r)rr�r)rrr�Ls









z'NetmaskTestMixin_v6.test_netmask_errorscs$�fdd�}|dd�|dd�dS)Nc	s6d|}��t�|�����||f�WdQRXdS)Nz%r is not a valid netmask)rr%r&r	)r6rvrB)rrrr�_szJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskz::1rAr�r)rr�r)rrr�^s
z0NetmaskTestMixin_v6.test_netmask_in_tuple_errorscCs"|�d�|�d�|�d�dS)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000)r9)rrrrrafs

zNetmaskTestMixin_v6.test_pickleN)rrrr�rzr{r~r�r�r�rarrrrr�$s	r�c@seZdZejZdS)�InterfaceTestCase_v6N)rrrr�
IPv6Interfacer	rrrrr�lsr�c@s"eZdZejZdd�Zdd�ZdS)�NetworkTestCase_v6cCst|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���dS)Nz
2000:999::/56z
2000:aaa::/48z
2000:aaa::/56z
2000:bbb::/56)r�r	r�r)rrrrr�ss



z!NetworkTestCase_v6.test_subnet_ofcCst|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���|�|�d��|�d���dS)Nz
2000:999::/56z
2000:aaa::/48z
2000:aaa::/56z
2000:bbb::/56)r�r	r�r)rrrrr��s



z#NetworkTestCase_v6.test_supernet_ofN)rrrrr�r	r�r�rrrrr�psr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�FactoryFunctionErrorsc	Cs0d}d}|�t|||��||�WdQRXdS)z3Ensure a clean ValueError with the expected messageZcamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r�
ValueError)rr	�kindr6rBrrr�assertFactoryError�sz(FactoryFunctionErrors.assertFactoryErrorcCs|�tjd�dS)Nrx)r�r�
ip_address)rrrr�test_ip_address�sz%FactoryFunctionErrors.test_ip_addresscCs|�tjd�dS)NZ	interface)r�r�ip_interface)rrrr�test_ip_interface�sz'FactoryFunctionErrors.test_ip_interfacecCs|�tjd�dS)N�network)r�r�
ip_network)rrrr�test_ip_network�sz%FactoryFunctionErrors.test_ip_networkN)rrrr�r�r�r�rrrrr��sr�c@s�eZdZe�d�Ze�d�Ze�d�Z	e�
d�Ze�d�Z
e�d�Zee	gZeegZeegZee
gZeeZe�d�Ze�d�Ze�d�Ze�
d�Ze�d�Ze�d�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z dd�Z!dd�Z"dd�Z#dS)�ComparisonTestsr)rLcCsXt�}xL|jD]B}|�||�|�||k�|�|�|�t�|�|�|�t�qWdS)N)�object�objects�assertNotEqualr�r�__eq__�NotImplemented�__ne__)r�other�objrrr�test_foreign_type_equality�sz*ComparisonTests.test_foreign_type_equalitycCs:x4|jD]*}x$|jD]}||kr"q|�||�qWqWdS)N)r�r�)rrrrrr�test_mixed_type_equality�s
z(ComparisonTests.test_mixed_type_equalitycCs8x2|jD](}|�||�|�||�|�||�qWdS)N)r�r�assertLessEqual�assertGreaterEqual)rr�rrr�test_same_type_equality�sz'ComparisonTests.test_same_type_equalitycCs�x�|j|jf|j|jf|j|jf|j|jf|j|j	f|j
|jffD]|\}}|�||�|�
||�|�||�|�||�|�||�|�||k�|�||k�|�||k�|�||k�qBWdS)N)�v4addr�v4addr2�v4net�v4net2�v4intf�v4intf2�v6addr�v6addr2�v6net�v6net2�v6intf�v6intf2r�Z
assertLessr�Z
assertGreaterr�r�)rrrrrr�test_same_type_ordering�s 




z'ComparisonTests.test_same_type_orderingcCs�x|jD]}|�||j�qWx|jD]}|�||j�q&Wx$|j|jgD]}|�||j�qLWx$|j|jgD]}|�||j�qrWdS)N)�v4_addresses�assertInr��v6_addressesr��
v4_objects�assertNotIn�
v6_objects)rr�rrr�test_containment�sz ComparisonTests.test_containmentcs�x�|jD]��x�|jD]z�t�t���st�t���r6q|�t��fdd��|�t��fdd��|�t��fdd��|�t��fdd��qWqWdS)Ncs��kS)Nrr)rrrr�<lambda>��z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>cs��kS)Nrr)rrrrr��r�cs��kS)Nrr)rrrrr��r�cs��kS)Nrr)rrrrr��r�)r��
isinstance�typer*r+)rr)rrr�test_mixed_type_ordering�sz(ComparisonTests.test_mixed_type_orderingc
Cst�}x�|jD]�}|�t��||kWdQRX|�t��||kWdQRX|�t��||kWdQRX|�t��||kWdQRX|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�qWdS)N)r�r�r*r+rrr�r)rr�r�rrr�test_foreign_type_orderings$z*ComparisonTests.test_foreign_type_orderingcCs�|j|j|jg}|j|j|jg}|�|t|jt	j
d��|�|t|jt	j
d��|�||t|jt	j
d��|�t
t	�
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_keys
z#ComparisonTests.test_mixed_type_keycCs�t�d�}t�d�}t�d�}t�d�}|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�|�t|j|�dS)Nz1.1.1.1z::1)rr�r�r*r+�__lt__�__gt__)rr�r�r�r�rrr�test_incompatible_versions$s



z*ComparisonTests.test_incompatible_versionsN)$rrrrrQr�r�r�r�r�rfr�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��s4













		

r�c@sTeZdZdd�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�S)��IpaddrUnitTestcCsLt�d�|_t�d�|_t�d�|_t�d�|_t�d�|_	t�
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)rrQ�ipv4_addressr��ipv4_interfacer��ipv4_networkr��ipv6_address�ipv6_interfacer��ipv6_network)rrrr�setUp8szIpaddrUnitTest.setUpcCs0|�dtt�d���|�dtt�d���dS)NzIPv4Interface('1.2.3.4/32')z1.2.3.4zIPv6Interface('::1/128')z::1)rr'rr�r�)rrrr�testReprCszIpaddrUnitTest.testReprc	Cs�t�d�}t�d�}|�t�d�|�|�t�|df�|�|�t�d�|�|�t�d�|�|�t�|df�|�|�t�d�|�|�t��t�d	�WdQRX|�t��t�|d
f�WdQRX|�t��t�d�WdQRX|�t��t�d�WdQRX|�t��t�|d
f�WdQRX|�t��t�d�WdQRXt�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��dS)Nz	192.0.2.1z192.0.2.1/32)z	192.0.2.1r�r�)lr�)z	192.0.2.1z255.255.255.255z255.255.255.255)lz255.255.255.255)z	192.0.2.1�r�)lr�)z	192.0.2.1z
255.255.255.0z
255.255.255.0)lz
255.255.255.0z192.0.2.0/24F)�strictz	192.0.2.0)z	192.0.2.0z
255.255.255.0)lz
255.255.255.0)z	192.0.2.0r�)lr�z192.0.2.1/24)rrQr�rr*r�r�)r�ipryrrr�
testIPv4TupleJsh











zIpaddrUnitTest.testIPv4Tuplec	Cs�t�d�}t�d�}|�t�d�|�|�t�d�|�|�t�|df�|�t�d�}t�d�}|�t�d�|�|�t�d�|�|�t�|d	f�|�t�d
�}|�t��t�d�WdQRX|�t��t�d�WdQRX|�t��t�|d
f�WdQRXt�d�}|�tjddd�|�|�tjddd�|�|�tj|d
fdd�|�|�t�d�t�d��|�t�d�t�d��dS)Nz
2001:db8::z2001:db8::/128)z
2001:db8::�128)l	n� rMr�z
2001:db8::/96)z
2001:db8::�96)l	n� �`r�z2001:db8::1)z2001:db8::1r�)l	n� r�r�F)r�)z2001:db8::1r�z2001:db8::1/96)l	n� r�)rrfr�rr*r�r�)rr�ryrrr�
testIPv6Tuple�sR






zIpaddrUnitTest.testIPv6TuplecCst|�t�d�dt�d��|�t�d�dt�d��|�t�d�dt�d��|�t�d�dt�d��dS)	Nz1.1.1.1�z1.1.2.0�z1.1.0.1z::1i��z::ffff)rrrQrf)rrrr�testAddressIntMath�sz!IpaddrUnitTest.testAddressIntMathcCsP|�ttjd�|�ttjdtj�|�ttjd�|�ttjdtj�dS)NrArL)r*r�rZv4_int_to_packedZ
IPV4LENGTHZv6_int_to_packedZ
IPV6LENGTH)rrrr�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.12rMrzIPv4Network('1.2.3.0/24'))rrQr�listZ_find_address_rangeZ_count_righthand_zero_bitsr'r�)r�ip1�ip2�ip3rrr�
testInternals�s


zIpaddrUnitTest.testInternalsc	Cs<Gdd�dtj�}|d�}|�td��|jWdQRXdS)Nc@seZdZdS)z8IpaddrUnitTest.testMissingNetworkVersion.<locals>.BrokenN)rrrrrrr�Broken�sr�z	127.0.0.1zBroken.*version)r�_BaseNetworkr
r�version)rr��brokenrrr�testMissingNetworkVersion�sz(IpaddrUnitTest.testMissingNetworkVersionc	Cs<Gdd�dtj�}|d�}|�td��|jWdQRXdS)Nc@seZdZdS)z6IpaddrUnitTest.testMissingAddressClass.<locals>.BrokenN)rrrrrrrr��sr�z	127.0.0.1zBroken.*address)rr�r
rZ_address_class)rr�r�rrr�testMissingAddressClass�sz&IpaddrUnitTest.testMissingAddressClasscCsh|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�dS)Niz1.2.3.0l	�/YE� z2001:658:22a:cafe::z::ffff:ffff:ffff:ffff)r�intr��network_addressrur�rw)rrrr�testGetNetwork�szIpaddrUnitTest.testGetNetworkcCs�|�|jjt�d�j�t�d�}t�d�}|�|t�t|j���|�|t�t|j���d}|�|jjt�	|�j�|�t�|j
j�jd�|�t�|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.testIpFromIntcCsvtj}|�|jjt�d�j�|�|d�|d��|�|jjt�d�j�|�|d�|d��|�|d�|d��dS)	Nsz255.254.253.252s����s X*�zffff:2:3:4:ffff::s����z::s)rr�rr�r�r�r�r�)rrxrrr�testIpFromPackeds






zIpaddrUnitTest.testIpFromPackedcCsT|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�dS)Niz1.2.3.4l	�/YE� z2001:658:22a:cafe:200::1)rr�r�r�rur�)rrrr�	testGetIpszIpaddrUnitTest.testGetIpcCsP|�t|jj�d�|�t|jj�d�|�t|jj�d�|�|jjd�dS)Nl�z
255.255.255.0l	������@)rr�r�rvrur��	prefixlen)rrrr�testGetNetmasks
zIpaddrUnitTest.testGetNetmaskcCs�t�d�}|�t|jj�d�|�|�d�d�|�|�d��|�|�d��|�	|�d��t�
d�}|�t|jj�d�|�|�d�d�dS)Nz	1.2.3.4/0r�0z0.0.0.0�invalidz::1/0)rr�rr�r�rvZ_prefix_from_prefix_stringr�_is_valid_netmaskr�r�)rZipv4_zero_netmaskZipv6_zero_netmaskrrr�testZeroNetmask%s

zIpaddrUnitTest.testZeroNetmaskcCs�|j}|�|�d��|�|�d��|�|�d��|�|�d��|�|�d��|�|�d��|�|�d��|�|�d��|�|�d��t�d	�}|�|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�)rryrrr�testIPv4NetAndHostmasks1s
z&IpaddrUnitTest.testIPv4NetAndHostmaskscCsT|�t|jj�d�|�t|jj�d�|�t|jj�d�|�t|jj�d�dS)Ni�z	1.2.3.255l	�����/YE� z%2001:658:22a:cafe:ffff:ffff:ffff:ffff)rr�r��broadcast_addressrur�)rrrr�testGetBroadcastAszIpaddrUnitTest.testGetBroadcastcCs(|�|jjjd�|�|jjjd�dS)Nr�r�)rr�r�r�r�)rrrr�testGetPrefixlenJszIpaddrUnitTest.testGetPrefixlencCs�|�|j��jd�|�t|j��j�d�|�t�d�j��t�	d��|�|j
��jd�|�t|j
��j�d�|�t�d�j��t�d��dS)N�z1.2.2.0z	0.0.0.0/0�?z2001:658:22a:cafe::z::0/0)
rr��supernetr�rur�rr�r�r�r�r�r�)rrrr�testGetSupernetNszIpaddrUnitTest.testGetSupernetcCsd|�|j�d�jd�|�t|j�d�j�d�|�|j�d�jd�|�t|j�d�j�d�dS)NrH�z1.2.0.0�=z2001:658:22a:caf8::)rr�rr�rur�r�)rrrr�testGetSupernet3\szIpaddrUnitTest.testGetSupernet3cCs�|jt|jjddd�|jt|jjdd�|�|jjdd�|jjdd��|jt|jjddd�|jt|jjdd�|�|jjdd�|jjd	d��dS)
NrLr))�prefixlen_diff�
new_prefix�)r)r��A�>)r*r�r�rrr�)rrrr�testGetSupernet4es

zIpaddrUnitTest.testGetSupernet4cCs�t|j���}|�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�t�d�g}d}d}|�|tt�	|�����|�|tt�	|�����|�tt�	|����tt�	|�����dS)N�z1.2.3.1rz	1.2.3.254rAz2001:658:22a:cafe::/120r�z2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2.0.0.0z2.0.0.1z
2.0.0.0/31)z2.0.0.0�z2001:658:22a:cafe::z2001:658:22a:cafe::/127)z2001:658:22a:cafe::�)
r�r��hostsr�lenrrQr�rfr�)rrr�ZaddrsZstr_argsZtpl_argsrrr�	testHoststs2
zIpaddrUnitTest.testHostscCs�|�t|jjdd��t|jjdd���|�tt|jjdd��|�tt|jjddd��|�t|jjdd��t|jjdd���|�tt|jjd	d��|�tt|jjddd��dS)
NrH)r�)rr	)rrr��Dr
)rr�r��subnetsr*r�r�r�)rrrr�testFancySubnetting�s
z"IpaddrUnitTest.testFancySubnettingcCs||�t|j���djd�|�tt|j���dj�d�|�tt|j���dj�d�|�t|j���djd�dS)Nrrz1.2.3.0r)z	1.2.3.128r)rr�r�rr�rur�r�)rrrr�testGetSubnets�szIpaddrUnitTest.testGetSubnetscCsNt�d�}dd�|��D�}dd�|�d�D�}|�|dg�|�||�dS)Nz
1.2.3.4/32cSsg|]}t|��qSr)ru)�.0r7rrr�
<listcomp>�sz;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>cSsg|]}t|��qSr)ru)r"r7rrrr#�srL)rr�rr)rr��subnets1�subnets2rrr�testGetSubnetForSingle32�s

z'IpaddrUnitTest.testGetSubnetForSingle32cCsNt�d�}dd�|��D�}dd�|�d�D�}|�|dg�|�||�dS)Nz::1/128cSsg|]}t|��qSr)ru)r"r7rrrr#�sz<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>cSsg|]}t|��qSr)ru)r"r7rrrr#�srL)rr�rr)rr�r$r%rrr�testGetSubnetForSingle128�s

z(IpaddrUnitTest.testGetSubnetForSingle128cCsXdd�|j�d�D�}|�|ddddg�dd�|j�d�D�}|�|d	d
ddg�dS)
NcSsg|]}t|��qSr)ru)r"r7rrrr#�sz.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>rLz
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26cSsg|]}t|��qSr)ru)r"r7rrrr#�sz2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r�rrr�)rZipsZipsv6rrr�testSubnet2�szIpaddrUnitTest.testSubnet2cCs�dd�|j�d�D�}|�|dd�dddg�|�|dd�d	d
dg�|�t|�d�t�d
�}dd�|�d�D�}|�|dd�dddg�|�|dd�dddg�|�t|�d�dS)NcSsg|]}t|��qSr)ru)r"r7rrrr#�sz2IpaddrUnitTest.testGetSubnets3.<locals>.<listcomp>�rHz
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�z2001:658:22a:cafe::/120cSsg|]}t|��qSr)ru)r"r7rrrr#�sz2001: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�rrrrr�)rrr�rrr�testGetSubnets3�s"
zIpaddrUnitTest.testGetSubnets3cCs`|�tt|jj�d��|�tt|j�d��|�tt|jj�d��|�tt|j�d��dS)N�	r)	r*r�r�r�r�rr�r�r�)rrrr�testSubnetFailsForLargeCidrDiff�sz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffcCs,|�t|jjjd�|�t|jjjd�dS)Nrr)r*r�r�r�rr�)rrrr�!testSupernetFailsForLargeCidrDiff�sz0IpaddrUnitTest.testSupernetFailsForLargeCidrDiffcCs`|�tt|jj�d��|�tt|j�d��|�tt|jj�d��|�tt|j�d��dS)NrA)	r*r�r�r�r�rr�r�r�)rrrr�"testSubnetFailsForNegativeCidrDiff�sz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffcCs�|�|jjd�|�t|j���djd�|�|j��jd�|�|jjd�|�t|j���djd�|�|j��jd�dS)Nr�rrMilll )rr�Z
num_addressesr�rrr�)rrrr�testGetNum_Addresses�sz#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)	r�rr�r�r�rQr�r��__contains__)r�addr1rrr�testContainss
zIpaddrUnitTest.testContainscCsT|�t|jd�d�|�t|jjd�|�t|jd�d�|�t|jjd�dS)NrIz1.2.3.5r�z2001:658:22a:cafe::5l)rrur�r*�
IndexError�__getitem__r�)rrrr�testNths
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.143rA)rr�rr�r�ru)rr6Z	addr_listrrr�testGetitems
zIpaddrUnitTest.testGetitemcCs�|�|jt�d�k�|�|jt�d�k�|�|jt�d�k�|�|jdk�|�|jgk�|�|jdk�|�|jt�d�k�|�|jt�d�k�|�|jt�d�k�|�|jdk�|�|jgk�|�|jdk�dS)Nz
1.2.3.4/24z
1.2.3.4/23z::1.2.3.4/24r#rLz2001:658:22a:cafe:200::1/64z2001:658:22a:cafe:200::1/63)rr�rr�r�r�r�)rrrr�	testEqual$s$zIpaddrUnitTest.testEqualcCst|�|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�dS)
Nz
1.2.3.4/24z
1.2.3.4/23z::1.2.3.4/24r#rLz1.2.3.5z2001:658:22a:cafe:200::1/64z2001:658:22a:cafe:200::1/63z1.2.3.4)
r�r�rr�rr�r�rQr�r�)rrrr�testNotEqual9s8zIpaddrUnitTest.testNotEqualcCs|�tt�d��d�dS)Nz1.2.3.4/255.255.255.255z
1.2.3.4/32)rrurr�)rrrr�testSlash32ConstructorZs
z%IpaddrUnitTest.testSlash32ConstructorcCs|�tt�d��d�dS)Nz::1/128)rrurr�)rrrr�testSlash128Constructor^sz&IpaddrUnitTest.testSlash128ConstructorcCs|�tt�d��d�dS)Nz1.2.3.4/0.0.0.0z	1.2.3.4/0)rrurr�)rrrr�testSlash0Constructorbsz$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�ft�d�t�d�ft�d�t�d�fg}
x&|
D]\}}|�	t
tj||g��q6WdS)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)rrQZcollapse_addressesrr�r�r�r�r�r*r+)rr�r�r��ip4Zip5Zip6Z	collapsedZip_same1Zip_same2Zaddr_tuplesrrr�testCollapsingfsl





























zIpaddrUnitTest.testCollapsingc	Cs�tj}t�d�}t�d�}Gdd�dtj�}|d�}|d�}|�tt|||��|�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�|�tt|t�d�t�d���|�tt|t�	d�t�	d���|�tt|t�	d�t�	d���|�tt|t�d�t�	d���dS)Nz1.1.1.0z	1.1.1.255c@seZdZedd��ZdS)z3IpaddrUnitTest.testSummarizing.<locals>.IPv7AddresscSsdS)N�r)rrrrr��sz;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.versionN)rrrrr�rrrr�IPv7Address�srAz::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�rfr*r�r�r+rr�rQZ	_ALL_ONESr�)rZ	summarizer�r�rAZip_invalid1Zip_invalid2rrr�testSummarizing�sP










zIpaddrUnitTest.testSummarizingcCsl|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�|�t�d�t�d�k�dS)Nz1.1.1.1z1.1.1.2z::1z::2)rrr�)rrrr�testAddressComparison�sz$IpaddrUnitTest.testAddressComparisoncCsp|�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/48)rrr�)rrrr�testInterfaceComparison�s8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)Nz
1.1.1.0/24z
1.1.1.0/32z
1.1.2.0/24rrAr)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::2)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�testNetworkComparisons�














z$IpaddrUnitTest.testNetworkComparisoncCs$|�ttjd�|�ttjd�dS)Nz192.168.1.1/24z::1/120)r*r�rr�)rrrr�testStrictNetworkspsz!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)rr�rr�Zoverlapsr�)rr�Zother2Zother3rrr�testOverlapsts


zIpaddrUnitTest.testOverlapscCshd}t�|�}t�d|�}|�t|j�t|j��t�d|�}|�|j|j�|�tjtjd�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.testEmbeddedIpv4cCs4|�t�d�t�d��|�t�d�t�d��dS)Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201)rrr�)rrrr�testIPv6AddressTooLarge�sz&IpaddrUnitTest.testIPv6AddressTooLargecCs$|�|jjd�|�|jjd�dS)Nr�r�)rr�r�r�)rrrr�
testIPVersion�szIpaddrUnitTest.testIPVersioncCs$|�|jjd�|�|jjd�dS)Nr�rM)rr�Z
max_prefixlenr�)rrrr�testMaxPrefixLength�sz"IpaddrUnitTest.testMaxPrefixLengthcCs`|�|jjd�|�t�d�jd�|�|jjd�|�t�d�jd�|�t�d�jd�dS)	Nsz255.254.253.252s����s X*�zffff:2:3:4:ffff::s����z::1:0:0:0:0s)rr�Zpackedrr�r�r�)rrrr�
testPacked�s

zIpaddrUnitTest.testPackedcCstt�d�}t�d�}t�d�}t�d�}|�tjt|��|�tjt|��|�tjt|��|�tjt|��dS)Nz1.2.3.4z	::1.2.3.4)	rr�r�rr�r�rQr�rf)rZipv4netZipv4addrZipv6netZipv6addrrrr�
testIpType�s



zIpaddrUnitTest.testIpTypecCs|�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�|�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/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�testReservedIpv4�sx
















zIpaddrUnitTest.testReservedIpv4cCs�|�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	�|�dt�d�j�|�dt�d�j�dS)NTzffff::rLrMr)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/128)
rrr�rOZ
is_site_localrQrRr�rSrUrTr�rP)rrrr�testReservedIpv6�sx



















zIpaddrUnitTest.testReservedIpv6cCsL|�t�d�jt�d��|�t�d�jd�|�t�d�jt�d��dS)Nz::ffff:192.168.1.1z192.168.1.1z
::c0a8:101z::ffff:c0a8:101)rrr�Zipv4_mapped)rrrr�testIpv4MappedEs
zIpaddrUnitTest.testIpv4Mappedc
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)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�testAddrExcludeMs,





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)Nz10.1.1.0/24z10.1.1.0z1.2.3.4z1::)r�hashrr�r�r�r�r�r�r�r�)rr�r�Zdummyrrr�testHashes$



zIpaddrUnitTest.testHashcCs6|j}|�d|j�|j}|�t|jddd�dS)Nz
1.2.3.0/24rLrMr))r�r�
compressedr�r*r�Z_string_from_ip_int)rryrrr�testIPBaseszszIpaddrUnitTest.testIPBasescCsD|j}|�d|j�|�d|j�|�d|j�|�dt|��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_hostmaskru)rryrrr�testIPv6NetworkHelpers�sz%IpaddrUnitTest.testIPv6NetworkHelperscCsD|j}|�d|j�|�d|j�|�d|j�|�dt|��dS)Nz
1.2.3.0/24z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r�rrcrdreru)rryrrr�testIPv4NetworkHelpers�s
z%IpaddrUnitTest.testIPv4NetworkHelperscCs|t�d�}t�|�}t�d�}t�|�}t�d�}t�d�}|�||�|�||�|�|t�|��|�|t�|��dS)Nz10.1.1.0/24z2001:658:22a:cafe:200::1/64z1.1.1.1z2001:658:22a:cafe:200::1)rr�r�rQrfr)rr2rYrZr[r\r]rrr�testCopyConstructor�s





z"IpaddrUnitTest.testCopyConstructorcCs^ddddddddd	d
ddd
dddddd�}x.t|���D]\}}|�|tt�|���q8WdS)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/128z::/128z::/0z::1/128z2001:658:22a:cafe::/66z
::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/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/66z	::1.2.3.4z1: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::)r��itemsrrurr�)rZtest_addressesZuncompressedrarrr�testCompressIPv6Address�s*z&IpaddrUnitTest.testCompressIPv6AddresscCsxt�d�}t�d�}t�d�}t�d�}|�d|j�|�dt�d�j�|�d|j�|�d	|j�|�d|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�rfr�rQrZexploded)rr2rYrZr[rrr�testExplodeShortHandIpStr�s



z(IpaddrUnitTest.testExplodeShortHandIpStrcCs4t�d�}t�d�}|�d|j�|�d|j�dS)Nz	127.0.0.1z2001:db8::1z1.0.0.127.in-addr.arpazH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa)rrQrfrZreverse_pointer)rr2rYrrr�testReversePointer�s


z!IpaddrUnitTest.testReversePointercCs(|�dt|j��|�dt|j��dS)Nil	�/YE� )rr�r�r�)rrrr�testIntRepresentation�sz$IpaddrUnitTest.testIntRepresentationcCs,|�t�d�jd�|�t�d�jd�dS)Nr)r�r�)rrr�r�r�)rrrr�testForceVersion�szIpaddrUnitTest.testForceVersioncCsd|�|jjd�|�|jjd�|�|jjd�|�|jjd�|�|jjd�|�|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�s




zIpaddrUnitTest.testWithStarcCs�|�d|jj�|�d|jj�|�d|jj�|�|jjt�d��|�|jjt�d��|�|jjt�d��|�	d|jj�|�	d|jj�|�d|j
j�|�d|j
j�|�|j
jt�d��|�|jj
jt�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�rrwz1.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�rrQrrwr�r�rfr�r�)rrrr�testNetworkElementCaching�s>




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:fdd2z2001:0:5ef5:79fd:0:59d:a0e5:ba1z94.245.121.253z95.26.244.94)rrQrr�Zteredor�rf)rZserverZclientZteredo_addr�bad_addrrrr�
testTeredos




zIpaddrUnitTest.testTeredocCs8t�d�}t�d�}|�t�d�|j�|�|j�dS)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z
172.29.45.100)rr�rrQZ	sixtofourr�)rZ
sixtofouraddrrrrrr�
testsixtofour's


zIpaddrUnitTest.testsixtofourcCs,t�d�}t�d�}|�|��|���dS)Nz1.2.3.4z2.3.4.5)rr�r��__hash__)rZ
ipv4_address1Z
ipv4_address2rrr�testV4HashIsNotConstant/s

z&IpaddrUnitTest.testV4HashIsNotConstantcCs,t�d�}t�d�}|�|��|���dS)Nz2001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:2)rr�r�ru)rZ
ipv6_address1Z
ipv6_address2rrr�testV6HashIsNotConstant5s

z&IpaddrUnitTest.testV6HashIsNotConstantN)Lrrrr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrr r!r&r'r(r+r-r.r/r0r3r6r8r9r:r;r<r=r?rBrCrDrFrGrHrIrJrKrLrMrNrVrWrXr^r`rbrfrgrhrjrkrlrmrnrorqrsrtrvrwrrrrr�6s�?2

			


!O<
V
IM	
-r��__main__)r�Zunittestr%r �	functoolsr,r3rrbZtest.supportrrZTestCaserr"r:rKrPrertr�r�r�r�r�r�r�r�r�mainrrrr�<module>sL6#(`U6H(