a
    "hI                    @   s^  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 G dd de j
ZG dd dZG dd deZG d	d
 d
eZG dd deeZG dd deeZG dd deZG dd deeZG dd deeZG dd deZG dd deeZG dd deeZG dd deZG dd de j
ZG dd  d e j
Zed!krZe   dS )"    N)LARGESTSMALLESTc                   @   s>   e Zd Zedd Zejdd Zdd Zdd Z	d	d
 Z
dS )BaseTestCasec                 C   s   t d S N)NotImplementedErrorself r	   ;/opt/python-3.9.21/usr/lib/python3.9/test/test_ipaddress.pyfactory$   s    zBaseTestCase.factoryc                 g   s`   |r|| }|  ||}|}|V  W d    n1 s80    Y  |jjd ur\| |jj d S r   )ZassertRaisesRegex	exception__context__
assertTrue__suppress_context__)r   exc_typedetailsargscmexcr	   r	   r
   assertCleanError(   s    $zBaseTestCase.assertCleanErrorc                 G   s   | j tj|g|R  S r   )r   	ipaddressAddressValueErrorr   r   r   r	   r	   r
   assertAddressError8   s
    zBaseTestCase.assertAddressErrorc                 G   s   | j tj|g|R  S r   )r   r   NetmaskValueErrorr   r	   r	   r
   assertNetmaskError=   s
    zBaseTestCase.assertNetmaskErrorc                 C   s   |  | || | d S r   )assertEqualr   r   lhsrhsr	   r	   r
   assertInstancesEqualB   s    z!BaseTestCase.assertInstancesEqualN)__name__
__module____qualname__propertyr   
contextlibcontextmanagerr   r   r   r    r	   r	   r	   r
   r      s   

r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CommonTestMixinc                 C   s8   |  d | d W d    n1 s*0    Y  d S )NAddress cannot be empty r   r   r   r	   r	   r
   test_empty_addressI   s    z"CommonTestMixin.test_empty_addressc                 C   sB   |  ttd | d W d    n1 s40    Y  d S )Nz1.0g      ?)r   reescapereprr   r   r	   r	   r
   test_floats_rejectedM   s    z$CommonTestMixin.test_floats_rejectedc                 C   sB   |  ttj| d |  tt| d |  tt| d d S )N   )assertRaises	TypeErroroperatorindexr   hexbytesr   r	   r	   r
   test_not_an_index_issue15559Q   s    z,CommonTestMixin.test_not_an_index_issue15559c              	   C   sl   t tjd D ]X}| j|d8 | |}tt||}| || W d    q1 s\0    Y  qd S )Nr0   )proto)rangepickleHIGHEST_PROTOCOLsubTestr   loadsdumpsr   )r   addrr8   xyr	   r	   r
   pickle_testX   s
    
zCommonTestMixin.pickle_testN)r!   r"   r#   r+   r/   r7   rB   r	   r	   r	   r
   r'   G   s   r'   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )CommonTestMixin_v4c              
   C   sz   d}g d}|D ]d}| j |dD | | | | W d    n1 sL0    Y  W d    q1 sj0    Y  qd S )Nz(Leading zeros are not permitted in '\d+')	z000.000.000.000192.168.000.001z016.016.016.016rD   z001.000.008.016z	01.2.3.40z	1.02.3.40z	1.2.03.40z	1.2.3.040)address)r<   r   r   )r   msg	addressesrE   r	   r	   r
   test_leading_zerosb   s    z%CommonTestMixin_v4.test_leading_zerosc                 C   s   |  dd |  dd d S )Nr   0.0.0.0    P 192.168.0.1r    r   r	   r	   r
   test_intu   s    zCommonTestMixin_v4.test_intc                 C   s(   |  tdd |  tdd d S )N00000000rI   c0a80001rK   )r    r6   fromhexr   r	   r	   r
   test_packedy   s    zCommonTestMixin_v4.test_packedc                 C   sB   d}|  t| | d W d    n1 s40    Y  d S )Nz,-1 (< 0) is not permitted as an IPv4 addressr   r,   r-   r   r   rF   r	   r	   r
   test_negative_ints_rejected}   s    z.CommonTestMixin_v4.test_negative_ints_rejectedc                 C   sF   d}|  t|d  | d W d    n1 s80    Y  d S )Nz1%d (>= 2**32) is not permitted as an IPv4 addressl        rS   rT   r	   r	   r
   test_large_ints_rejected   s    z+CommonTestMixin_v4.test_large_ints_rejectedc                    s     fdd}|d |d d S )Nc                    sR   d|  }d}  t||| f   | W d    n1 sD0    Y  d S )N    z4%r (len %d != 4) is not permitted as an IPv4 addressrS   lengthr?   rF   r   r	   r
   assertBadLength   s    zBCommonTestMixin_v4.test_bad_packed_length.<locals>.assertBadLength      r	   r   rZ   r	   r   r
   test_bad_packed_length   s    z)CommonTestMixin_v4.test_bad_packed_lengthN)	r!   r"   r#   rH   rM   rQ   rU   rV   r^   r	   r	   r	   r
   rC   `   s   rC   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )CommonTestMixin_v6c                 C   s   |  dd |  dd d S )Nz
0000::0000::z000::c0a8:0001::c0a8:1rL   r   r	   r	   r
   rH      s    z%CommonTestMixin_v6.test_leading_zerosc                 C   s   |  dd |  dd d S )Nr   r`   rJ   ra   rL   r   r	   r	   r
   rM      s    zCommonTestMixin_v6.test_intc                 C   sR   dt d }| |d dt d }| |d t dd }| |d d S )Ns               rN   r`   rO   ra   zc0a8:1::)r6   rP   r    r   r?   r	   r	   r
   rQ      s    zCommonTestMixin_v6.test_packedc                 C   sB   d}|  t| | d W d    n1 s40    Y  d S )Nz,-1 (< 0) is not permitted as an IPv6 addressrR   rS   rT   r	   r	   r
   rU      s    z.CommonTestMixin_v6.test_negative_ints_rejectedc                 C   sN   d}|  t|dd   | dd  W d    n1 s@0    Y  d S )Nz2%d (>= 2**128) is not permitted as an IPv6 address      rS   rT   r	   r	   r
   rV      s    z+CommonTestMixin_v6.test_large_ints_rejectedc                    s     fdd}|d |d d S )Nc                    s\   d|  }d}  t||| f $  |  | W d    n1 sN0    Y  d S )NrW   z5%r (len %d != 16) is not permitted as an IPv6 addressrS   rX   r   r	   r
   rZ      s
    
zBCommonTestMixin_v6.test_bad_packed_length.<locals>.assertBadLength      r	   r]   r	   r   r
   r^      s    z)CommonTestMixin_v6.test_bad_packed_lengthc                 C   s>   d}|  d| | | W d    n1 s00    Y  d S )Nz::1%Invalid IPv6 address: "%r"r*   r   rE   r	   r	   r
   test_blank_scope_id   s    z&CommonTestMixin_v6.test_blank_scope_idc                 C   s>   d}|  d| | | W d    n1 s00    Y  d S )Nz
::1%scope%rg   r*   rh   r	   r	   r
   "test_invalid_scope_id_with_percent   s    z5CommonTestMixin_v6.test_invalid_scope_id_with_percentN)r!   r"   r#   rH   rM   rQ   rU   rV   r^   ri   rj   r	   r	   r	   r
   r_      s   r_   c                   @   sZ   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd ZdS )AddressTestCase_v4c                 C   s6   t d}g d}|D ]\}}| |t|| qd S )N1.2.3.42))b 00000001000000100000001100101010)nrn   )r@   Z0102032a)XZ0102032A)_b'0000_0001_0000_0010_0000_0011_0010_1010)_nrr   )_xZ	0102_032a)_XZ	0102_032A)#b"0b00000001000000100000001100101010)#nrw   )#xZ
0x0102032a)#XZ
0X0102032A)#_b)0b0000_0001_0000_0010_0000_0011_0010_1010)#_nr|   )#_xZ0x0102_032a)#_XZ0X0102_032A)srl   )r)   rl   )r   IPv4Addressr   format)r   Zv4Zv4_pairsfmttxtr	   r	   r
   test_format   s    
