Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_ipaddress.cpython-311.opt-1.pyc
�

�Ke����L�dZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
Gd�dej��ZGd�d��Z
Gd�d	e
��ZGd
�de
��ZGd�d
ee��ZGd�dee��ZGd�de��ZGd�dee��ZGd�dee��ZGd�de��ZGd�dee��ZGd�dee��ZGd�de��ZGd�dej��ZGd �d!ej��Zed"krej��dSdS)#zUnittest for ipaddress module.�N)�LARGEST�SMALLESTc�V�eZdZed���Zejd���Zd�Zd�Z	d�Z
dS)�BaseTestCasec��t��N)�NotImplementedError��selfs �=/usr/local/apps/python3/lib/python3.11/test/test_ipaddress.py�factoryzBaseTestCase.factory$s��!�!�c'��K�|r||z}|�||��}|5}|V�ddd��n#1swxYwY|jj�!|�|jj��dSdS)z{
        Ensure exception does not display a context by default

        Wraps unittest.TestCase.assertRaisesRegex
        N)�assertRaisesRegex�	exception�__context__�
assertTrue�__suppress_context__)r�exc_type�details�args�cm�excs      r�assertCleanErrorzBaseTestCase.assertCleanError(s������	%���n�G�
�
#�
#�H�g�
6�
6��
�	�3��I�I�I�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��=�$�0��O�O�C�M�>�?�?�?�?�?�1�0s�3�7�7c�4�|jtj|g|�R�S)z Ensure a clean AddressValueError)r�	ipaddress�AddressValueError�rrrs   r�assertAddressErrorzBaseTestCase.assertAddressError8�.��$�t�$�Y�%@�%,�5�/3�5�5�5�	5rc�4�|jtj|g|�R�S)z Ensure a clean NetmaskValueError)rr�NetmaskValueErrorrs   r�assertNetmaskErrorzBaseTestCase.assertNetmaskError=r rc�~�|�|�|��|�|����dS)z8Check constructor arguments produce equivalent instancesN)�assertEqualr
�r�lhs�rhss   r�assertInstancesEqualz!BaseTestCase.assertInstancesEqualBs6��������c�*�*�D�L�L��,=�,=�>�>�>�>�>rN)�__name__�
__module__�__qualname__�propertyr
�
contextlib�contextmanagerrrr#r)�rrrrs~������&�"�"��X�"���
@�
@���
@�5�5�5�
5�5�5�
?�?�?�?�?rrc�&�eZdZd�Zd�Zd�Zd�ZdS)�CommonTestMixinc��|�d��5|�d��ddd��dS#1swxYwYdS)N�Address cannot be empty��rr
r
s r�test_empty_addressz"CommonTestMixin.test_empty_addressIs���
�
$�
$�%>�
?�
?�	�	��L�L�����	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s
�9�=�=c���|�tjtd������5|�d��ddd��dS#1swxYwYdS)Nz1.0g�?)r�re�escape�reprr
r
s r�test_floats_rejectedz$CommonTestMixin.test_floats_rejectedMs���
�
$�
$�R�Y�t�E�{�{�%;�%;�
<�
<�	�	��L�L�����	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	��A�A�Ac�H�|�ttj|�d����|�tt
|�d����|�tt|�d����dS)N�)�assertRaises�	TypeError�operator�indexr
�hex�bytesr
s r�test_not_an_index_issue15559z,CommonTestMixin.test_not_an_index_issue15559Qsr��	
���)�X�^�T�\�\�!�_�_�E�E�E����)�S�$�,�,�q�/�/�:�:�:����)�U�D�L�L��O�O�<�<�<�<�<rc�D�ttjdz��D]�}|�|���5|�|��}tjtj||����}|�||��ddd��n#1swxYwY��dS)Nr?)�proto)�range�pickle�HIGHEST_PROTOCOL�subTestr
�loads�dumpsr%)r�addrrH�x�ys     r�pickle_testzCommonTestMixin.pickle_testXs����6�2�Q�6�7�7�	'�	'�E����E��*�*�
'�
'��L�L��&�&���L���a��!7�!7�8�8��� � ��A�&�&�&�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'�
'����
'�
'�
'�
'��	'�	's�AB�B	�B	N)r*r+r,r7r<rFrRr0rrr2r2GsP������������=�=�=�'�'�'�'�'rr2c�2�eZdZd�Zd�Zd�Zd�Zd�Zd�ZdS)�CommonTestMixin_v4c��d}gd�}|D]r}|�|���5|�|��5|�|��ddd��n#1swxYwYddd��n#1swxYwY�sdS)Nz(Leading zeros are not permitted in '\d+')z000.000.000.000z192.168.000.001z016.016.016.016z001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)�address)rLrr
)r�msg�	addressesrVs    r�test_leading_zerosz%CommonTestMixin_v4.test_leading_zerosbs��9��	
�	
�	
�	�!�	*�	*�G����g��.�.�
*�
*��,�,�S�1�1�*�*��L�L��)�)�)�*�*�*�*�*�*�*�*�*�*�*����*�*�*�*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*����
*�
*�
*�
*��	*�	*s4�A0�A�
A0�A�A0� A�!A0�0A4	�7A4	c�^�|�dd��|�dd��dS)Nr�0.0.0.0�P�192.168.0.1�r)r
s r�test_intzCommonTestMixin_v4.test_intts4���!�!�!�Y�/�/�/��!�!�*�m�<�<�<�<�<rc��|�t�d��d��|�t�d��d��dS)N�00000000r[�c0a80001r])r)rE�fromhexr
s r�test_packedzCommonTestMixin_v4.test_packedxsL���!�!�%�-�-�
�";�";�Y�G�G�G��!�!�%�-�-�
�";�";�]�K�K�K�K�Krc��d}|�tj|����5|�d��ddd��dS#1swxYwYdS)Nz,-1 (< 0) is not permitted as an IPv4 address����rr9r:r
�rrWs  r�test_negative_ints_rejectedz.CommonTestMixin_v4.test_negative_ints_rejected|���<��
�
$�
$�R�Y�s�^�^�
4�
4�	�	��L�L�����	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	��A
�
A�Ac��d}|�tj|dz����5|�d��ddd��dS#1swxYwYdS)Nz1%d (>= 2**32) is not permitted as an IPv4 addresslrgrhs  r�test_large_ints_rejectedz+CommonTestMixin_v4.test_large_ints_rejected�s���A��
�
$�
$�R�Y�s�U�{�%;�%;�
<�
<�	 �	 ��L�L�����	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	 �	 s�A�A�Ac�>���fd�}|d��|d��dS)Nc����d|z}d}��tj|||fz����5��|��ddd��dS#1swxYwYdS)N�z4%r (len %d != 4) is not permitted as an IPv4 addressrg��lengthrOrWrs   �r�assertBadLengthzBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength�s�����6�>�D�H�C��(�(���3�$���3G�)H�)H�I�I�
#�
#����T�"�"�"�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#�
#�
#r=��r0�rrss` r�test_bad_packed_lengthz)CommonTestMixin_v4.test_bad_packed_length�sD���	#�	#�	#�	#�	#�	�������������rN)	r*r+r,rYr_rdrirmrwr0rrrTrT`sq������*�*�*�$=�=�=�L�L�L����
 � � �
����rrTc�>�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	S)
�CommonTestMixin_v6c�^�|�dd��|�dd��dS)Nz
0000::0000�::z000::c0a8:0001�::c0a8:1r^r
s rrYz%CommonTestMixin_v6.test_leading_zeros�s5���!�!�,��5�5�5��!�!�"2�J�?�?�?�?�?rc�^�|�dd��|�dd��dS)Nrr{r\r|r^r
s rr_zCommonTestMixin_v6.test_int�s4���!�!�!�T�*�*�*��!�!�*�j�9�9�9�9�9rc�8�dt�d��z}|�|d��dt�d��z}|�|d��t�d��dz}|�|d��dS)Nsrar{rbr|zc0a8:1::)rErcr)�rrOs  rrdzCommonTestMixin_v6.test_packed�s����%�-�-�
�3�3�3���!�!�$��-�-�-��%�-�-�
�3�3�3���!�!�$�
�3�3�3��}�}�Z�(�(�8�3���!�!�$�
�3�3�3�3�3rc��d}|�tj|����5|�d��ddd��dS#1swxYwYdS)Nz,-1 (< 0) is not permitted as an IPv6 addressrfrgrhs  rriz.CommonTestMixin_v6.test_negative_ints_rejected�rjrkc���d}|�tj|ddzz����5|�ddz��ddd��dS#1swxYwYdS)Nz2%d (>= 2**128) is not permitted as an IPv6 address��rgrhs  rrmz+CommonTestMixin_v6.test_large_ints_rejected�s���B��
�
$�
$�R�Y�s�Q��V�|�%<�%<�
=�
=�	!�	!��L�L��C�� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	!�	!s�A�A�Ac�>���fd�}|d��|d��dS)Nc����d|z}d}��tj|||fz����5��|����|��ddd��dS#1swxYwYdS)Nrpz5%r (len %d != 16) is not permitted as an IPv6 addressrgrqs   �rrszBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength�s�����6�>�D�I�C��(�(���3�$���3G�)H�)H�I�I�
#�
#����T�"�"�"����T�"�"�"�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#�
#�
#s�+A-�-A1�4A1��r0rvs` rrwz)CommonTestMixin_v6.test_bad_packed_length�sD���	#�	#�	#�	#�	#�	�������������rc��d}|�d|��5|�|��ddd��dS#1swxYwYdS)Nz::1%�Invalid IPv6 address: "%r"r6�rrVs  r�test_blank_scope_idz&CommonTestMixin_v6.test_blank_scope_id�s�����
�
$�
$�%A�7�
K�
K�	"�	"��L�L��!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"��<�A�Ac��d}|�d|��5|�|��ddd��dS#1swxYwYdS)Nz
::1%scope%r�r6r�s  r�"test_invalid_scope_id_with_percentz5CommonTestMixin_v6.test_invalid_scope_id_with_percent�s�����
�
$�
$�%A�7�
K�
K�	"�	"��L�L��!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"r�N)r*r+r,rYr_rdrirmrwr�r�r0rrryry�s�������@�@�@�:�:�:�4�4�4����
!�!�!�
	�	�	�"�"�"�
"�"�"�"�"rryc�R�eZdZejZd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
S)�AddressTestCase_v4c��tjd��}gd�}|D])\}}|�|t||�����*dS)N�1.2.3.42))�b� 00000001000000100000001100101010)�nr�)rP�0102032a)�X�0102032A)�_b�'0000_0001_0000_0010_0000_0011_0010_1010)�_nr�)�_x�	0102_032a)�_X�	0102_032A)�#b�"0b00000001000000100000001100101010)�#nr�)�#x�
0x0102032a)�#X�
0X0102032A)�#_b�)0b0000_0001_0000_0010_0000_0011_0010_1010)�#_nr�)�#_x�0x0102_032a)�#_X�0X0102_032A)�sr�)r5r�)r�IPv4Addressr%�format)r�v4�v4_pairs�fmt�txts     r�test_formatzAddressTestCase_v4.test_format�sc��
�
"�:�
.�
.��
�
�
��(#�	3�	3�J�S�#����S�&��S�/�/�2�2�2�2�	3�	3rc��d}|�d|��5tj|��ddd��dS#1swxYwYdS)Nz127.0.0.1/24�Unexpected '/' in %r�rrr�rs  r�test_network_passed_as_addressz1AddressTestCase_v4.test_network_passed_as_address�s�����
�
$�
$�%;�T�
B�
B�	(�	(��!�$�'�'�'�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(�	(�	(s
�;�?�?c����fd�}|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�����d|��5tj|��ddd��dS#1swxYwYdS)NzExpected 4 octets in %rr��rOrs �r�assertBadSplitzAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplit�s�����(�(�)B�D�I�I�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,�
�:�>�>z127.0.1z42.42.42.42.42z42.42.42z42.42�42z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016�016�000z0x0a.0x0a.0x0az	0x0a.0x0a�0x0a�.�bogusz	bogus.com�1000�1000000000000000z192.168.0.1.comr0�rr�s` r�test_bad_address_splitz)AddressTestCase_v4.test_bad_address_split�s����	,�	,�	,�	,�	,�	��y�!�!�!���'�(�(�(���z�"�"�"���w������t������~�&�&�&���~�&�&�&���'�(�(�(���~�&�&�&���'�(�(�(���}�%�%�%���y�!�!�!���u������u������'�(�(�(���{�#�#�#���v������s������w������{�#�#�#���v������)�*�*�*���(�)�)�)�)�)rc�>���fd�}|d��|d��dS)Nc�����d|��5tj|��ddd��dS#1swxYwYdS)NzEmpty octet not permitted in %rr�r�s �r�assertBadOctetz;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctets�����(�(�)J�)-�/�/�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,r�z	42..42.42z...r0�rr�s` r�test_empty_octetz#AddressTestCase_v4.test_empty_octetsD���	,�	,�	,�	,�	,�
	��{�#�#�#���u�����rc�����fd�}|dd��|dd��|dd��|dd	��|d
d��|dd
��|dd��|dd��|dd��dS)Nc���d|�d|��}��tj|����5tj|��ddd��dS#1swxYwYdS)Nz!Only decimal digits permitted in � in �rr9r:rr��rO�octetrWrs   �rr�zBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctet
s�����AF�����M�C��(�(���3���8�8�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,s�A�A�Az0x0a.0x0a.0x0a.0x0ar�z0xa.0x0a.0x0a.0x0a�0xaz42.42.42.-0�-0z42.42.42.+0�+0z42.42.42.-42z-42z
+1.+2.+3.4�+1z	1.2.3.4e0�4e0�	1.2.3.4::z4::�1.a.2.3�ar0r�s` r�test_invalid_charactersz*AddressTestCase_v4.test_invalid_characters	s����	,�	,�	,�	,�	,�
	��,�f�5�5�5���+�U�3�3�3���}�d�+�+�+���}�d�+�+�+���~�u�-�-�-���|�T�*�*�*���{�E�*�*�*���{�E�*�*�*���y�#�&�&�&�&�&rc�B���fd�}|dd��|dd��dS)Nc���d}��tj|||fz����5tj|��ddd��dS#1swxYwYdS)Nz*At most 3 characters permitted in %r in %rr�r�s   �rr�z<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctets����>�C��(�(���3�%���3F�)G�)G�H�H�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,��A�A�Az0000.000.000.000�0000z12345.67899.-54321.-98765�12345r0r�s` r�test_octet_lengthz$AddressTestCase_v4.test_octet_lengthsJ���	,�	,�	,�	,�	,�
	��)�6�2�2�2���2�G�<�<�<�<�<rc�B���fd�}|dd��|dd��dS)Nc���d||fz}��tj|����5tj|��ddd��dS#1swxYwYdS)Nz$Octet %d (> 255) not permitted in %rr�r�s   �rr�z;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctet#s����8�E�4�=�H�C��(�(���3���8�8�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,r�z	257.0.0.0iz
