a ze@s^ddlZddlZddlZddlZddlZddlZddlZddlmZm Z Gdddej Z GdddZ Gddde Z Gd d d e ZGd d d e e ZGd dde eZGddde ZGddde eZGddde eZGdddeZGddde eZGddde eZGddde ZGdddej ZGdd d ej Zed!krZedS)"N)LARGESTSMALLESTc@s>eZdZeddZejddZddZddZ d d Z d S) BaseTestCasecCstdSN)NotImplementedErrorselfr G/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_ipaddress.pyfactory$szBaseTestCase.factorycgs`|r ||}|||}|}|VWdn1s80Y|jjdur\||jjdSr)ZassertRaisesRegex exception __context__ assertTrue__suppress_context__)rexc_typedetailsargscmexcr r r assertCleanError(s $ zBaseTestCase.assertCleanErrorcGs|jtj|g|RSr)r ipaddressAddressValueErrorrrrr r r assertAddressError8s zBaseTestCase.assertAddressErrorcGs|jtj|g|RSr)rrZNetmaskValueErrorrr r r assertNetmaskError=s zBaseTestCase.assertNetmaskErrorcCs|||||dSr) assertEqualr rlhsrhsr r r assertInstancesEqualBsz!BaseTestCase.assertInstancesEqualN) __name__ __module__ __qualname__propertyr contextlibcontextmanagerrrrrr r r r rs  rc@s,eZdZddZddZddZddZd S) CommonTestMixincCs8|d|dWdn1s*0YdS)NAddress cannot be emptyrr rr r r test_empty_addressIs z"CommonTestMixin.test_empty_addresscCsB|ttd|dWdn1s40YdS)Nz1.0g?)rreescapereprr rr r r test_floats_rejectedMsz$CommonTestMixin.test_floats_rejectedcCsB|ttj|d|tt|d|tt|ddS)N) assertRaises TypeErroroperatorindexr hexbytesrr r r test_not_an_index_issue15559Qsz,CommonTestMixin.test_not_an_index_issue15559c CslttjdD]X}|j|d8||}tt||}|||Wdq1s\0YqdS)Nr/)proto)rangepickleHIGHEST_PROTOCOLsubTestr loadsdumpsr)raddrr7xyr r r pickle_testXs  zCommonTestMixin.pickle_testN)r r!r"r*r.r6rAr r r r r&Gsr&c@s<eZdZddZddZddZddZd d Zd d Zd S)CommonTestMixin_v4c Cszd}gd}|D]d}|j|dD||||Wdn1sL0YWdq1sj0YqdS)Nz(Leading zeros are not permitted in '\d+') z000.000.000.000192.168.000.001z016.016.016.016rCz001.000.008.016z 01.2.3.40z 1.02.3.40z 1.2.03.40z 1.2.3.040)address)r;rr )rmsgZ addressesrDr r r test_leading_zerosbs   z%CommonTestMixin_v4.test_leading_zeroscCs|dd|dddS)Nr0.0.0.0P 192.168.0.1rrr r r test_intus zCommonTestMixin_v4.test_intcCs(|tdd|tdddS)N00000000rGc0a80001rI)rr5fromhexrr r r test_packedyszCommonTestMixin_v4.test_packedcCsBd}|t||dWdn1s40YdS)Nz,-1 (< 0) is not permitted as an IPv4 addressrr+r,r rrEr r r test_negative_ints_rejected}sz.CommonTestMixin_v4.test_negative_ints_rejectedcCsFd}|t|d|dWdn1s80YdS)Nz1%d (>= 2**32) is not permitted as an IPv4 addresslrQrRr r r test_large_ints_rejectedsz+CommonTestMixin_v4.test_large_ints_rejectedcs fdd}|d|ddS)NcsRd|}d}t|||f|Wdn1sD0YdS)Nz4%r (len %d != 4) is not permitted as an IPv4 addressrQlengthr>rErr r assertBadLengthszBCommonTestMixin_v4.test_bad_packed_length..assertBadLengthr rrXr rr test_bad_packed_lengths z)CommonTestMixin_v4.test_bad_packed_lengthN) r r!r"rFrKrOrSrTr\r r r r rB`s rBc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)CommonTestMixin_v6cCs|dd|dddS)Nz 0000::0000::z000::c0a8:0001::c0a8:1rJrr r r rFs z%CommonTestMixin_v6.test_leading_zeroscCs|dd|dddS)Nrr^rHr_rJrr r r rKs zCommonTestMixin_v6.test_intcCsRdtd}||ddtd}||dtdd}||ddS)Ns rLr^rMr_zc0a8:1::)r5rNrrr>r r r rOs   zCommonTestMixin_v6.test_packedcCsBd}|t||dWdn1s40YdS)Nz,-1 (< 0) is not permitted as an IPv6 addressrPrQrRr r r rSsz.CommonTestMixin_v6.test_negative_ints_rejectedcCsNd}|t|dd|ddWdn1s@0YdS)Nz2%d (>= 2**128) is not permitted as an IPv6 addressrQrRr r r rTsz+CommonTestMixin_v6.test_large_ints_rejectedcs fdd}|d|ddS)Ncs\d|}d}t|||f$||Wdn1sN0YdS)NrUz5%r (len %d != 16) is not permitted as an IPv6 addressrQrVrr r rXs  zBCommonTestMixin_v6.test_bad_packed_length..assertBadLengthr r[r rr r\s z)CommonTestMixin_v6.test_bad_packed_lengthcCs>d}|d|||Wdn1s00YdS)Nz::1%Invalid IPv6 address: "%r"r)rrDr r r test_blank_scope_idsz&CommonTestMixin_v6.test_blank_scope_idcCs>d}|d|||Wdn1s00YdS)Nz ::1%scope%rer)rfr r r "test_invalid_scope_id_with_percentsz5CommonTestMixin_v6.test_invalid_scope_id_with_percentN) r r!r"rFrKrOrSrTr\rgrhr r r r r]s r]c@sZeZdZejZddZddZddZddZ d d Z d d Z d dZ ddZ ddZdS)AddressTestCase_v4cCs6td}gd}|D]\}}||t||qdS)N1.2.3.42))b 00000001000000100000001100101010)nrl)r?Z0102032a)XZ0102032A)_b'0000_0001_0000_0010_0000_0011_0010_1010)_nrp)_xZ 0102_032a)_XZ 0102_032A)#b"0b00000001000000100000001100101010)#nru)#xZ 0x0102032a)#XZ 0X0102032A)#_b)0b0000_0001_0000_0010_0000_0011_0010_1010)#_nrz)#_xZ 0x0102_032a)#_XZ 0X0102_032A)srj)r(rj)r IPv4Addressrformat)rZv4Zv4_pairsfmttxtr r r test_formats  zAddressTestCase_v4.test_formatcCs>d}|d|t|Wdn1s00YdS)Nz 127.0.0.1/24Unexpected '/' in %rrrrr`r r r test_network_passed_as_addresssz1AddressTestCase_v4.test_network_passed_as_addresscsfdd}|d|d|d|d|d|d|d |d |d |d |d |d|d|d|d|d|d|d|d|d|d|d|ddS)Ncs:d|t|Wdn1s,0YdS)NzExpected 4 octets in %rrr>rr r assertBadSplitszAAddressTestCase_v4.test_bad_address_split..assertBadSplitz127.0.1z42.42.42.42.42z42.42.42z42.42Z42z 42..42.42.42z 42.42.42.42.z42.42.42.42...z .42.42.42.42z...42.42.42.42z 016.016.016z016.016Z016Z000z0x0a.0x0a.0x0az 0x0a.0x0a0x0a.bogusz bogus.comZ1000Z1000000000000000z192.168.0.1.comr rrr rr test_bad_address_splits0 z)AddressTestCase_v4.test_bad_address_splitcs fdd}|d|ddS)Ncs:d|t|Wdn1s,0YdS)NzEmpty octet not permitted in %rrrrr r assertBadOctetsz;AddressTestCase_v4.test_empty_octet..assertBadOctetz 42..42.42z...r rrr rr test_empty_octets z#AddressTestCase_v4.test_empty_octetcsjfdd}|dd|dd|dd|d d |d d |d d|dd|dd|dddS)NcsJd||f}t|t|Wdn1s<0YdS)Nz)Only decimal digits permitted in %r in %rrr+r,rrr>ZoctetrErr r r s zBAddressTestCase_v4.test_invalid_characters..assertBadOctetz0x0a.0x0a.0x0a.0x0arz0xa.0x0a.0x0a.0x0aZ0xaz 42.42.42.-0-0z 42.42.42.+0+0z 42.42.42.-42z-42z +1.+2.+3.4+1z 1.2.3.4e0Z4e0 1.2.3.4::z4::1.a.2.3ar rr rr test_invalid_characters s         z*AddressTestCase_v4.test_invalid_characterscs$fdd}|dd|dddS)NcsJd}t|||ft|Wdn1s<0YdS)Nz*At most 3 characters permitted in %r in %rrrrr r rsz.assertBadOctetz0000.000.000.000Z0000z12345.67899.-54321.-98765Z12345r rr rr test_octet_lengths  z$AddressTestCase_v4.test_octet_lengthcs$fdd}|dd|dddS)NcsJd||f}t|t|Wdn1s<0YdS)Nz$Octet %d (> 255) not permitted in %rrrrr r r$s z;AddressTestCase_v4.test_octet_limit..assertBadOctetz 257.0.0.0iz 192.168.0.999ir rr rr test_octet_limit#s  z#AddressTestCase_v4.test_octet_limitcCs|ddSN 192.0.2.1rArr r r test_pickle,szAddressTestCase_v4.test_picklecCst|ddSrweakrefrefr rr r r test_weakref/szAddressTestCase_v4.test_weakrefN)r r!r"rrr rrrrrrrrrr r r r ris   ric@seZdZejZddZddZddZddZ d d Z d d Z d dZ ddZ ddZddZddZddZddZddZdS)AddressTestCase_v6cCs6td}gd}|D]\}}||t||qdS)Nz ::1.2.3.42))rkZ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)rm 0000000000000000000000000102032a)r?r)rnZ 0000000000000000000000000102032A)roZ0000_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)rq'0000_0000_0000_0000_0000_0000_0102_032a)rrr)rsZ'0000_0000_0000_0000_0000_0000_0102_032A)rtZ0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)rv"0x0000000000000000000000000102032a)rwr)rxZ"0X0000000000000000000000000102032A)ryZ0b0000_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 IPv6Addressrr)rZv6Zv6_pairsrrr r r r6s # zAddressTestCase_v6.test_formatcs fdd}|d|ddS)Ncs>d}||t|Wdn1s00YdS)Nr)rrrr>rErr r r`szIAddressTestCase_v6.test_network_passed_as_address..assertBadSplitz::1/24z::1%scope_id/24r rr rr r_s z1AddressTestCase_v6.test_network_passed_as_addresscs@fdd}|d|d|d|d|d|ddS) NcsHd}||ddt|Wdn1s:0YdS)NzAt least 3 parts expected in %r%rrsplitrrrrr r rhszUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts..assertBadSplit:z:1z FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper rr rr *test_bad_address_split_v6_not_enough_partsgs z=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partscs`fdd}|d|d|d|d|d|d|d |d |d |d dS) NcsHd}||ddt|Wdn1s:0YdS)Nz At most 8 colons permitted in %rrrrrrr r ruszTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons..assertBadSplitz9:8:7:6:5:4:3::2:1z10:9:8:7:6:5:4:3:2:1z::8:7:6:5:4:3:2:1z8:7:6:5:4:3:2:1::z10:9:8:7:6:5:4:3:42.42.42.42z9:8:7:6:5:4:3::2:1%scopez10:9:8:7:6:5:4:3:2:1%scopez::8:7:6:5:4:3:2:1%scopez8:7:6:5:4:3:2:1::%scopez"10:9:8:7:6:5:4:3:42.42.42.42%scoper rr rr )test_bad_address_split_v6_too_many_colonsts z.assertBadSplitz3ffe:0:0:0:0:0:0:0:1z9:8:7:6:5:4:3:2:1z 7:6:5:4:3:2:1z9:8:7:6:5:4:3:42.42.42.42z7:6:5:4:3:42.42.42.42z3ffe:0:0:0:0:0:0:0:1%scopez9:8:7:6:5:4:3:2:1%scopez7:6:5:4:3:2:1%scopez9:8:7:6:5:4:3:42.42.42.42%scopez7:6:5:4:3:42.42.42.42%scoper rr rr (test_bad_address_split_v6_too_many_partss z;AddressTestCase_v6.test_bad_address_split_v6_too_many_partscs fdd}|d|ddS)NcsHd}||ddt|Wdn1s:0YdS)Nz.Expected at most 7 other parts with '::' in %rrrrrrr r rszeAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon..assertBadSplitz1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper rr rr :test_bad_address_split_v6_too_many_parts_with_double_colons zMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_coloncsfdd}|d|d|d|d|d|d|d |d |d |d |d |d|d|d|d|d|d|d|d|ddS)NcsHd}||ddt|Wdn1s:0YdS)Nz At most one '::' permitted in %rrrrrrr r rszZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon..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:::1z3ffe::1::1%scopez1::2::3::4:5%scopez2001::db:::1%scopez3ffe::1::%scopez::3ffe::1%scopez:3ffe::1::1%scopez3ffe::1::1:%scopez:3ffe::1::1:%scopez :::%scopez2001:db8:::1%scoper rr rr /test_bad_address_split_v6_repeated_double_colons* zBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_coloncsPfdd}|d|d|d|d|d|d|d |d dS) NcsHd}||ddt|Wdn1s:0YdS)Nz0Leading ':' only permitted as part of '::' in %rrrrrrr r rszRAddressTestCase_v6.test_bad_address_split_v6_leading_colon..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 rr rr 'test_bad_address_split_v6_leading_colons z:AddressTestCase_v6.test_bad_address_split_v6_leading_coloncsPfdd}|d|d|d|d|d|d|d |d dS) NcsHd}||ddt|Wdn1s:0YdS)Nz1Trailing ':' only permitted as part of '::' in %rrrrrrr r rszSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon..assertBadSplitz 2001:db8::1:z1:2:3:4:5:6:7:z ::1.2.3.4:z::7:6:5:4:3:2:z2001:db8::1:%scopez1:2:3:4:5:6:7:%scopez::1.2.3.4:%scopez::7:6:5:4:3:2:%scoper rr rr (test_bad_address_split_v6_trailing_colons z;AddressTestCase_v6.test_bad_address_split_v6_trailing_coloncstfdd}|dd|dd|dd|d d |d d |d d|dd|dd|dd |dd dS)NcsFd||ddt|Wdn1s80YdS)Nz%s in %rrrr)r>Zv4_errorrr r assertBadAddressPartszDAddressTestCase_v6.test_bad_v4_part_in..assertBadAddressPartz 3ffe::1.netzExpected 4 octets in '1.net'z 3ffe::127.0.1zExpected 4 octets in '127.0.1'z::1.2.3zExpected 4 octets in '1.2.3'z ::1.2.3.4.5z Expected 4 octets in '1.2.3.4.5'z3ffe::1.1.1.netz5Only decimal digits permitted in 'net' in '1.1.1.net'z3ffe::1.net%scopez3ffe::127.0.1%scopez ::1.2.3%scopez::1.2.3.4.5%scopez3ffe::1.1.1.net%scoper )rrr rr test_bad_v4_part_ins6   z&AddressTestCase_v6.test_bad_v4_part_incsfdd}|dd|dd|dd|d d |d d |d d|dd|dd|dd|dd |dd |dddS)NcsTd||ddf}t|t|Wdn1sF0YdS)Nz%Only hex digits permitted in %r in %rrr)rrr+r,rrr>partrErr r assertBadPartszAAddressTestCase_v6.test_invalid_characters..assertBadPartz 3ffe::googZgoogz3ffe::-0rz3ffe::+0rz3ffe::-1-1r1.2.3.4 1234:axy::bZaxyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope1234:axy::b%scoper rrr rr rs            z*AddressTestCase_v6.test_invalid_characterscs`fdd}|dd|dd|dd|d d |d d|d d|d d|dd dS)NcsJd}|||ddt|Wdn1s<0YdS)Nz*At most 4 characters permitted in %r in %rrrrrrr r rsz:AddressTestCase_v6.test_part_length..assertBadPartz::00000Z00000z 3ffe::10000Z10000z 02001:db8::Z02001z2001:888888::1Z888888z ::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper rr rr test_part_lengths        z#AddressTestCase_v6.test_part_lengthcCs|ddS)N 2001:db8::rrr r r r szAddressTestCase_v6.test_picklecCs$t|dt|ddS)Nr2001:db8::%scoperrr r r r#szAddressTestCase_v6.test_weakrefN)r r!r"rrr rrrrrrrrrrrrrrr r r r r3s)  rc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)NetmaskTestMixin_v4cCsLdD]B}||}|t|d|t|jd|t|jdqdS)N)r 1.2.3.4/32255.255.255.255rGr rstrnetmaskhostmask)rrDnetr r r test_no_mask+s  z NetmaskTestMixin_v4.test_no_maskcCs@d}|d|||Wdn1s20YdS)Nz 1.2.3.4/32/24Only one '/' permitted in %rr)r`r r r test_split_netmask4sz&NetmaskTestMixin_v4.test_split_netmaskcs\fdd}|dd|dd|dd|dd|d d|d d |d td dS)Ncs8||Wdn1s*0YdSrr)r>rrr r assertBadAddress:s zANetmaskTestMixin_v4.test_address_errors..assertBadAddress/r'/8rzExpected 4 octets google.com10/8 ::1.2.3.4zOnly decimal digitsz 1.2.3.256z 256 (> 255))r+r,rrr rr test_address_errors9s       z'NetmaskTestMixin_v4.test_address_errorscCs|t|ddtddD]}d|}||}|t|||t|d|j||t|d|||dvrdd |}|t|d|j|q dS) Nz192.0.2.0/255.255.255.0 192.0.2.0/24r!z 0.0.0.0/%dz 0.0.0.0/%sz 0.0.0.0/0%d) rr)rrr r8rr)rinet_strrr r r test_valid_netmaskFs   z&NetmaskTestMixin_v4.test_valid_netmaskcsfdd}|dd|dd|dd|dd|dd|dd |dd |dd |d d |d d|d d|d d|d d|d ddS)NcsNd|}t|"d||fWdn1s@0YdSN%r is not a valid netmaskz%s/%srr+r,r r>rrErr r assertBadNetmask[szANetmaskTestMixin_v4.test_netmask_errors..assertBadNetmaskrr(rr 1 0x1Z33z254.254.255.256r1.1.1.1z 254.xyz.2.3z 240.255.0.0z 255.254.128.0z 0.1.127.255puddingr^r rrr rr test_netmask_errorsZs              z'NetmaskTestMixin_v4.test_netmask_errorscs$fdd}|dd|dddS)NcsJd|}t|||fWdn1s<0YdSNrrrrr r rpszJNetmaskTestMixin_v4.test_netmask_in_tuple_errors..assertBadNetmaskrrPrr rr rr test_netmask_in_tuple_errorsos  z0NetmaskTestMixin_v4.test_netmask_in_tuple_errorscCs"|d|d|ddS)Nz 192.0.2.0/27z 192.0.2.0/31 192.0.2.0rrr r r rws  zNetmaskTestMixin_v4.test_pickleN r r!r"rrrrrrrr r r r r(s  rc@seZdZejZdS)InterfaceTestCase_v4N)r r!r"r IPv4Interfacer r r r r r}src@s*eZdZejZddZddZddZdS)NetworkTestCase_v4cCst||d|d||d|d||d|d||d|ddSN 10.0.0.0/30z 10.0.1.0/24z 10.0.0.0/24 assertFalser subnet_ofrrr r r test_subnet_ofs(    z!NetworkTestCase_v4.test_subnet_ofcCst||d|d||d|d||d|d||d|ddSrrr supernet_ofrrr r r test_supernet_ofs(    z#NetworkTestCase_v4.test_supernet_ofcCs|t&tdtdWdn1s60Y|t&tdtdWdn1sv0Y|t&tdtdWdn1s0Y|t&tdtdWdn1s0YdS)Nr::1/128)r0r1r IPv4Networkr IPv6Networkrrr r r test_subnet_of_mixed_typess   "  "  "  z-NetworkTestCase_v4.test_subnet_of_mixed_typesN) r r!r"rrr rrrr r r r rsrc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)NetmaskTestMixin_v6cCsdD]B}||}|t|d|t|jd|t|jdq|d}|t|d|t|jd|t|jddS)N)::1r/srz'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr^ ::1%scope ::1%scope/128r)rrDrZ scoped_netr r r rs  z NetmaskTestMixin_v6.test_no_maskcCs|d}|d|||Wdn1s20Yd}|d|||Wdn1sn0YdS)Nzcafe:cafe::/128/190rzcafe:cafe::%scope/128/190r))rr>Z scoped_addrr r r rs (z&NetmaskTestMixin_v6.test_split_netmaskcsfdd}|dd|dd|dd|dd|d d|d d |d d|d d|dd|dd|dd|dd dS)Ncs8||Wdn1s*0YdSrr)rrr r rs zANetmaskTestMixin_v6.test_address_errors..assertBadAddressrr'rrzAt least 3 partsrrrzOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez 1.2.3.4%scopez 10%scope/8rr rr rr rs            z'NetmaskTestMixin_v6.test_address_errorscCs|t|ddtddD]<}d|}|t||||t|d||q |t|ddtddD]<}d|}|t||||t|d||q~dS)Nz 2001:db8::/32rz::/%dz::/0%dz2001:db8::%scope/32)rrr r8)rrrr r r rsz&NetmaskTestMixin_v6.test_valid_netmaskcsfdd}|dd|dd|dd|dd|dd|dd|dd |dd |dd |dd |d d |dd dS)NcsNd|}t|"d||fWdn1s@0YdSrrrrr r rszANetmaskTestMixin_v6.test_netmask_errors..assertBadNetmaskrr(1::rrrrZ129rrr^rr rr rr rs            z'NetmaskTestMixin_v6.test_netmask_errorscs.fdd}|dd|dd|dddS)NcsJd|}t|||fWdn1s<0YdSrrrrr r r szJNetmaskTestMixin_v6.test_netmask_in_tuple_errors..assertBadNetmaskrrPrrr rr rr r s   z0NetmaskTestMixin_v6.test_netmask_in_tuple_errorscCs,|d|d|d|ddS)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoperrr r r rs   zNetmaskTestMixin_v6.test_pickleNrr r r r rs  rc@seZdZejZdS)InterfaceTestCase_v6N)r r!r"r IPv6Interfacer r r r r rsrc@s"eZdZejZddZddZdS)NetworkTestCase_v6cCs||d|d||d|d||d|d||d|d||d|d||d|ddS)N 2000:999::/56 2000:aaa::/48 2000:aaa::/56 2000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56rrr r r r#s<      z!NetworkTestCase_v6.test_subnet_ofcCst||d|d||d|d||d|d||d|ddS)Nrr r r rrr r r r<s(    z#NetworkTestCase_v6.test_supernet_ofN)r r!r"rrr rrr r r r r src@s,eZdZddZddZddZddZd S) FactoryFunctionErrorscCsDd}d}|t|||||Wdn1s60YdS)NZcamelotz+%r does not appear to be an IPv4 or IPv6 %s)r ValueError)rr kindr>rEr r r assertFactoryErrorQsz(FactoryFunctionErrors.assertFactoryErrorcCs|tjddS)NrD)rr ip_addressrr r r test_ip_addressXsz%FactoryFunctionErrors.test_ip_addresscCs|tjddS)NZ interface)rr ip_interfacerr r r test_ip_interface[sz'FactoryFunctionErrors.test_ip_interfacecCs|tjddS)Nnetwork)rr ip_networkrr r r test_ip_network^sz%FactoryFunctionErrors.test_ip_networkN)r r!r"rrrrr r r r r Osr c@s^eZdZedZedZedZ e dZ e dZ edZe dZe dZedZee gZeegZe egZee gZeegZeegZeeZeeZedZedZedZe dZe dZedZ e dZ!e dZ"edZ#ddZ$ddZ%d d Z&d d Z'd dZ(ddZ)ddZ*ddZ+ddZ,ddZ-ddZ.dS)ComparisonTestsr/rra ::2%scopecCsTt}|jD]B}||||||k|||t|||tq dSr)objectobjects_with_scopedassertNotEqualrr__eq__NotImplemented__ne__rotherobjr r r test_foreign_type_equalitys   z*ComparisonTests.test_foreign_type_equalitycCs2|jD]&}|jD]}||urq|||qqdSr)objectsrrr r r test_mixed_type_equalitys   z(ComparisonTests.test_mixed_type_equalitycCs(t|j|jD]\}}|||qdSr)zip v6_objectsv6_scoped_objectsrrr r r test_scoped_ipv6_equalitysz)ComparisonTests.test_scoped_ipv6_equalitycCs(|jD]}|jD]}|||qqdSr) v4_objectsr'rrr r r test_v4_with_v6_scoped_equalitys  z/ComparisonTests.test_v4_with_v6_scoped_equalitycCs4|jD](}|||||||||qdSr)rrassertLessEqualassertGreaterEqualrr!r r r test_same_type_equalitys   z'ComparisonTests.test_same_type_equalityc Cs|j|jf|j|jf|j|jf|j|jf|j|j f|j |j f|j |j f|j|jf|j|jff D]|\}}||||||||||||||||||k|||k|||k|||kq^dSr)v4addrv4addr2v4netv4net2v4intfv4intf2v6addrv6addr2v6netv6net2v6intfv6intf2 v6addr_scopedv6addr2_scoped v6net_scoped v6net2_scoped v6intf_scopedv6intf2_scopedrZ assertLessr+Z assertGreaterr,rrr r r test_same_type_orderings&             z'ComparisonTests.test_same_type_orderingcCs|jD]}|||jq|j|jD]}|||jq&|j|jD]}|||jqF|j|j|jgD]}|||jql|j|j|jgD]}|||jq|j |j |jgD]}|||jqdSr) v4_addressesassertInr1 v6_addressesv6_scoped_addressesr7r=r) assertNotInr&r'r-r r r test_containments z ComparisonTests.test_containmentcs|jD]|jD]zttsttr2q|tfdd|tfdd|tfdd|tfddqqdS)NcskSrr r rrr r z:ComparisonTests.test_mixed_type_ordering..cskSrr r rHr r rIrJcskSrr r rHr r rIrJcskSrr r rHr r rIrJ)r isinstancetyper0r1rr rHr test_mixed_type_orderings  z(ComparisonTests.test_mixed_type_orderingc CsPt}|jD]<}|t||kWdn1s:0Y|t||kWdn1sl0Y|t||kWdn1s0Y|t||kWdn1s0Y||tk||tk||tk||tk||tk||tk||tk||tkq dSr)rrr0r1rrrrrr r r test_foreign_type_orderings$  & & & &z*ComparisonTests.test_foreign_type_orderingcCs|j|j|jg}|j|j|jg}|j|j|jg}| |t |j t j d| |t |jt j d| |t |jt j d| ||t |j |jt j d| tt tdS)N)key)r/r1r3r5r7r9r;r=r?rsortedr)rZget_mixed_type_keyr&r'rr)rZ v4_orderedZ v6_orderedZv6_scoped_orderedr r r test_mixed_type_keys0  z#ComparisonTests.test_mixed_type_keycCs@td}td}td}td}td}td}|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)Nrrr)rrrr0r1__lt____gt__)rr/r1r5r7r;r=r r r test_incompatible_versionss,      z*ComparisonTests.test_incompatible_versionsN)/r r!r"rrr/rr1rr3rr5rr7rr9r;r=r?rBr)rDr&rEr'r#rr0r2r4r6r8r:r<r>r@r"r$r(r*r.rArGrMrNrQrTr r r r rbsJ                        rc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAdBZ#dCdDZ$dEdFZ%dGdHZ&dIdJZ'dKdLZ(dMdNZ)dOdPZ*dQdRZ+dSdTZ,dUdVZ-dWdXZ.dYdZZ/d[d\Z0d]d^Z1d_d`Z2dadbZ3dcddZ4dedfZ5dgdhZ6didjZ7dkdlZ8dmdnZ9dodpZ:dqdrZ;dsdtZdydzZ?d{d|Z@d}d~ZAddZBddZCddZDddZEddZFddZGddZHddZIddZJdS)IpaddrUnitTestcCsptd|_td|_td|_td|_td|_ t d|_ td|_ td|_ t d |_dS) Nr 1.2.3.4/24 1.2.3.0/242001:658:22a:cafe:200:0:0:1z2001:658:22a:cafe:200:0:0:1/642001: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_addressripv4_interfacer ipv4_networkr ipv6_addressipv6_interfacer ipv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkrr r r setUps"    zIpaddrUnitTest.setUpcCsF|dttd|dttd|dttddS)NzIPv4Interface('1.2.3.4/32')rzIPv6Interface('::1/128')rzIPv6Interface('::1%scope/128')r)rr-rrrrr r r testRepr)s   zIpaddrUnitTest.testReprcCs"td}td}|td||t|df||td||td||t|df||td||ttd Wdn1s0Y|tt|d fWdn1s0Y|ttd Wdn1s 0Y|ttd Wdn1sV0Y|tt|d fWdn1s0Y|ttdWdn1s0Ytd}|tjd dd||tj|d fdd||tjd dd||tjd dd||tj|d fdd||tjddd|td}td}|td||t|d f||td||td||t|d f||td||td td|td tddS)Nrz 192.0.2.1/32)rrr)r)rrr)rfr)rrg)rfrg)r 255.255.255.0rh)rfrhrFstrictr)rrh)rh)rrg)rkrgz 192.0.2.1/24)rrrrr0r r)riprr r r testIPv4Tuple2s      ( , * * . *             zIpaddrUnitTest.testIPv4TuplecCsRtd}td}|td||td||t|df|td}td}|td||td||t|d f|td }td }|ttd Wdn1s0Y|ttd Wdn1s0Y|tt|dfWdn1sJ0Ytd}|tjd dd||tjd dd||tj|dfdd||tdtd|tdtdtd}|ttdWdn1s 0Y|tt|dfWdn1sD0YdS)Nrz2001:db8::/128)r128) n rbrnz 2001:db8::/96)r96)ro`rpr 2001:db8::1)rrrq) n rqrqFri)rrrpz2001:db8::1/96)rsrp2001:db8::1%scope)rtrq)rrrrr0r r)rrlr ip_scopedr r r testIPv6Tupleqs|         ( * .     * zIpaddrUnitTest.testIPv6TuplecCs|tddtd|tddtd|tddtd|tddtd|td dtd |td dtd dS) Nrz1.1.2.0z1.1.0.1riz::ffffrz ::ffff%scope)rrrrrrr r r testAddressIntMaths$z!IpaddrUnitTest.testAddressIntMathcCsP|ttjd|ttjdtj|ttjd|ttjdtjdS)NrPra)r0r rZv4_int_to_packedZ IPV4LENGTHZv6_int_to_packedZ IPV6LENGTHrr r r testInvalidIntToBytess  z$IpaddrUnitTest.testInvalidIntToBytescCstd}td}td}|tt|g||fg|tt||g||f||fg|tt|||g||fg|dtdd|dt|jdS)Nz 10.10.10.10z 10.10.10.11z 10.10.10.12rbrzIPv4Network('1.2.3.0/24'))rrrlistZ_find_address_rangeZ_count_righthand_zero_bitsr-r])rip1ip2ip3r r r testInternalss   zIpaddrUnitTest.testInternalscCs|t|jjd|t|jjd|t|jjd|t|jjd|t|jjd|t|jjd|t|jjd|t|jjddS)Ni1.2.3.0l /YE 2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)rintr]network_addressrr`rrcrr r r testGetNetworks(zIpaddrUnitTest.testGetNetworkcCs||jjtdjtd}td}td}||tt|j||tt|j||tt|jd}||j jt |j||j jt |j|t|j jj d|t|jjj d|t|jjj ddS)NrrrXrZ /YE )rr\_iprrrrrrr_rrbr[versionr^ra)ripv4ipv6Z ipv6_scopedZv6_intr r r testIpFromInts2         zIpaddrUnitTest.testIpFromIntcCsvtj}||jjtdj||d|d||jjtdj||d|d||d|ddS) Nr255.254.253.252 X*ffff:2:3:4:ffff::r^s)rrrr\rrr_rlrfr r r testIpFromPackeds$      zIpaddrUnitTest.testIpFromPackedcCs||t|jjd|t|jjd|t|jjd|t|jjd|t|jjd|t|jjddS)Nrrr2001:658:22a:cafe:200::1)rrr\rlrr_rbrr r r testGetIpszIpaddrUnitTest.testGetIpcCst||jjd|t|jjd||jjd|t|jjd||jjjd|t|j jjddS)NZscope) rr^Zscope_idrrar_rbr`rrcrr r r testGetScopeIds$   zIpaddrUnitTest.testGetScopeIdcCst|t|jjd|t|jjd|t|jjd||jjd|t|jjd||jjddS)Nlrhl @)rrr]rrr` prefixlenrcrr r r testGetNetmask#szIpaddrUnitTest.testGetNetmaskcCstd}|t|jjd||ddtd}|t|jjd||ddtd}|t|jjd||dddS)N 1.2.3.4/0r0z::1/0z ::1%scope/0)rrrrrrZ_prefix_from_prefix_stringr)rZipv4_zero_netmaskZipv6_zero_netmaskZipv6_scoped_zero_netmaskr r r testZeroNetmask-s   zIpaddrUnitTest.testZeroNetmaskcCstd}||jddS)Nz127.0.0.0/0.0.0.255rg)rrrrrrr r r testIPv4Net:s zIpaddrUnitTest.testIPv4NetcCs||t|jjd|t|jjd|t|jjd|t|jjd|t|jjd|t|jjddS)Ni 1.2.3.255l /YE %2001:658:22a:cafe:ffff:ffff:ffff:ffff)rrr]broadcast_addressrr`rcrr r r testGetBroadcast>szIpaddrUnitTest.testGetBroadcastcCs:||jjjd||jjjd||jjjddS)Nrgr)rr\rrr_rbrr r r testGetPrefixlenLszIpaddrUnitTest.testGetPrefixlencCs||jjd|t|jjd|tdjt d||j jd|t|j jd|t djt d||j jd|t|j jddS)Nz1.2.2.0 0.0.0.0/0?rz::0/0)rr]supernetrrrrrrrr`rrrcrr r r testGetSupernetQs&zIpaddrUnitTest.testGetSupernetcCs||jdjd|t|jdjd||jdjd|t|jdjd||jdjd|t|jdjddS)NrYz1.2.0.0=z2001:658:22a:caf8::)rr]rrrrr`rcrr r r testGetSupernet3bszIpaddrUnitTest.testGetSupernet3cCs|jt|jjddd|jt|jjdd||jjdd|jjdd|jt|jjddd|jt|jjdd||jjdd|jjd d|jt|jjddd|jt|jjdd||jjdd|jjd ddS) Nrar/prefixlen_diff new_prefixrrA>)r0r r]rrr`rcrr r r testGetSupernet4ns6         zIpaddrUnitTest.testGetSupernet4cCst|j}|dt||td|d|td|dtd}t|}|dt||td|d|td |dtd }t|}|dt||td|d|td |dtd td g}d }d}||tt |||tt ||tt |tt |tdg}d}d}||tt |||tt ||tt |tt |tdtdg}d}d}||tt |||tt ||tt |tt |tdg}d}d}||tt |||tt ||tt |tt |dS)Nz1.2.3.1rz 1.2.3.254rP2001:658:22a:cafe::/120rw2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/1202.0.0.0z2.0.0.1z 2.0.0.0/31)rrr)rrrz2001:658:22a:cafe::/127)r2001:658:22a:cafe::1/128)rrb) r{r]hostsrlenrrrrr)rrr`rcZaddrsZstr_argsZtpl_argsr r r testHostssd      zIpaddrUnitTest.testHostscCs|t|jjddt|jjdd|tt|jjdd|tt|jjddd|t|jjddt|jjdd|tt|jjd d|tt|jjddd|t|jjddt|jjdd|tt|jjd d|tt|jjddddS) NrYrrrrrDr) rrPr]subnetsr0r r{r`rcrr r r testFancySubnettingsB   z"IpaddrUnitTest.testFancySubnettingcCs|t|jdjd|tt|jdjd|tt|jdjd|t|jdjd|t|jdjddS)Nrrrr/z 1.2.3.128r) rr{r]rrrrr`rcrr r r testGetSubnetss"zIpaddrUnitTest.testGetSubnetscCsNtd}dd|D}dd|dD}||dg|||dS)NrcSsg|] }t|qSr r.0r?r r r rJz;IpaddrUnitTest.testGetSubnetForSingle32..cSsg|] }t|qSr rrr r r rrJra)rrrr)rrlsubnets1subnets2r r r testGetSubnetForSingle32s  z'IpaddrUnitTest.testGetSubnetForSingle32cCstd}dd|D}dd|dD}||dg|||td}dd|D}dd|dD}||dg|||dS) NrcSsg|] }t|qSr rrr r r rrJz.cSsg|] }t|qSr rrr r r rrJrarcSsg|] }t|qSr rrr r r rrJcSsg|] }t|qSr rrr r r rrJ)rrrr)rrlrrrur r r testGetSubnetForSingle128s   z(IpaddrUnitTest.testGetSubnetForSingle128cCsPdd|jdD}||gddd|jdD}||gddS)NcSsg|] }t|qSr rrr r r rrJz.IpaddrUnitTest.testSubnet2..ra)z 1.2.3.0/26z 1.2.3.64/26z 1.2.3.128/26z 1.2.3.192/26cSsg|] }t|qSr rrr r r rrJ)2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)r]rrr`)rZipsZipsv6r r r testSubnet2szIpaddrUnitTest.testSubnet2cCsdd|jdD}||ddgd||ddgd|t|dtd }d d|dD}||ddgd ||ddgd |t|ddS) NcSsg|] }t|qSr rrr r r rrJz2IpaddrUnitTest.testGetSubnets3..rY)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/32rxrcSsg|] }t|qSr rrr r r rrJ)z2001:658:22a:cafe::/128rz2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)r]rrrrr)rrr`r r r testGetSubnets3s" zIpaddrUnitTest.testGetSubnets3cCs|tt|jjd|tt|jd|tt|jjd|tt|jd|tt|j jd|tt|j ddS)N r r0r r{r\rrr]r_r`rbrcrr r r testSubnetFailsForLargeCidrDiffs$      z.IpaddrUnitTest.testSubnetFailsForLargeCidrDiffcCs@|t|jjjd|t|jjjd|t|jjjddS)Nrr)r0r r\rrr_rbrr r r !testSupernetFailsForLargeCidrDiff s   z0IpaddrUnitTest.testSupernetFailsForLargeCidrDiffcCs|tt|jjd|tt|jd|tt|jjd|tt|jd|tt|j jd|tt|j ddS)NrPrrr r r "testSubnetFailsForNegativeCidrDiff(s$      z1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffcCs||jjd|t|jdjd||jjd||jjd|t|jdjd||jjd||jjd|t|jdjd||jjddS)Nrxrrbill )rr]Z num_addressesr{rrr`rcrr r r testGetNum_Addresses6s&z#IpaddrUnitTest.testGetNum_AddressescCs`|td|j|td|jtd}|||j|tdtddS)Nz 1.2.3.128/25z 1.2.4.1/24z1.2.3.37z 1.1.0.0/16z 1.0.0.0/15) rCrrr]rFrrr __contains__)raddr1r r r testContainsGs   zIpaddrUnitTest.testContainscCs||t|jdd|t|jjd|t|jdd|t|jjd|t|jdd|t|jjddS)NrZ1.2.3.5rxz2001:658:22a:cafe::5r)rrr]r0 IndexError __getitem__r`rcrr r r testNthTszIpaddrUnitTest.testNthcCstd}|d|jt|}|dt|d|dt|d|dt|d|dt|d||d|ddS)Nz172.31.255.128/255.255.255.240z172.31.255.128rz172.31.255.143rP)rrrrr{r)rr>Z addr_listr r r testGetitem_s zIpaddrUnitTest.testGetitemcCs||jtdk||jtdk||jtdk||jtdk||jdk||jgk||jdk||jtdk||jtdk||jtdk||jdk||jgk||jdk||jtd k||jtd k||jtdk||jtdk||jtdk||jdk||jgk||jdkdS) NrV 1.2.3.4/23 ::1.2.3.4/24::1.2.3.4%scope/24r(ra2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64!2001:658:22a:cafe:200::1%scope/63)rr\rrrrr_rbrr r r testEqualjsZzIpaddrUnitTest.testEqualcCsn||jtdk||jtdk||jtdk||jtdk||jdk||jgk||jdk||jtdk||jdk||jgk||jdk||jtdk||jtd k||jtdk||jdk||jgk||jdk||j td k||j dk||j gk||j dk||j td k||j td k||j tdk||j td k||j tdk||j dk||j gk||j dk||j td k||j dk||j gk||j dkdS) NrVrrrr(rarrrrrr) rr\rrrrr[rr_r^rbrarr r r testNotEquals~zIpaddrUnitTest.testNotEqualcCs|ttdddS)Nz1.2.3.4/255.255.255.255rrrrrrr r r testSlash32Constructors  z%IpaddrUnitTest.testSlash32ConstructorcCs0|ttdd|ttdddS)Nrr)rrrrrr r r testSlash128Constructors z&IpaddrUnitTest.testSlash128ConstructorcCs|ttdddS)Nz1.2.3.4/0.0.0.0rrrr r r testSlash0Constructorsz$IpaddrUnitTest.testSlash0Constructorc Cstd}td}td}td}td}td}t||||||g}|t|tdtdgtd}td}td}td}t||||g}|t|tdgtd}td }td }td }td }td }t||||||g}|t|td td gt||g}|t|tdgtd}} |tt|| g|gtd}} |tt|| gtdgtd}td}td}t|||g}|t||gtd}td}td}t|||g}|t||gtdtdftdtdftdtdfg} | D]\}}| t tj||gqttdtdftdtdftdtdfg} | D]\}}| t tj||gqdS)N1.1.1.0r1.1.1.2z1.1.1.3z1.1.1.4z 1.1.1.0/30z 1.1.1.4/32z 1.1.0.0/24 1.1.1.0/24 1.1.2.0/24z 1.1.3.0/24z 1.1.4.0/24z 1.1.0.0/22z 1.1.0.0/23z 1.1.1.1/32z 2001::/100z 2001::/120 2001::/96z2001::%scope/100z2001::%scope/120z2001::%scope/96rz 1.1.0.0/32z 2001::/128rz2001::%scope/128) rrZcollapse_addressesrr{rrrrr0r1) rr|r}r~ip4Zip5Zip6Z collapsedZip_same1Zip_same2Z addr_tuplesr r r testCollapsings                                   zIpaddrUnitTest.testCollapsingc CsVtj}td}td}Gdddtj}|d}|d}|tt||||tt||td|tt||td|t|||dt dtd }|t|||t d t d gt d}t tj j }|t d gt|||td }td }|t|||dt dtd}|t|||t dt dgtd}td}|t|||dt dtd}|t|||t dt dg|tt|tdtd|tt|t dt d|tt|t dt d|tt|tdt ddS)Nrz 1.1.1.255c@seZdZeddZdS)z3IpaddrUnitTest.testSummarizing..IPv7AddresscSsdS)Nr rr r r r?sz;IpaddrUnitTest.testSummarizing..IPv7Address.versionN)r r!r"r#rr r r r IPv7Address>srrrrrz1.1.1.8z 1.1.1.0/29rrz$1:ffff:ffff:ffff:ffff:ffff:ffff:ffffz1::/16z2::z2::/128z 1::%scopez*1:ffff:ffff:ffff:ffff:ffff:ffff:ffff%scopez 2::%scopez1.1.0.0r^) rZsummarize_address_rangerrr0r r{r1rrrZ _ALL_ONESr)rZ summarizer|r}rZ ip_invalid1Z ip_invalid2r r r testSummarizing6s               zIpaddrUnitTest.testSummarizingcCs|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdkdS)Nrrr::2rr)rrrrr r r testAddressComparisons$      z$IpaddrUnitTest.testAddressComparisoncCs|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|td td k|td td k|td td k|td td k|td td k|td td k|td td k|td tdk|td tdk|td tdk|td tdk|td tdk|td tdk|td tdk|tdtd k|tdtd k|tdtd k|tdtd k|tdtd k|tdtd k|tdtd kdS) 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)rrrrrr r r testInterfaceComparisons                                   z&IpaddrUnitTest.testInterfaceComparisonc Csbtd}td}td}|||k|||k|||d|||d|||d|||d|||d|||ktd}td}td }|||k|||k|||d|||k|t|j j|j t d }t d }|t|j ||t|j||t|j ||t|j|td }|||k|||ktd }|||k|||k|||k|||ktd}|||k|||k|||k|||ktd}td}td}td}||||g}||||g}||||||||g}|||||| tdt|| tdt|tdtdk|tdtdk|tdtdk|tdtdk|tdtdk|tdtdkdS)Nrz 1.1.1.0/32rrrPr/z2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96::/0rz 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.2rrrr)rrrrZcompare_networksZ_get_networks_keyrr0r1r]r`rrrRrSrrsortZassertIsrr) rr|r}r~rrrrPZunsortedr r r testNetworkComparisons                          z$IpaddrUnitTest.testNetworkComparisoncCs4|ttjd|ttjd|ttjddS)Nz192.168.1.1/24z::1/120z ::1%scope/120)r0r rrrr r r testStrictNetworks1sz!IpaddrUnitTest.testStrictNetworkscCsVtd}td}td}||j|||j||||dS)Nz 1.2.3.0/30z 1.2.2.0/24z 1.2.2.64/26)rrrr]Zoverlapsr)rr Zother2Zother3r r r testOverlaps6s    zIpaddrUnitTest.testOverlapscCshd}t|}td|}|t|jt|jtd|}||j|j|tjtjddS)NrIz::%sz ::ffff:%sz2001:1.1.1.1:1.1.1.1) rrrrrrlrr0r)rZ ipv4_stringrZ v4compat_ipv6Z v4mapped_ipv6r r r testEmbeddedIpv4>s  zIpaddrUnitTest.testEmbeddedIpv4cCs|tdtd|tdtd|tdtd|tdtd|tdtd|tdtd|tdtd|tdtddS) 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)rrrrrr r r testIPv6AddressTooLargeIs0        z&IpaddrUnitTest.testIPv6AddressTooLargecCs4||jjd||jjd||jjddS)Nrr)rr[rr^rarr r r testIPVersion^szIpaddrUnitTest.testIPVersioncCs4||jjd||jjd||jjddS)Nrrb)rr\Z max_prefixlenr_rbrr r r testMaxPrefixLengthcsz"IpaddrUnitTest.testMaxPrefixLengthcCs||jjd|tdjd||jjd|tdjd|tdjd||jjd|td jd|td jddS) Nrrrrrrz ::1:0:0:0:0szffff:2:3:4:ffff::%scopez::1:0:0:0:0%scope)rr[Zpackedrrr^rrarr r r testPackedhs0   zIpaddrUnitTest.testPackedcCsttd}td}td}td}|tjt||tjt||tjt||tjt|dS)Nrr) rrrrrrLrrr)rZipv4netZipv4addrZipv6netZipv6addrr r r testIpType~s    zIpaddrUnitTest.testIpTypecCs |dtdj|dtdj|dtdj|dtdj|dtdj|dtdj|dtdj|dtdj|dtd j|dtd j|dtd j|dtd j|dtd j|dtdj|dtdj|dtdj|dtdj|dtdj |dtdj|dtdj |dt dj |dt dj|dt dj|dt dj|dt dj|dt dj|dt dj|dt dj|dt dj|dt d j|dt d j|dt dj|dt dj| t dj | t dj |dt dj|dt dj|dt dj|dtdj dS)NTz 224.1.1.1/31Fz 240.0.0.0z192.168.1.1/17z 192.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/24rGz 224.1.1.1z 240.0.0.1z239.255.255.255 192.168.1.1z169.254.100.200z169.255.100.200z 192.0.7.1z 203.0.113.1z127.100.200.254z 127.42.0.0)rrr is_multicastr is_reserved is_private is_link_local is_loopback is_globalris_unspecifiedrrrr r r testReservedIpv4s               zIpaddrUnitTest.testReservedIpv4cCs|dtdj|dtdddj|dtdj|dtdj|dtd j|dtd j|dtd j|dtdj|dtd j|dtd j|dtdj|dtdj|dtdj|dtdj|dtdj|dtdj|dtdj|dtdj|dtdj|dtdj|dtdj |dtdj |dtdj |dtdj|dtdj |dt dj|dt dddj|dt dj|dt dj|dt d j|dt d j|dt d j|dt dj|dt d j|dt d j|dt dj|dt dj|dt dj|dt dj|dt dj|dt dj|dt dj|dt dj|dt dj|dt dj |dt dj |dt dj |dtdj dS)NTzffff::rarbr/zff00::Fzfdff::zfecf::zfeff:ffff:ffff:ffff::z fbf:ffff::zfc00::zfc00:ffff:ffff:ffff::z fbff:ffff::zfe00::zfea0::z febf:ffff::z fe7f:ffff::zfec0::z 0:0::0:01z::1/127r^rz0::0rz::/127z 2001::1/128z 200::1/128z100::z 4000::1/128) rrrrZ is_site_localr r rr rr rr rr r r testReservedIpv6s            zIpaddrUnitTest.testReservedIpv6cCsL|tdjtd|tdjd|tdjtddS)Nz::ffff:192.168.1.1rz ::c0a8:101z::ffff:c0a8:101)rrrZ ipv4_mappedrr r r testIpv4Mapped s zIpaddrUnitTest.testIpv4Mappedc Cstd}td}td}td}td}td}|tt||tdtdg|tt|||t t|||t t|||t||g|tt||td td td td td tdtdtdgdS)N 10.1.1.0/24z 10.1.1.0/26z 10.2.1.0/2410.1.1.0z2001: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) rrrrrPr{Zaddress_excluder0r r1rraddr2addr3addr4Zaddr5Zaddr6r r r testAddrExclude& s4      zIpaddrUnitTest.testAddrExcludec Cs|ttdttd|ttdttd|ttdttd|ttdttttdjtd}td}i}d||j<d||j <d||<d||<| |j|| ||dS)Nrrrr) rhashrrrrrrr[r^rC)rr|r}dummyr r r testHash> s.       zIpaddrUnitTest.testHashcCs6|j}|d|j|j}|t|jddddS)NrWrarbr/)r]r compressedr`r0r Z_string_from_ip_intrr r r testIPBasesS szIpaddrUnitTest.testIPBasescCsD|j}|d|j|d|j|d|j|dt|dS)NrYz)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)r`rwith_prefixlen with_netmask with_hostmaskrrr r r testIPv6NetworkHelpersY sz%IpaddrUnitTest.testIPv6NetworkHelperscCsD|j}|d|j|d|j|d|j|dt|dS)NrWz1.2.3.0/255.255.255.0z1.2.3.0/0.0.0.255)r]rrrr rrr r r testIPv4NetworkHelpersb s z%IpaddrUnitTest.testIPv4NetworkHelperscCs|td}t|}td}t|}td}td}||||||||t|||t|dS)Nrrrr)rrrrrrrr r r testCopyConstructori s        z"IpaddrUnitTest.testCopyConstructorcCsZddddddddd d d d d dddddd}t|D]\}}||tt|q6dS)Nz1:2:3:4:5:6:7:8/128z2001:0:0:4::8/128z2001::4:5:6:7:8/128z2001:0:3:4:5:6:7:8/128z0:0:3::ffff/128z::4:0:0:0:ffff/128z::5:0:0:ffff/128z1::4:0:0:7:8/128z::/128rrrz ::102:304/128z1:2:3:4:5:ffff:102:304/128z0:7:6:5:4:3:2:1/128z0:7:6:5:4:3:2:0/128z7:6:5:4:3:2:1:0/128z0:6:5:4:3:2:1:0/128)z1:2:3:4:5:6:7:8z2001:0:0:4:0:0:0:8z2001:0:0:4:5:6:7:8z2001:0:3:4:5:6:7:8z0:0:3:0:0:0:0:ffffz0:0:0:4:0:0:0:ffffz0:0:0:0:5:0:0:ffffz1:0:0:4:0:0:7:8z0:0:0:0:0:0:0:0z0:0:0:0:0:0:0:0/0z0:0:0:0:0:0:0:1z*2001:0658:022a:cafe:0000:0000:0000:0000/66rz1:2:3:4:5:ffff:1.2.3.4z::7:6:5:4:3:2:1z::7:6:5:4:3:2:0z7:6:5:4:3:2:1::z0:6:5:4:3:2:1::)r{itemsrrrr)rZtest_addressesZ uncompressedrr r r testCompressIPv6Addressv s. z&IpaddrUnitTest.testCompressIPv6AddresscCsxtd}td}td}td}|d|j|dtdj|d|j|d |j|d|jdS) Nz2001::12001: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/128rz'2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1z*2001:0000:0000:0000:0000:0000:0000:0000/96)rrrrrrZexploded)rrrrrr r r testExplodeShortHandIpStr s"     z(IpaddrUnitTest.testExplodeShortHandIpStrcCs4td}td}|d|j|d|jdS)Nz 127.0.0.1rrz1.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)rrrrZreverse_pointer)rrrr r r testReversePointer s   z!IpaddrUnitTest.testReversePointercCs(|dt|j|dt|jdS)Nrr)rrr[r^rr r r testIntRepresentation sz$IpaddrUnitTest.testIntRepresentationcCs,|tdjd|tdjddS)Nr/rr)rrrrrrr r r testForceVersion szIpaddrUnitTest.testForceVersioncCsd||jjd||jjd||jjd||jjd||jjd||jjddS)NrVz1.2.3.4/255.255.255.0z1.2.3.4/0.0.0.255rz.2001:658:22a:cafe:200::1/ffff:ffff:ffff:ffff::z.2001:658:22a:cafe:200::1/::ffff:ffff:ffff:ffff)rr\rrr r_rr r r testWithStar s      zIpaddrUnitTest.testWithStarcCs^|d|jj|d|jj||jjtd||jjtd|d|jj|d|jj|d|j j|d|j j||j j t d||j j j t d||j jt d||j jt d||j j jt d||j j jt d|d|j j|d|j j|d|j j j|d|j j jdS)Nrrrz 0.0.0.255rrr)rFr]__dict__rrrrrrCr`rrr_rrr r r testNetworkElementCaching sH      z(IpaddrUnitTest.testNetworkElementCachingcCstd}td}d}|||ft|jd}|t|jd}|t|jtd}|tdtdf|jdS) 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)rrrrZteredorr)rZserverclientZ teredo_addrbad_addrr r r testTeredo s       zIpaddrUnitTest.testTeredocCs8td}td}|td|j||jdS)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z 172.29.45.100)rrrrZ sixtofourr)rZ sixtofouraddrr/r r r testsixtofour s    zIpaddrUnitTest.testsixtofourcCs,td}td}|||dS)Nrz2.3.4.5)rrr__hash__)rZ ipv4_address1Z ipv4_address2r r r testV4HashIsNotConstant s  z&IpaddrUnitTest.testV4HashIsNotConstantcCs,td}td}|||dS)NrXz2001:658:22a:cafe:200:0:0:2)rrrr2)rZ ipv6_address1Z ipv6_address2r r r testV6HashIsNotConstant s  z&IpaddrUnitTest.testV6HashIsNotConstantN)Kr r!r"rdrermrvryrzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!r"r#r%r'r(r)r*r+r-r0r1r3r4r r r r rUs ?;     6     %7bIMW  IM  *rU__main__)Zunittestr+r$r2r9rrZ test.supportrrZTestCaserr&rBr]rirrrrrrrr rrUr mainr r r r sL621pvU6e/6