zAddressTestCase_v4.test_formatc                 C   s>   d}|  d| t| W d    n1 s00    Y  d S )Nz127.0.0.1/24Unexpected '/' in %rr   r   r   rb   r	   r	   r
   test_network_passed_as_address   s    z1AddressTestCase_v4.test_network_passed_as_addressc                    s    fdd}|d |d |d |d |d |d |d	 |d
 |d |d |d |d |d |d |d |d |d |d |d |d |d |d |d d S )Nc                    s:     d|  t|  W d    n1 s,0    Y  d S )NzExpected 4 octets in %rr   r?   r   r	   r
   assertBadSplit   s    zAAddressTestCase_v4.test_bad_address_split.<locals>.assertBadSplitz127.0.1z42.42.42.42.42z42.42.42z42.42Z42z42..42.42.42z42.42.42.42.z42.42.42.42...z.42.42.42.42z...42.42.42.42z016.016.016z016.016Z016Z000z0x0a.0x0a.0x0az	0x0a.0x0a0x0a.bogusz	bogus.comZ1000Z1000000000000000z192.168.0.1.comr	   r   r   r	   r   r
   test_bad_address_split   s0    z)AddressTestCase_v4.test_bad_address_splitc                    s     fdd}|d |d d S )Nc                    s:     d|  t|  W d    n1 s,0    Y  d S )NzEmpty octet not permitted in %rr   r   r   r	   r
   assertBadOctet  s    z;AddressTestCase_v4.test_empty_octet.<locals>.assertBadOctetz	42..42.42z...r	   r   r   r	   r   r
   test_empty_octet  s    z#AddressTestCase_v4.test_empty_octetc                    sj    fdd}|dd |dd |dd |d	d
 |dd |dd |dd |dd |dd d S )Nc                    sJ   d|| f }  t| t|  W d    n1 s<0    Y  d S )Nz)Only decimal digits permitted in %r in %rr   r,   r-   r   r   r?   ZoctetrF   r   r	   r
   r     s    zBAddressTestCase_v4.test_invalid_characters.<locals>.assertBadOctetz0x0a.0x0a.0x0a.0x0ar   z0xa.0x0a.0x0a.0x0aZ0xaz42.42.42.-0-0z42.42.42.+0+0z42.42.42.-42z-42z
+1.+2.+3.4+1z	1.2.3.4e0Z4e0	1.2.3.4::z4::1.a.2.3ar	   r   r	   r   r
   test_invalid_characters
  s    







z*AddressTestCase_v4.test_invalid_charactersc                    s$    fdd}|dd |dd d S )Nc                    sJ   d}  t||| f  t|  W d    n1 s<0    Y  d S )Nz*At most 3 characters permitted in %r in %rr   r   r   r	   r
   r     s    z<AddressTestCase_v4.test_octet_length.<locals>.assertBadOctetz0000.000.000.000Z0000z12345.67899.-54321.-98765Z12345r	   r   r	   r   r
   test_octet_length  s    
z$AddressTestCase_v4.test_octet_lengthc                    s$    fdd}|dd |dd d S )Nc                    sJ   d|| f }  t| t|  W d    n1 s<0    Y  d S )Nz$Octet %d (> 255) not permitted in %rr   r   r   r	   r
   r   $  s    z;AddressTestCase_v4.test_octet_limit.<locals>.assertBadOctetz	257.0.0.0i  z192.168.0.999i  r	   r   r	   r   r
   test_octet_limit#  s    
z#AddressTestCase_v4.test_octet_limitc                 C   s   |  d d S N	192.0.2.1rB   r   r	   r	   r
   test_pickle,  s    zAddressTestCase_v4.test_picklec                 C   s   t | d d S r   weakrefrefr   r   r	   r	   r
   test_weakref/  s    zAddressTestCase_v4.test_weakrefN)r!   r"   r#   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   rk      s   			rk   c                   @   s   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )AddressTestCase_v6c                 C   s6   t d}g d}|D ]\}}| |t|| qd S )Nz
::1.2.3.42))rm   Z00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)ro    0000000000000000000000000102032a)r@   r   )rp   Z 0000000000000000000000000102032A)rq   Z0000_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)rs   '0000_0000_0000_0000_0000_0000_0102_032a)rt   r   )ru   Z'0000_0000_0000_0000_0000_0000_0102_032A)rv   Z0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)rx   "0x0000000000000000000000000102032a)ry   r   )rz   Z"0X0000000000000000000000000102032A)r{   Z0b0000_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   Z)0X0000_0000_0000_0000_0000_0000_0102_032A)r   	::102:32a)r)   r   )r   IPv6Addressr   r   )r   Zv6Zv6_pairsr   r   r	   r	   r
   r   6  s    
#zAddressTestCase_v6.test_formatc                    s     fdd}|d |d d S )Nc                    s>   d}  ||  t|  W d    n1 s00    Y  d S )Nr   )r   r   r   r?   rF   r   r	   r
   r   `  s    zIAddressTestCase_v6.test_network_passed_as_address.<locals>.assertBadSplitz::1/24z::1%scope_id/24r	   r   r	   r   r
   r   _  s    z1AddressTestCase_v6.test_network_passed_as_addressc                    s@    fdd}|d |d |d |d |d |d d S )	Nc                    sH   d}  || dd  t|  W d    n1 s:0    Y  d S )NzAt least 3 parts expected in %r%r   r   splitr   r   r   r   r	   r
   r   h  s    zUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts.<locals>.assertBadSplit:z:1z	FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper	   r   r	   r   r
   *test_bad_address_split_v6_not_enough_partsg  s    z=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsc                    s`    fdd}|d |d |d |d |d |d |d	 |d
 |d |d d S )Nc                    sH   d}  || dd  t|  W d    n1 s:0    Y  d S )Nz At most 8 colons permitted in %rr   r   r   r   r   r	   r
   r   u  s    zTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons.<locals>.assertBadSplitz9:8:7:6:5:4:3::2:1z10:9:8:7:6:5:4:3:2:1z::8:7:6:5:4:3:2:1z8:7:6:5:4:3:2:1::z10:9:8:7:6:5:4:3:42.42.42.42z9:8:7:6:5:4:3::2:1%scopez10:9:8:7:6:5:4:3:2:1%scopez::8:7:6:5:4:3:2:1%scopez8:7:6:5:4:3:2:1::%scopez"10:9:8:7:6:5:4:3:42.42.42.42%scoper	   r   r	   r   r
   )test_bad_address_split_v6_too_many_colonst  s    z<AddressTestCase_v6.test_bad_address_split_v6_too_many_colonsc                    s`    fdd}|d |d |d |d |d |d |d	 |d
 |d |d d S )Nc                    sH   d}  || dd  t|  W d    n1 s:0    Y  d S )Nz+Exactly 8 parts expected without '::' in %rr   r   r   r   r   r	   r
   r     s    zSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts.<locals>.assertBadSplitz3ffe:0:0:0:0:0:0:0:1z9:8:7:6:5:4:3:2:1z7:6:5:4:3:2:1z9:8:7:6:5:4:3:42.42.42.42z7:6:5:4:3:42.42.42.42z3ffe:0:0:0:0:0:0:0:1%scopez9:8:7:6:5:4:3:2:1%scopez7:6:5:4:3:2:1%scopez9:8:7:6:5:4:3:42.42.42.42%scopez7:6:5:4:3:42.42.42.42%scoper	   r   r	   r   r
   (test_bad_address_split_v6_too_many_parts  s    z;AddressTestCase_v6.test_bad_address_split_v6_too_many_partsc                    s     fdd}|d |d d S )Nc                    sH   d}  || dd  t|  W d    n1 s:0    Y  d S )Nz.Expected at most 7 other parts with '::' in %rr   r   r   r   r   r	   r
   r     s    zeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon.<locals>.assertBadSplitz1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper	   r   r	   r   r
   :test_bad_address_split_v6_too_many_parts_with_double_colon  s    zMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colonc                    s    fdd}|d |d |d |d |d |d |d	 |d
 |d |d |d |d |d |d |d |d |d |d |d |d d S )Nc                    sH   d}  || dd  t|  W d    n1 s:0    Y  d S )Nz At most one '::' permitted in %rr   r   r   r   r   r	   r
   r     s    zZAddressTestCase_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::1z3ffe::1::1:z:3ffe::1::1:z:::z2001:db8:::1z3ffe::1::1%scopez1::2::3::4:5%scopez2001::db:::1%scopez3ffe::1::%scopez::3ffe::1%scopez:3ffe::1::1%scopez3ffe::1::1:%scopez:3ffe::1::1:%scopez	:::%scopez2001:db8:::1%scoper	   r   r	   r   r
   /test_bad_address_split_v6_repeated_double_colon  s*    zBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colonc                    sP    fdd}|d |d |d |d |d |d |d	 |d
 d S )Nc                    sH   d}  || dd  t|  W d    n1 s:0    Y  d S )Nz0Leading ':' only permitted as part of '::' in %rr   r   r   r   r   r	   r
   r     s    zRAddressTestCase_v6.test_bad_address_split_v6_leading_colon.<locals>.assertBadSplitz:2001:db8::1z:1:2:3:4:5:6:7z:1:2:3:4:5:6:z:6:5:4:3:2:1::z:2001:db8::1%scopez:1:2:3:4:5:6:7%scopez:1:2:3:4:5:6:%scopez:6:5:4:3:2:1::%scoper	   r   r	   r   r
   'test_bad_address_split_v6_leading_colon  s    z:AddressTestCase_v6.test_bad_address_split_v6_leading_colonc                    sP    fdd}|d |d |d |d |d |d |d	 |d
 d S )Nc                    sH   d}  || dd  t|  W d    n1 s:0    Y  d S )Nz1Trailing ':' only permitted as part of '::' in %rr   r   r   r   r   r	   r
   r     s    zSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon.<locals>.assertBadSplitz2001:db8::1:z1:2:3:4:5:6:7:z
::1.2.3.4:z::7:6:5:4:3:2:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper	   r   r	   r   r
   (test_bad_address_split_v6_trailing_colon  s    z;AddressTestCase_v6.test_bad_address_split_v6_trailing_colonc                    st    fdd}|dd |dd |dd |d	d
 |dd |dd |dd |dd |dd
 |dd d S )Nc                    sF     d|| dd  t|  W d    n1 s80    Y  d S )Nz%s in %rr   r   r   )r?   Zv4_errorr   r	   r
   assertBadAddressPart  s    zDAddressTestCase_v6.test_bad_v4_part_in.<locals>.assertBadAddressPartz3ffe::1.netzExpected 4 octets in '1.net'z3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper	   )r   r   r	   r   r
   test_bad_v4_part_in  s6    

z&AddressTestCase_v6.test_bad_v4_part_inc                    s    fdd}|dd |dd |dd |d	d
 |dd |dd |dd |dd |dd |dd
 |dd |dd d S )Nc                    sT   d||  dd f } t| t|  W d    n1 sF0    Y  d S )Nz%Only hex digits permitted in %r in %rr   r   )r   r   r,   r-   r   r   r?   partrF   r   r	   r
   assertBadPart  s    zAAddressTestCase_v6.test_invalid_characters.<locals>.assertBadPartz
3ffe::googZgoogz3ffe::-0r   z3ffe::+0r   z3ffe::-1-1r   1.2.3.41234:axy::bZaxyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope1234:axy::b%scoper	   r   r   r	   r   r
   r     s    










z*AddressTestCase_v6.test_invalid_charactersc                    s`    fdd}|dd |dd |dd |d	d
 |dd |dd |dd |dd
 d S )Nc                    sJ   d}  ||| dd  t|  W d    n1 s<0    Y  d S )Nz*At most 4 characters permitted in %r in %rr   r   r   r   r   r	   r
   r     s    z:AddressTestCase_v6.test_part_length.<locals>.assertBadPartz::00000Z00000z3ffe::10000Z10000z02001:db8::Z02001z2001:888888::1Z888888z::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper	   r   r	   r   r
   test_part_length  s    