192.168.0.999i�r0r�s` r�test_octet_limitz#AddressTestCase_v4.test_octet_limit"sH���	,�	,�	,�	,�	,�
	��{�C�(�(�(�����,�,�,�,�,rc�0�|�d��dS�N�	192.0.2.1�rRr
s r�test_picklezAddressTestCase_v4.test_pickle+s������%�%�%�%�%rc�T�tj|�d����dSr���weakref�refr
r
s r�test_weakrefzAddressTestCase_v4.test_weakref.s$����D�L�L��-�-�.�.�.�.�.rN)r*r+r,rr�r
r�r�r�r�r�r�r�r�r�r0rrr�r��s��������#�G�3�3�3�2(�(�(�
*�*�*�:���'�'�'� =�=�=�-�-�-�&�&�&�/�/�/�/�/rr�c�p�eZdZejZd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Zd�Zd�Zd
�Zd�ZdS)�AddressTestCase_v6c��tjd��}gd�}|D])\}}|�|t||�����*dS)Nz
::1.2.3.42))r�ڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r�� 0000000000000000000000000102032a)rPr�)r�� 0000000000000000000000000102032A)r�ڟ0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r��'0000_0000_0000_0000_0000_0000_0102_032a)r�r�)r��'0000_0000_0000_0000_0000_0000_0102_032A)r�ڂ0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r��"0x0000000000000000000000000102032a)r�r�)r��"0X0000000000000000000000000102032A)r�ڡ0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r��)0x0000_0000_0000_0000_0000_0000_0102_032a)r�r�)r��)0X0000_0000_0000_0000_0000_0000_0102_032A)r��	::102:32a)r5r�)r�IPv6Addressr%r�)r�v6�v6_pairsr�r�s     rr�zAddressTestCase_v6.test_format5sd��
�
"�<�
0�
0��!
�!
�!
��F#�	3�	3�J�S�#����S�&��S�/�/�2�2�2�2�	3�	3rc�>���fd�}|d��|d��dS)Nc���d}��||��5tj|��ddd��dS#1swxYwYdS)Nr�)rrr�rOrWrs  �rr�zIAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplit_s����(�C��(�(��d�3�3�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,s�<�A�Az::1/24z::1%scope_id/24r0r�s` rr�z1AddressTestCase_v6.test_network_passed_as_address^sE���	,�	,�	,�	,�	,�	��x� � � ���(�)�)�)�)�)rc����fd�}|d��|d��|d��|d��|d��|d��dS)Nc����d}��||�d��d��5tj|��ddd��dS#1swxYwYdS)NzAt least 3 parts expected in %r�%r�r�splitrrrs  �rr�zUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplitgs����3�C��(�(��d�j�j��o�o�a�.@�A�A�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,��A�A�A�:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper0r�s` r�*test_bad_address_split_v6_not_enough_partsz=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsfs����	,�	,�	,�	,�	,�
	��s������t������{�#�#�#���y�!�!�!���z�"�"�"���(�)�)�)�)�)rc�����fd�}|d��|d��|d��|d��|d��|d��|d��|d	��|d
��|d��dS)Nc����d}��||�d��d��5tj|��ddd��dS#1swxYwYdS)Nz At most 8 colons permitted in %rrrr	rs  �rr�zTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplitt����4�C��(�(��d�j�j��o�o�a�.@�A�A�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,rz9: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%scoper0r�s` r�)test_bad_address_split_v6_too_many_colonsz<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonsss����	,�	,�	,�	,�	,�
	��+�,�,�,���-�.�.�.���*�+�+�+���*�+�+�+���5�6�6�6���1�2�2�2���3�4�4�4���0�1�1�1���0�1�1�1���;�<�<�<�<�<rc�����fd�}|d��|d��|d��|d��|d��|d��|d��|d	��|d
��|d��dS)Nc����d}��||�d��d��5tj|��ddd��dS#1swxYwYdS)Nz+Exactly 8 parts expected without '::' in %rrrr	rs  �rr�zSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplit�s����?�C��(�(��d�j�j��o�o�a�.@�A�A�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,rz3ffe: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%scoper0r�s` r�(test_bad_address_split_v6_too_many_partsz;AddressTestCase_v6.test_bad_address_split_v6_too_many_parts�s����	,�	,�	,�	,�	,�
	��-�.�.�.���*�+�+�+����'�'�'���2�3�3�3���.�/�/�/���3�4�4�4���0�1�1�1���,�-�-�-���8�9�9�9���4�5�5�5�5�5rc�>���fd�}|d��|d��dS)Nc����d}��||�d��d��5tj|��ddd��dS#1swxYwYdS)Nz.Expected at most 7 other parts with '::' in %rrrr	rs  �rr�zeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplit�s����B�C��(�(��d�j�j��o�o�a�.@�A�A�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,rz1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper0r�s` r�:test_bad_address_split_v6_too_many_parts_with_double_colonzMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon�sF���	,�	,�	,�	,�	,�
	��)�*�*�*���/�0�0�0�0�0rc�����fd�}|d��|d��|d��|d��|d��|d��|d��|d	��|d
��|d��|d��|d
��|d��|d��|d��|d��|d��|d��|d��|d��dS)Nc����d}��||�d��d��5tj|��ddd��dS#1swxYwYdS)Nz At most one '::' permitted in %rrrr	rs  �rr�zZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon.<locals>.assertBadSplit�rrz
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%scoper0r�s` r�/test_bad_address_split_v6_repeated_double_colonzBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon�sm���	,�	,�	,�	,�	,�
	��|�$�$�$���~�&�&�&���~�&�&�&���{�#�#�#���{�#�#�#���}�%�%�%���}�%�%�%���~�&�&�&���u������~�&�&�&���)�*�*�*���+�,�,�,���+�,�,�,���(�)�)�)���(�)�)�)���*�+�+�+���*�+�+�+���+�,�,�,���{�#�#�#���+�,�,�,�,�,rc�����fd�}|d��|d��|d��|d��|d��|d��|d��|d	��dS)
Nc����d}��||�d��d��5tj|��ddd��dS#1swxYwYdS)Nz0Leading ':' only permitted as part of '::' in %rrrr	rs  �rr�zRAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplit�s����D�C��(�(��d�j�j��o�o�a�.@�A�A�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,rz: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::%scoper0r�s` r�'test_bad_address_split_v6_leading_colonz:AddressTestCase_v6.test_bad_address_split_v6_leading_colon�s����	,�	,�	,�	,�	,�
	��~�&�&�&���'�(�(�(����'�'�'���'�(�(�(���+�,�,�,���-�.�.�.���,�-�-�-���-�.�.�.�.�.rc�����fd�}|d��|d��|d��|d��|d��|d��|d��|d	��dS)
Nc����d}��||�d��d��5tj|��ddd��dS#1swxYwYdS)Nz1Trailing ':' only permitted as part of '::' in %rrrr	rs  �rr�zSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplit�s����E�C��(�(��d�j�j��o�o�a�.@�A�A�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,rz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:%scoper0r�s` r�(test_bad_address_split_v6_trailing_colonz;AddressTestCase_v6.test_bad_address_split_v6_trailing_colon�s����	,�	,�	,�	,�	,�
	��~�&�&�&���'�(�(�(���|�$�$�$���'�(�(�(���+�,�,�,���-�.�.�.���)�*�*�*���-�.�.�.�.�.rc����fd�}|dd��|dd��|dd��|dd	��|d
d��|dd��|d
d��|dd��|dd	��|dd��dS)Nc������d||�d��d��5tj|��ddd��dS#1swxYwYdS)Nz%s in %rrrr	)rO�v4_errorrs  �r�assertBadAddressPartzDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPart�s�����(�(��X�t�z�z�#���q�?Q�R�R�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,s�A�A�Az3ffe::1.netzExpected 4 octets in '1.net'z
3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez
::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper0)rr$s` r�test_bad_v4_part_inz&AddressTestCase_v6.test_bad_v4_part_in�s1���	,�	,�	,�	,�	,�	��]�,J�K�K�K���_�=�	?�	?�	?���Y�;�	=�	=�	=���]�?�	A�	A�	A���.�.�	/�	/�	/�	��0�2P�Q�Q�Q���2�=�	?�	?�	?���_�;�	=�	=�	=���0�?�	A�	A�	A���4�.�	/�	/�	/�	/�	/rc�2���fd�}|dd��|dd��|dd��|dd	��|d
d��|dd
��|dd��|dd��|dd��|dd	��|dd��|dd
��dS)Nc����d|�d|�d��d��}��tj|����5t	j|��ddd��dS#1swxYwYdS)NzOnly hex digits permitted in r�rr)r
rr9r:rr�rO�partrWrs   �r�
assertBadPartzAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPart�s�����=A�T�T�4�:�:�c�?�?�ST�CU�CU�V�C��(�(���3���8�8�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,s�
A,�,A0�3A0z
3ffe::goog�googz3ffe::-0r�z3ffe::+0r�z3ffe::-1�-1r��1.2.3.4�1234:axy::b�axyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope�1234:axy::b%scoper0�rr*s` rr�z*AddressTestCase_v6.test_invalid_characters�s���	,�	,�	,�	,�	,�
	�
�l�F�+�+�+��
�j�$�'�'�'��
�j�$�'�'�'��
�j�$�'�'�'��
�k�9�-�-�-��
�m�U�+�+�+��
�(�&�1�1�1��
�&��-�-�-��
�&��-�-�-��
�&��-�-�-��
�'��3�3�3��
�)�5�1�1�1�1�1rc�����fd�}|dd��|dd��|dd��|dd	��|d
d��|dd��|dd��|d
d	��dS)Nc����d}��|||�d��d��5tj|��ddd��dS#1swxYwYdS)Nz*At most 4 characters permitted in %r in %rrrr	r(s   �rr*z:AddressTestCase_v6.test_part_length.<locals>.assertBadParts����>�C��(�(��d�D�J�J�s�O�O�A�4F�G�G�
,�
,��%�d�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,s�A�A�Az::00000�00000z3ffe::10000�10000z02001:db8::�02001z2001:888888::1�888888z
::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper0r1s` r�test_part_lengthz#AddressTestCase_v6.test_part_lengths����	,�	,�	,�	,�	,�
	�
�i��)�)�)��
�m�W�-�-�-��
�m�W�-�-�-��
�&��1�1�1��
�o�w�/�/�/��
�)�7�3�3�3��
�)�7�3�3�3��
�,�h�7�7�7�7�7rc�0�|�d��dS)N�
2001:db8::r�r
s rr�zAddressTestCase_v6.test_pickles������&�&�&�&�&rc��tj|�d����tj|�d����dS)Nr:�2001:db8::%scoper�r
s rr�zAddressTestCase_v6.test_weakref"sA����D�L�L��.�.�/�/�/���D�L�L�!3�4�4�5�5�5�5�5rN)r*r+r,rrr
r�r�r
rrrrrr r%r�r8r�r�r0rrr�r�2s��������#�G�'3�'3�'3�R*�*�*�*�*�*�=�=�=�(6�6�6�(1�1�1�-�-�-�8/�/�/� /�/�/� /�/�/�62�2�2�(8�8�8� '�'�'�6�6�6�6�6rr�c�<�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	S)
�NetmaskTestMixin_v4�;Input validation on interfaces and networks is very similarc� �dD]�}|�|��}|�t|��d��|�t|j��d��|�t|j��d����dS)N)r-���
1.2.3.4/32�255.255.255.255r[�r
r%�str�netmask�hostmask)rrV�nets   r�test_no_maskz NetmaskTestMixin_v4.test_no_mask*s���C�	;�	;�G��,�,�w�'�'�C����S��X�X�|�4�4�4����S���-�-�/@�A�A�A����S���.�.�	�:�:�:�:�		;�	;rc��d}|�d|z��5|�|��ddd��dS#1swxYwYdS)Nz
1.2.3.4/32/24�Only one '/' permitted in %rr6rs  r�test_split_netmaskz&NetmaskTestMixin_v4.test_split_netmask3s�����
�
$�
$�%C�d�%J�
K�
K�	�	��L�L�����	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�>�A�Ac�����fd�}|dd��|dd��|dd��|dd��|dd��|d	d
��|dtjd����dS)
Nc�����|��5��|��ddd��dS#1swxYwYdSrr6�rOrrs  �r�assertBadAddresszANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress9�����(�(��1�1�
#�
#����T�"�"�"�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#�
#�
#�
�:�>�>�/r4�/8r�zExpected 4 octets�
google.com�10/8�	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r9r:�rrQs` r�test_address_errorsz'NetmaskTestMixin_v4.test_address_errors8s����	#�	#�	#�	#�	#�	���7�8�8�8����8�9�9�9����"5�6�6�6����':�;�;�;����!4�5�5�5����&;�<�<�<����b�i�
�&>�&>�?�?�?�?�?rc	���|�t|�d����d��|�t|�d����d��|�t|�d����d��|�t|�d����d��tdd��D�]}d|z}|�|��}|�t|��|��|�t|�d	|jz����|��|�t|�d
|z����|��|dvrdd|z
z}|�t|�d	|jz����|����dS)
N��	192.0.2.0��192.0.2.0/24)r]�24�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)� rrd)r%rFr
rIrGrH)r�i�net_strrIs    r�test_valid_netmaskz&NetmaskTestMixin_v4.test_valid_netmaskEs�������T�\�\�*;�<�<�=�=�~�N�N�N�����T�\�\�*=�>�>�?�?��P�P�P�����T�\�\�*H�I�I�J�J�'�	)�	)�	)�����T�\�\�*C�D�D�E�E�'�	)�	)�	)��q�"���	I�	I�A�"�Q�&�G��,�,�w�'�'�C����S��X�X�w�/�/�/�����D�L�L����!;�<�<�=�=�w�
H�
H�
H�
���S����m�a�.?�!@�!@�A�A�7�K�K�K��G�|�|�&�"�q�&�1������D�L�L����!<�=�=�>�>��
I�
I�
I�
I�	I�	Irc�b���fd�}|dd��|dd��|dd��|dd��|dd��|dd��|dd	��|dd
��|dd��|dd
��|dd��|dd��|dd��|dd��dS)Nc����d|z}��tj|����5��|�d|����ddd��dS#1swxYwYdS�N�%r is not a valid netmaskrT�r#r9r:r
�rOrGrWrs   �r�assertBadNetmaskzANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmask^����-��7�C��(�(���3���8�8�
8�
8�������g�g�6�7�7�7�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8�
8�
8��A�A�Ar-r5r,r�� 1 �0x1�33z254.254.255.256r��1.1.1.1z254.xyz.2.3z240.255.0.0z
255.254.128.0z0.1.127.255�puddingr{r0�rrns` r�test_netmask_errorsz'NetmaskTestMixin_v4.test_netmask_errors]s/���	8�	8�	8�	8�	8�
	���B�'�'�'����D�)�)�)����D�)�)�)����E�*�*�*����E�*�*�*����D�)�)�)����$5�6�6�6����I�.�.�.����M�2�2�2����M�2�2�2����O�4�4�4����M�2�2�2����I�.�.�.����D�)�)�)�)�)rc�B���fd�}|dd��|dd��dS)Nc���d|z}��tj|����5��||f��ddd��dS#1swxYwYdS�Nrkrlrms   �rrnzJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmasks����-��7�C��(�(���3���8�8�
.�
.����d�G�_�-�-�-�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.�
.����
.�
.�
.�
.�
.�
.��A�A�Artrfrcr0rvs` r�test_netmask_in_tuple_errorsz0NetmaskTestMixin_v4.test_netmask_in_tuple_errorsrsJ���	.�	.�	.�	.�	.�	���B�'�'�'����B�'�'�'�'�'rc��|�d��|�d��|�d��dS)Nz192.0.2.0/27z192.0.2.0/31r]r�r
s rr�zNetmaskTestMixin_v4.test_picklezsD������(�(�(�����(�(�(�����%�%�%�%�%rN�r*r+r,�__doc__rJrMrZrgrwr}r�r0rrr>r>'s�������E�E�;�;�;����
@�@�@�I�I�I�0*�*�*�*(�(�(�&�&�&�&�&rr>c��eZdZejZdS)�InterfaceTestCase_v4N)r*r+r,r�
IPv4Interfacer
r0rrr�r����������%�G�G�Grr�c�.�eZdZejZd�Zd�Zd�ZdS)�NetworkTestCase_v4c�v�|�|�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_ofrr
s r�test_subnet_ofz!NetworkTestCase_v4.test_subnet_of�s(������L�L��'�'�1�1����]�+�+�
-�
-�	.�	.�	.�	
����L�L��'�'�1�1����]�+�+�
-�
-�	.�	.�	.�	
����L�L��'�'�1�1����]�+�+�
-�
-�	.�	.�	.�	
����L�L��'�'�1�1����]�+�+�
-�
-�	.�	.�	.�	.�	.rc�v�|�|�d���|�d������|�|�d���|�d������|�|�d���|�d������|�|�d���|�d������dSr��r�r
�supernet_ofrr
s r�test_supernet_ofz#NetworkTestCase_v4.test_supernet_of�s(������L�L��'�'�3�3����]�+�+�
-�
-�	.�	.�	.�	
����L�L��'�'�3�3����]�+�+�
-�
-�	.�	.�	.�	
����L�L��'�'�3�3����]�+�+�
-�
-�	.�	.�	.�	
����L�L��'�'�3�3����]�+�+�
-�
-�	.�	.�	.�	.�	.rc�`�|�t��5tjd���tjd����ddd��n#1swxYwY|�t��5tjd���tjd����ddd��n#1swxYwY|�t��5tjd���tjd����ddd��n#1swxYwY|�t��5tjd���tjd����ddd��dS#1swxYwYdS)Nr��::1/128)r@rAr�IPv4Networkr��IPv6Networkr�r
s r�test_subnet_of_mixed_typesz-NetworkTestCase_v4.test_subnet_of_mixed_types�s��
�
�
�y�
)�
)�	2�	2��!�-�0�0�<�<��%�i�0�0�
2�
2�
2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2��
�
�y�
)�
)�	6�	6��!�)�,�,�8�8��%�m�4�4�
6�
6�
6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6��
�
�y�
)�
)�	2�	2��!�-�0�0�:�:��%�i�0�0�
2�
2�
2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2��
�
�y�
)�
)�	6�	6��!�)�,�,�6�6��%�m�4�4�
6�
6�
6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6�	6�	6sG�:A!�!A%�(A%�:C�C�C�1:D7�7D;�>D;�:F#�#F'�*F'N)	r*r+r,rr�r
r�r�r�r0rrr�r��sI�������#�G�.�.�.�$.�.�.�$6�6�6�6�6rr�c�<�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	S)
�NetmaskTestMixin_v6r?c�0�dD]�}|�|��}|�t|��d��|�t|j��d��|�t|j��d����|�d��}|�t|��d��|�t|j��d��|�t|j��d��dS)N)�::1r?sr�z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr{�	::1%scope�
::1%scope/128rE)rrVrI�
scoped_nets    rrJz NetmaskTestMixin_v6.test_no_mask�s���7�	6�	6�G��,�,�w�'�'�C����S��X�X�y�1�1�1����S���-�-�/X�Y�Y�Y����S���.�.��5�5�5�5��\�\�+�.�.�
�����Z���/�:�:�:�����Z�/�0�0�2[�\�\�\�����Z�0�1�1�4�8�8�8�8�8rc�$�d}|�d|z��5|�|��ddd��n#1swxYwYd}|�d|z��5|�|��ddd��dS#1swxYwYdS)Nzcafe:cafe::/128/190rLzcafe:cafe::%scope/128/190r6)rrO�scoped_addrs   rrMz&NetmaskTestMixin_v6.test_split_netmask�s��$��
�
$�
$�%C�d�%J�
K�
K�	�	��L�L�����	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�2��
�
$�
$�%C�k�%Q�
R�
R�	&�	&��L�L��%�%�%�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&�	&�	&s!�=�A�A�"B�B	�B	c�2���fd�}|dd��|dd��|dd��|dd��|dd��|d	d
��|dd��|dd��|d
d��|dd��|dd��|dd
��dS)Nc�����|��5��|��ddd��dS#1swxYwYdSrr6rPs  �rrQzANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddress�rRrSrTr4rUrVzAt least 3 partsr-rWr.zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez
1.2.3.4%scopez
10%scope/8r0r0rYs` rrZz'NetmaskTestMixin_v6.test_address_errors�s���	#�	#�	#�	#�	#�	���7�8�8�8����8�9�9�9����'9�:�:�:����$6�7�7�7����!3�4�4�4����(9�:�:�:����$=�>�>�>����%>�?�?�?���+�-?�@�@�@����*<�=�=�=����'9�:�:�:���,�.?�@�@�@�@�@rc	���|�t|�d����d��|�t|�d����d��|�t|�d����d��tdd��D]v}d|z}|�t|�|����|��|�t|�d|z����|���w|�t|�d����d��tdd��D]v}d|z}|�t|�|����|��|�t|�d|z����|���wdS)	N)r:rd�
2001:db8::/32)r:�32r�z::/%dz::/0%dz2001:db8::%scope/32)r%rFr
rI)rrerfs   rrgz&NetmaskTestMixin_v6.test_valid_netmask�s���	
����T�\�\�*<�=�=�>�>�(�	*�	*�	*�����T�\�\�*>�?�?�@�@�(�	*�	*�	*�����T�\�\�/�:�:�;�;�_�M�M�M��q�#���	G�	G�A���k�G����S����g�!6�!6�7�7��A�A�A����S����h��l�!;�!;�<�<�g�F�F�F�F�����T�\�\�*?�@�@�A�A�CX�Y�Y�Y��q�#���	G�	G�A���k�G����S����g�!6�!6�7�7��A�A�A����S����h��l�!;�!;�<�<�g�F�F�F�F�	G�	Grc�2���fd�}|dd��|dd��|dd��|dd��|dd��|dd��|dd��|dd	��|dd
��|dd��|dd��|d
d��dS)Nc����d|z}��tj|����5��|�d|����ddd��dS#1swxYwYdSrjrlrms   �rrnzANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmask�rorpr�r5�1::r,r�rqrr�129r-rur{r�r0rvs` rrwz'NetmaskTestMixin_v6.test_netmask_errors�s���	8�	8�	8�	8�	8�
	����#�#�#�����&�&�&�����&�&�&�����%�%�%�����%�%�%�����&�&�&�����&�&�&�����&�&�&����	�*�*�*����	�*�*�*����t�$�$�$����i�0�0�0�0�0rc�Z���fd�}|dd��|dd��|dd��dS)Nc���d|z}��tj|����5��||f��ddd��dS#1swxYwYdSrzrlrms   �rrnzJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskr{r|r�rfr�r�r0rvs` rr}z0NetmaskTestMixin_v6.test_netmask_in_tuple_errorss]���	.�	.�	.�	.�	.�	����#�#�#�����$�$�$����c�*�*�*�*�*rc��|�d��|�d��|�d��|�d��dS)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoper�r