z#AddressTestCase_v6.test_part_lengthc                 C   s   |  d d S )N
2001:db8::r   r   r	   r	   r
   r      s    zAddressTestCase_v6.test_picklec                 C   s$   t | d t | d d S )Nr   2001:db8::%scoper   r   r	   r	   r
   r   #  s    zAddressTestCase_v6.test_weakrefN)r!   r"   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   3  s   )	r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )NetmaskTestMixin_v4c                 C   sL   dD ]B}|  |}| t|d | t|jd | t|jd qd S )N)r      
1.2.3.4/32255.255.255.255rI   r   r   strnetmaskhostmask)r   rE   netr	   r	   r
   test_no_mask+  s
    
z NetmaskTestMixin_v4.test_no_maskc                 C   s@   d}|  d|  | | W d    n1 s20    Y  d S )Nz1.2.3.4/32/24Only one '/' permitted in %rr*   rb   r	   r	   r
   test_split_netmask4  s    z&NetmaskTestMixin_v4.test_split_netmaskc                    s\    fdd}|dd |dd |dd |dd |d	d |d
d |dt d d S )Nc                    s8     |  |  W d    n1 s*0    Y  d S r   r*   r?   r   r   r	   r
   assertBadAddress:  s    zANetmaskTestMixin_v4.test_address_errors.<locals>.assertBadAddress/r(   /8r   zExpected 4 octets
google.com10/8	::1.2.3.4zOnly decimal digitsz	1.2.3.256z256 (> 255))r,   r-   r   r   r	   r   r
   test_address_errors9  s    





z'NetmaskTestMixin_v4.test_address_errorsc                 C   s   |  t| dd |  t| dd |  t| dd |  t| dd tddD ]}d| }| |}|  t|| |  t| d	|j | |  t| d
| | |dv rdd|  }|  t| d	|j | qbd S )N	192.0.2.0   192.0.2.0/24)r   Z24r   255.255.255.0z192.0.2.0/255.255.255.0r   !   z
0.0.0.0/%dz
0.0.0.0/%sz0.0.0.0/0%d)    r   r   )r   r   r   r9   r   r   )r   inet_strr   r	   r	   r
   test_valid_netmaskF  s*    
z&NetmaskTestMixin_v4.test_valid_netmaskc                    s    fdd}|dd |dd |dd |dd |dd |dd	 |dd
 |dd |dd |dd |dd |dd |dd |dd d S )Nc                    sN   d| }  t|"  d| |f  W d    n1 s@0    Y  d S N%r is not a valid netmaskz%s/%sr   r,   r-   r   r?   r   rF   r   r	   r
   assertBadNetmask_  s    zANetmaskTestMixin_v4.test_netmask_errors.<locals>.assertBadNetmaskr   r)   r   r    1 0x1Z33z254.254.255.256r   1.1.1.1z254.xyz.2.3z240.255.0.0z255.254.128.0z0.1.127.255puddingr`   r	   r   r   r	   r   r
   test_netmask_errors^  s    












z'NetmaskTestMixin_v4.test_netmask_errorsc                    s$    fdd}|dd |dd d S )Nc                    sJ   d| }  t|  | |f W d    n1 s<0    Y  d S Nr   r   r   r   r	   r
   r   t  s    zJNetmaskTestMixin_v4.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskr   rR   r   r	   r   r	   r   r
   test_netmask_in_tuple_errorss  s    
z0NetmaskTestMixin_v4.test_netmask_in_tuple_errorsc                 C   s"   |  d |  d |  d d S )Nz192.0.2.0/27z192.0.2.0/31r   r   r   r	   r	   r
   r   {  s    

zNetmaskTestMixin_v4.test_pickleN
r!   r"   r#   r   r   r   r   r   r   r   r	   r	   r	   r
   r   (  s   	r   c                   @   s   e Zd ZejZdS )InterfaceTestCase_v4N)r!   r"   r#   r   IPv4Interfacer   r	   r	   r	   r
   r     s   r   c                   @   s*   e Zd ZejZdd Zdd Zdd ZdS )NetworkTestCase_v4c                 C   st   |  | d| d | | d| d |  | d| d |  | d| d d S N10.0.0.0/30z10.0.1.0/24z10.0.0.0/24assertFalser   	subnet_ofr   r   r	   r	   r
   test_subnet_of  s(    



z!NetworkTestCase_v4.test_subnet_ofc                 C   st   |  | d| d |  | d| d |  | d| d | | d| d d S r   r   r   supernet_ofr   r   r	   r	   r
   test_supernet_of  s(    



z#NetworkTestCase_v4.test_supernet_ofc                 C   s  |  t& tdtd W d    n1 s60    Y  |  t& tdtd W d    n1 sv0    Y  |  t& tdtd W d    n1 s0    Y  |  t& tdtd W d    n1 s0    Y  d S )Nr   ::1/128)r1   r2   r   IPv4Networkr   IPv6Networkr   r   r	   r	   r
   test_subnet_of_mixed_types  s     
"
"
"
z-NetworkTestCase_v4.test_subnet_of_mixed_typesN)	r!   r"   r#   r   r  r   r   r   r  r	   r	   r	   r
   r     s   r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )NetmaskTestMixin_v6c                 C   s   dD ]B}|  |}| t|d | t|jd | t|jd q|  d}| t|d | t|jd | t|jd d S )N)::1r0   s                  r  z'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr`   	::1%scope::1%scope/128r   )r   rE   r   Z
scoped_netr	   r	   r
   r     s    

z NetmaskTestMixin_v6.test_no_maskc                 C   s|   d}|  d|  | | W d    n1 s20    Y  d}|  d|  | | W d    n1 sn0    Y  d S )Nzcafe:cafe::/128/190r   zcafe:cafe::%scope/128/190r*   )r   r?   Zscoped_addrr	   r	   r
   r     s    (z&NetmaskTestMixin_v6.test_split_netmaskc                    s    fdd}|dd |dd |dd |dd |d	d |d
d |dd |dd |dd |dd |dd |dd d S )Nc                    s8     |  |  W d    n1 s*0    Y  d S r   r*   r   r   r	   r
   r     s    zANetmaskTestMixin_v6.test_address_errors.<locals>.assertBadAddressr   r(   r   r   zAt least 3 partsr   r   r   zOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez1.2.3.4%scopez
10%scope/8r   r	   r   r	   r   r
   r     s    










z'NetmaskTestMixin_v6.test_address_errorsc                 C   s   |  t| dd |  t| dd |  t| dd tddD ]<}d| }|  t| || |  t| d| | qL|  t| dd tddD ]<}d| }|  t| || |  t| d| | qd S )	N)r   r   2001:db8::/32)r   Z32r      z::/%dz::/0%dz2001:db8::%scope/32)r   r   r   r9   )r   r   r   r	   r	   r
   r     s     z&NetmaskTestMixin_v6.test_valid_netmaskc                    s    fdd}|dd |dd |dd |dd |dd |dd |dd	 |dd
 |dd |dd |dd |dd d S )Nc                    sN   d| }  t|"  d| |f  W d    n1 s@0    Y  d S r   r   r   r   r	   r
   r      s    zANetmaskTestMixin_v6.test_netmask_errors.<locals>.assertBadNetmaskr  r)   1::r   r   r   r   Z129r   r   r`   r  r	   r   r	   r   r
   r     s    










z'NetmaskTestMixin_v6.test_netmask_errorsc                    s.    fdd}|dd |dd |dd d S )Nc                    sJ   d| }  t|  | |f W d    n1 s<0    Y  d S r   r   r   r   r	   r
   r     s    zJNetmaskTestMixin_v6.test_netmask_in_tuple_errors.<locals>.assertBadNetmaskr  rR   r
  r  r	   r   r	   r   r
   r     s    

z0NetmaskTestMixin_v6.test_netmask_in_tuple_errorsc                 C   s,   |  d |  d |  d |  d d S )Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoper   r   r	   r	   r
   r     s    


zNetmaskTestMixin_v6.test_pickleNr   r	   r	   r	   r
   r    s   		r  c                   @   s   e Zd ZejZdS )InterfaceTestCase_v6N)r!   r"   r#   r   IPv6Interfacer   r	   r	   r	   r
   r  $  s   r  c                   @   s"   e Zd ZejZdd Zdd ZdS )NetworkTestCase_v6c                 C   s   |  | d| d | | d| d |  | d| d |  | d| d |  | d| d | | d| d d S )N2000:999::/562000:aaa::/482000:aaa::/562000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56r   r   r	   r	   r
   r   +  s<    





z!NetworkTestCase_v6.test_subnet_ofc                 C   st   |  | d| d |  | d| d |  | d| d | | d| d d S )Nr  r  r  r  r   r   r	   r	   r
   r   D  s(    



z#NetworkTestCase_v6.test_supernet_ofN)r!   r"   r#   r   r  r   r   r   r	   r	   r	   r
   r  (  s   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
FactoryFunctionErrorsc                 C   sD   d}d}|  t||| || W d    n1 s60    Y  d S )NZcamelotz+%r does not appear to be an IPv4 or IPv6 %s)r   
ValueError)r   r   kindr?   rF   r	   r	   r
   assertFactoryErrorY  s    z(FactoryFunctionErrors.assertFactoryErrorc                 C   s   |  tjd d S )NrE   )r  r   
ip_addressr   r	   r	   r
   test_ip_address`  s    z%FactoryFunctionErrors.test_ip_addressc                 C   s   |  tjd d S )NZ	interface)r  r   ip_interfacer   r	   r	   r
   test_ip_interfacec  s    z'FactoryFunctionErrors.test_ip_interfacec                 C   s   |  tjd d S )Nnetwork)r  r   
ip_networkr   r	   r	   r
   test_ip_networkf  s    z%FactoryFunctionErrors.test_ip_networkN)r!   r"   r#   r  r  r  r  r	   r	   r	   r
   r  W  s   r  c                   @   s^  e Zd ZedZedZedZ	e
dZedZedZe
dZedZedZee	gZeeg ZeegZeeg ZeegZeeg Zee Zee ZedZedZedZe
dZedZedZ e
dZ!edZ"edZ#dd Z$dd Z%d	d
 Z&dd Z'dd Z(dd Z)dd Z*dd Z+dd Z,dd Z-dd Z.dS )ComparisonTestsr0   r  rc   	::2%scopec                 C   sT   t  }| jD ]B}| || | ||k | ||t | ||t qd S r   )objectobjects_with_scopedassertNotEqualr   r   __eq__NotImplemented__ne__r   otherobjr	   r	   r
   test_foreign_type_equality  s    
z*ComparisonTests.test_foreign_type_equalityc                 C   s2   | j D ]&}| j D ]}||u rq| || qqd S r   )objectsr"  r   r	   r	   r
   test_mixed_type_equality  s
    

z(ComparisonTests.test_mixed_type_equalityc                 C   s(   t | j| jD ]\}}| || qd S r   )zip
v6_objectsv6_scoped_objectsr"  r   r	   r	   r
   test_scoped_ipv6_equality  s    z)ComparisonTests.test_scoped_ipv6_equalityc                 C   s(   | j D ]}| jD ]}| || qqd S r   )
v4_objectsr.  r"  r   r	   r	   r
   test_v4_with_v6_scoped_equality  s    

z/ComparisonTests.test_v4_with_v6_scoped_equalityc                 C   s4   | j D ](}| || | || | || qd S r   )r!  r   assertLessEqualassertGreaterEqualr   r(  r	   r	   r
   test_same_type_equality  s    
z'ComparisonTests.test_same_type_equalityc              
   C   s   | j | jf| j| jf| j| jf| j| jf| j| j	f| j
| jf| j| jf| j| jf| j| jff	D ]|\}}| || | || | || | || | || | ||k | ||k  | ||k | ||k q^d S r   )v4addrv4addr2v4netv4net2v4intfv4intf2v6addrv6addr2v6netv6net2v6intfv6intf2v6addr_scopedv6addr2_scopedv6net_scopedv6net2_scopedv6intf_scopedv6intf2_scopedr"  Z
assertLessr2  ZassertGreaterr3  r   r   r	   r	   r
   test_same_type_ordering  s&    








z'ComparisonTests.test_same_type_orderingc                 C   s   | j D ]}| || j q| j| j D ]}| || j q&| j| j D ]}| || j qF| j| j| jg D ]}| || j ql| j| j| jg D ]}| || j q| j	| j
 | jg D ]}| || j qd S r   )v4_addressesassertInr8  v6_addressesv6_scoped_addressesr>  rD  r0  assertNotInr-  r.  r4  r	   r	   r
   test_containment  s    
z ComparisonTests.test_containmentc                    s   | j D ] | j D ]zt tstt r2q| t fdd | t fdd | t fdd | t fdd qqd S )Nc                      s    k S r   r	   r	   r   r   r	   r
   <lambda>      z:ComparisonTests.test_mixed_type_ordering.<locals>.<lambda>c                      s    kS r   r	   r	   rO  r	   r
   rP    rQ  c                      s    kS r   r	   r	   rO  r	   r
   rP    rQ  c                      s    kS r   r	   r	   rO  r	   r
   rP    rQ  )r!  
isinstancetyper1   r2   r   r	   rO  r
   test_mixed_type_ordering  s    

z(ComparisonTests.test_mixed_type_orderingc              	   C   sP  t  }| jD ]<}| t ||k  W d    n1 s:0    Y  | t ||k W d    n1 sl0    Y  | t ||k W d    n1 s0    Y  | t ||k W d    n1 s0    Y  | |tk  | |tk | |tk | |tk | |tk  | |tk | |tk | |tk qd S r   )r   r!  r1   r2   r   r   r   r   r&  r	   r	   r
   test_foreign_type_ordering  s$    &&&&z*ComparisonTests.test_foreign_type_orderingc                 C   s   | j | j| jg}| j| j| jg}| j| j| jg}| 	|t
| jtjd | 	|t
| jtjd | 	|t
| jtjd | 	|| t
| j| j tjd | 	ttt d S )N)key)r6  r8  r:  r<  r>  r@  rB  rD  rF  r   sortedr0  r   get_mixed_type_keyr-  r.  r$  r   )r   Z
v4_orderedZ
v6_orderedZv6_scoped_orderedr	   r	   r
   test_mixed_type_key  s0    
z#ComparisonTests.test_mixed_type_keyc                 C   s@  t d}t d}t d}t d}t d}t d}| t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| | t|j| d S )Nr   r  r  )r   r  r  r1   r2   __lt____gt__)r   r6  r8  r<  r>  rB  rD  r	   r	   r
   test_incompatible_versions  s,    





z*ComparisonTests.test_incompatible_versionsN)/r!   r"   r#   r   r   r6  r  r8  r   r:  r   r<  r  r>  r  r@  rB  rD  rF  rI  r0  rK  r-  rL  r.  r*  r!  r7  r9  r;  r=  r?  rA  rC  rE  rG  r)  r+  r/  r1  r5  rH  rN  rT  rU  rY  r\  r	   r	   r	   r
   r  j  sJ   




















		
r  c                   @   sd  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;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~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdS )IpaddrUnitTestc                 C   sp   t d| _t d| _t d| _t d| _t d| _	t 
d| _t d| _t d| _t 
d	| _d S )
Nr   
1.2.3.4/24
1.2.3.0/242001:658:22a:cafe:200:0:0:1z2001: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/64z2001:658:22a:cafe::%scope/64)r   r   ipv4_addressr   ipv4_interfacer  ipv4_networkr  ipv6_addressipv6_interfacer  ipv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkr   r	   r	   r
   setUp!  s"    zIpaddrUnitTest.setUpc                 C   sF   |  dttd |  dttd |  dttd d S )NzIPv4Interface('1.2.3.4/32')r   zIPv6Interface('::1/128')r  zIPv6Interface('::1%scope/128')r  )r   r.   r   r   r  r   r	   r	   r
   testRepr1  s    zIpaddrUnitTest.testReprc                 C   s  t d}t d}| t d| | t |df| | t d| | t d| | t |df| | t d| | t t d	 W d    n1 s0    Y  | t t |d