s rr�zNetmaskTestMixin_v6.test_pickles\�����-�.�.�.����-�.�.�.����)�*�*�*����/�0�0�0�0�0rNrr0rrr�r��s�������E�E�9�9�9�&�&�&�A�A�A�&G�G�G�.1�1�1�(+�+�+�1�1�1�1�1rr�c��eZdZejZdS)�InterfaceTestCase_v6N)r*r+r,r�
IPv6Interfacer
r0rrr�r�#r�rr�c�(�eZdZejZd�Zd�ZdS)�NetworkTestCase_v6c��|�|�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�r
s rr�z!NetworkTestCase_v6.test_subnet_of*s�������L�L��)�)�3�3����_�-�-�
/�
/�	0�	0�	0�	
����L�L��)�)�3�3����_�-�-�
/�
/�	0�	0�	0�	
����L�L��)�)�3�3����_�-�-�
/�
/�	0�	0�	0�	
����L�L��)�)�3�3����_�-�-�
/�
/�	0�	0�	0�	
����L�L�.�/�/�9�9����2�3�3�
5�
5�	6�	6�	6�	
����L�L�.�/�/�9�9����2�3�3�
5�
5�	6�	6�	6�	6�	6rc�v�|�|�d���|�d������|�|�d���|�d������|�|�d���|�d������|�|�d���|�d������dS)Nr�r�r�r�r�r
s rr�z#NetworkTestCase_v6.test_supernet_ofCs(������L�L��)�)�5�5����_�-�-�
/�
/�	0�	0�	0�	
����L�L��)�)�5�5����_�-�-�
/�
/�	0�	0�	0�	
����L�L��)�)�5�5����_�-�-�
/�
/�	0�	0�	0�	
����L�L��)�)�5�5����_�-�-�
/�
/�	0�	0�	0�	0�	0rN)r*r+r,rr�r
r�r�r0rrr�r�'s:�������#�G�6�6�6�20�0�0�0�0rr�c�&�eZdZd�Zd�Zd�Zd�ZdS)�FactoryFunctionErrorsc��d}d}|�t|||��5||��ddd��dS#1swxYwYdS)z3Ensure a clean ValueError with the expected message�camelotz+%r does not appear to be an IPv4 or IPv6 %sN)r�
ValueError)rr
�kindrOrWs     r�assertFactoryErrorz(FactoryFunctionErrors.assertFactoryErrorXs�����;��
�
"�
"�:�s�D�$�
?�
?�	�	��G�D�M�M�M�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s
�;�?�?c�F�|�tjd��dS)NrV)r�r�
ip_addressr
s r�test_ip_addressz%FactoryFunctionErrors.test_ip_address_�!�����	� 4�i�@�@�@�@�@rc�F�|�tjd��dS)N�	interface)r�r�ip_interfacer
s r�test_ip_interfacez'FactoryFunctionErrors.test_ip_interfacebs!�����	� 6��D�D�D�D�Drc�F�|�tjd��dS)N�network)r�r�
ip_networkr
s r�test_ip_networkz%FactoryFunctionErrors.test_ip_networker�rN)r*r+r,r�r�r�r�r0rrr�r�Vs[���������A�A�A�E�E�E�A�A�A�A�Arr�c���eZdZejd��Zejd��Zejd��Z	ej
d��Zejd��Z
ejd��Zej
d��Zejd��Zejd��Zee	gZeegzZeegZee
gzZeegZeegzZeezZeezZejd��Zejd��Zejd��Zej
d��Zejd��Zejd��Z ej
d��Z!ejd��Z"ejd��Z#d�Z$d�Z%d�Z&d�Z'd	�Z(d
�Z)d�Z*d�Z+d
�Z,d�Z-d�Z.dS)�ComparisonTestsr?r�r��	::2%scopec�L�t��}|jD]�}|�||��|�||k��|�|�|��t��|�|�|��t����dSr)�object�objects_with_scoped�assertNotEqualr�r%�__eq__�NotImplemented�__ne__�r�other�objs   r�test_foreign_type_equalityz*ComparisonTests.test_foreign_type_equality�s��������+�	@�	@�C�����U�+�+�+����S�E�\�*�*�*����S�Z�Z��.�.��?�?�?����S�Z�Z��.�.��?�?�?�?�		@�	@rc�d�|jD]'}|jD]}||ur�|�||����(dSr)�objectsr�r&s   r�test_mixed_type_equalityz(ComparisonTests.test_mixed_type_equality�sZ���<�	.�	.�C��|�
.�
.���#�:�:���#�#�C��-�-�-�-�
.�	.�	.rc�r�t|j|j��D]\}}|�||���dSr)�zip�
v6_objects�v6_scoped_objectsr�r&s   r�test_scoped_ipv6_equalityz)ComparisonTests.test_scoped_ipv6_equality�sG���D�O�T�-C�D�D�	*�	*�H�C������S�)�)�)�)�	*�	*rc�Z�|jD]"}|jD]}|�||����#dSr)�
v4_objectsr�r�r&s   r�test_v4_with_v6_scoped_equalityz/ComparisonTests.test_v4_with_v6_scoped_equality�sM���?�	.�	.�C��-�
.�
.���#�#�C��-�-�-�-�
.�	.�	.rc��|jD]D}|�||��|�||��|�||���EdSr)r�r%�assertLessEqual�assertGreaterEqual�rr�s  r�test_same_type_equalityz'ComparisonTests.test_same_type_equality�sc���+�	.�	.�C����S�#�&�&�&�� � ��c�*�*�*��#�#�C��-�-�-�-�	.�	.rc
��|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����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��
assertLessr��
assertGreaterr�r�r&s   r�test_same_type_orderingz'ComparisonTests.test_same_type_ordering�sd��
�[�$�,�'�
�Z���%�
�[�$�,�'�
�[�$�,�'�
�Z���%�
�[�$�,�'�
�
��!4�5�
�
�� 2�3�
�
��!4�5�

�	)�	)�H�C��
����S�)�)�)��O�O�C��%�%�%�� � ��c�*�*�*����s�C�(�(�(��#�#�C��-�-�-����S�3�Y�'�'�'����S�3�Y�'�'�'����S�C�Z�(�(�(����S�C�Z�(�(�(�(�'	)�	)rc�@�|jD]}|�||j���|j|jzD]}|�||j���|j|jzD]}|�||j���|j|j|jgzD]}|�||j���|j|j|jgzD]}|�||j���|j	|j
z|jgzD]}|�||j���dSr)�v4_addresses�assertInr��v6_addresses�v6_scoped_addressesr�r�r��assertNotInr�r�r�s  r�test_containmentz ComparisonTests.test_containment�sR���$�	+�	+�C��M�M�#�t�z�*�*�*�*��$�t�'?�?�	+�	+�C��M�M�#�t�z�*�*�*�*��$�t�'?�?�	2�	2�C��M�M�#�t�0�1�1�1�1��?�d�j�$�2C�%D�D�	.�	.�C����S�$�*�-�-�-�-��?�d�j�$�2C�%D�D�	5�	5�C����S�$�"3�4�4�4�4��?�T�%;�;�t�z�l�J�	.�	.�C����S�$�*�-�-�-�-�	.�	.rc����|jD]Ê|jD]��t�t�����st�t�����r�=|�t��fd���|�t��fd���|�t��fd���|�t��fd�������dS)Nc�����kSrr0�r'r(s��r�<lambda>z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>�����S�3�Y�rc�����kSrr0rs��rr	z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>�r
rc�����kSrr0rs��rr	z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>�����S�C�Z�rc�����kSrr0rs��rr	z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>�r
r)r��
isinstance�typer@rAr&s @@r�test_mixed_type_orderingz(ComparisonTests.test_mixed_type_ordering�s������+�	A�	A�C��/�
A�
A���c�4��9�9�-�-���C��c���1K�1K����!�!�)�->�->�->�->�->�?�?�?��!�!�)�->�->�->�->�->�?�?�?��!�!�)�-?�-?�-?�-?�-?�@�@�@��!�!�)�-?�-?�-?�-?�-?�@�@�@�@�

A�	A�	Arc���t��}|jD�]�}|�t��5||kddd��n#1swxYwY|�t��5||kddd��n#1swxYwY|�t��5||kddd��n#1swxYwY|�t��5||kddd��n#1swxYwY|�|t
k��|�|t
k��|�|t
k��|�|t
k��|�|tk��|�|tk��|�|tk��|�|tk�����dSr)r�r�r@rArrr�rr�s   r�test_foreign_type_orderingz*ComparisonTests.test_foreign_type_ordering�s��������+�	-�	-�C��"�"�9�-�-�
�
��e���
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��"�"�9�-�-�
�
��e���
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��"�"�9�-�-�
�
��u���
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��"�"�9�-�-�
�
��u���
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��O�O�C�'�M�*�*�*����S�7�]�+�+�+��O�O�C�7�N�+�+�+����S�G�^�,�,�,����S�8�^�,�,�,��O�O�C�(�N�+�+�+����S�H�_�-�-�-��O�O�C�8�O�,�,�,�,�!	-�	-sG�A�A
	�
A
	�+A>�>B	�B	�#B6�6B:	�=B:	�C.�.C2	�5C2	c��|j|j|jg}|j|j|jg}|j|j|jg}|�	|t|jtj