f W d    n1 s0    Y  | t t d W d    n1 s 0    Y  | t t d W d    n1 sV0    Y  | t t |df W d    n1 s0    Y  | t t d W d    n1 s0    Y  t d}| t jd	dd| | t j|d
fdd| | t jddd| | t jddd| | t j|dfdd| | t jddd| t d}t d}| t d| | t |df| | t d| | t d| | t |d
f| | t d| | t d	t d | t dt d | t t d W d    n1 sJ0    Y  | t t d W d    n1 s0    Y  d S )Nr   z192.0.2.1/32)r   r   r   )      r   )r   r   r   )rn  r   )r   r   r   )rn  r   )r   r   r   )rn  r   r   Fstrictr   r   )       r   r   )rq  r   z192.0.2.1/24)r   z255.255.255.255.0)r   r   r  r   r1   r  r   r  )r   ipr   r	   r	   r
   testIPv4Tuple:  s    


(,**.*








*zIpaddrUnitTest.testIPv4Tuplec                 C   s  t d}t d}| t d| | t d| | t |df| t d}t d}| t d| | t d| | t |d	f| t d
}t d}| t t d W d    n1 s0    Y  | t t d W d    n1 s0    Y  | t t |df W d    n1 sJ0    Y  t d}| t jddd| | t jddd| | t j|dfdd| | t dt d | t dt d t d}| t t d W d    n1 s
0    Y  | t t |df W d    n1 sD0    Y  | t t d W d    n1 sz0    Y  | t t d W d    n1 s0    Y  d S )Nr   z2001:db8::/128)r   128)	                n   rd   rt  z2001:db8::/96)r   96)ru  `   rv  r   2001:db8::1)rx  rw  )	               n   rw  rw  Fro  )rx  rv  z2001:db8::1/96)ry  rv  2001:db8::1%scope)rz  rw  )rx  r   )r   r   r  r   r1   r  r  r  )r   rr  r   	ip_scopedr	   r	   r
   testIPv6Tuple  s    





(*.


*.*zIpaddrUnitTest.testIPv6Tuplec                 C   s   |  tdd td |  tdd td |  tdd td |  tdd td | td	d td
 | td
d td	 d S )Nr      z1.1.2.0   z1.1.0.1r  i  z::ffffr  z::ffff%scope)r   r   r   r   r"  r   r	   r	   r
   testAddressIntMath  s$    z!IpaddrUnitTest.testAddressIntMathc                 C   sP   |  ttjd |  ttjdtj  |  ttjd |  ttjdtj  d S )NrR   rc   )r1   r  r   v4_int_to_packed
IPV4LENGTHv6_int_to_packed
IPV6LENGTHr   r	   r	   r
   testInvalidIntToBytes  s    

z$IpaddrUnitTest.testInvalidIntToBytesc                 C   s   t d}t d}t d}| tt |g||fg | tt ||g||f||fg | tt |||g||fg | dt dd | dt| j d S )Nz10.10.10.10z10.10.10.11z10.10.10.12rd   r   zIPv4Network('1.2.3.0/24'))r   r   r   list_find_address_range_count_righthand_zero_bitsr.   re  )r   ip1ip2ip3r	   r	   r
   testInternals  s    


zIpaddrUnitTest.testInternalsc                 C   s   |  t| jjd |  t| jjd |  t| jjd |  t| jjd |  t| jjd |  t| jjd |  t| jjd |  t| jjd d S )Ni 1.2.3.0l	           /YE    2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r   intre  network_addressr   rh  r   rk  r   r	   r	   r
   testGetNetwork  s(    zIpaddrUnitTest.testGetNetworkc                 C   s   |  | jjtdj td}td}td}|  |tt|j |  |tt|j | |tt|j d}|  | j	jt
|j |  | jjt
|j |  t| jjjd |  t| jjjd |  t| jjjd d S )Nr   r   r`  rb  	         /YE          )r   rd  _ipr   r   r  r  r  r"  rg  r  rj  rc  versionrf  ri  )r   ipv4ipv6Zipv6_scopedZv6_intr	   r	   r
   testIpFromInt  s2    








zIpaddrUnitTest.testIpFromIntc                 C   sv   t j}| | jjt dj | |d|d | | jjt dj | |d|d | |d|d d S )	Nr   255.254.253.252       X*      ffff:2:3:4:ffff::            r`   s                   )r   r  r   rd  r  r  rg  rr  rh   r	   r	   r
   testIpFromPacked  s$    





zIpaddrUnitTest.testIpFromPackedc                 C   s|   |  t| jjd |  t| jjd |  t| jjd |  t| jjd |  t| jjd |  t| jjd d S )Nr   r   r  2001:658:22a:cafe:200::1)r   r  rd  rr  r   rg  rj  r   r	   r	   r
   	testGetIp   s    zIpaddrUnitTest.testGetIpc                 C   st   |  | jjd  |  t| jjd |  | jjd  |  t| jjd |  | jjjd  |  t| j	jjd d S )NZscope)
r   rf  scope_idr   ri  rg  rj  rh  r  rk  r   r	   r	   r
   testGetScopeId-  s$    

zIpaddrUnitTest.testGetScopeIdc                 C   st   |  t| jjd |  t| jjd |  t| jjd |  | jjd |  t| jjd |  | jjd d S )Nl     r   l	            @   )r   r  re  r   r   rh  	prefixlenrk  r   r	   r	   r
   testGetNetmask;  s    zIpaddrUnitTest.testGetNetmaskc                 C   s   t d}| t|jjd | |dd t d}| t|jjd | |dd t d}| t|jjd | |dd d S )N	1.2.3.4/0r   0z::1/0z::1%scope/0)r   r   r   r  r  r   _prefix_from_prefix_stringr  )r   Zipv4_zero_netmaskZipv6_zero_netmaskZipv6_scoped_zero_netmaskr	   r	   r
   testZeroNetmaskE  s    


zIpaddrUnitTest.testZeroNetmaskc                 C   s   t d}| |jd d S )Nz127.0.0.0/0.0.0.255r   )r   r  r   r  r   r   r	   r	   r
   testIPv4NetR  s    
zIpaddrUnitTest.testIPv4Netc                 C   s|   |  t| jjd |  t| jjd |  t| jjd |  t| jjd |  t| jjd |  t| jjd d S )Ni	1.2.3.255l	   /YE    %2001:658:22a:cafe:ffff:ffff:ffff:ffff)r   r  re  broadcast_addressr   rh  rk  r   r	   r	   r
   testGetBroadcastV  s    zIpaddrUnitTest.testGetBroadcastc                 C   s:   |  | jjjd |  | jjjd |  | jjjd d S )Nr   r  )r   rd  r  r  rg  rj  r   r	   r	   r
   testGetPrefixlend  s    zIpaddrUnitTest.testGetPrefixlenc                 C   s   |  | j jd |  t| j jd |  tdj t	d |  | j
 jd |  t| j
 jd |  tdj td |  | j jd |  t| j jd d S )N   z1.2.2.0	0.0.0.0/0?   r  z::0/0)r   re  supernetr  r   r  r   r   r  r  rh  r  r  rk  r   r	   r	   r
   testGetSuperneti  s&    zIpaddrUnitTest.testGetSupernetc                 C   s   |  | jdjd |  t| jdjd |  | jdjd |  t| jdjd |  | jdjd |  t| jdjd d S )Nr[      z1.2.0.0=   z2001:658:22a:caf8::)r   re  r  r  r   r  rh  rk  r   r	   r	   r
   testGetSupernet3z  s    zIpaddrUnitTest.testGetSupernet3c                 C   s   | j t| jjddd | j t| jjdd | | jjdd| jjdd | j t| jjddd | j t| jjdd | | jjdd| jjd	d | j t| jjddd | j t| jjdd | | jjdd| jjd	d d S )
Nrc   r0   prefixlen_diff
new_prefix   r  r     A   >   )r1   r  re  r  r   rh  rk  r   r	   r	   r
   testGetSupernet4  s6    zIpaddrUnitTest.testGetSupernet4c                 C   s  t | j }| dt| | td|d  | td|d  td}t | }| dt| | td|d  | td	|d  td
}t | }| dt| | td|d  | td	|d  tdtdg}d}d}| |t t	|  | |t t	|  | t t	| t t	|  tdg}d}d}| |t t	|  | |t t	|  | t t	| t t	|  tdtdg}d}d}| |t t	|  | |t t	|  | t t	| t t	|  tdg}d}d}| |t t	|  | |t t	|  | t t	| t t	|  d S )N   z1.2.3.1r   z	1.2.3.254rR   2001:658:22a:cafe::/120r}  2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/1202.0.0.0z2.0.0.1z
2.0.0.0/31)r     r   r   )r   r   r  z2001:658:22a:cafe::/127)r     2001:658:22a:cafe::1/128)r  rd   )
r  re  hostsr   lenr   r   r  r   r  )r   r  rh  rk  addrsZstr_argsZtpl_argsr	   r	   r
   	testHosts  sd    

zIpaddrUnitTest.testHostsc                 C   s  |  t| jjddt| jjdd | tt| jjdd | tt| jjddd |  t| jjddt| jjdd | tt| jjd	d | tt| jjddd |  t| jjddt| jjdd | tt| jjd	d | tt| jjddd d S )
Nr[   r     r  r  r  r  D   r  )	r   rW  re  subnetsr1   r  r  rh  rk  r   r	   r	   r
   testFancySubnetting  sB    z"IpaddrUnitTest.testFancySubnettingc                 C   s   |  t| j d jd |  tt| j d jd |  tt| j d jd |  t| j d jd |  t| j d jd d S )Nr   r  r  r0   z	1.2.3.128r  )	r   r  re  r  r  r   r  rh  rk  r   r	   r	   r
   testGetSubnets  s"    zIpaddrUnitTest.testGetSubnetsc                 C   sN   t d}dd | D }dd |dD }| |dg | || d S )Nr   c                 S   s   g | ]}t |qS r	   r   .0r@   r	   r	   r
   
<listcomp>  rQ  z;IpaddrUnitTest.testGetSubnetForSingle32.<locals>.<listcomp>c                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r    rQ  rc   )r   r  r  r   )r   rr  subnets1subnets2r	   r	   r
   testGetSubnetForSingle32  s
    
z'IpaddrUnitTest.testGetSubnetForSingle32c                 C   s   t d}dd | D }dd |dD }| |dg | || t d}dd | D }dd |dD }| |dg | || d S )	Nr  c                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r    rQ  z<IpaddrUnitTest.testGetSubnetForSingle128.<locals>.<listcomp>c                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r    rQ  rc   r  c                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r    rQ  c                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r    rQ  )r   r  r  r   )r   rr  r  r  r{  r	   r	   r
   testGetSubnetForSingle128  s    

z(IpaddrUnitTest.testGetSubnetForSingle128c                 C   sP   dd | j dD }| |g d dd | jdD }| |g d d S )Nc                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r  	  rQ  z.IpaddrUnitTest.testSubnet2.<locals>.<listcomp>rc   )z
1.2.3.0/26z1.2.3.64/26z1.2.3.128/26z1.2.3.192/26c                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r    rQ  )2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)re  r  r   rh  )r   ipsZipsv6r	   r	   r
   testSubnet2  s    zIpaddrUnitTest.testSubnet2c                 C   s   dd | j dD }| |d d g d | |dd  g d | t|d td	}d
d |dD }| |d d g d | |dd  g d | t|d d S )Nc                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r    rQ  z2IpaddrUnitTest.testGetSubnets3.<locals>.<listcomp>   r[   )z
1.2.3.0/32z
1.2.3.1/32z
1.2.3.2/32)z1.2.3.253/32z1.2.3.254/32z1.2.3.255/32r~  r  c                 S   s   g | ]}t |qS r	   r  r  r	   r	   r
   r    rQ  )z2001:658:22a:cafe::/128r  z2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)re  r  r   r  r   r  )r   r  rh  r	   r	   r
   testGetSubnets3  s"    
zIpaddrUnitTest.testGetSubnets3c                 C   s   |  tt| jjd |  tt| jd |  tt| jjd |  tt| jd |  tt| j	jd |  tt| j
d d S )N	   r  r1   r  r  rd  r  r  re  rg  rh  rj  rk  r   r	   r	   r
   testSubnetFailsForLargeCidrDiff*  s$    


z.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffc                 C   s@   |  t| jjjd |  t| jjjd |  t| jjjd d S )Nr  r  )r1   r  rd  r  r  rg  rj  r   r	   r	   r
   !testSupernetFailsForLargeCidrDiff8  s    


z0IpaddrUnitTest.testSupernetFailsForLargeCidrDiffc                 C   s   |  tt| jjd |  tt| jd |  tt| jjd |  tt| jd |  tt| j	jd |  tt| j
d d S )NrR   r  r   r	   r	   r
   "testSubnetFailsForNegativeCidrDiff@  s$    


z1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffc                 C   s   |  | jjd |  t| j d jd |  | j jd |  | jjd |  t| j d jd |  | j jd |  | jjd |  t| j d jd |  | j jd d S )Nr~  r   rd   i               l            l             )r   re  num_addressesr  r  r  rh  rk  r   r	   r	   r
   testGetNum_AddressesN  s&    z#IpaddrUnitTest.testGetNum_Addressesc                 C   s`   |  td| j | td| j td}|  || j | tdtd d S )Nz1.2.3.128/25z
1.2.4.1/24z1.2.3.37z
1.1.0.0/16z
1.0.0.0/15)	rJ  r   r   re  rM  r   r   r  __contains__)r   addr1r	   r	   r
   testContains_  s    
zIpaddrUnitTest.testContainsc                 C   s|   |  t| jd d | t| jjd |  t| jd d | t| jjd |  t| jd d | t| jjd d S )Nr\   1.2.3.5r~  z2001:658:22a:cafe::5r  )r   r   re  r1   
IndexError__getitem__rh  rk  r   r	   r	   r
   testNthl  s    zIpaddrUnitTest.testNthc                 C   s   t d}| d|j t|}| dt|d  | dt|d  | dt|d  | dt|d  | |d |d  d S )Nz172.31.255.128/255.255.255.240   z172.31.255.128r   z172.31.255.143rR   )r   r  r   r  r  r   )r   r?   Z	addr_listr	   r	   r
   testGetitemw  s    
zIpaddrUnitTest.testGetitemc                 C   s  |  | jtdk | | jtdk | | jtdk | | jtdk | | jdk | | jg k | | jdk |  | jtdk | | jtdk | | jtdk | | jdk | | jg k | | jdk |  | jtd	k | | jtd
k | | jtdk | | jtdk | | jtdk | | jdk | | jg k | | jdk d S )Nr^  
1.2.3.4/23::1.2.3.4/24::1.2.3.4%scope/24r)   rc   2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64!2001:658:22a:cafe:200::1%scope/63)r   rd  r   r   r   r  rg  rj  r   r	   r	   r
   	testEqual  sZ    zIpaddrUnitTest.testEqualc                 C   sn  |  | jtdk | | jtdk | | jtdk | | jtdk | | jdk | | jg k | | jdk | | jtdk | | jdk | | jg k | | jdk |  | jtdk | | jtd	k | | jtdk | | jdk | | jg k | | jdk | | j	td
k | | j	dk | | j	g k | | j	dk |  | j
tdk | | j
tdk | | j
tdk | | j
td	k | | j
tdk | | j
dk | | j
g k | | j
dk | | jtd
k | | jdk | | jg k | | jdk d S )Nr^  r  r  r  r)   rc   r  r  r  r   r  r  )r   rd  r   r   r   r  rc  r   rg  rf  rj  ri  r   r	   r	   r
   testNotEqual  s~    zIpaddrUnitTest.testNotEqualc                 C   s   |  ttdd d S )Nz1.2.3.4/255.255.255.255r   r   r   r   r   r   r	   r	   r
   testSlash32Constructor  s
    
z%IpaddrUnitTest.testSlash32Constructorc                 C   s0   |  ttdd |  ttdd d S )Nr  r  )r   r   r   r  r   r	   r	   r
   testSlash128Constructor  s    z&IpaddrUnitTest.testSlash128Constructorc                 C   s   |  ttdd d S )Nz1.2.3.4/0.0.0.0r  r  r   r	   r	   r
   testSlash0Constructor  s    z$IpaddrUnitTest.testSlash0Constructorc                 C   s  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 }}	| tt ||	g|g t d }}	| tt ||	gt dg t d}t d}t d}t |||g}| t||g t d}t d}t d}t |||g}| t||g t dt dft dt dft dt dfg}
|
D ]\}}| 	t
t j||g qtt dt dft dt dft dt dfg}
|
D ]\}}| 	t
t j||g qd S )N1.1.1.0r   1.1.1.2z1.1.1.3z1.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::/96z2001::%scope/100z2001::%scope/120z2001::%scope/96r  z
1.1.0.0/32z
2001::/128r  z2001::%scope/128)r   r   collapse_addressesr   r  r  r  r  r  r1   r2   )r   r  r  r  ip4Zip5Zip6Z	collapsedZip_same1Zip_same2Zaddr_tuplesr	   r	   r
   testCollapsing  s    
