�����|�	|t|jtj
�����|�	|t|jtj
�����|�	||zt|j|jztj
�����|�	t tj
t"����dS)N)�key)r�r�r�r�r�r�r�r�r�r%�sortedr�r�get_mixed_type_keyr�r�r�r�)r�
v4_ordered�
v6_ordered�v6_scoped_ordereds    r�test_mixed_type_keyz#ComparisonTests.test_mixed_type_key�sk���k�4�:�t�{�;�
��k�4�:�t�{�;�
�!�/��1B�D�DV�W���������$-�$@�B�B�B�	C�	C�	C�	
�������$-�$@�B�B�B�	C�	C�	C�	
���*��� 6�$-�$@�B�B�B�	C�	C�	C�	
����&7�7����$�2H� H�$-�$@�B�B�B�	C�	C�	C�	
�����)E�f�)M�)M�N�N�N�N�Nrc��tjd��}tjd��}tjd��}tjd��}tjd��}tjd��}|�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)Nrtr�r�)rr�r�r@rA�__lt__�__gt__)rr�r�r�r�r�r�s       r�test_incompatible_versionsz*ComparisonTests.test_incompatible_versionss���%�i�0�0���$�Y�/�/���%�e�,�,���$�U�+�+��!�,�[�9�9�
� �+�K�8�8�����)�V�]�F�;�;�;����)�V�]�F�;�;�;����)�U�\�5�9�9�9����)�U�\�5�9�9�9����)�V�]�F�;�;�;����)�V�]�F�;�;�;����)�U�\�5�9�9�9����)�U�\�5�9�9�9����)�V�]�M�B�B�B����)�V�]�M�B�B�B����)�U�\�<�@�@�@����)�U�\�<�@�@�@����)�]�%9�6�B�B�B����)�]�%9�6�B�B�B����)�\�%8�%�@�@�@����)�\�%8�%�@�@�@�@�@rN)/r*r+r,rr�r�r�r�r�r�rr�r�r�r�r�r�r�r�rr�rr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr0rrr�r�ise������
"�Y�
"�1�
%�
%�F�!�I�!�!�$�$�E�
$�Y�
$�Q�
'�
'�F�
"�Y�
"�1�
%�
%�F�!�I�!�!�$�$�E�
$�Y�
$�Q�
'�
'�F�)�I�)�+�6�6�M�'�)�'��4�4�L�*�9�*�;�7�7�M��F�#�L����'�J��F�#�L����'�J�(�-�8��+�|�n�<���:�%�G�!�$5�5��#�i�#�A�&�&�G�
"�Y�
"�1�
%�
%�F�%�i�%�a�(�(�G�#�i�#�A�&�&�G�
"�Y�
"�1�
%�
%�F�%�i�%�a�(�(�G�*�Y�*�;�7�7�N�)�I�)�+�6�6�M�,�Y�,�[�9�9�N�@�@�@�.�.�.�*�*�*�.�.�.�
.�.�.�)�)�)�,
.�
.�
.�A�A�A�-�-�-�(O�O�O�&A�A�A�A�Arr�c���eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#�Z%d$�Z&d%�Z'd&�Z(d'�Z)d(�Z*d)�Z+d*�Z,d+�Z-d,�Z.d-�Z/d.�Z0d/�Z1d0�Z2d1�Z3d2�Z4d3�Z5d4�Z6d5�Z7d6�Z8d7�Z9d8�Z:d9�Z;d:�Z<d;�Z=d<�Z>d=�Z?d>�Z@d?�ZAd@�ZBdA�ZCdB�ZDdC�ZEdD�ZFdE�ZGdF�ZHdG�ZIdH�ZJdI�ZKdJ�ZLdKS)L�IpaddrUnitTestc���tjd��|_tjd��|_tjd��|_tjd��|_tjd��|_	tj
d��|_tjd��|_tjd��|_
tj
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_networkr
s r�setUpzIpaddrUnitTest.setUp s���%�1�)�<�<���'�5�l�C�C���%�1�,�?�?���%�3�)�+�+���'�5�,�.�.���%�1�2J�K�K���#,�#:�/�$1�$1�� �%.�%<�2�&4�&4��"�#,�#8�9W�#X�#X�� � � rc�D�|�dttjd������|�dttjd������|�dttjd������dS)NzIPv4Interface('1.2.3.4/32')r-zIPv6Interface('::1/128')r�zIPv6Interface('::1%scope/128')r�)r%r;rr�r�r
s r�testReprzIpaddrUnitTest.testRepr0s������6��i�5�i�@�@�A�A�	C�	C�	C����3��i�5�e�<�<�=�=�	?�	?�	?����9��i�5�k�B�B�C�C�	E�	E�	E�	E�	Erc���tjd��}tjd��}|�tjd��|��|�tj|df��|��|�tjd��|��|�tjd��|��|�tj|df��|��|�tjd��|��|�t
��5tjd	��ddd��n#1swxYwY|�t
��5tj|d
f��ddd��n#1swxYwY|�t
��5tjd��ddd��n#1swxYwY|�t
��5tjd��ddd��n#1swxYwY|�t
��5tj|d
f��ddd��n#1swxYwY|�t
��5tjd��ddd��n#1swxYwYtjd��}|�tjd	d���|��|�tj|d
fd���|��|�tjdd���|��|�tjdd���|��|�tj|d
fd���|��|�tjdd���|��tjd��}tjd��}|�tjd��|��|�tj|d
f��|��|�tjd��|��|�tjd��|��|�tj|d
f��|��|�tjd��|��|�tjd	��tjd����|�tjd��tjd����|�t
��5tjd��ddd��n#1swxYwY|�t
��5tjd��ddd��dS#1swxYwYdS)Nr�z192.0.2.1/32)r�rdrd)�rd)r�rDrD)r5rD)r�r^r^)r5r^)r�rbrb)r5rbr_F��strictr]ra)�rbr\)r8r^z192.0.2.1/24)r�z255.255.255.255.0)rr�r�r%r@r�r�r�)r�iprIs   r�
testIPv4TuplezIpaddrUnitTest.testIPv4Tuple9s~��
�
"�;�
/�
/���#�N�3�3������.�/@�A�A�3�G�G�G�����.��B�x�8�8�#�>�>�>�����.�/?�@�@�#�F�F�F�����.�0C�D�D�EH�	J�	J�	J�����.��0A�0C�D�D�EH�	J�	J�	J�����.�0C�D�D�EH�	J�	J�	J��
�
�z�
*�
*�	5�	5��!�"3�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�
�
�
�z�
*�
*�	,�	,��!�2�r�(�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�
�
�
�z�
*�
*�	4�	4��!�"2�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�
�
�
�z�
*�
*�	B�	B��!�"@�A�A�A�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B�
�
�
�z�
*�
*�	9�	9��!�2��"7�8�8�8�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�
�
�
�z�
*�
*�	A�	A��!�"?�@�@�@�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A��#�N�3�3������.�/@�6;�=�=�=�>A�	C�	C�	C�����.��B�x�6;�=�=�=�>A�	C�	C�	C�����.�/?�6;�=�=�=�>A�	C�	C�	C�����.�0A�6;�=�=�=�>A�	C�	C�	C�	
����.��0?�0A�6;�=�=�=�>A�	C�	C�	C�	
����.�0A�6;�=�=�=�>A�	C�	C�	C�
�
"�;�
/�
/���#�N�3�3������.�0A�B�B�CF�	H�	H�	H�����.��0?�0A�B�B�CF�	H�	H�	H�����.�0A�B�B�CF�	H�	H�	H�����.�/@�A�A�3�G�G�G�����.��B�x�8�8�#�>�>�>�����.�/?�@�@�#�F�F�F�����0�1B�C�C�"�0��@�@�	B�	B�	B�����0�1A�B�B�"�0��@�@�	B�	B�	B��
�
�z�
*�
*�	F�	F��!�"D�E�E�E�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F�	F����	F�	F�	F�	F��
�
�z�
*�
*�	E�	E�� �!C�D�D�D�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	E�	Es��7E�E�E�=F � F$�'F$�G&�&G*�-G*�H,�,H0�3H0�I4�4I8�;I8�J:�:J>�J>�V$�$V(�+V(�	W+�+W/�2W/c���tjd��}tjd��}|�tjd��|��|�tjd��|��|�tj|df��|��tjd��}tjd��}|�tjd��|��|�tjd��|��|�tj|d	f��|��tjd
��}tjd��}|�t
��5tjd��ddd��n#1swxYwY|�t
��5tjd
��ddd��n#1swxYwY|�t
��5tj|df��ddd��n#1swxYwYtjd��}|�tjdd���|��|�tjd
d���|��|�tj|dfd���|��|�tjd��tjd����|�tjd��tjd����tjd��}|�t
��5tjd��ddd��n#1swxYwY|�t
��5tj|df��ddd��n#1swxYwY|�t
��5tjd��ddd��n#1swxYwY|�t
��5tjd��ddd��dS#1swxYwYdS)Nr:z2001:db8::/128)r:�128)�	n� r�r<z
2001:db8::/96)r:�96)r=�`r>r<�2001:db8::1)r@r?)�	n� r?r?Fr6)r@r>z2001:db8::1/96)rAr>�2001:db8::1%scope)rBr?)r@rb)rrr�r%r@r�r�r�)rr9rI�	ip_scopeds    r�
testIPv6TuplezIpaddrUnitTest.testIPv6Tuple�sS��
�
"�<�
0�
0���#�$4�5�5������.�/D�E�E��	�	�	�����.�=�?�?��	�	�	�	
����.��E�{�;�;��	�	�	�
�
"�<�
0�
0���#�O�4�4������.�/C�D�D��	�	�	�����.�<�>�>��	�	�	�	
����.��D�z�:�:��	�	�	��)�*<�=�=�	��
"�=�
1�
1��
�
�
�z�
*�
*�	7�	7��!�"5�6�6�6�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�
�
�
�z�
*�
*�	=�	=��!�#<�
=�
=�
=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=��
�
�z�
*�
*�	,�	,��!�2�r�(�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,��#�O�4�4������.�/B�6;�=�=�=��	�	�	�	
����.�I�$)�+�+�+��	�	�	�	
����.��B�x��F�F�F��	�	�	�	
����0�1F�G�G�"�0�1A�B�B�	D�	D�	D�����0�>�@�@�"�0�1A�B�B�	D�	D�	D��)�*=�>�>�	�
�
�
�z�
*�
*�	=�	=��!�";�<�<�<�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�
�
�
�z�
*�
*�	3�	3��!�9�b�/�2�2�2�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�
�
�
�z�
*�
*�	D�	D��!�"B�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D��
�
�z�
*�
*�	C�	C�� �!A�B�B�B�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C����	C�	C�	C�	C�	C�	Cs~�F(�(F,�/F,�
G.�.G2�5G2�H6�6H:�=H:�7N�N�N�=O � O$�'O$�P&�&P*�-P*�Q-�-Q1�4Q1c���|�tjd��dztjd����|�tjd��dz
tjd����|�tjd��dztjd����|�tjd��dz
tjd����|�tjd	��dztjd
����|�tjd
��dz
tjd	����dS)Nrt�z1.1.2.0�z1.1.0.1r�i��z::ffffr�z::ffff%scope)r%rr�rr�r
s r�testAddressIntMathz!IpaddrUnitTest.testAddressIntMath�sd������.�y�9�9�C�?�"�.�y�9�9�	;�	;�	;�����.�y�9�9�C�?�"�.�y�9�9�	;�	;�	;�����.�u�5�5��C�"�.�x�8�8�	:�	:�	:�����.�x�8�8�I�F�"�.�u�5�5�	7�	7�	7����I�1�+�>�>�)�L�%�1�.�A�A�	C�	C�	C����I�1�.�A�A�Y�O�%�1�+�>�>�	@�	@�	@�	@�	@rc�j�|�ttjd��|�ttjdtjz��|�ttjd��|�ttjdtjz��dS)Nrfr�)r@r�r�v4_int_to_packed�
IPV4LENGTH�v6_int_to_packed�
IPV6LENGTHr
s r�testInvalidIntToBytesz$IpaddrUnitTest.testInvalidIntToBytes�s������*�i�&@�"�E�E�E����*�i�&@��y�3�3�	5�	5�	5����*�i�&@�"�E�E�E����*�i�&@��y�3�3�	5�	5�	5�	5�	5rc	��tjd��}tjd��}tjd��}|�ttj|g����||fg��|�ttj||g����||f||fg��|�ttj|||g����||fg��|�dtjdd����|�dt
|j����dS)Nz10.10.10.10z10.10.10.11z10.10.10.12r�rzIPv4Network('1.2.3.0/24'))rr�r%�list�_find_address_range�_count_righthand_zero_bitsr;r*)r�ip1�ip2�ip3s    r�
testInternalszIpaddrUnitTest.testInternals�s2���#�M�2�2���#�M�2�2���#�M�2�2������i�;�S�E�B�B�C�C���*��	'�	'�	'�����i�;�S�#�J�G�G�H�H���*�s�C�j�1�	3�	3�	3�����i�;�S�#�s�O�L�L�M�M���*��	'�	'�	'�����i�B�1�c�J�J�K�K�K����4�d�4�;L�6M�6M�N�N�N�N�Nrc���|�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%�intr*�network_addressrFr-rHr0r
s r�testGetNetworkzIpaddrUnitTest.testGetNetwork�s\������T�.�>�?�?��J�J�J�����T�.�>�?�?��K�K�K�����T�.�>�?�?�?�	A�	A�	A�����T�.�>�?�?�.�	0�	0�	0�����T�.�7�8�8�0�	2�	2�	2�����T�5�E�F�F�?�	A�	A�	A�����T�5�E�F�F�4�	6�	6�	6�����T�5�>�?�?�0�	2�	2�	2�	2�	2rc�r�|�|jjtjd��j��tjd��}tjd��}tjd��}|�|tjt
|j������|�|tjt
|j������|�|tjt
|j������d}|�|j	jtj
|��j��|�|jjtj
|��j��|�tj|jj��j
d��|�tj|jj��j
d��|�tj|jj��j
d��dS)NrAr-r%r'�	�/YE� ��)r%r)�_iprr�r�r[r\r�r,r�r/r(�versionr+r.)r�ipv4�ipv6�ipv6_scoped�v6_ints     r�
testIpFromIntzIpaddrUnitTest.testIpFromInt�s�������,�0�"�0��:�:�>�	@�	@�	@��#�I�.�.���#�$A�B�B���*�+N�O�O������y�3�C��8L�4M�4M�N�N�O�O�O�����y�3�C��8L�4M�4M�N�N�O�O�O����K��)=�c�+�B]�>^�>^�)_�)_�`�`�`�7������,�0�"�0��8�8�<�	>�	>�	>�����3�7�"�0��8�8�<�	>�	>�	>�	
����-�d�.?�.C�D�D�L��	�	�	�����-�d�.?�.C�D�D�L��	�	�	�����-�d�.F�.J�K�K�S��	�	�	�	�	rc���tj}|�|jjtjd��j��|�|d��|d����|�|jjtjd��j��|�|d��|d����|�|d��|d����dS)	NrB�255.254.253.252������ X*��ffff:2:3:4:ffff::�����r{s)rr�r%r)rbr�r,r9r�s  r�testIpFromPackedzIpaddrUnitTest.testIpFromPackeds ���&������,�0�"�/�0C�D�D�H�	J�	J�	J������!2�3�3� ��!4�5�5�	7�	7�	7�����,�/�"�/�8�9�9�9;�	=�	=�	=�	
�����!4�5�5� ��"6�7�7�	8�	8�	8�	
�������� ���.�.�	0�	0�	0�	0�	0rc�"�|�t|jj��d��|�t	|jj��d��|�t|jj��d��|�t	|jj��d��|�t|jj��d��|�t	|jj��d��dS)NrAr-r_�2001:658:22a:cafe:200::1)r%r[r)r9rFr,r/r
s r�	testGetIpzIpaddrUnitTest.testGetIps������T�0�3�4�4�h�?�?�?�����T�0�3�4�4�i�@�@�@�����T�0�3�4�4�?�	A�	A�	A�����T�0�3�4�4�3�	5�	5�	5�����T�7�:�;�;�?�	A�	A�	A�����T�7�:�;�;�3�	5�	5�	5�	5�	5rc���|�|jjd��|�t|jj��d��|�|jjd��|�t|jj��d��|�|jjjd��|�t|j	jj��d��dS)N�scope)
r%r+�scope_idrFr.r,r/r-r\r0r
s r�testGetScopeIdzIpaddrUnitTest.testGetScopeId,s�������*�3��	�	�	�����T�5�>�?�?� �	"�	"�	"�����,�5��	�	�	�����T�7�@�A�A� �	"�	"�	"�����*�:�C��	�	�	�����T�5�E�N�O�O� �	"�	"�	"�	"�	"rc���|�t|jj��d��|�t	|jj��d��|�t|jj��d��|�|jjd��|�t|jj��d��|�|jjd��dS)Nl�rbl	������@)r%r[r*rGrFr-�	prefixlenr0r
s r�testGetNetmaskzIpaddrUnitTest.testGetNetmask:s�������T�.�6�7�7��D�D�D�����T�.�6�7�7��I�I�I�����T�.�6�7�7�@�	B�	B�	B�����*�4�b�9�9�9�����T�5�=�>�>�@�	B�	B�	B�����1�;�R�@�@�@�@�@rc��tjd��}|�t|jj��d��|�|�d��d��tjd��}|�t|jj��d��|�|�d��d��tjd��}|�t|jj��d��|�|�d��d��dS)N�	1.2.3.4/0r�0z::1/0z::1%scope/0)rr�r%r[r�rG�_prefix_from_prefix_stringr�)r�ipv4_zero_netmask�ipv6_zero_netmask�ipv6_scoped_zero_netmasks    r�testZeroNetmaskzIpaddrUnitTest.testZeroNetmaskDs��%�3�K�@�@������.�6�>�?�?��C�C�C����*�E�E�c�J�J�A�N�N�N�%�3�G�<�<������.�6�>�?�?��C�C�C����*�E�E�c�J�J�A�N�N�N�#,�#:�=�#I�#I� �����5�=�E�F�F��J�J�J����1�L�L�S�Q�Q�ST�U�U�U�U�Urc�d�tjd��}|�|jd��dS)Nz127.0.0.0/0.0.0.255r^)rr�r%ry�rrIs  r�testIPv4NetzIpaddrUnitTest.testIPv4NetQs1���#�$9�:�:��������+�+�+�+�+rc�"�|�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)r%r[r*�broadcast_addressrFr-r0r
s r�testGetBroadcastzIpaddrUnitTest.testGetBroadcastUs������T�.�@�A�A�8�L�L�L�����T�.�@�A�A�;�O�O�O�����T�.�@�A�A�?�	A�	A�	A�����T�.�@�A�A�@�	B�	B�	B�	
����T�5�G�H�H�?�	A�	A�	A�����T�5�G�H�H�@�	B�	B�	B�	B�	Brc���|�|jjjd��|�|jjjd��|�|jjjd��dS)Nr^rx)r%r)r�ryr,r/r
s r�testGetPrefixlenzIpaddrUnitTest.testGetPrefixlencse������,�4�>��C�C�C�����,�4�>��C�C�C�����3�;�E�r�J�J�J�J�Jrc���|�|j���jd��|�t	|j���j��d��|�t
jd��j���t
j	d����|�|j
���jd��|�t	|j
���j��d��|�t
jd��j���t
jd����|�|j
���jd��|�t	|j
���j��d��dS)N�z1.2.2.0�	0.0.0.0/0�?rYz::0/0)r%r*�supernetryrFr\rr�r�r�r-r�r�r0r
s r�testGetSupernetzIpaddrUnitTest.testGetSuperneths�������*�3�3�5�5�?��D�D�D�����T�.�7�7�9�9�I�J�J�"�	$�	$�	$�����#�K�0�0�8�A�A�C�C��!�+�.�.�	0�	0�	0�	
����*�3�3�5�5�?��D�D�D�����T�.�7�7�9�9�I�J�J�.�	0�	0�	0�����0��9�9�A�J�J�L�L�"�.�w�7�7�	9�	9�	9�����1�:�:�<�<�F��K�K�K�����T�5�>�>�@�@�P�Q�Q�.�	0�	0�	0�	0�	0rc��|�|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)Nrt�z1.2.0.0�=z2001:658:22a:caf8::)r%r*r�ryrFr\r-r0r
s r�testGetSupernet3zIpaddrUnitTest.testGetSupernet3ys7������*�3�3�A�6�6�@�"�E�E�E�����T�.�7�7��:�:�J�K�K�"�	$�	$�	$�	
����*�3�3�A�6�6�@�"�E�E�E�����T�.�7�7��:�:�J�K�K�.�	0�	0�	0�����1�:�:�1�=�=�G��L�L�L�����T�5�>�>�q�A�A�Q�R�R�.�	0�	0�	0�	0�	0rc��|�t|jjdd���|�t|jjd���|�|j�d���|j�d�����|�t|jjdd���|�t|jjd���|�|j�d���|j�d	�����|�t|jjdd���|�t|jjd���|�|j�d���|j�d	�����dS)
Nr�r?��prefixlen_diff�
new_prefix��r��r���A�>)r@r�r*r�r%r-r0r
s r�testGetSupernet4zIpaddrUnitTest.testGetSupernet4�s������*�d�&7�&@�)*�q�	�	:�	:�	:����*�d�&7�&@�%'�	�	)�	)�	)�����*�3�3�1�3�E�E��*�3�3�r�3�B�B�	D�	D�	D�	
���*�d�&7�&@�)*�q�	�	:�	:�	:����*�d�&7�&@�%'�	�	)�	)�	)�����*�3�3�1�3�E�E��*�3�3�r�3�B�B�	D�	D�	D����*�d�&>�&G�)*�q�	�	:�	:�	:����*�d�&>�&G�%'�	�	)�	)�	)�����1�:�:�!�:�L�L��1�:�:�b�:�I�I�	K�	K�	K�	K�	Krc�d
�t|j�����}|�dt	|����|�tjd��|d��|�tjd��|d��tjd��}t|�����}|�dt	|����|�tjd��|d��|�tjd	��|d��tjd
��}t|�����}|�dt	|����|�tjd��|d��|�tjd	��|d��tjd��tjd��g}d
}d}|�|ttj	|���������|�|ttj	|���������|�ttj	|�������ttj	|���������tjd��g}d}d}|�|ttj	|���������|�|ttj	|���������|�ttj	|�������ttj	|���������tjd��tjd��g}d}d}|�|ttj	|���������|�|ttj	|���������|�ttj	|�������ttj	|���������tjd��g}d}d}|�|ttj	|���������|�|ttj	|���������|�ttj	|�������ttj	|���������dS)N�z1.2.3.1rz	1.2.3.254rf�2001:658:22a:cafe::/120rF�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-rC)r-rdrYz2001:658:22a:cafe::/127)rY��2001:658:22a:cafe::1/128)r�r�)
rPr*�hostsr%�lenrr�r�rr�)rr�r-r0�addrs�str_args�tpl_argss       r�	testHostszIpaddrUnitTest.testHosts�sv���T�&�,�,�.�.�/�/������c�%�j�j�)�)�)�����.�y�9�9�5��8�D�D�D�����.�{�;�;�U�2�Y�G�G�G� �,�-F�G�G���\�'�'�)�)�*�*������c�%�j�j�)�)�)�����.�/E�F�F��a��Q�Q�Q�����.�/F�G�G��r��S�S�S�'�3�4S�T�T���(�.�.�0�0�1�1������c�%�j�j�)�)�)�����.�/E�F�F��a��Q�Q�Q�����.�/F�G�G��r��S�S�S��&�y�1�1��&�y�1�1�3����"�������Y�%9�(�%C�%C�%I�%I�%K�%K� L� L�M�M�M������Y�%9�(�%C�%C�%I�%I�%K�%K� L� L�M�M�M�����i�2�8�<�<�B�B�D�D�E�E��i�2�8�<�<�B�B�D�D�E�E�	G�	G�	G��&�y�1�1�2����"�������Y�%9�(�%C�%C�%I�%I�%K�%K� L� L�M�M�M������Y�%9�(�%C�%C�%I�%I�%K�%K� L� L�M�M�M�����i�2�8�<�<�B�B�D�D�E�E��i�2�8�<�<�B�B�D�D�E�E�	G�	G�	G��&�'<�=�=��&�'=�>�>�@��,��/�������Y�%9�(�%C�%C�%I�%I�%K�%K� L� L�M�M�M������Y�%9�(�%C�%C�%I�%I�%K�%K� L� L�M�M�M�����i�2�8�<�<�B�B�D�D�E�E��i�2�8�<�<�B�B�D�D�E�E�	G�	G�	G��&�'=�>�>�A��-��0�������Y�%9�(�%C�%C�%I�%I�%K�%K� L� L�M�M�M������Y�%9�(�%C�%C�%I�%I�%K�%K� L� L�M�M�M�����i�2�8�<�<�B�B�D�D�E�E��i�2�8�<�<�B�B�D�D�E�E�	G�	G�	G�	G�	Grc��|�t|j�d�����t|j�d�������|�t
t|j�d�����|�t
t|j�dd�����|�t|j�d�����t|j�d�������|�t
t|j�d	�����|�t
t|j�dd�����|�t|j�d�����t|j�d�������|�t
t|j�d	�����|�t
t|j�dd�����dS)
Nrtr��r�r�r�r`�Dr�)	r%rr*�subnetsr@r�rPr-r0r
s r�testFancySubnettingz"IpaddrUnitTest.testFancySubnetting�s�������� 1� 9� 9�� 9� K� K�L�L��� 1� 9� 9�R� 9� H� H�I�I�	K�	K�	K����*�d��+�3�3�r�3�B�B�	D�	D�	D����*�d��+�3�3�1�>@�4�B�B�	C�	C�	C�	
����� 1� 9� 9�� 9� K� K�L�L��� 1� 9� 9�R� 9� H� H�I�I�	K�	K�	K����*�d��+�3�3�r�3�B�B�	D�	D�	D����*�d��+�3�3�1�>@�4�B�B�	C�	C�	C�	
����� 8� @� @�PQ� @� R� R�S�S��� 8� @� @�B� @� O� O�P�P�	R�	R�	R����*�d��2�:�:�b�:�I�I�	K�	K�	K����*�d��2�:�:�!�FH�;�J�J�	K�	K�	K�	K�	Krc���|�t|j�����djd��|�tt|j�����dj��d��|�tt|j�����dj��d��|�t|j�����djd��|�t|j�����djd��dS)Nrr�rXr?z	1.2.3.128r�)	r%rPr*r�ryrFr\r-r0r
s r�testGetSubnetszIpaddrUnitTest.testGetSubnets�sP������d�/�7�7�9�9�:�:�1�=�G��L�L�L�����T��%�-�-�/�/�1�1�12�4�4C�E�E�"�	$�	$�	$�	
����T��%�-�-�/�/�1�1�12�4�4C�E�E�$�	&�	&�	&�	
����d�/�7�7�9�9�:�:�1�=�G��L�L�L�����d�6�>�>�@�@�A�A�!�D�N�PR�S�S�S�S�Src��tjd��}d�|���D��}d�|�d��D��}|�|dg��|�||��dS)NrCc�,�g|]}t|����Sr0�rF��.0rPs  r�
<listcomp>z;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>����1�1�1�q�C��F�F�1�1�1rc�,�g|]}t|����Sr0r�r�s  rr�z;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>����2�2�2�q�C��F�F�2�2�2rr�)rr�r�r%)rr9�subnets1�subnets2s    r�testGetSubnetForSingle32z'IpaddrUnitTest.testGetSubnetForSingle32�s~��
�
"�<�
0�
0��1�1�B�J�J�L�L�1�1�1��2�2�B�J�J�q�M�M�2�2�2������L�>�2�2�2�����8�,�,�,�,�,rc��tjd��}d�|���D��}d�|�d��D��}|�|dg��|�||��tjd��}d�|���D��}d�|�d��D��}|�|dg��|�||��dS)Nr�c�,�g|]}t|����Sr0r�r�s  rr�z<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>�r�rc�,�g|]}t|����Sr0r�r�s  rr�z<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>�r�rr�r�c�,�g|]}t|����Sr0r�r�s  rr�z<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>s��8�8�8�q�C��F�F�8�8�8rc�,�g|]}t|����Sr0r�r�s  rr�z<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>s��9�9�9�q�C��F�F�9�9�9r)rr�r�r%)rr9r�r�rCs     r�testGetSubnetForSingle128z(IpaddrUnitTest.testGetSubnetForSingle128�s���
�
"�9�
-�
-��1�1�B�J�J�L�L�1�1�1��2�2�B�J�J�q�M�M�2�2�2������I�;�/�/�/�����8�,�,�,��)�/�:�:�	�8�8�I�$5�$5�$7�$7�8�8�8��9�9�I�$5�$5�a�$8�$8�9�9�9������O�#4�5�5�5�����8�,�,�,�,�,rc��d�|j�d��D��}|�|gd���d�|j�d��D��}|�|gd���dS)Nc�,�g|]}t|����Sr0r�r�s  rr�z.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>s��<�<�<�!�s�1�v�v�<�<�<rr�)z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26c�,�g|]}t|����Sr0r�r�s  rr�z.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>
s��>�>�>�A��Q���>�>�>r)�2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r*r�r%r-)r�ips�ipsv6s   r�testSubnet2zIpaddrUnitTest.testSubnet2s���<�<�t�0�8�8��;�;�<�<�<������I�I�I�	K�	K�	K�?�>��!2�!:�!:�1�!=�!=�>�>�>������
,�
,�
,�	-�	-�	-�	-�	-rc�@�d�|j�d��D��}|�|dd�gd���|�|dd�gd���|�t|��d��t	jd��}d	�|�d��D��}|�|dd�gd
���|�|dd�gd���|�t|��d��dS)Nc�,�g|]}t|����Sr0r�r�s  rr�z2IpaddrUnitTest.testGetSubnets3.<locals>.<listcomp>s��@�@�@�a�3�q�6�6�@�@�@r�rt)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/32rGr�c�,�g|]}t|����Sr0r�r�s  rr�z2IpaddrUnitTest.testGetSubnets3.<locals>.<listcomp>s��;�;�;�a�3�q�6�6�;�;�;r)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)r*r�r%r�rr�)rr�r-s   r�testGetSubnets3zIpaddrUnitTest.testGetSubnets3sR��@�@�4�#4�#<�#<�Q�#?�#?�@�@�@�������!���6�6�6�	8�	8�	8���������<�<�<�	>�	>�	>�����W���s�+�+�+� �,�-F�G�G��;�;�<�#7�#7��#:�#:�;�;�;�������!���
)�
)�
)�	*�	*�	*�	
��������
*�
*�
*�	+�	+�	+�	
����W���s�+�+�+�+�+rc���|�tt|jj�d����|�tt|j�d����|�tt|jj�d����|�tt|j�d����|�tt|j	j�d����|�tt|j
�d����dS)N�	r��r@r�rPr)r�r�r*r,r-r/r0r
s r�testSubnetFailsForLargeCidrDiffz.IpaddrUnitTest.testSubnetFailsForLargeCidrDiff)sC�����*�d��-�5�=�=�a�@�@�	B�	B�	B����*�d��+�3�3�A�6�6�	8�	8�	8����*�d��-�5�=�=�b�A�A�	C�	C�	C����*�d��+�3�3�B�7�7�	9�	9�	9����*�d��4�<�D�D�R�H�H�	J�	J�	J����*�d��2�:�:�2�>�>�	@�	@�	@�	@�	@rc��|�t|jjjd��|�t|jjjd��|�t|jjjd��dS)Nr�r�)r@r�r)r�r�r,r/r
s r�!testSupernetFailsForLargeCidrDiffz0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff7s������*��-�5�>��	D�	D�	D����*��-�5�>��	D�	D�	D����*��4�<�E�r�	K�	K�	K�	K�	Krc���|�tt|jj�d����|�tt|j�d����|�tt|jj�d����|�tt|j�d����|�tt|j	j�d����|�tt|j
�d����dS)Nrfr�r
s r�"testSubnetFailsForNegativeCidrDiffz1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiff?sC�����*�d��-�5�=�=�b�A�A�	C�	C�	C����*�d��+�3�3�B�7�7�	9�	9�	9����*�d��-�5�=�=�b�A�A�	C�	C�	C����*�d��+�3�3�B�7�7�	9�	9�	9����*�d��4�<�D�D�R�H�H�	J�	J�	J����*�d��2�:�:�2�>�>�	@�	@�	@�	@�	@rc��|�|jjd��|�t|j�����djd��|�|j���jd��|�|jjd��|�t|j�����djd��|�|j���jd��|�|jjd��|�t|j�����djd��|�|j���jd��dS)NrGrr�i�ll )r%r*�
num_addressesrPr�r�r-r0r
s r�testGetNum_Addressesz#IpaddrUnitTest.testGetNum_AddressesMs�������*�8�#�>�>�>�����d�/�7�7�9�9�:�:�1�=�K��	�	�	�����*�3�3�5�5�C�S�I�I�I�����*�8�:N�O�O�O�����d�/�7�7�9�9�:�:�1�=�K�,�	.�	.�	.�����*�3�3�5�5�C�-�	/�	/�	/�����1�?�AU�V�V�V�����d�6�>�>�@�@�A�A�!�D�R�,�	.�	.�	.�����1�:�:�<�<�J�-�	/�	/�	/�	/�	/rc��|�tjd��|j��|�tjd��|j��tjd��}|�||j��|�tjd���tjd������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)	rrr�r*rr�r�r��__contains__)r�addr1s  r�testContainszIpaddrUnitTest.testContains^s����
�
�i�-�n�=�=��'�	)�	)�	)�����0��>�>��*�	,�	,�	,��%�j�1�1���
�
�e�T�.�/�/�/�	
����.�|�<�<�I�I��%�l�3�3�5�5�	6�	6�	6�	6�	6rc��|�t|jd��d��|�t|jjd��|�t|jd��d��|�t|jjd��|�t|jd��d��|�t|jjd��dS)Nru�1.2.3.5rGz2001:658:22a:cafe::5r�)r%rFr*r@�
IndexError�__getitem__r-r0r
s r�testNthzIpaddrUnitTest.testNthks�������T�.�q�1�2�2�I�>�>�>����*�d�&7�&C�S�I�I�I�����T�.�q�1�2�2�/�	1�	1�	1����*�d�&7�&C�W�M�M�M�����T�5�a�8�9�9�/�	1�	1�	1����*�d�&>�&J�G�T�T�T�T�Trc��tjd��}|�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.143rf)rr�r%ryrPrF)rrO�	addr_lists   r�testGetitemzIpaddrUnitTest.testGetitemvs����$�%E�F�F������T�^�,�,�,���J�J�	����)�3�y��|�+<�+<�=�=�=����)�3�t�A�w�<�<�8�8�8����)�3�y��}�+=�+=�>�>�>����)�3�t�B�x�=�=�9�9�9�����2���R��1�1�1�1�1rc��|�|jtjd��k��|�|jtjd��k��|�|jtjd��k��|�|jtjd��k��|�|jdk��|�|jgk��|�|jdk��|�|jtjd��k��|�|jtjd��k��|�|jtjd��k��|�|jdk��|�|jgk��|�|jdk��|�|jtjd	��k��|�|jtjd
��k��|�|jtjd��k��|�|jtjd��k��|�|jtjd��k��|�|jdk��|�|jgk��|�|jdk��dS)Nr#�
1.2.3.4/23�::1.2.3.4/24�::1.2.3.4%scope/24r5r��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)rr)rr�r�r�r,r/r
s r�	testEqualzIpaddrUnitTest.testEqual�sn������+�!�/��=�=�>�	?�	?�	?�����,�"�0��>�>�?�	@�	@�	@�����,�"�0��@�@�A�	B�	B�	B�����,�"�0�1E�F�F�G�	H�	H�	H�����,��2�3�3�3�����,��2�3�3�3�����,��1�2�2�2�����+��#�$A�B�B�C�	D�	D�	D�����,��#�$A�B�B�C�	D�	D�	D�����,�"�0��>�>�?�	@�	@�	@�����,��2�3�3�3�����,��2�3�3�3�����,��1�2�2�2�����2��#�$G�H�H�I�	J�	J�	J�����3��#�$G�H�H�I�	J�	J�	J�����3��#�$A�B�B�C�	D�	D�	D�����3��#�$A�B�B�C�	D�	D�	D�����3�"�0��>�>�?�	@�	@�	@�����3�r�9�:�:�:�����3�r�9�:�:�:�����3�q�8�9�9�9�9�9rc��	�|�|jtjd��k��|�|jtjd��k��|�|jtjd��k��|�|jtjd��k��|�|jdk��|�|jgk��|�|jdk��|�|jtjd��k��|�|jdk��|�|jgk��|�|jdk��|�|jtjd��k��|�|jtjd	��k��|�|jtjd��k��|�|jdk��|�|jgk��|�|jdk��|�|j	tjd
��k��|�|j	dk��|�|j	gk��|�|j	dk��|�|j
tjd��k��|�|j
tjd��k��|�|j
tjd��k��|�|j
tjd	��k��|�|j
tjd��k��|�|j
dk��|�|j
gk��|�|j
dk��|�|jtjd
��k��|�|jdk��|�|jgk��|�|jdk��dS)
Nr#r�r�r�r5r�r�r�r�r-r�r�)r�r)rr�rr�r(r�r,r+r/r.r
s r�testNotEqualzIpaddrUnitTest.testNotEqual�s�������,�"�0��>�>�?�	@�	@�	@�����+�!�/��=�=�>�	?�	?�	?�����+�!�/��?�?�@�	A�	A�	A�����+�!�/�0D�E�E�F�	G�	G�	G�����+�r�1�2�2�2�����+�r�1�2�2�2�����+�q�0�1�1�1�����)�"�.�y�9�9�:�	;�	;�	;�����)�R�/�0�0�0�����)�R�/�0�0�0�����)�Q�.�/�/�/�����,��#�$A�B�B�C�	D�	D�	D�����+��#�$A�B�B�C�	D�	D�	D�����+�!�/��=�=�>�	?�	?�	?�����+�r�1�2�2�2�����+�r�1�2�2�2�����+�q�0�1�1�1�����)�!�-�i�8�8�9�	:�	:�	:�����)�R�/�0�0�0�����)�R�/�0�0�0�����)�Q�.�/�/�/�����3��#�$G�H�H�I�	J�	J�	J�����2��#�$G�H�H�I�	J�	J�	J�����2��#�$A�B�B�C�	D�	D�	D�����2��#�$A�B�B�C�	D�	D�	D�����2�!�/��=�=�>�	?�	?�	?�����2�b�8�9�9�9�����2�b�8�9�9�9�����2�a�7�8�8�8�����0�!�-�i�8�8�9�	:�	:�	:�����0�B�6�7�7�7�����0�B�6�7�7�7�����0�A�5�6�6�6�6�6rc�p�|�ttjd����d��dS)Nz1.2.3.4/255.255.255.255rC�r%rFrr�r
s r�testSlash32Constructorz%IpaddrUnitTest.testSlash32Constructor�sE������Y�4�-�/�/�0�0�1=�	?�	?�	?�	?�	?rc���|�ttjd����d��|�ttjd����d��dS)Nr�r�)r%rFrr�r
s r�testSlash128Constructorz&IpaddrUnitTest.testSlash128Constructor�sl������Y�4�Y�?�?�@�@�"+�	-�	-�	-�����Y�4�_�E�E�F�F�"1�	3�	3�	3�	3�	3rc�p�|�ttjd����d��dS)Nz1.2.3.4/0.0.0.0r|r�r
s r�testSlash0Constructorz$IpaddrUnitTest.testSlash0Constructor�s=������Y�4�5F�G�G�H�H�%�	'�	'�	'�	'�	'rc��tjd��}tjd��}tjd��}tjd��}tjd��}tjd��}tj||||||g��}|�t	|��tjd��tjd��g��tjd��}tjd��}tjd��}tjd��}tj||||g��}|�t	|��tjd��g��tjd��}tjd	��}tjd
��}tjd��}tjd��}tjd
��}tj||||||g��}|�t	|��tjd
��tjd��g��tj||g��}|�t	|��tjd��g��tjd��x}}	|�t	tj||	g����|g��tjd��x}}	|�t	tj||	g����tjd��g��tjd��}tjd��}tjd��}tj|||g��}|�t	|��|g��tjd��}tjd��}tjd��}tj|||g��}|�t	|��|g��tjd��tjd��ftjd��tjd��ftjd��tjd��fg}
|
D]-\}}|�	ttj||g���.tjd��tjd��ftjd��tjd��ftjd��tjd��fg}
|
D]-\}}|�	ttj||g���.dS)N�1.1.1.0rt�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/96r�z
1.1.0.0/32z
2001::/128r�z2001::%scope/128)rr��collapse_addressesr%rPr�r�r�r�r@rA)rrSrTrU�ip4�ip5�ip6�	collapsed�ip_same1�ip_same2�addr_tupless           r�testCollapsingzIpaddrUnitTest.testCollapsing�sW���#�I�.�.���#�I�.�.���#�I�.�.���#�I�.�.���#�I�.�.���#�I�.�.���0�
�#�s�C��c�*�,�,�	�����i����&�|�4�4��&�|�4�4�6�	7�	7�	7�
�#�I�.�.���#�I�.�.���#�I�.�.���#�I�.�.���0�#�s�C��1E�F�F�	�����i���#�/��=�=�>�	@�	@�	@��#�L�1�1���#�L�1�1���#�L�1�1���#�L�1�1���#�L�1�1���#�L�1�1���0�#�s�C��c�58�2:�;�;�	�����i���#�/��=�=�#�/��=�=�?�	@�	@�	@�
�0�#�s��<�<�	�����i���#�/��=�=�>�	@�	@�	@�(�3�L�A�A�A��8�����i�:��x�(�*�*�+�+�"��	%�	%�	%�
(�3�I�>�>�>��8�����i�:��x�(�*�*�+�+�#�.�|�<�<�=�	?�	?�	?��#�L�1�1���#�L�1�1���#�K�0�0���0�#�s�C��A�A�	�����i���3�%�0�0�0��#�$6�7�7���#�$6�7�7���#�$5�6�6���0�#�s�C��A�A�	�����i���3�%�0�0�0��%�i�0�0��%�e�,�,�.��&�|�4�4��&�|�4�4�6��&�|�4�4��&�|�4�4�6�
��$�	*�	*�H�C�����i��)E�"�C�j�
*�
*�
*�
*��%�i�0�0��%�k�2�2�4��&�|�4�4��&�'9�:�:�<��&�|�4�4��&�'9�:�:�<�
��$�	*�	*�H�C�����i��)E�"�C�j�
*�
*�
*�
*�	*�	*rc
�"
�tj}tjd��}tjd��}Gd�dtj��}|d��}|d��}|�t
t|||����|�tt||tjd������|�tt||tjd������|�t
|||����dtj	d����tjd	��}|�t
|||����tj	d
��tj	d	��g��tj
d��}tj
tj
j��}|�tjd��gt
|||������tjd��}tjd
��}|�t
|||����dtj	d����tjd��}|�t
|||����tj	d��tj	d��g��tjd��}tjd��}|�t
|||����dtj	d����tjd��}|�t
|||����tj	d��tj	d��g��|�t
t|tjd��tjd������|�tt|tj	d��tj	d������|�tt|tj	d��tj	d������|�tt|tjd��tj	d������dS)Nrz	1.1.1.255c�$�eZdZed���ZdS)�3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addressc��dS)N�r0r
s rrcz;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.versionVs���qrN)r*r+r,r-rcr0rr�IPv7AddressrUs-������
�
�
��X�
�
�
rrr�r�rrz1.1.1.8z
1.1.1.0/29r�r�z$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{)
r�summarize_address_ranger�rr@r�rPrAr%r�r��	_ALL_ONESr�)r�	summarizerSrTr�ip_invalid1�ip_invalid2s       r�testSummarizingzIpaddrUnitTest.testSummarizingMs����5�	��"�9�-�-���"�;�/�/��	�	�	�	�	�)�/�	�	�	�"�k�%�(�(��!�k�%�(�(�����*�d�#�)�K��=�=�	?�	?�	?�	
���)�T�#�)�C��)>�u�)E�)E�F�F�	H�	H�	H����)�T�#�)�C��)>�{�)K�)K�L�L�	N�	N�	N�	
����i�i��S�1�1�2�2�1�5�"�-�l�;�;�	=�	=�	=��"�9�-�-������i�i��S�1�1�2�2�#�.�|�<�<�#�.�y�9�9�;�	<�	<�	<��#�A�&�&���#�I�$9�$C�D�D�����)�/��<�<�=��i�i��S�1�1�2�2�	4�	4�	4��"�5�)�)���"�#I�J�J������i�i��S�1�1�2�2�1�5�"�-�h�7�7�	9�	9�	9��"�5�)�)������i�i��S�1�1�2�2�#�.�x�8�8�#�.�y�9�9�;�	<�	<�	<��"�;�/�/���"�#O�P�P������i�i��S�1�1�2�2�1�5�"�-�h�7�7�	9�	9�	9��"�;�/�/������i�i��S�1�1�2�2�#�.�x�8�8�#�.�y�9�9�;�	<�	<�	<�
	
���*�d�#�)�I�$8��$C�$C�$-�$8��$C�$C�E�E�	F�	F�	F�	
���)�T�#�)�I�$8��$C�$C�$-�$8��$C�$C�E�E�	F�	F�	F�	
���)�T�#�)�I�$8��$C�$C�$-�$8��$C�$C�E�E�	F�	F�	F�	
���)�T�#�)�I�$8��$>�$>�$-�$8��$C�$C�E�E�	F�	F�	F�	F�	Frc���|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��dS)Nrtrr��::2r�r�)rrr�r
s r�testAddressComparisonz$IpaddrUnitTest.testAddressComparison�sP�����	�,�Y�7�7�!�,�Y�7�7�8�	9�	9�	9����	�,�Y�7�7�!�,�Y�7�7�8�	9�	9�	9����	�,�U�3�3�!�,�U�3�3�4�	5�	5�	5����	�,�U�3�3�!�,�U�3�3�4�	5�	5�	5����	�,�[�9�9�!�,�[�9�9�:�	;�	;�	;����	�,�[�9�9�!�,�[�9�9�:�	;�	;�	;�	;�	;rc��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd	��tjd	��k��|�tjd	��tjd
��k��|�tjd	��tjd��k��|�tjd��tjd	��k��|�tjd
��tjd	��k��|�tjd��tjd	��k��|�tjd	��tjd��k��|�tjd	��tjd��k��|�tjd	��tjd��k��|�tjd	��tjd��k��|�tjd��tjd��k��|�tjd
��tjd��k��|�tjd��tjd��k��|�tjd	��tjd��k��|�tjd��tjd	��k��|�tjd��tjd
��k��|�tjd��tjd��k��|�tjd��tjd	��k��|�tjd��tjd	��k��|�tjd��tjd	��k��|�tjd��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/48z::1%scope/64z::1%scope/80z::2%scope/64z::2%scope/48)rrr�r�r
s r�testInterfaceComparisonz&IpaddrUnitTest.testInterfaceComparison�s������	�.�|�<�<�!�.�|�<�<�=�	>�	>�	>����	�.�|�<�<�!�.�|�<�<�=�	>�	>�	>����	�.�|�<�<�!�.�|�<�<�=�	>�	>�	>����	�.�|�<�<�!�.�|�<�<�=�	>�	>�	>����	�.�|�<�<�!�.�|�<�<�=�	>�	>�	>����	�.�|�<�<�!�.�|�<�<�=�	>�	>�	>����	�.�|�<�<�!�.�|�<�<�=�	>�	>�	>�	
���	�.�x�8�8�!�.�x�8�8�9�	:�	:�	:����	�.�x�8�8�!�.�x�8�8�9�	:�	:�	:����	�.�x�8�8�!�.�x�8�8�9�	:�	:�	:����	�.�x�8�8�!�.�x�8�8�9�	:�	:�	:����	�.�x�8�8�!�.�x�8�8�9�	:�	:�	:����	�.�x�8�8�!�.�x�8�8�9�	:�	:�	:����	�.�x�8�8�!�.�x�8�8�9�	:�	:�	:�	
���	�.�~�>�>�!�.�~�>�>�?�	@�	@�	@����	�.�~�>�>�!�.�~�>�>�?�	@�	@�	@����	�.�~�>�>�!�.�~�>�>�?�	@�	@�	@����	�.�~�>�>�!�.�~�>�>�?�	@�	@�	@����	�.�~�>�>�!�.�~�>�>�?�	@�	@�	@����	�.�~�>�>�!�.�~�>�>�?�	@�	@�	@����	�.�~�>�>�!�.�~�>�>�?�	@�	@�	@�	
����/��?�?�!�.�x�8�8�9�	:�	:�	:����	�.�~�>�>�!�.�x�8�8�9�	:�	:�	:����	�.�~�>�>�!�.�x�8�8�9�	:�	:�	:����	�.�~�>�>�!�.�x�8�8�9�	:�	:�	:����	�.�~�>�>�!�.�x�8�8�9�	:�	:�	:����	�.�~�>�>�!�.�x�8�8�9�	:�	:�	:����	�.�~�>�>�!�.�x�8�8�9�	:�	:�	:�	
����/��9�9�!�.�~�>�>�?�	@�	@�	@����	�.�x�8�8�!�.�~�>�>�?�	@�	@�	@����	�.�x�8�8�!�.�~�>�>�?�	@�	@�	@����	�.�x�8�8�!�.�~�>�>�?�	@�	@�	@����	�.�x�8�8�!�.�~�>�>�?�	@�	@�	@����	�.�x�8�8�!�.�~�>�>�?�	@�	@�	@����	�.�x�8�8�!�.�~�>�>�?�	@�	@�	@�	@�	@rc��tjd��}tjd��}tjd��}|�||k��|�||k��|�|�|��d��|�|�|��d��|�|�|��d��|�|�|��d��|�|�|��d��|�|���|���k��tjd��}tjd��}tjd	��}|�||k��|�||k��|�|�|��d��|�|���|���k��|�t|j	j|j
��tjd
��}tjd��}|�t|j
|��|�t|j|��|�t|j
|��|�t|j|��tjd��}|�||k��|�||k��tjd
��}|�||k��|�||k��|�||k��|�||k��tjd��}|�||k��|�||k��|�||k��|�||k��tjd��}tjd��}tjd��}tjd��}||||g}||||g}|���|�||��||||g}|���|�||��|�|�
tjd����t(��|�|�
tjd����t(��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��|�tjd��tjd��k��dS)Nrz
1.1.1.0/32rrrfr?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.2rtrr�r)rr�rr%�compare_networks�_get_networks_keyr�r@rAr*r-r�r�rrr�r��sort�assertIsr�r�)	rrSrTrUrerdrr�unsorteds	         r�testNetworkComparisonz$IpaddrUnitTest.testNetworkComparison�s0���#�L�1�1���#�L�1�1���#�L�1�1������c�	�"�"�"�����c�	�"�"�"�����-�-�c�2�2�A�6�6�6�	
����-�-�c�2�2�B�7�7�7�����-�-�c�2�2�A�6�6�6�����-�-�c�2�2�B�7�7�7�����-�-�c�2�2�A�6�6�6�����-�-�/�/�#�2G�2G�2I�2I�I�J�J�J��#�$4�5�5���#�$4�5�5���#�$9�:�:������c�	�"�"�"�����c�	�"�"�"�����-�-�c�2�2�B�7�7�7�����-�-�/�/�#�2G�2G�2I�2I�I�J�J�J�	
���)��+�<��+�	-�	-�	-��&�v�.�.���&�{�3�3�����)�T�[�$�7�7�7����)�T�[�$�7�7�7����)�T�[�$�7�7�7����)�T�[�$�7�7�7��"�?�3�3������s��#�#�#�����s��#�#�#��"�=�1�1������c�	�"�"�"�����s��#�#�#�����s��#�#�#�����c�	�"�"�"��"�=�1�1������c�	�"�"�"�����s��#�#�#�����s��#�#�#�����c�	�"�"�"��"�?�3�3���"�<�0�0���"�?�3�3���"�<�0�0���s�C��%����c�3�'���
�
���������*�*�*���c�3�'���
�
���������*�*�*��
�
�c�j�j��!5�l�!C�!C�D�D�$�	&�	&�	&��
�
�c�j�j��!5�l�!C�!C�D�D�$�	&�	&�	&�	
���	�,�Y�7�7�!�,�Y�7�7�8�	9�	9�	9����	�,�Y�7�7�!�,�Y�7�7�8�	9�	9�	9�����-�i�8�8�!�,�Y�7�7�8�	9�	9�	9�	
���	�,�U�3�3�!�,�U�3�3�4�	5�	5�	5����	�,�U�3�3�!�,�U�3�3�4�	5�	5�	5�����-�e�4�4�"�-�e�4�4�5�	6�	6�	6�	6�	6rc���|�ttjd��|�ttjd��|�ttjd��dS)Nz192.168.1.1/24z::1/120z
::1%scope/120)r@r�rr�r
s r�testStrictNetworksz!IpaddrUnitTest.testStrictNetworksHsZ�����*�i�&:�<L�M�M�M����*�i�&:�I�F�F�F����*�i�&:�O�L�L�L�L�Lrc��tjd��}tjd��}tjd��}|�|j�|����|�|j�|����|�|�|����dS)Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)rr�rr*�overlapsr�)rr��other2�other3s    r�testOverlapszIpaddrUnitTest.testOverlapsMs����%�l�3�3���&�|�4�4���&�}�5�5������)�2�2�5�9�9�:�:�:�����*�3�3�F�;�;�<�<�<��������/�/�0�0�0�0�0rc��d}tj|��}tjd|z��}|�t	|j��t	|j����tjd|z��}|�|j|j��|�tjtjd��dS)Nr]z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	rr�r�r%r[r9r�r@r)r�ipv4_stringrd�
v4compat_ipv6�
v4mapped_ipv6s     r�testEmbeddedIpv4zIpaddrUnitTest.testEmbeddedIpv4Us���#���&�{�3�3��!�/���0D�E�E�
�����]�-�.�.��D�G���=�=�=�!�/��k�0I�J�J�
����M�,�d�g�6�6�6����)�5�y�7N�0�	2�	2�	2�	2�	2rc��|�tjd��tjd����|�tjd��tjd����|�tjd��tjd����|�tjd��tjd����|�tjd��tjd����|�tjd��tjd����|�tjd��tjd����|�tjd��tjd����dS)	Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scope)r%rr�r�r
s r�testIPv6AddressTooLargez&IpaddrUnitTest.testIPv6AddressTooLarge`s�������-�.@�A�A�#�.�/@�A�A�	C�	C�	C�	
����-�.?�@�@�#�.�/?�@�@�	B�	B�	B�	
����-�.F�G�G�#�.�/F�G�G�	I�	I�	I�����-�.E�F�F�#�.�/E�F�F�	H�	H�	H����I�0�1I�J�J�%�0�1B�C�C�	E�	E�	E����I�0�1H�I�I�%�0�1A�B�B�	D�	D�	D����I�0�1C�D�D�#�.�/F�G�G�	I�	I�	I����I�0�1B�C�C�#�.�/E�F�F�	H�	H�	H�	H�	Hrc���|�|jjd��|�|jjd��|�|jjd��dS)Nr`ra)r%r(rcr+r.r
s r�
testIPVersionzIpaddrUnitTest.testIPVersionus\������*�2�A�6�6�6�����*�2�A�6�6�6�����1�9�1�=�=�=�=�=rc���|�|jjd��|�|jjd��|�|jjd��dS)Nrdr�)r%r)�
max_prefixlenr,r/r
s r�testMaxPrefixLengthz"IpaddrUnitTest.testMaxPrefixLengthzs\������,�:�B�?�?�?�����,�:�C�@�@�@�����3�A�3�G�G�G�G�Grc��|�|jjd��|�tjd��jd��|�|jjd��|�tjd��jd��|�tjd��jd��|�|jjd��|�tjd	��jd��|�tjd
��jd��dS)NrBrjrkrlrmrnz::1:0:0:0:0szffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)r%r(�packedrr�r+r�r.r
s r�
testPackedzIpaddrUnitTest.testPackedsh������*�1�,�	.�	.�	.�����0�1B�C�C�J�,�	.�	.�	.�����*�1�=�	>�	>�	>�	
����0�1D�E�E�L�*�	+�	+�	+�	
����0��?�?�F�@�	B�	B�	B�����1�8�=�	>�	>�	>�	
����0�1J�K�K�R�*�	+�	+�	+�	
����0�1D�E�E�L�@�	B�	B�	B�	B�	Brc��tjd��}tjd��}tjd��}tjd��}|�tjt|����|�tjt|����|�tjt|����|�tjt|����dS)Nr-rX)	rr�r�r%r�rr�r�r)r�ipv4net�ipv4addr�ipv6net�ipv6addrs     r�
testIpTypezIpaddrUnitTest.testIpType�s����&�y�1�1���'�	�2�2���&�{�3�3���'��4�4������.��W�
�
�>�>�>�����.��X���?�?�?�����.��W�
�
�>�>�>�����.��X���?�?�?�?�?rc�
�|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd	��j��|�dtjd
��j��|�dtjd��j��|�dtjd��j��|�dtjd
��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j	��|�dtjd��j��|�dtjd��j	��|�dtj
d��j��|�dtj
d��j��|�dtj
d��j��|�dtj
d��j��|�dtj
d��j��|�dtj
d��j��|�dtj
d��j��|�dtj
d��j��|�dtj
d��j��|�dtj
d	��j��|�dtj
d
��j��|�dtj
d��j��|�dtj
d��j��|�tj
d��j	��|�
tj
d��j	��|�dtj
d��j��|�dtj
d��j��|�dtj
d��j��|�dtjd��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/24r[z	224.1.1.1z	240.0.0.1z239.255.255.255�192.168.1.1z169.254.100.200z169.255.100.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)r%rr��is_multicastr��is_reserved�
is_private�
is_link_local�is_loopback�	is_globalr��is_unspecifiedrr�r
s r�testReservedIpv4zIpaddrUnitTest.testReservedIpv4�s\������y�5��  �  � ,�	.�	.�	.�����	� 4�[� A� A� N�O�O�O�����y�3�K�@�@�L�M�M�M�����y�5� � "� "�",�	.�	.�	.�����	� 4�]� C� C� N�O�O�O�����y�3� � "� "�",�	.�	.�	.�����	� 4�Z� @� @� K�L�L�L�����	� 4�Z� @� @� L�M�M�M�����y�3� � "� "�",�	.�	.�	.�����	� 4�\� B� B� M�N�N�N�����"�-�.>�?�?�M�	O�	O�	O�	
����#�0�2�4�4�4A�	C�	C�	C�	
����#�0�2�4�4�4A�	C�	C�	C�	
����#�.�2�4�4�4?�	A�	A�	A�	
����y�3�� !� !�!,�	.�	.�	.�����	� 4�[� A� A� M�N�N�N�����"�-�o�>�>�I�	K�	K�	K�����	� 4�_� E� E� O�P�P�P�����"�-�.>�?�?�J�	L�	L�	L�����"�-�n�=�=�G�	I�	I�	I�	
����y�3�I�>�>�M�N�N�N�����y�3�K�@�@�M�N�N�N�����	� 4�[� A� A� N�O�O�O�����y�3�K�@�@�L�M�M�M�����"�-�.?�@�@�L�	N�	N�	N�	
����y�3�M�B�B�M�N�N�N�����	� 4�]� C� C� N�O�O�O�����y�3� � "� "�",�	.�	.�	.�����	� 4�Z� @� @� K�L�L�L�����y�3� � "� "�",�	.�	.�	.�����	� 4�\� B� B� M�N�N�N�����"�-�.?�@�@�N�	P�	P�	P�����"�-�.?�@�@�N�	P�	P�	P�	
���	�,�[�9�9�C�D�D�D�����-�m�<�<�F�G�G�G�����#�.�/@�A�A�M�	O�	O�	O�����y�3�L�A�A�M�N�N�N�����	� 4�[� A� A� M�N�N�N�����y�3�I�>�>�M�N�N�N�N�Nrc��	�|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd	��j��|�dtjd
��j��|�dtjd��j��|�dtjd��j��|�dtjd
��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��dS)NFr�z	1.0.0.0/8Tz	0.0.0.0/8z
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z
172.16.0.0/12z192.0.0.0/29z192.0.0.170/31r_z192.168.0.0/16z
198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32r"z::ff/128r��::/128z
::ffff:0:0/96z100::/64z	2001::/23z2001:2::/48r�z2001:10::/28zfc00::/7z	fe80::/10)r%rr�rIr
s r�testPrivateNetworksz"IpaddrUnitTest.testPrivateNetworks�s�������	� 4�[� A� A� L�M�M�M�����	� 4�[� A� A� L�M�M�M�����y�3�K�@�@�K�L�L�L�����y�3�L�A�A�L�M�M�M�����y�3�M�B�B�M�N�N�N�����y�3�4D�E�E�P�Q�Q�Q�����y�3�O�D�D�O�P�P�P�����y�3�N�C�C�N�O�O�O�����y�3�4D�E�E�P�Q�Q�Q�����y�3�N�C�C�N�O�O�O�����y�3�4D�E�E�P�Q�Q�Q�����y�3�O�D�D�O�P�P�P�����y�3�4E�F�F�Q�R�R�R�����y�3�4D�E�E�P�Q�Q�Q�����y�3�M�B�B�M�N�N�N�����y�3�4H�I�I�T�U�U�U�����	� 4�V� <� <� G�H�H�H�����	� 4�Z� @� @� K�L�L�L�����y�3�I�>�>�I�J�J�J�����y�3�H�=�=�H�I�I�I�����y�3�O�D�D�O�P�P�P�����y�3�J�?�?�J�K�K�K�����y�3�K�@�@�K�L�L�L�����y�3�M�B�B�M�N�N�N�����y�3�O�D�D�O�P�P�P�����y�3�N�C�C�N�O�O�O�����y�3�J�?�?�J�K�K�K�����y�3�K�@�@�K�L�L�L�L�Lrc��|�dtjd��j��|�dtjddzdz
��j��|�dtjd��j��|�dtjd��j��|�dtjd	��j��|�dtjd
��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd
��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j	��|�dtjd��j	��|�dtjd��j	��|�dtjd��j��|�dtjd��j
��|�dtjd��j��|�dtjddzdz
��j��|�dtjd��j��|�dtjd��j��|�dtjd	��j��|�dtjd
��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd
��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j��|�dtjd��j	��|�dtjd��j	��|�dtjd��j��|�dtjd��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::0r�z::/127z2001::1/128z
200::1/128z100::z4000::1/128)
r%rr�rG�
is_site_localrIrJr�rKrMrLr�rHr
s r�testReservedIpv6zIpaddrUnitTest.testReservedIpv6		s^������y�3�H�=�=�J�K�K�K�����y�3�A�s�F�Q�J�?�?�L�M�M�M�����y�3�H�=�=�J�K�K�K�����	� 4�X� >� >� K�L�L�L�����y�3�H�=�=�K�L�L�L�����y�3�'� )� )�)6�	8�	8�	8�����	� 4��!�!�+�	-�	-�	-�����	� 4�X� >� >� L�M�M�M�����y�3�H�=�=�H�I�I�I�����y�3�'� )� )�)3�	5�	5�	5�����	� 4�]� C� C� N�O�O�O�����	� 4�X� >� >� I�J�J�J�����y�3�H�=�=�K�L�L�L�����y�3�� � �,�	.�	.�	.�����	� 4��!�!�,�	.�	.�	.�����	� 4�X� >� >� L�M�M�M�����y�5�k�B�B�N�O�O�O�����	� 6�y� A� A� M�N�N�N�����	� 4�T� :� :� F�G�G�G�����	� 4�U� ;� ;� G�H�H�H�����y�3�F�;�;�J�K�K�K�����	� 4�U� ;� ;� J�K�K�K�����	� 4�X� >� >� M�N�N�N�����"�-�m�<�<�G�	I�	I�	I�����"�-�l�;�;�E�	G�	G�	G�	
����y�3�H�=�=�J�K�K�K�����y�3�A�s�F�Q�J�?�?�L�M�M�M�����y�3�H�=�=�J�K�K�K�����	� 4�X� >� >� K�L�L�L�����y�3�H�=�=�K�L�L�L�����y�3�'� )� )�)6�	8�	8�	8�����	� 4��!�!�+�	-�	-�	-�����	� 4�X� >� >� L�M�M�M�����y�3�H�=�=�H�I�I�I�����y�3�'� )� )�)3�	5�	5�	5�����	� 4�]� C� C� N�O�O�O�����	� 4�X� >� >� I�J�J�J�����y�3�H�=�=�K�L�L�L�����y�3�� � �,�	.�	.�	.�����	� 4��!�!�,�	.�	.�	.�����	� 4�X� >� >� L�M�M�M�����y�3�K�@�@�L�M�M�M�����y�3�E�:�:�F�G�G�G�����	� 4�U� ;� ;� G�H�H�H�����y�3�F�;�;�J�K�K�K�����	� 4�U� ;� ;� J�K�K�K�	
����y�3�G�<�<�H�I�I�I�����y�3�M�B�B�N�O�O�O�O�Orc�\�|�tjd��jtjd����|�tjd��jd��|�tjd��jtjd����dS)N�::ffff:192.168.1.1rFz
::c0a8:101z::ffff:c0a8:101)r%rr��ipv4_mappedr
s r�testIpv4MappedzIpaddrUnitTest.testIpv4MappedV	s�������$�%9�:�:�F��$�]�3�3�	5�	5�	5�	
����-�l�;�;�G��N�N�N�����-�.?�@�@�L�"�-�m�<�<�	>�	>�	>�	>�	>rc��|�dtjd��j��|�dtjd��j��dS)NTrVFz::ffff:172.32.0.0)r%rr�rIr
s r�testIpv4MappedPrivateCheckz)IpaddrUnitTest.testIpv4MappedPrivateCheck^	sl������i�*�+?�@�@�K�	M�	M�	M�����y�+�,?�@�@�K�	M�	M�	M�	M�	Mrc
�"�tjd��}tjd��}tjd��}tjd��}tjd��}tjd��}|�t	t|�|������tjd��tjd��g��|�tt
|�|����|�tt
|�|����|�tt
|�|����|�t|�|����g��|�t	t|�|������tjd	��tjd
��tjd��tjd��tjd
��tjd��tjd��tjd��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)
rr�r�r%rrP�address_excluder@r�rA�rr��addr2�addr3�addr4�addr5�addr6s       r�testAddrExcludezIpaddrUnitTest.testAddrExcluded	s���$�]�3�3���$�]�3�3���$�]�3�3���$�Z�0�0���$�%5�6�6���$�]�3�3�������U�%:�%:�5�%A�%A� B� B�C�C�#�.�~�>�>�#�.��?�?�A�	B�	B�	B�	
���*�d�E�,A�,A�%�,H�,H�I�I�I����)�T�5�+@�+@��+G�+G�H�H�H����)�T�5�+@�+@��+G�+G�H�H�H�����e�3�3�E�:�:�;�;�R�@�@�@������U�%:�%:�5�%A�%A� B� B�C�C�#�.�}�=�=�#�.�}�=�=�#�.�}�=�=�#�.�}�=�=�#�.�~�>�>�#�.�~�>�>�#�.�~�>�>�#�.��?�?�A�	B�	B�	B�	B�	Brc���|�ttjd����ttjd������|�ttjd����ttjd������|�ttjd����ttjd������|�ttjd����ttjt
tjd��j��������tjd��}tjd��}i}d||j<d||j	<d||<d||<|�
|j|��|�
||��dS)Nr\r]r-r�)r%�hashrr�r�r�r[rbr(r+r)rrSrT�dummys    r�testHashzIpaddrUnitTest.testHash|	s�������i�4�]�C�C�D�D��i�4�]�C�C�D�D�	F�	F�	F�����i�2�=�A�A�B�B��i�2�=�A�A�B�B�	D�	D�	D�����i�2�:�>�>�?�?��i�2�:�>�>�?�?�	A�	A�	A�	
����i�2�9�=�=�>�>��i�2��	�,�Y�7�7�;�<�<�>�>�?�?�	@�	@�	@��"�:�.�.���"�5�)�)����#'��d�� �#'��d�� ���c�
���c�
��
�
�d�'��/�/�/��
�
�c�5�!�!�!�!�!rc��|j}|�d|j��|j}|�t
|jddzdz��dS)Nr$r�r�r?)r*r%�
compressedr-r@r��_string_from_ip_intr�s  r�testIPBaseszIpaddrUnitTest.testIPBases�	sS���������s�~�6�6�6�������*�c�&=�q�#�v��z�J�J�J�J�Jrc��|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)r-r%�with_prefixlen�with_netmask�
with_hostmaskrFr�s  r�testIPv6NetworkHelpersz%IpaddrUnitTest.testIPv6NetworkHelpers�	s���������1�3�3E�F�F�F����D��)�	+�	+�	+����D��*�	,�	,�	,����1�3�s�8�8�<�<�<�<�<rc��|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)r*r%rorprqrFr�s  r�testIPv4NetworkHelpersz%IpaddrUnitTest.testIPv4NetworkHelpers�	sy���������s�'9�:�:�:����0�#�2B�C�C�C����,�c�.?�@�@�@�����s�3�x�x�0�0�0�0�0rc���tjd��}tj|��}tjd��}tj|��}tjd��}tjd��}|�||��|�||��|�|tj|����|�|tj|����dS)Nr\r�rtrq)rr�r�r�rr%r_s       r�testCopyConstructorz"IpaddrUnitTest.testCopyConstructor�	s����$�]�3�3���$�U�+�+���&�'D�E�E���&�u�-�-���%�i�0�0���%�&@�A�A�������&�&�&������&�&�&�����	� 5�e� <� <�=�=�=�����	� 5�e� <� <�=�=�=�=�=rc	�0�idd�dd�dd�dd�d	d
�dd�d
d�dd�dd�dd�dd�dd�dd�dd�dd�dd �d!d"�d#d$i�}t|�����D]:\}}|�|tt	j|�������;dS)%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:0rPz0:0:0:0:0:0:0:0/0r"z0:0:0:0:0:0:0:1r�z*2001:0658:022a:cafe:0000:0000:0000:0000/66r�rXz
::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)rP�itemsr%rFrr�)r�test_addresses�uncompressedrks    r�testCompressIPv6Addressz&IpaddrUnitTest.testCompressIPv6Address�	sa����4�� �"5��
!�"7��
!�":�	�

!�"3��
!�"6�
�
!�"4��
�1��
�x��
 ���
�y��
9�$��
���
%�&B�� 
�4�!�"
�4�#�$
�4�%�&
�4�'���*)-�^�-A�-A�-C�-C�(D�(D�	 �	 �$�L�*����Z��Y�-D��.�.�*�*�
 �
 �
 �
 �	 �	 rc���tjd��}tjd��}tjd��}tjd��}|�d|j��|�dtjd��j��|�d|j��|�d	|j��|�d|j��dS)
Nz2001::1�2001:0:5ef5:79fd:0:59d:a0e5:ba1rz
192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128r�z'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)rr�rr�r�r%�exploded)rr�r`rarbs     r�testExplodeShortHandIpStrz(IpaddrUnitTest.testExplodeShortHandIpStr�	s����'�	�2�2���%�&G�H�H���%�k�2�2���%�o�6�6�����F���	)�	)�	)����F�"�0��;�;�D�	F�	F�	F�	
���B���	)�	)�	)����E���	)�	)�	)�����%�.�9�9�9�9�9rc���tjd��}tjd��}|�d|j��|�d|j��dS)Nz	127.0.0.1r@z1.0.0.127.in-addr.arpazH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa)rr�rr%�reverse_pointer)rr�r`s   r�testReversePointerz!IpaddrUnitTest.testReversePointer�	si���%�k�2�2���%�m�4�4�����1�5�3H�I�I�I����2��.�	0�	0�	0�	0�	0rc��|�dt|j����|�dt|j����dS)NrAr_)r%r[r(r+r
s r�testIntRepresentationz$IpaddrUnitTest.testIntRepresentation�	sV������3�t�'8�#9�#9�:�:�:����?��T�.�/�/�	1�	1�	1�	1�	1rc��|�tjd��jd��|�tjd��jd��dS)Nr?r`ra)r%rr�rcr�r
s r�testForceVersionzIpaddrUnitTest.testForceVersion�	sP������-�a�0�0�8�!�<�<�<�����.�q�1�1�9�1�=�=�=�=�=rc��|�|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)r%r)rorprqr,r
s r�testWithStarzIpaddrUnitTest.testWithStar�	s�������,�;�\�J�J�J�����,�9�0�	2�	2�	2�����,�:�,�	.�	.�	.�	
����,�;�6�	8�	8�	8�����,�9�I�	K�	K�	K�	
����,�:�I�	K�	K�	K�	K�	Krc���|�d|jj��|�d|jj��|�|jjtjd����|�|jjtjd����|�d|jj��|�d|jj��|�d|j	j��|�d|j	j��|�|j	j
tjd����|�|jj
j
tjd����|�|j	jtjd����|�|j	jtjd����|�|jj
jtjd����|�|jj
jtjd����|�d|j	j��|�d|j	j��|�d|jj
j��|�d|jj
j��dS)Nr�rHr�z	0.0.0.255rYr�rZ)rr*�__dict__r%r�rr�rHrr-r\rr,r�r
s r�testNetworkElementCachingz(IpaddrUnitTest.testNetworkElementCaching�	s������,�d�.?�.H�I�I�I�����T�%6�%?�@�@�@�	
����*�<�"�.�{�;�;�	=�	=�	=�����*�3�"�.�{�;�;�	=�	=�	=�	
�
�
�)�4�+<�+E�F�F�F��
�
�j�$�"3�"<�=�=�=�	
���,�d�.?�.H�I�I�I�����T�%6�%?�@�@�@�	
����*�:�"�.�/D�E�E�	G�	G�	G�����,�4�D�"�.�/D�E�E�	G�	G�	G�	
�����/��!�"I�J�J�	L�	L�	L�	
����*�3�"�.�/F�G�G�	I�	I�	I������'�9��!�"I�J�J�	L�	L�	L�	
����,�4�=�"�.�/F�G�G�	I�	I�	I�	
�
�
�)�4�+<�+E�F�F�F��
�
�j�$�"3�"<�=�=�=��
�
�)�4�+>�+F�+O�P�P�P��
�
�j�$�"5�"=�"F�G�G�G�G�Grc��tjd��}tjd��}d}|�||ftj|��j��d}|�tj|��j��d}|�tj|��j��tjd��}|�tjd��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:fdd2r}z94.245.121.253z95.26.244.94)rr�r%r��teredor�r)r�server�client�teredo_addr�bad_addrs     r�
testTeredozIpaddrUnitTest.testTeredo)
s���&��7�7���&�|�4�4��?�����&�&�)�"�-�k�:�:�A�	C�	C�	C�8������-�h�7�7�>�?�?�?�<������-�h�7�7�>�?�?�?� �+�,M�N�N�����)�/�0@�A�A�#�/��?�?�A�$�+�	-�	-�	-�	-�	-rc���tjd��}tjd��}|�tjd��|j��|�|j��dS)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z
172.29.45.100)rr�r%r��	sixtofourr�)r�
sixtofouraddrr�s   r�
testsixtofourzIpaddrUnitTest.testsixtofour;
sl��!�,�-@�A�A�
��'�(;�<�<������.��?�?�&�0�	2�	2�	2�����+�,�,�,�,�,rc���tjd��}tjd��}|�|���|�����dS)Nr-z2.3.4.5)rr�r��__hash__)r�
ipv4_address1�
ipv4_address2s   r�testV4HashIsNotConstantz&IpaddrUnitTest.testV4HashIsNotConstantC
sV��!�/�	�:�:�
�!�/�	�:�:�
����M�2�2�4�4�m�6L�6L�6N�6N�O�O�O�O�Orc���tjd��}tjd��}|�|���|�����dS)Nr%z2001:658:22a:cafe:200:0:0:2)rr�r�r�)r�
ipv6_address1�
ipv6_address2s   r�testV6HashIsNotConstantz&IpaddrUnitTest.testV6HashIsNotConstantI
sX��!�/�0M�N�N�
�!�/�0M�N�N�
����M�2�2�4�4�m�6L�6L�6N�6N�O�O�O�O�OrN)Mr*r+r,r1r3r:rDrHrNrVr]rhrorrrvrzr�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 r(r*r/r4r6r8r;r>rDrNrQrTrXrZrerirmrrrtrvr{rr�r�r�r�r�r�r�r�r�r0rrr!r!s�������Y�Y�Y� E�E�E�DE�DE�DE�N@C�@C�@C�F@�@�@�5�5�5�O�O�O�2�2�2�"���00�0�0� 5�5�5�"�"�"�A�A�A�V�V�V�,�,�,�B�B�B�K�K�K�
0�0�0�"
0�
0�
0�K�K�K�*4G�4G�4G�lK�K�K�.
T�
T�
T�-�-�-�-�-�-�-�-�-�,�,�,�(@�@�@�K�K�K�@�@�@�/�/�/�"6�6�6�	U�	U�	U�	2�	2�	2�#:�#:�#:�J57�57�57�n?�?�?�3�3�3�'�'�'�`*�`*�`*�DGF�GF�GF�R;�;�;�K@�K@�K@�ZU6�U6�U6�nM�M�M�
1�1�1�2�2�2�H�H�H�*>�>�>�
H�H�H�
B�B�B�,@�@�@�GO�GO�GO�RM�M�M�BKP�KP�KP�Z>�>�>�M�M�M�B�B�B�0"�"�"�*K�K�K�=�=�=�1�1�1�>�>�>� � � �4:�:�:� 0�0�0�1�1�1�
>�>�>�K�K�K� (H�(H�(H�T-�-�-�$-�-�-�P�P�P�P�P�P�P�Prr!�__main__)r��unittestr9r.rBrJrr��test.supportrr�TestCaserr2rTryr�r�r>r�r�r�r�r�r�r�r!r*�mainr0rr�<module>r�sv��%�$�����	�	�	�	���������
�
�
�
���������*�*�*�*�*�*�*�*�3?�3?�3?�3?�3?�8�$�3?�3?�3?�l'�'�'�'�'�'�'�'�2.�.�.�.�.��.�.�.�b/"�/"�/"�/"�/"��/"�/"�/"�bm/�m/�m/�m/�m/��'9�m/�m/�m/�`r6�r6�r6�r6�r6��'9�r6�r6�r6�jV&�V&�V&�V&�V&�,�V&�V&�V&�r&�&�&�&�&�<�)<�&�&�&�36�36�36�36�36��':�36�36�36�lf1�f1�f1�f1�f1�,�f1�f1�f1�R&�&�&�&�&�<�)<�&�&�&�,0�,0�,0�,0�,0��':�,0�,0�,0�^A�A�A�A�A�L�A�A�A�&rA�rA�rA�rA�rA�h�'�rA�rA�rA�jnP�nP�nP�nP�nP�X�&�nP�nP�nP�b1�z����H�M�O�O�O�O�O��r