zIpaddrUnitTest.testCollapsingc              	   C   sV  t j}t d}t d}G dd dt j}|d}|d}| tt||| | tt||t d | tt||t d | t|||d t 	d t d	}| t|||t 	d
t 	d	g t 
d}t 
t j
j}| t dgt||| t d}t d}| t|||d t 	d t d}| t|||t 	dt 	dg t d}t d}| t|||d t 	d t d}| t|||t 	dt 	dg | tt|t dt d | tt|t 	dt 	d | tt|t 	dt 	d | tt|t dt 	d d S )Nr   z	1.1.1.255c                   @   s   e Zd Zedd ZdS )z3IpaddrUnitTest.testSummarizing.<locals>.IPv7Addressc                 S   s   dS )N   r	   r   r	   r	   r
   r  W  s    z;IpaddrUnitTest.testSummarizing.<locals>.IPv7Address.versionN)r!   r"   r#   r$   r  r	   r	   r	   r
   IPv7AddressV  s   r	  r  r  r   r  z1.1.1.8z
1.1.1.0/29r  r  z$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z	1::%scopez*1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scopez	2::%scopez1.1.0.0r`   )r   summarize_address_ranger  r   r1   r  r  r2   r   r  r   	_ALL_ONESr  )r   Z	summarizer  r  r	  Zip_invalid1Zip_invalid2r	   r	   r
   testSummarizingN  s    













zIpaddrUnitTest.testSummarizingc                 C   s   |  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 d S )Nr   r  r  ::2r  r  )r   r   r  r   r	   r	   r
   testAddressComparison  s$    z$IpaddrUnitTest.testAddressComparisonc                 C   s  |  tdtdk |  tdtdk  |  tdtdk  |  tdtdk  |  tdtdk |  tdtdk |  tdtdk |  tdtdk |  tdtdk  |  tdtdk  |  tdtdk  |  tdtdk |  tdtdk |  tdtdk |  td	td	k |  td	td
k  |  td	tdk  |  tdtd	k  |  td
td	k |  tdtd	k |  td	tdk | td	tdk |  td	tdk  |  td	tdk  |  tdtdk  |  td
tdk |  tdtdk |  td	tdk | tdtd	k |  tdtd
k  |  tdtdk  |  tdtd	k  |  tdtd	k |  tdtd	k |  tdtdk d S )Nz
1.1.1.1/24z
1.1.1.1/16z
1.1.1.2/24z
1.1.1.2/16z::1/64z::1/80z::2/64z::2/48z::1%scope/64z::1%scope/80z::2%scope/64z::2%scope/48)r   r   r  r   r   r	   r	   r
   testInterfaceComparison  s    z&IpaddrUnitTest.testInterfaceComparisonc           	      C   sb  t 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 d S )Nr  z
1.1.1.0/32r  r   rR   r0   z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96::/0r  z10.1.2.128/25z10.1.3.0/24z10.1.3.0/25z10.10.10.0/31z
10.10.10.0z10.10.10.2/31z
10.10.10.2r   r  r  r  )r   r  r   r   compare_networks_get_networks_keyr  r1   r2   re  rh  r  r   rZ  r[  r  r   sortZassertIsr  r$  )	r   r  r  r  r  r  r  rW  Zunsortedr	   r	   r
   testNetworkComparison  s    














z$IpaddrUnitTest.testNetworkComparisonc                 C   s4   |  ttjd |  ttjd |  ttjd d S )Nz192.168.1.1/24z::1/120z::1%scope/120)r1   r  r   r  r   r	   r	   r
   testStrictNetworksI  s    z!IpaddrUnitTest.testStrictNetworksc                 C   sV   t d}t d}t d}| | j| | | j| | || d S )Nz
1.2.3.0/30z
1.2.2.0/24z1.2.2.64/26)r   r  r   re  overlapsr   )r   r'  Zother2Zother3r	   r	   r
   testOverlapsN  s    


zIpaddrUnitTest.testOverlapsc                 C   sh   d}t |}t d| }| t|jt|j t d| }| |j|j | t jt jd d S )NrK   z::%sz	::ffff:%sz2001:1.1.1.1:1.1.1.1)	r   r   r  r   r  rr  r"  r1   r   )r   Zipv4_stringr  Zv4compat_ipv6Zv4mapped_ipv6r	   r	   r
   testEmbeddedIpv4V  s    
zIpaddrUnitTest.testEmbeddedIpv4c                 C   s   |  tdtd |  tdtd |  tdtd |  tdtd | tdtd | tdtd | tdtd | tdtd d S )	Nz::FFFF:192.0.2.1z::FFFF:c000:201zFFFF::192.0.2.1zFFFF::c000:201z::FFFF:192.0.2.1%scopez::FFFF:c000:201%scopezFFFF::192.0.2.1%scopezFFFF::c000:201%scope)r   r   r  r"  r   r	   r	   r
   testIPv6AddressTooLargea  s0    z&IpaddrUnitTest.testIPv6AddressTooLargec                 C   s4   |  | jjd |  | jjd |  | jjd d S )Nr  r  )r   rc  r  rf  ri  r   r	   r	   r
   testIPVersionv  s    zIpaddrUnitTest.testIPVersionc                 C   s4   |  | jjd |  | jjd |  | jjd d S )Nr   rd   )r   rd  max_prefixlenrg  rj  r   r	   r	   r
   testMaxPrefixLength{  s    z"IpaddrUnitTest.testMaxPrefixLengthc                 C   s   |  | jjd |  tdjd |  | jjd |  tdjd |  tdjd |  | jjd |  td	jd |  td
jd d S )Nr   r  r  r  r  r  z::1:0:0:0:0s                  zffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)r   rc  packedr   r   rf  r  ri  r   r	   r	   r
   
testPacked  s0    


zIpaddrUnitTest.testPackedc                 C   st   t d}t d}t d}t d}| t jt| | t jt| | t jt| | t jt| d S )Nr   r   )	r   r  r  r   r  rS  r   r  r   )r   Zipv4netZipv4addrZipv6netZipv6addrr	   r	   r
   
testIpType  s    



zIpaddrUnitTest.testIpTypec                 C   sT  |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtd	j |  dtd
j |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj	 |  dtdj |  dtdj	 |  dt
dj |  dt
dj |  dt
dj |  dt
dj |  dt
dj |  dt
dj |  dt
dj |  dt
dj |  dt
dj |  dt
d	j |  dt
d
j | t
dj	 | t
dj	 | t
dj	 | t
dj	 |  dt
dj |  dt
dj | t
dj	 | t
d j	 |  dt
d!j |  dt
d"j |  dt
dj |  dtdj d S )#NTz224.1.1.1/31Fz	240.0.0.0z192.168.1.1/17z192.169.0.0z10.255.255.255z11.0.0.0z172.31.255.255z
172.32.0.0z169.254.1.0/24z169.254.100.200/24z169.255.100.200/24z127.100.200.254/32z127.42.0.0/16z	128.0.0.0z100.64.0.0/10z192.0.2.128/25z192.0.3.0/24rI   z	224.1.1.1z	240.0.0.1z239.255.255.255192.168.1.1z	192.0.0.0z	192.0.0.9z
192.0.0.10z192.0.0.255z169.254.100.200z169.255.100.200z	192.0.7.1z203.0.113.1z127.100.200.254z
127.42.0.0)r   r   r  is_multicastr  is_reserved
is_privateis_link_localis_loopback	is_globalr  is_unspecifiedr   r   r   r	   r	   r
   testReservedIpv4  s    














zIpaddrUnitTest.testReservedIpv4c                 C   sH  |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtd	j |  dtd
j |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj d S ) NTr  Fz	1.0.0.0/8z	0.0.0.0/8z
10.0.0.0/8z127.0.0.0/8z169.254.0.0/16z172.16.0.0/12z192.0.0.0/29z192.0.0.9/32z192.0.0.170/31r   z192.168.0.0/16z198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z240.0.0.0/4z255.255.255.255/32r  z::ff/128r  ::/128z::ffff:0:0/96z100::/64z2001:2::/48z2001:3::/48r	  z2001:10::/28zfc00::/7z	fe80::/10)r   r   r  r#  r   r	   r	   r
   testPrivateNetworks  s:    z"IpaddrUnitTest.testPrivateNetworksc                 C   s  |  dtdj |  dtdd d j |  dtdj |  dtdj |  dtd	j |  dtd
j |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj	 |  dtdj	 |  dtdj	 |  dtdj |  dtdj
 |  dtdj |  dtdd d j |  dtdj |  dtdj |  dtd	j |  dtd
j |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj |  dtdj	 |  dtdj	 | tdj
 | tdj
 | tdj
 | td j
 | td!j
 | td"j
 | td#j
 | td$j
 | td%j
 | td&j
 | td'j
 | td(j
 | td)j
 |  dtd*j |  dtd+j d S ),NTzffff::rc   rd   r0   zff00::Fzfdff::zfecf::zfeff:ffff:ffff:ffff::z
fbf:ffff::zfc00::zfc00:ffff:ffff:ffff::zfbff:ffff::zfe00::zfea0::zfebf:ffff::zfe7f:ffff::zfec0::z	0:0::0:01z::1/127r`   r  z0::0r  z::/127z2001::1/128z
200::1/128z64:ff9b:1::z2001::z	2001:1::1z	2001:1::2z2001:2::z2001:3::z2001:4::z2001:4:112::z	2001:10::z	2001:20::z	2001:30::z	2001:40::z2002::z100::z4000::1/128)r   r   r  r!  is_site_localr#  r$  r  r%  r'  r&  r  r   r   r"  r   r	   r	   r
   testReservedIpv6	  s    











zIpaddrUnitTest.testReservedIpv6c                 C   sL   |  tdjtd |  tdjd  |  tdjtd d S )N::ffff:192.168.1.1r   z
::c0a8:101z::ffff:c0a8:101)r   r   r  ipv4_mappedr   r	   r	   r
   testIpv4Mappedj	  s    
zIpaddrUnitTest.testIpv4Mappedc              	   C   s   dD ]}|  | t|}td| }| |j|j | |j|j | |j|j | |j|j | |j	|j	 | |j
|j
 | |j|j W d    q1 s0    Y  qd S )N)z178.62.3.251z169.254.169.254	127.0.0.1z	224.0.0.1rK   rI   z
100.64.0.1z::ffff:)r<   r   r   r   r   r&  r#  r"  r!  r'  r$  r%  )r   addr4r  r  r	   r	   r
   testIpv4MappedPropertiesr	  s    	
z'IpaddrUnitTest.testIpv4MappedPropertiesc                 C   s,   |  dtdj |  dtdj d S )NTr-  Fz::ffff:172.32.0.0)r   r   r  r#  r   r	   r	   r
   testIpv4MappedPrivateCheck	  s    z)IpaddrUnitTest.testIpv4MappedPrivateCheckc                 C   s  t d}t d}t d}t d}t d}t d}| tt||t dt dg | tt|| | t	t|| | t	t|| | t||g  | tt||t d	t d
t dt dt dt dt dt dg d S )N10.1.1.0/24z10.1.1.0/26z10.2.1.0/2410.1.1.0z2001:db8::0/32z10.1.1.5/32z10.1.1.64/26z10.1.1.128/25z10.1.1.0/30z10.1.1.4/32z10.1.1.6/31z10.1.1.8/29z10.1.1.16/28z10.1.1.32/27)
r   r  r  r   rW  r  address_excluder1   r  r2   r   r  addr2addr3r1  Zaddr5Zaddr6r	   r	   r
   testAddrExclude	  s4    





zIpaddrUnitTest.testAddrExcludec              
   C   s   |  ttdttd |  ttdttd |  ttdttd |  ttdttttdj td}td}i }d || j< d || j	< d ||< d ||< | 
| j| | 
|| d S )Nr4  r5  r   r  )r   hashr   r  r  r  r  r  rc  rf  rJ  )r   r  r  dummyr	   r	   r
   testHash	  s.    



zIpaddrUnitTest.testHashc                 C   s6   | j }| d|j | j}| t|jdd d  d S )Nr_  rc   rd   r0   )re  r   
compressedrh  r1   r  _string_from_ip_intr  r	   r	   r
   testIPBases	  s    zIpaddrUnitTest.testIPBasesc                 C   sD   | j }| d|j | d|j | d|j | dt| d S )Nra  z)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)rh  r   with_prefixlenwith_netmaskwith_hostmaskr   r  r	   r	   r
   testIPv6NetworkHelpers	  s    z%IpaddrUnitTest.testIPv6NetworkHelpersc                 C   sD   | j }| d|j | d|j | d|j | dt| d S )Nr_  z1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)re  r   rA  rB  rC  r   r  r	   r	   r
   testIPv4NetworkHelpers	  s
    z%IpaddrUnitTest.testIPv4NetworkHelpersc                 C   s|   t d}t |}t d}t |}t d}t d}| || | || | |t | | |t | d S )Nr4  r  r   r  )r   r  r  r   r   r   r7  r	   r	   r
   testCopyConstructor	  s    





z"IpaddrUnitTest.testCopyConstructorc                 C   sZ   ddddddddd	d
ddddddddd}t | D ]\}}| |tt| q6d S )Nz1:2:3:4:5:6:7:8/128z2001:0:0:4::8/128z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8/128z0:0:3::ffff/128z::4:0:0:0:ffff/128z::5:0:0:ffff/128z1::4:0:0:7:8/128r)  r  r  r  z::102:304/128z1:2:3:4:5:ffff:102:304/128z0:7:6:5:4:3:2:1/128z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1:0/128)z1:2:3:4:5:6:7:8z2001:0:0:4:0:0:0:8z2001:0:0:4:5:6:7:8z2001:0:3:4:5:6:7:8z0:0:3:0:0:0:0:ffffz0:0:0:4:0:0:0:ffffz0:0:0:0:5:0:0:ffffz1:0:0:4:0:0:7:8z0:0:0:0:0:0:0:0z0:0:0:0:0:0:0:0/0z0:0:0:0:0:0:0:1z*2001:0658:022a:cafe:0000:0000:0000:0000/66r   z1:2:3:4:5:ffff:1.2.3.4z::7:6:5:4:3:2:1z::7:6:5:4:3:2:0z7:6:5:4:3:2:1::z0:6:5:4:3:2:1::)r  itemsr   r   r   r  )r   Ztest_addressesZuncompressedr>  r	   r	   r
   testCompressIPv6Address	  s.    z&IpaddrUnitTest.testCompressIPv6Addressc                 C   sx   t d}t d}t d}t d}| d|j | dt dj | d|j | d	|j | d|j d S )
Nz2001::12001:0:5ef5:79fd:0:59d:a0e5:ba1r  z192.168.178.1z+2001:0000:0000:0000:0000:0000:0000:0001/128z+0000:0000:0000:0000:0000:0000:0000:0001/128r  z'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)r   r  r   r  r   r   exploded)r   r  r8  r9  r1  r	   r	   r
   testExplodeShortHandIpStr	  s"    




z(IpaddrUnitTest.testExplodeShortHandIpStrc                 C   s4   t d}t d}| d|j | d|j d S )Nr0  rx  z1.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)r   r   r   r   reverse_pointer)r   r  r8  r	   r	   r
   testReversePointer

  s    

z!IpaddrUnitTest.testReversePointerc                 C   s(   |  dt| j |  dt| j d S )Nr   r  )r   r  rc  rf  r   r	   r	   r
   testIntRepresentation
  s    z$IpaddrUnitTest.testIntRepresentationc                 C   s,   |  tdjd |  tdjd d S )Nr0   r  r  )r   r   r  r  r  r   r	   r	   r
   testForceVersion
  s    zIpaddrUnitTest.testForceVersionc                 C   sd   |  | jjd |  | jjd |  | jjd |  | jjd |  | jjd |  | jjd d S )Nr^  z1.2.3.4/255.255.255.0z1.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   rd  rA  rB  rC  rg  r   r	   r	   r
   testWithStar
  s     




zIpaddrUnitTest.testWithStarc                 C   s^  |  d| jj |  d| jj | | jjtd | | jjtd | d| jj | d| jj |  d| j	j |  d| j	j | | j	j
td | | jjj
td | | j	jtd | | j	jtd | | jjjtd | | jjjtd | d| j	j | d| j	j | d| jjj | d| jjj d S )Nr  r   r  z	0.0.0.255r  r  r  )rM  re  __dict__r   r  r   r   r   rJ  rh  r  r   rg  r  r   r	   r	   r
   testNetworkElementCaching+
  sH    



z(IpaddrUnitTest.testNetworkElementCachingc                 C   s   t d}t d}d}| ||ft |j d}| t |j d}| t |j t d}| t dt df|j d S )	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:fdd2rI  z94.245.121.253z95.26.244.94)r   r   r   r  teredor   r   )r   ZserverclientZteredo_addrbad_addrr	   r	   r
   
testTeredoU
  s     




zIpaddrUnitTest.testTeredoc                 C   s8   t d}t d}| t d|j | |j d S )Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z172.29.45.100)r   r  r   r   	sixtofourr   )r   ZsixtofouraddrrU  r	   r	   r
   testsixtofourg
  s    

zIpaddrUnitTest.testsixtofourc                 C   s,   t d}t d}| | |  d S )Nr   z2.3.4.5)r   r   r"  __hash__)r   Zipv4_address1Zipv4_address2r	   r	   r
   testV4HashIsNotConstanto
  s    

z&IpaddrUnitTest.testV4HashIsNotConstantc                 C   s,   t d}t d}| | |  d S )Nr`  z2001:658:22a:cafe:200:0:0:2)r   r  r"  rY  )r   Zipv6_address1Zipv6_address2r	   r	   r
   testV6HashIsNotConstantu
  s    

z&IpaddrUnitTest.testV6HashIsNotConstantN)Nr!   r"   r#   rl  rm  rs  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r*  r,  r/  r2  r3  r:  r=  r@  rD  rE  rF  rH  rK  rM  rN  rO  rP  rR  rV  rX  rZ  r[  r	   r	   r	   r
   r]    s   	GC
6%7bIMW
M"[	*r]  __main__)Zunittestr,   r%   r3   r:   r   r   Ztest.supportr   r   ZTestCaser   r'   rC   r_   rk   r   r   r   r   r  r  r  r  r  r]  r!   mainr	   r	   r	   r
   <module>   sL   621p vY6i/ 6            h
