hSrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK J r J r "SS\R5r "SS5r"SS \5r"S S \5r"S S \ \5r"SS\ \5r"SS\5r"SS\ \5r"SS\ \5r"SS\5r"SS\ \5r"SS\ \5r"SS\ 5r"SS\R5r"S S!\R5r\S":Xa\R:"5 gg)#zUnittest for ipaddress module.N)LARGESTSMALLESTcZ\rSrSr\S5r\RS5rSr Sr Sr Sr g) BaseTestCasec[eN)NotImplementedErrorselfs :/opt/alt/python313/lib64/python3.13/test/test_ipaddress.pyfactoryBaseTestCase.factory%s!!c'# U(aX#-nURX5nUnUv SSS5 WRRb&URURR5 gg!,(df  NL=f7f)zc Ensure exception does not display a context by default Wraps unittest.TestCase.assertRaisesRegex N)assertRaisesRegex exception __context__ assertTrue__suppress_context__)r exc_typedetailsargscmexcs r assertCleanErrorBaseTestCase.assertCleanError)sd nG  # #H 6 3I == $ $ 0 OOCMM>> ? 1RsA=A,AA=, A:6A=cFUR"[RU/UQ76$)z Ensure a clean AddressValueError)r ipaddressAddressValueErrorr rrs r assertAddressErrorBaseTestCase.assertAddressError9($$Y%@%@%,5/35 5rcFUR"[RU/UQ76$)z Ensure a clean NetmaskValueError)rrNetmaskValueErrorr!s r assertNetmaskErrorBaseTestCase.assertNetmaskError>r$rcdURURU5URU55 g)z8Check constructor arguments produce equivalent instancesN) assertEqualrr lhsrhss r assertInstancesEqual!BaseTestCase.assertInstancesEqualCs$ c*DLL,=>rN) __name__ __module__ __qualname____firstlineno__propertyr contextlibcontextmanagerrr"r'r.__static_attributes__r0rr rrsA&"" @ @5 5 ?rrc,\rSrSrSrSrSrSrSrg)CommonTestMixinHc|URS5 URS5 SSS5 g!,(df  g=f)NAddress cannot be emptyr"rr s r test_empty_address"CommonTestMixin.test_empty_addressJs*  $ $%> ? LL @ ? ?s- ;cUR[R"[S555 UR S5 SSS5 g!,(df  g=f)Nz1.0g?)r"reescapereprrr s r test_floats_rejected$CommonTestMixin.test_floats_rejectedNs5  $ $RYYtE{%; < LL = < = 2**32) is not permitted as an IPv4 addresslrwrxs r test_large_ints_rejected+CommonTestMixin_v4.test_large_ints_rejecteds:A  $ $RYYsU{%; < LL = < SU-nSnTR[R"X!U4-55 TRU5 SSS5 g!,(df  g=f)Nz4%r (len %d != 4) is not permitted as an IPv4 addressrwlengthrZrdr s r assertBadLengthBCommonTestMixin_v4.test_bad_packed_length..assertBadLengthsH6>DHC((33G)HI T"JIIs A  Ar0r rs` r test_bad_packed_length)CommonTestMixin_v4.test_bad_packed_lengths # rr0N) r1r2r3r4rfrmrsryr~rr8r0rr r`r`as!*$=L  rr`cD\rSrSrSrSrSrSrSrSr Sr S r S r g ) CommonTestMixin_v6cLURSS5 URSS5 g)Nz 0000::0000::z000::c0a8:0001::c0a8:1rlr s r rf%CommonTestMixin_v6.test_leading_zeross# !!,5 !!"2J?rcLURSS5 URSS5 g)Nrrrjrrlr s r rmCommonTestMixin_v6.test_ints" !!!T* !!*j9rcS[RS5-nURUS5 S[RS5-nURUS5 [RS5S-nURUS5 g)Ns rprrqrzc0a8:1::)rOrrr.r rZs r rsCommonTestMixin_v6.test_packedsk%-- 33 !!$-%-- 33 !!$ 3}}Z(83 !!$ 3rcSnUR[R"U55 URS5 SSS5 g!,(df  g=f)Nz,-1 (< 0) is not permitted as an IPv6 addressrvrwrxs r ry.CommonTestMixin_v6.test_negative_ints_rejectedr{r|cSnUR[R"USS--55 URSS-5 SSS5 g!,(df  g=f)Nz2%d (>= 2**128) is not permitted as an IPv6 addressrwrxs r r~+CommonTestMixin_v6.test_large_ints_rejectedsBB  $ $RYYsQV|%< = LLC > = =s A  Ac2^U4SjnU"S5 U"S5 g)Nc>SU-nSnTR[R"X!U4-55 TRU5 TRU5 SSS5 g!,(df  g=f)Nrz5%r (len %d != 16) is not permitted as an IPv6 addressrwrs r rBCommonTestMixin_v6.test_bad_packed_length..assertBadLengthsT6>DIC((33G)HI T" T"JIIs #A A,r0rs` r r)CommonTestMixin_v6.test_bad_packed_lengths # rcSnURSU5 URU5 SSS5 g!,(df  g=f)Nz::1%Invalid IPv6 address: "%r"r?r rcs r test_blank_scope_id&CommonTestMixin_v6.test_blank_scope_ids1  $ $%A7 K LL !L K K0 >cSnURSU5 URU5 SSS5 g!,(df  g=f)Nz ::1%scope%rr?rs r "test_invalid_scope_id_with_percent5CommonTestMixin_v6.test_invalid_scope_id_with_percents1  $ $%A7 K LL !L K Krr0N) r1r2r3r4rfrmrsryr~rrrr8r0rr rrs+@:4 ! " "rrch\rSrSr\R rSrSrSr Sr Sr Sr Sr S rS rS rS rg )AddressTestCase_v4c[R"S5n/SQnUH up4URU[X55 M" g)N1.2.3.42))b 00000001000000100000001100101010)nr)r[0102032a)X0102032A)_b'0000_0001_0000_0010_0000_0011_0010_1010)_nr)_x 0102_032a)_X 0102_032A)#b"0b00000001000000100000001100101010)#nr)#x 0x0102032a)#X 0X0102032A)#_b)0b0000_0001_0000_0010_0000_0011_0010_1010)#_nr)#_x 0x0102_032a)#_X 0X0102_032A)sr)r>r)r IPv4Addressr*format)r v4v4_pairsfmttxts r test_formatAddressTestCase_v4.test_formats;  " ": . (#JS   S&/ 2#rcSnURSU5 [R"U5 SSS5 g!,(df  g=f)Nz 127.0.0.1/24Unexpected '/' in %rr"rrrs r test_network_passed_as_address1AddressTestCase_v4.test_network_passed_as_addresss3  $ $%;T B  ! !$ 'C B B 5 Ac^U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S 5 U"S 5 U"S 5 U"S 5 U"S 5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 g)Nc>TRSU5 [R"U5 SSS5 g!,(df  g=f)NzExpected 4 octets in %rrrZr s r assertBadSplitAAddressTestCase_v4.test_bad_address_split..assertBadSplits/(()BDI%%d+JII 4 Az127.0.1z42.42.42.42.42z42.42.42z42.4242z 42..42.42.42z 42.42.42.42.z42.42.42.42...z .42.42.42.42z...42.42.42.42z 016.016.016z016.016016000z0x0a.0x0a.0x0az 0x0a.0x0a0x0a.bogusz bogus.com10001000000000000000z192.168.0.1.comr0r rs` r test_bad_address_split)AddressTestCase_v4.test_bad_address_splits , y!'(z"wt~&~&'(~&'(}%y!uu'({#vsw{#v)*()rc2^U4SjnU"S5 U"S5 g)Nc>TRSU5 [R"U5 SSS5 g!,(df  g=f)NzEmpty octet not permitted in %rrrs r assertBadOctet;AddressTestCase_v4.test_empty_octet..assertBadOctets5(()J)-/%%d+///rz 42..42.42z...r0r rs` r test_empty_octet#AddressTestCase_v4.test_empty_octets , {#urc^U4SjnU"SS5 U"SS5 U"SS5 U"SS 5 U"S S 5 U"S S 5 U"SS5 U"SS5 U"SS5 g)Nc>SU<SU<3nTR[R"U55 [R"U5 SSS5 g!,(df  g=f)Nz!Only decimal digits permitted in  in r"rCrDrrrZoctetrdr s r rBAddressTestCase_v4.test_invalid_characters..assertBadOctet s=AFMC((38%%d+988s A Az0x0a.0x0a.0x0a.0x0arz0xa.0x0a.0x0a.0x0a0xaz 42.42.42.-0-0z 42.42.42.+0+0z 42.42.42.-42z-42z +1.+2.+3.4+1z 1.2.3.4e04e0 1.2.3.4::z4::1.a.2.3ar0rs` r test_invalid_characters*AddressTestCase_v4.test_invalid_characters sf , ,f5+U3}d+}d+~u-|T*{E*{E*y#&rc6^U4SjnU"SS5 U"SS5 g)Nc>SnTR[R"X!U4-55 [R"U5 SSS5 g!,(df  g=f)Nz*At most 3 characters permitted in %r in %rrrs r r.assertBadOctetsA>C((33F)GH%%d+IHH A  Az0000.000.000.0000000z12345.67899.-54321.-9876512345r0rs` r test_octet_length$AddressTestCase_v4.test_octet_lengths  , )622GSX4-nTR[R"U55 [R"U5 SSS5 g!,(df  g=f)Nz$Octet %d (> 255) not permitted in %rrrs r r;AddressTestCase_v4.test_octet_limit..assertBadOctet$s?8E=HC((38%%d+988rz 257.0.0.0iz 192.168.0.999ir0rs` r test_octet_limit#AddressTestCase_v4.test_octet_limit#s , {C(,rc&URS5 gN 192.0.2.1r]r s r test_pickleAddressTestCase_v4.test_pickle,s %rcN[R"URS55 grweakrefrefrr s r test_weakrefAddressTestCase_v4.test_weakref/s DLL-.rcUR[R"S5R[R"S55 UR[R"S5R[R"S55 UR[R"S5RR [R"S55 g)N 192.168.1.1::ffff:192.168.1.1::ffff:c0a8:101)r*rr ipv6_mapped IPv6Address ipv4_mappedr s r test_ipv6_mapped#AddressTestCase_v4.test_ipv6_mapped2s ..}=II"../CD F ..}=II"../@A C ..}=IIUU"..}= ?rr0N)r1r2r3r4rrrrrrrrr rrrr%r8r0rr rrs?##G32( *:' =-&/?rrc\rSrSr\R rSrSrSr Sr Sr Sr Sr S rS rS rS rS rSrSrSrSrSrg)AddressTestCase_v6i;c[R"S5n/SQnUH up4URU[X55 M" g)Nz ::1.2.3.42))rڀ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r 0000000000000000000000000102032a)r[r+)r 0000000000000000000000000102032A)rڟ0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r'0000_0000_0000_0000_0000_0000_0102_032a)rr.)r'0000_0000_0000_0000_0000_0000_0102_032A)rڂ0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000001100101010)r"0x0000000000000000000000000102032a)rr1)r"0X0000000000000000000000000102032A)rڡ0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001_0000_0010_0000_0011_0010_1010)r)0x0000_0000_0000_0000_0000_0000_0102_032a)rr4)r)0X0000_0000_0000_0000_0000_0000_0102_032A)r ::102:32a)r>r6)rr#r*r)r v6v6_pairsrrs r rAddressTestCase_v6.test_format>s<  " "< 0! F#JS   S&/ 2#rc2^U4SjnU"S5 U"S5 g)Nc>SnTRX5 [R"U5 SSS5 g!,(df  g=f)Nr)r"rr#rZrdr s r rIAddressTestCase_v6.test_network_passed_as_address..assertBadSpliths0(C((3%%d+433rz::1/24z::1%scope_id/24r0rs` r r1AddressTestCase_v6.test_network_passed_as_addressgs , x ()rcr^U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 g)Nc>SnTRXRS5S5 [R"U5 SSS5 g!,(df  g=f)NzAt least 3 parts expected in %r%rr"splitrr#r<s r rUAddressTestCase_v6.test_bad_address_split_v6_not_enough_parts..assertBadSplitps>3C((jjoa.@A%%d+BAA A A:z:1z FEDC:9878z:%scopez:1%scopezFEDC:9878%scoper0rs` r *test_bad_address_split_v6_not_enough_parts=AddressTestCase_v6.test_bad_address_split_v6_not_enough_partsos; , st{#y!z"()rc^U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S 5 U"S 5 U"S 5 g) Nc>SnTRXRS5S5 [R"U5 SSS5 g!,(df  g=f)Nz At most 8 colons permitted in %rrArrBr<s r rTAddressTestCase_v6.test_bad_address_split_v6_too_many_colons..assertBadSplit}>4C((jjoa.@A%%d+BAArEz9: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%scoper0rs` r )test_bad_address_split_v6_too_many_colonsSnTRU[R"USS55 [R"U5 SSS5 g!,(df  g=f)Nz%At most 45 characters expected in '%s-)r"rCrDrr#r<s r rMAddressTestCase_v6.test_bad_address_split_v6_too_long..assertBadSplitsB:C((biiSb .BC%%d+DCCrz0:i'0z%zoneidz:255.255.255.255z:ffff:255.255.255.255r0)r r long_addrs` r "test_bad_address_split_v6_too_long5AddressTestCase_v6.test_bad_address_split_v6_too_longsI , E\S( y!y9,-y#556y#::;rc^U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S 5 U"S 5 U"S 5 g) Nc>SnTRXRS5S5 [R"U5 SSS5 g!,(df  g=f)Nz+Exactly 8 parts expected without '::' in %rrArrBr<s r rSAddressTestCase_v6.test_bad_address_split_v6_too_many_parts..assertBadSplits>?C((jjoa.@A%%d+BAArEz3ffe: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%scoper0rs` r (test_bad_address_split_v6_too_many_parts;AddressTestCase_v6.test_bad_address_split_v6_too_many_partssc , -.*+'23./3401,-8945rc2^U4SjnU"S5 U"S5 g)Nc>SnTRXRS5S5 [R"U5 SSS5 g!,(df  g=f)Nz.Expected at most 7 other parts with '::' in %rrArrBr<s r reAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colon..assertBadSplits>BC((jjoa.@A%%d+BAArEz1:2:3:4::5:6:7:8z1:2:3:4::5:6:7:8%scoper0rs` r :test_bad_address_split_v6_too_many_parts_with_double_colonMAddressTestCase_v6.test_bad_address_split_v6_too_many_parts_with_double_colons , )*/0rcR^U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S 5 U"S 5 U"S 5 U"S 5 U"S 5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 g)Nc>SnTRXRS5S5 [R"U5 SSS5 g!,(df  g=f)Nz At most one '::' permitted in %rrArrBr<s r rZAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colon..assertBadSplitrLrEz 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%scoper0rs` r /test_bad_address_split_v6_repeated_double_colonBAddressTestCase_v6.test_bad_address_split_v6_repeated_double_colons , |$~&~&{#{#}%}%~&u~&)*+,+,()()*+*++,{#+,rc^U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S 5 g) Nc>SnTRXRS5S5 [R"U5 SSS5 g!,(df  g=f)Nz0Leading ':' only permitted as part of '::' in %rrArrBr<s r rRAddressTestCase_v6.test_bad_address_split_v6_leading_colon..assertBadSplits>DC((jjoa.@A%%d+BAArEz :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::%scoper0rs` r 'test_bad_address_split_v6_leading_colon:AddressTestCase_v6.test_bad_address_split_v6_leading_colonsP , ~&'(''(+,-.,--.rc^U4SjnU"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S5 U"S 5 g) Nc>SnTRXRS5S5 [R"U5 SSS5 g!,(df  g=f)Nz1Trailing ':' only permitted as part of '::' in %rrArrBr<s r rSAddressTestCase_v6.test_bad_address_split_v6_trailing_colon..assertBadSplits>EC((jjoa.@A%%d+BAArEz 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:%scoper0rs` r (test_bad_address_split_v6_trailing_colon;AddressTestCase_v6.test_bad_address_split_v6_trailing_colonsP , ~&'(|$'(+,-.)*-.rc^U4SjnU"SS5 U"SS5 U"SS5 U"SS 5 U"S S 5 U"S S5 U"S S5 U"SS5 U"SS 5 U"SS 5 g)Nc>TRSXRS5S5 [R"U5 SSS5 g!,(df  g=f)Nz%s in %rrArrB)rZv4_errorr s r assertBadAddressPartDAddressTestCase_v6.test_bad_v4_part_in..assertBadAddressParts;((Xzz#q?QR%%d+SRRs A Az 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%scoper0)r rss` r test_bad_v4_part_in&AddressTestCase_v6.test_bad_v4_part_ins , ],JK_= ?Y; =]? A.. / 02PQ2= ?_; =0? A4. /rc^U4SjnU"SS5 U"SS5 U"SS5 U"SS 5 U"S S 5 U"S S 5 U"SS5 U"SS5 U"SS5 U"SS 5 U"SS 5 U"SS 5 g)Nc>SU<SURS5S<3nTR[R"U55 [R "U5 SSS5 g!,(df  g=f)NzOnly hex digits permitted in rrAr)rCr"rCrDrr#rZpartrdr s r assertBadPartAAddressTestCase_v6.test_invalid_characters..assertBadPartsK=A4::c?STCUVC((38%%d+988s A## A1z 3ffe::googgoogz3ffe::-0rz3ffe::+0rz3ffe::-1-1r1.2.3.4 1234:axy::baxyz3ffe::goog%scopez3ffe::-0%scopez3ffe::+0%scopez3ffe::-1%scopez1.2.3.4::%scope1234:axy::b%scoper0r r{s` r r*AddressTestCase_v6.test_invalid_characterss , lF+j$'j$'j$'k9-mU+(&1&-&-&-'3)51rc^U4SjnU"SS5 U"SS5 U"SS5 U"SS 5 U"S S5 U"S S5 U"S S5 U"S S 5 g)Nc>SnTRX!URS5S5 [R"U5 SSS5 g!,(df  g=f)Nz*At most 4 characters permitted in %r in %rrArrBrys r r{:AddressTestCase_v6.test_part_length..assertBadPart&s@>C((DJJsOA4FG%%d+HGGs A Az::0000000000z 3ffe::1000010000z 02001:db8::02001z2001:888888::1888888z ::00000%scopez3ffe::10000%scopez02001:db8::%scopez2001:888888::1%scoper0rs` r test_part_length#AddressTestCase_v6.test_part_length%s^ , i)mW-mW-&1ow/)73)73,h7rcHURS5 URS5 gN 2001:db8::2001:db8::%scoperr s r rAddressTestCase_v6.test_pickle5s & +,rc[R"URS55 [R"URS55 grrr s r rAddressTestCase_v6.test_weakref9s- DLL./ DLL!345rcURS5nURU[R"U55 URU[R"U55 g)Nr)rr*copydeepcopyrs r test_copyAddressTestCase_v6.test_copy=sB||./ tyy/ t}}T23rr0N)r1r2r3r4rr#rrrrGrMrUrZr_rdrirnrurrrrrr8r0rr r(r(;s^##G'3R* *=( <6(1-8/ / /62(8 -64rr(cB\rSrSrSrSrSrSrSrSr Sr S r S r g ) NetmaskTestMixin_v4iC;Input validation on interfaces and networks is very similarcSHynURU5nUR[U5S5 UR[UR5S5 UR[UR5S5 M{ g)N)r 1.2.3.4/32255.255.255.255rirr*strnetmaskhostmask)r rcnets r test_no_mask NetmaskTestMixin_v4.test_no_maskFsbCG,,w'C   SX| 4   S-/@ A   S. : DrcSnURSU-5 URU5 SSS5 g!,(df  g=f)Nz 1.2.3.4/32/24Only one '/' permitted in %rr?rs r test_split_netmask&NetmaskTestMixin_v4.test_split_netmaskOs4  $ $%Cd%J K LL L K Ks 2 Ac^U4SjnU"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"S S 5 U"S [R"S 55 g) Nc~>TRU5 TRU5 SSS5 g!,(df  g=fr r?rZrr s r assertBadAddressANetmaskTestMixin_v4.test_address_errors..assertBadAddressU)((1 T"211. </r=/8rzExpected 4 octets google.com10/8 ::1.2.3.4zOnly decimal digitsz 1.2.3.256z 256 (> 255))rCrDr rs` r test_address_errors'NetmaskTestMixin_v4.test_address_errorsTs_ # 7889"56':;!45&;<bii &>?rc .UR[URS55S5 UR[URS55S5 UR[URS55S5 UR[URS55S5 [SS5HnSU-nURU5nUR[U5U5 UR[URS UR-55U5 UR[URS U-55U5 US ;aSS U- -nUR[URS UR -55U5 M g) N 192.0.2.0 192.0.2.0/24)r24r 255.255.255.0z192.0.2.0/255.255.255.0r!z 0.0.0.0/%dz 0.0.0.0/%sz 0.0.0.0/0%d) rr)r*rrrTrr)r inet_strrs r test_valid_netmask&NetmaskTestMixin_v4.test_valid_netmaskasR T\\*;<=~N T\\*=>?P T\\*HIJ' ) T\\*CDE' )q"A"Q&G,,w'C   SXw /   DLL !;<=w H   Sma.?!@A7 KG|&"q&1   DLL !<=> Irc^U4SjnU"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"SS 5 U"SS 5 U"S S 5 U"S S 5 U"S S5 U"S S5 U"S S5 U"S S5 g)Nc>SU-nTR[R"U55 TRU<SU<35 SSS5 g!,(df  g=fN%r is not a valid netmaskrr'rCrDrrZrrdr s r assertBadNetmaskANetmaskTestMixin_v4.test_netmask_errors..assertBadNetmaskz@-7C((38 g67988 A Arr>r~r 1 0x133z254.254.255.256r1.1.1.1z 254.xyz.2.3z 240.255.0.0z 255.254.128.0z 0.1.127.255puddingrr0r rs` r test_netmask_errors'NetmaskTestMixin_v4.test_netmask_errorsys 8 B'D)D)E*E*D)$56I.M2M2O4M2I.D)rc6^U4SjnU"SS5 U"SS5 g)Nc>SU-nTR[R"U55 TRX45 SSS5 g!,(df  g=fNrrrs r rJNetmaskTestMixin_v4.test_netmask_in_tuple_errors..assertBadNetmask=-7C((38 d_-988 A Arrvrr0rs` r test_netmask_in_tuple_errors0NetmaskTestMixin_v4.test_netmask_in_tuple_errorss . B'B'rcjURS5 URS5 URS5 g)Nz 192.0.2.0/27z 192.0.2.0/31rrr s r rNetmaskTestMixin_v4.test_pickles, ( ( %rr0N r1r2r3r4__doc__rrrrrrrr8r0rr rrCs*E; @I0**(&rrc,\rSrSr\R rSrg)InterfaceTestCase_v4ir0N)r1r2r3r4r IPv4Interfacerr8r0rr rr %%Grrc>\rSrSr\R rSrSrSr Sr g)NetworkTestCase_v4icURURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 gN 10.0.0.0/30z 10.0.1.0/24z 10.0.0.0/24 assertFalser subnet_ofrr s r test_subnet_of!NetworkTestCase_v4.test_subnet_ofs  LL ' 1 1 ]+ - .  LL ' 1 1 ]+ - .  LL ' 1 1 ]+ - .  LL ' 1 1 ]+ - .rcURURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 grrr supernet_ofrr s r test_supernet_of#NetworkTestCase_v4.test_supernet_ofs  LL ' 3 3 ]+ - .  LL ' 3 3 ]+ - .  LL ' 3 3 ]+ - .  LL ' 3 3 ]+ - .rcFUR[5 [R"S5R [R "S55 SSS5 UR[5 [R "S5R [R"S55 SSS5 UR[5 [R"S5R [R "S55 SSS5 UR[5 [R "S5R [R"S55 SSS5 g!,(df  GN=f!,(df  N=f!,(df  N=f!,(df  g=f)Nr::1/128)rJrKr IPv4Networkr IPv6Networkrr s r test_subnet_of_mixed_types-NetworkTestCase_v4.test_subnet_of_mixed_typess   y )  ! !- 0 < <%%i0 2*  y )  ! !) , 8 8%%m4 6*  y )  ! !- 0 : :%%i0 2*  y )  ! !) , 6 6%%m4 6* )* )* )* )* )s/:E-:E0:F:F E-0 E> F F r0N) r1r2r3r4rrrrrrr8r0rr rrs##G.$.$ 6rrcB\rSrSrSrSrSrSrSrSr Sr S r S r g ) NetmaskTestMixin_v6ircSHynURU5nUR[U5S5 UR[UR5S5 UR[UR5S5 M{ URS5nUR[U5S5 UR[UR5S5 UR[UR5S5 g)N)::1rIsrz'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffffr ::1%scope ::1%scope/128r)r rcr scoped_nets r r NetmaskTestMixin_v6.test_no_masks7G,,w'C   SXy 1   S-/X Y   S. 5 8\\+.  Z/: Z//02[\ Z00148rcSnURSU-5 URU5 SSS5 SnURSU-5 URU5 SSS5 g!,(df  N?=f!,(df  g=f)Nzcafe:cafe::/128/190rzcafe:cafe::%scope/128/190r?)r rZ scoped_addrs r r&NetmaskTestMixin_v6.test_split_netmasksq$  $ $%Cd%J K LL L2  $ $%Ck%Q R LL %S R L KS RsA"A3" A03 Bc^U4SjnU"SS5 U"SS5 U"SS5 U"SS5 U"SS5 U"S S 5 U"S S5 U"S S5 U"S S5 U"SS5 U"SS5 U"SS 5 g)Nc~>TRU5 TRU5 SSS5 g!,(df  g=fr r?rs r rANetmaskTestMixin_v6.test_address_errors..assertBadAddressrrrr=rrzAt least 3 partsrrrzOnly hex digitsz/%scopez/%scope8zgoogle.com%scopez 1.2.3.4%scopez 10%scope/8rr0rs` r r'NetmaskTestMixin_v6.test_address_errorss # 7889'9:$67!34(9:$=>%>?+-?@*<='9:,.?@rc UR[URS55S5 UR[URS55S5 UR[URS55S5 [SS5H_nSU-nUR[URU55U5 UR[URSU-55U5 Ma UR[URS55S5 [SS5H_nSU-nUR[URU55U5 UR[URSU-55U5 Ma g) N)rr 2001:db8::/32)r32rz::/%dz::/0%dz2001:db8::%scope/32)r*rrrT)r rrs r r&NetmaskTestMixin_v6.test_valid_netmasks: T\\*<=>( * T\\*>?@( * T\\/:;_Mq#AkG   Sg!67 A   Shl!;SU-nTR[R"U55 TRU<SU<35 SSS5 g!,(df  g=frrrs r rANetmaskTestMixin_v6.test_netmask_errors..assertBadNetmaskrrrr>1::r~rrr129rrrrr0rs` r r'NetmaskTestMixin_v6.test_netmask_errorss 8 #&&%%&&& * *t$i0rcH^U4SjnU"SS5 U"SS5 U"SS5 g)Nc>SU-nTR[R"U55 TRX45 SSS5 g!,(df  g=frrrs r rJNetmaskTestMixin_v6.test_netmask_in_tuple_errors..assertBadNetmask/rrrrvrrr0rs` r r0NetmaskTestMixin_v6.test_netmask_in_tuple_errors.s( . #$c*rcURS5 URS5 URS5 URS5 g)Nz2001:db8::1000/124z2001:db8::1000/127z2001:db8::1000z2001:db8::1000%scoperr s r rNetmaskTestMixin_v6.test_pickle7s> -. -. )* /0rr0Nrr0rr rrs*E 9&A&G.1(+1rrc,\rSrSr\R rSrg)InterfaceTestCase_v6i?r0N)r1r2r3r4r IPv6Interfacerr8r0rr r"r"?rrr"c8\rSrSr\R rSrSrSr g)NetworkTestCase_v6iCcURURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 g)N 2000:999::/56 2000:aaa::/48 2000:aaa::/56 2000:bbb::/56z2000:999::%scope/56z2000:aaa::%scope/48z2000:aaa::%scope/56rr s r r!NetworkTestCase_v6.test_subnet_ofFs2  LL ) 3 3 _- / 0  LL ) 3 3 _- / 0  LL ) 3 3 _- / 0  LL ) 3 3 _- / 0  LL. / 9 9 23 5 6  LL. / 9 9 23 5 6rcURURS5RURS555 URURS5RURS555 URURS5RURS555 URURS5RURS555 g)Nr'r(r)r*rr s r r#NetworkTestCase_v6.test_supernet_of_s  LL ) 5 5 _- / 0  LL ) 5 5 _- / 0  LL ) 5 5 _- / 0  LL ) 5 5 _- / 0rr0N) r1r2r3r4rrrrrr8r0rr r%r%Cs##G620rr%c,\rSrSrSrSrSrSrSrg)FactoryFunctionErrorsirc~SnSnUR[XCU5 U"U5 SSS5 g!,(df  g=f)z3Ensure a clean ValueError with the expected messagecamelotz+%r does not appear to be an IPv4 or IPv6 %sN)r ValueError)r rkindrZrds r assertFactoryError(FactoryFunctionErrors.assertFactoryErrorts2;  " ":s$ ? DM@ ? ?s . <cDUR[RS5 g)Nrc)r4r ip_addressr s r test_ip_address%FactoryFunctionErrors.test_ip_address{  4 4i@rcDUR[RS5 g)N interface)r4r ip_interfacer s r test_ip_interface'FactoryFunctionErrors.test_ip_interface~s  6 6 DrcDUR[RS5 g)Nnetwork)r4r ip_networkr s r test_ip_network%FactoryFunctionErrors.test_ip_networkr:rr0N) r1r2r3r4r4r8r>rCr8r0rr r/r/rsAEArr/c.\rSrSr\R "S5r\R"S5r\R"S5r \R"S5r \R"S5r\R"S5r\R"S5r\R"S5r\R"S5r\\ /r\\/-r\ \/r\\/-r\\/r\\/-r\\-r\\-r\R "S5r\R"S5r\R"S5r\R"S5r\R"S5r \R"S5r!\R"S5r"\R"S5r#\R"S5r$Sr%Sr&Sr'S r(S r)S r*S r+S r,Sr-Sr.Sr/Sr0g)ComparisonTestsirIrr ::2%scopec[5nURHqnURX!5 URX!:H5 UR UR U5[ 5 UR URU5[ 5 Ms gr )objectobjects_with_scopedassertNotEqualrr*__eq__NotImplemented__ne__r otherobjs r test_foreign_type_equality*ComparisonTests.test_foreign_type_equalitysi++C    +   S\ *   SZZ. ?   SZZ. ? ,rc~URH-nURHnXLaM URX5 M M/ gr )objectsrKr+s r test_mixed_type_equality(ComparisonTests.test_mixed_type_equalitys6<TT:$r r0r,r-sr :ComparisonTests.test_mixed_type_ordering.. S3Yrc>TT:$r r0rsr rrrrc>TT:*$r r0rsr rr SCZrc>TT:$r r0rsr rrrr)rJ isinstancetyperJrKr+s @@r test_mixed_type_ordering(ComparisonTests.test_mixed_type_orderings++C//c49--Cc1K1K!!)->?!!)->?!!)-?@!!)-?@ 0,rcb[5nURGHLnUR[5 X!: SSS5 UR[5 X!: SSS5 UR[5 X!:* SSS5 UR[5 X!: SSS5 UR U[ :5 UR U[ :5 UR U[ :*5 UR U[ :5 UR U[:5 UR U[:5 UR U[:*5 UR U[:5 GMO g!,(df  GN;=f!,(df  GN+=f!,(df  GN=f!,(df  GN =fr )rIrJrJrKrrrrrOs r test_foreign_type_ordering*ComparisonTests.test_foreign_type_orderings++C""9- .""9- .""9- .""9- . OOC'M *   S7] + OOC7N +   SG^ ,   S8^ , OOC(N +   SH_ - OOC8O ,!,--------s/E)E;4F F) E8 ; F F  F. cURURUR/nURURUR /nUR URUR/nURU[UR[RS95 URU[UR[RS95 URU[UR[RS95 URX-[URUR-[RS95 UR[ [R"["55 g)N)key)rirkrmrorqrsrurwryr*sortedr_rget_mixed_type_keyrZr[rMrI)r v4_ordered v6_orderedv6_scoped_ordereds r test_mixed_type_key#ComparisonTests.test_mixed_type_key s)kk4::t{{; kk4::t{{; !//1B1BDDVDVW $-$@$@B C $-$@$@B C * 6 6$-$@$@B C 7$2H2H H$-$@$@B C )E)Ef)MNrc,[R"S5n[R"S5n[R"S5n[R"S5n[R"S5n[R"S5nUR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 UR[UR U5 g)Nrrr)rr7rBrJrK__lt____gt__)r rirkrorqrurws r test_incompatible_versions*ComparisonTests.test_incompatible_versionss%%i0$$Y/%%e,$$U+!,,[9  ++K8  )V]]F; )V]]F; )U\\59 )U\\59 )V]]F; )V]]F; )U\\59 )U\\59 )V]]MB )V]]MB )U\\<@ )U\\<@ )]%9%96B )]%9%96B )\%8%8%@ )\%8%8%@rr0N)1r1r2r3r4rrrirrkrrmr#rorrqr#rsrurwryrr_rrZrr[rUrJrjrlrnrprrrtrvrxrzrRrVr\r`rfr}rrrrrr8r0rr rFrFs  " "1 %F  ! !! $E  $ $Q 'F  " "1 %F  ! !! $E  $ $Q 'F))+6M((5L++K8MF#L'JF#L'J(-8+|n<:%G!$55##A&G  " "1 %F%%a(G##A&G  " "1 %F%%a(G**;7N))+6M,,[9N@.*. . ), .A-(O&ArrFc\rSrSrSrSrSrSrSrSr Sr S r S r S r S rS rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0S/r1S0r2S1r3S2r4S3r5S4r6S5r7S6r8S7r9S8r:S9r;S:rS=r?S>r@S?rAS@rBSArCSBrDSCrESDrFSErGSFrHSGrISHrJSIrKSJrLSKrMSLrNSMrOSNrPSOrQSPrRSQrSgR)SIpaddrUnitTesti:c [R"S5Ul[R"S5Ul[R "S5Ul[R"S5Ul[R"S5Ul [R"S5Ul [R"S5Ul [R"S5Ul [R"S 5Ul[R"S 5Ulg) 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/64r)rr ipv4_addressripv4_interfacer ipv4_networkr# ipv6_addressipv6_interfacer ipv6_networkipv6_scoped_addressipv6_scoped_interfaceipv6_scoped_networkipv6_with_ipv4_partr s r setUpIpaddrUnitTest.setUp<s%11)<'55lC%11,?%33 )+'55 ,.%112JK#,#:#: /$1 %.%<%< 2&4"#,#8#89W#X #,#:#:;#G rcURS[[R"S555 URS[[R"S555 URS[[R"S555 g)NzIPv4Interface('1.2.3.4/32')rzIPv6Interface('::1/128')rzIPv6Interface('::1%scope/128')r)r*rErrr#r s r testReprIpaddrUnitTest.testReprMsp 6i55i@A C 3i55e<= ? 9i55kBC Erc [R"S5n[R"S5nUR[R"S5U5 UR[R"US45U5 UR[R"S5U5 UR[R"S5U5 UR[R"US45U5 UR[R"S5U5 UR [ 5 [R"S 5 SSS5 UR [ 5 [R"US 45 SSS5 UR [ 5 [R"S 5 SSS5 UR [ 5 [R"S 5 SSS5 UR [ 5 [R"US 45 SSS5 UR [ 5 [R"S5 SSS5 [R"S5nUR[R"S SS9U5 UR[R"US 4SS9U5 UR[R"S SS9U5 UR[R"S SS9U5 UR[R"US 4SS9U5 UR[R"SSS9U5 [R"S5n[R"S5nUR[R"S5U5 UR[R"US 45U5 UR[R"S5U5 UR[R"S5U5 UR[R"US 45U5 UR[R"S5U5 UR[R "S 5[R "S55 UR[R "S 5[R "S55 UR [ 5 [R"S5 SSS5 UR [ 5 [R"S5 SSS5 g!,(df  GN=f!,(df  GN=f!,(df  GN=f!,(df  GN=f!,(df  GNt=f!,(df  GNR=f!,(df  N=f!,(df  g=f)Nrz 192.0.2.1/32)rrr)r)rrr)rr)rrr)rr)rrr)rrrFstrictrr)rr)rrz 192.0.2.1/24)rz255.255.255.255.0)rrrr*rJr2rrB)r iprs r testIPv4TupleIpaddrUnitTest.testIPv4TupleVs  " "; /##N3 ../@A3G ..Bx8#> ../?@#F ..0CDEH J ..0A0CDEH J ..0CDEH J  z *  ! !"3 4+   z *  ! !2r( ++   z *  ! !"2 3+   z *  ! !"@ A+   z *  ! !2"7 8+   z *  ! !"? @+##N3 ../@6;=>A C ..Bx6;=>A C ../?6;=>A C ..0A6;=>A C ..0?0A6;=>A C ..0A6;=>A C  " "; /##N3 ..0ABCF H ..0?0ABCF H ..0ABCF H ../@A3G ..Bx8#> ../?@#F 001BC"00@ B 001AB"00@ B  z *  ! !"D E+  z *  !C D+ *k+ * * * * * * * * * * *N+ *+ *s`*T:U UU0<V2V&V&V7: U  U U-0 U? V V#& V47 Wc[R"S5n[R"S5nUR[R"S5U5 UR[R"S5U5 UR[R"US45U5 [R"S5n[R"S5nUR[R"S5U5 UR[R"S5U5 UR[R"US 45U5 [R"S 5n[R"S 5nUR [ 5 [R"S 5 SSS5 UR [ 5 [R"S 5 SSS5 UR [ 5 [R"US45 SSS5 [R"S5nUR[R"S SS9U5 UR[R"S SS9U5 UR[R"US4SS9U5 UR[R "S5[R "S55 UR[R "S5[R "S55 [R"S5nUR [ 5 [R"S5 SSS5 UR [ 5 [R"US45 SSS5 UR [ 5 [R"S5 SSS5 UR [ 5 [R"S5 SSS5 g!,(df  GN]=f!,(df  GN;=f!,(df  GN=f!,(df  N=f!,(df  N=f!,(df  N=f!,(df  g=f)Nrz2001:db8::/128)r128) n rrz 2001:db8::/96)r96)r`rr 2001:db8::1)rr) n rrFr)rrz2001:db8::1/96)rr2001:db8::1%scope)rr)rr)rr#rr*rJr2r#rB)r rr ip_scopeds r testIPv6TupleIpaddrUnitTest.testIPv6Tuplesa  " "< 0##$45 ../DE  ..=?  ..E{;   " "< 0##O4 ../CD  ..<>  ..Dz: ))*<=  " "= 1   z *  ! !"5 6+   z *  ! !#< =+  z *  ! !2r( ++##O4 ../B6;=  ..I$)+  ..BxF  001FG"001AB D 00>@"001AB D))*=>   z *  ! !"; <+   z *  ! !9b/ 2+   z *  ! !"B C+  z *  !A B+ *M+ * * *+ *,+ * * * + *+ *sTO/6P*P1P%%P6QQ/ O> P P"% P36 Q Q Q&cUR[R"S5S-[R"S55 UR[R"S5S- [R"S55 UR[R"S5S-[R"S55 UR[R"S5S- [R"S55 UR [R"S 5S-[R"S 55 UR [R"S 5S- [R"S 55 g) Nrz1.1.2.0z1.1.0.1riz::ffffrz ::ffff%scope)r*rrr#rKr s r testAddressIntMath!IpaddrUnitTest.testAddressIntMaths ..y9C?"..y9 ; ..y9C?"..y9 ; ..u5C"..x8 : ..x8IF"..u5 7 I11+>)L%11.A C I11.AYO%11+> @rcpUR[[RS5 UR[[RS[R-5 UR[[R S5 UR[[R S[R -5 g)Nrvr)rJr2rv4_int_to_packed IPV4LENGTHv6_int_to_packed IPV6LENGTHr s r testInvalidIntToBytes$IpaddrUnitTest.testInvalidIntToBytess~ *i&@&@"E *i&@&@y333 5 *i&@&@"E *i&@&@y333 5rc R[R"S5n[R"S5n[R"S5nUR[[R"U/55X4/5 UR[[R"X/55X4X34/5 UR[[R"XU/55X4/5 URS[R "SS55 URS[ UR55 g)Nz 10.10.10.10z 10.10.10.11z 10.10.10.12rrzIPv4Network('1.2.3.0/24'))rrr*list_find_address_range_count_righthand_zero_bitsrEr)r ip1ip2ip3s r testInternalsIpaddrUnitTest.testInternalss##M2##M2##M2 i;;SEBC* ' i;;SJGH*sj1 3 i;;SsOLM* ' iBB1cJK 4d4;L;L6MNrcUR[URR5S5 UR[ URR5S5 UR[UR R5S5 UR[ UR R5S5 UR[ UR R 5S5 UR[URR5S5 UR[ URR5S5 UR[ URR 5S5 g)Ni1.2.3.0l /YE 2001:658:22a:cafe::::ffff:ffff:ffff:ffffz2001:658:22a:cafe::%scope)r*intrnetwork_addressrrrrr s r testGetNetworkIpaddrUnitTest.testGetNetworks T..>>?J T..>>?K T..>>?? A T..>>?. 0 T..7780 2 T55EEF? A T55EEF4 6 T55>>?0 2rcURURR[R"S5R5 [R "S5n[R "S5n[R "S5nURU[R "[ UR555 URU[R "[ UR555 URU[R "[ UR555 SnURURR[R"U5R5 URURR[R"U5R5 UR[R "URR5RS5 UR[R "URR5RS5 UR[R "URR5RS5 g)Nrrrr /YE )r*r_iprrrBrrrKrr#rrversionrr)r ipv4ipv6 ipv6_scopedv6_ints r testIpFromIntIpaddrUnitTest.testIpFromInts ,,00"00:>> @##I.##$AB**+NO  y33C8L8L4MNO y33C8L8L4MNO K)=)=c+B]B]>^)_`7 ,,00"008<< > 3377"008<< > --d.?.?.C.CDLL  --d.?.?.C.CDLL  --d.F.F.J.JKSS rc[RnURURR[R "S5R5 URU"S5U"S55 URUR R[R "S5R5 URU"S5U"S55 URU"S5U"S55 g) Nr255.254.253.252 X*ffff:2:3:4:ffff::rs)rr7r*rrr=rrrs r testIpFromPackedIpaddrUnitTest.testIpFromPacked,s&& ,,00"//0CDHH J !23 !45 7 ,,//"//899; = !45 "67 8  . 0rc8UR[URR5S5 UR[ URR5S5 UR[UR R5S5 UR[ UR R5S5 UR[UR R5S5 UR[ UR R5S5 g)Nrrr2001:658:22a:cafe:200::1)r*rrrrrrr s r testGetIpIpaddrUnitTest.testGetIp<s T00334h? T00334i@ T00334? A T003343 5 T77::;? A T77::;3 5rc,SnSnSnX#-n[R"U5n[R"U5nUR[ U5U5 URUR X-5 UR[ UR 5U5 g)Nz0000:0000:0000:0000:0000:ffff:::ffff:r)rr#r#r*rexplodedr)r long_prefix short_prefixr ipv6_ipv4_stripv6_ipv4_addripv6_ipv4_ifaces r &testIPv6IPv4MappedStringRepresentation5IpaddrUnitTest.testIPv6IPv4MappedStringRepresentationIs6  $+ "..}=#11-@ ^,m< 00+2DE _//0-@rc*URURRS5 UR[URR5S5 URUR RS5 UR[UR R5S5 URURRRS5 UR[URRR5S5 g)Nscope) r*rscope_idrrrrrrrr s r testGetScopeIdIpaddrUnitTest.testGetScopeIdTs **33  T55>>?  " ,,55  T77@@A  " **::CC  T55EENNO  "rcUR[URR5S5 UR[ URR5S5 UR[UR R5S5 URUR R S5 UR[URR5S5 URURR S5 g)Nlrl @)r*rrrrr prefixlenrr s r testGetNetmaskIpaddrUnitTest.testGetNetmaskbs T..667D T..667I T..667@ B **44b9 T55==>@ B 11;;R@rch[R"S5nUR[URR 5S5 URUR S5S5 [R"S5nUR[URR 5S5 URUR S5S5 [R"S5nUR[URR 5S5 URUR S5S5 g)N 1.2.3.4/0rrSz::1/0z ::1%scope/0)rrr*rrAr_prefix_from_prefix_stringr#)r ipv4_zero_netmaskipv6_zero_netmaskipv6_scoped_zero_netmasks r testZeroNetmaskIpaddrUnitTest.testZeroNetmaskls%33K@ .66>>?C *EEcJAN%33G< .66>>?C *EEcJAN#,#:#:=#I  5==EEFJ 1LLSQSTUrch[R"S5nURURS5 g)Nz127.0.0.0/0.0.0.255r)rrr*rr rs r testIPv4NetIpaddrUnitTest.testIPv4Netys'##$9: +rc8UR[URR5S5 UR[ URR5S5 UR[UR R5S5 UR[ UR R5S5 UR[UR R5S5 UR[ UR R5S5 g)Ni 1.2.3.255l /YE %2001:658:22a:cafe:ffff:ffff:ffff:ffff)r*rrbroadcast_addressrrrr s r testGetBroadcastIpaddrUnitTest.testGetBroadcast}s T..@@A8L T..@@A;O T..@@A? A T..@@A@ B T55GGH? A T55GGH@ Brc$URURRRS5 URURRRS5 URUR RRS5 g)Nrr)r*rrArrrr s r testGetPrefixlenIpaddrUnitTest.testGetPrefixlensh ,,44>>C ,,44>>C 33;;EErJrcURURR5RS5 UR[ URR5R 5S5 UR[ R"S5RR5[ R"S55 URURR5RS5 UR[ URR5R 5S5 UR[ R"S5RR5[ R"S55 URURR5RS5 UR[ URR5R 5S5 g)Nz1.2.2.0 0.0.0.0/0?rz::0/0)r*rsupernetrrrrrrArrr#rrr s r testGetSupernetIpaddrUnitTest.testGetSupernetsk **335??D T..779IIJ" $   # #K 0 8 8 A A C  ! !+ . 0 **335??D T..779IIJ. 0 009AAJJL"..w7 9 11::<FFK T55>>@PPQ. 0rcURURRS5RS5 UR[ URRS5R 5S5 URUR RS5RS5 UR[ UR RS5R 5S5 URURRS5RS5 UR[ URRS5R 5S5 g)Nrz1.2.0.0=z2001:658:22a:caf8::)r*rr2rrrrrr s r testGetSupernet3IpaddrUnitTest.testGetSupernet3s **33A6@@"E T..77:JJK" $ **33A6@@"E T..77:JJK. 0 11::1=GGL T55>>qAQQR. 0rcvUR[URRSSS9 UR[URRSS9 UR URRSS9URRSS95 UR[UR RSSS9 UR[UR RSS9 UR UR RSS9UR RS S95 UR[UR RSSS9 UR[UR RSS9 UR UR RSS9UR RS S95 g) NrrIprefixlen_diff new_prefixr=r<A>)rJr2rr2r*rrr s r testGetSupernet4IpaddrUnitTest.testGetSupernet4s *d&7&7&@&@)*q  : *d&7&7&@&@%'  ) **3313E**33r3B D *d&7&7&@&@)*q  : *d&7&7&@&@%'  ) **3313E**33r3B D *d&>&>&G&G)*q  : *d&>&>&G&G%'  ) 11::!:L11::b:I Krc [URR55nURS[ U55 UR[ R "S5US5 UR[ R "S5US5 [ R"S5n[UR55nURS[ U55 UR[ R"S5US5 UR[ R"S 5US5 [ R"S 5n[UR55nURS[ U55 UR[ R"S5US5 UR[ R"S 5US5 [ R "S 5[ R "S 5/nS nSnURU[[ R"U5R555 URU[[ R"U5R555 UR[[ R"U5R55[[ R"U5R555 [ R "S5/nSnSnURU[[ R"U5R555 URU[[ R"U5R555 UR[[ R"U5R55[[ R"U5R555 [ R"S5[ R"S5/nSnSnURU[[ R"U5R555 URU[[ R"U5R555 UR[[ R"U5R55[[ R"U5R555 [ R"S5/nSnSnURU[[ R"U5R555 URU[[ R"U5R555 UR[[ R"U5R55[[ R"U5R555 g)Nz1.2.3.1rz 1.2.3.254rv2001:658:22a:cafe::/120r2001:658:22a:cafe::1z2001:658:22a:cafe::ffz2001:658:22a:cafe::%scope/1202.0.0.0z2.0.0.1z 2.0.0.0/31)rJrr)rrrz2001:658:22a:cafe::/127)r2001:658:22a:cafe::1/128)rIr) rrhostsr*lenrrrr#rB)r rNrraddrsstr_argstpl_argss r testHostsIpaddrUnitTest.testHostss_T&&,,./ c%j) ..y958D ..{;U2YG ,,-FG \'')* c%j) ../EFaQ ../FGrS'334ST(..01 c%j) ../EFaQ ../FGrS&&y1&&y13" Y%9%9(%C%I%I%K LM Y%9%9(%C%I%I%K LM i228<BBDEi228<BBDE G&&y12" Y%9%9(%C%I%I%K LM Y%9%9(%C%I%I%K LM i228<BBDEi228<BBDE G&&'<=&&'=>@,/ Y%9%9(%C%I%I%K LM Y%9%9(%C%I%I%K LM i228<BBDEi228<BBDE G&&'=>A-0 Y%9%9(%C%I%I%K LM Y%9%9(%C%I%I%K LM i228<BBDEi228<BBDE Grc NUR[URRSS95[URRSS955 UR [ [ URRSS95 UR [ [ URRSSS95 UR[URRSS95[URRSS955 UR [ [ URRS S95 UR [ [ URRSSS95 UR[URRSS95[URRSS955 UR [ [ URRS S95 UR [ [ URRSSS95 g) Nrr@r?r/r;rDr1) r*rrsubnetsrJr2rrrr s r testFancySubnetting"IpaddrUnitTest.testFancySubnettings  1 1 9 9 9 KL 1 1 9 9R 9 HI K *d++33r3B D *d++331>@4B C  1 1 9 9 9 KL 1 1 9 9R 9 HI K *d++33r3B D *d++331>@4B C  8 8 @ @PQ @ RS 8 8 @ @B @ OP R *d22::b:I K *d22::!FH;J KrcUR[URR55SRS5 UR[ [URR55SR 5S5 UR[ [URR55SR 5S5 UR[URR55SRS5 UR[URR55SRS5 g)Nrr>rrIz 1.2.3.128rB) r*rrrXrrrrrr s r testGetSubnetsIpaddrUnitTest.testGetSubnetss d//779:1=GGL T%%--/11244COE" $ T%%--/11244COE$ & d//779:1=GGL d66>>@A!DNNPRSrc2[R"S5nUR5Vs/sHn[U5PM nnURS5Vs/sHn[U5PM nnUR US/5 UR X45 gs snfs snf)Nrr)rrrXrr*)r rr[subnets1subnets2s r testGetSubnetForSingle32'IpaddrUnitTest.testGetSubnetForSingle32sx  " "< 0$&JJL1LqCFL1$&JJqM2MqCFM2 L>2 ,22s BBc`[R"S5nUR5Vs/sHn[U5PM nnURS5Vs/sHn[U5PM nnUR US/5 UR X45 [R"S5nUR5Vs/sHn[U5PM nnURS5Vs/sHn[U5PM nnUR US/5 UR X45 gs snfs snfs snfs snf)Nrrr)rrrXrr*)r rr[r_r`rs r testGetSubnetForSingle128(IpaddrUnitTest.testGetSubnetForSingle128"s  " "9 -$&JJL1LqCFL1$&JJqM2MqCFM2 I;/ ,))/: $-$5$5$78$7qCF$78$-$5$5a$89$8qCF$89 O#45 ,22 99sDD!6D& D+c8URRS5Vs/sHn[U5PM nnURU/SQ5 URRS5Vs/sHn[U5PM nnURU/SQ5 gs snfs snf)Nr)z 1.2.3.0/26z 1.2.3.64/26z 1.2.3.128/26z 1.2.3.192/26)2001:658:22a:cafe::/66z2001:658:22a:cafe:4000::/66z2001:658:22a:cafe:8000::/66z2001:658:22a:cafe:c000::/66)rrXrr*r)r r[ipsipsv6s r testSubnet2IpaddrUnitTest.testSubnet2/s#0088;<;!s1v;<   I K"&!2!2!:!:1!=>!=AQ!=>   , - = ?s B&Bc$URRS5Vs/sHn[U5PM nnURUSS/SQ5 URUSS/SQ5 UR[ U5S5 [ R "S5nURS5Vs/sHn[U5PM nnURUSS/SQ5 URUSS/S Q5 UR[ U5S5 gs snfs snf) Nr)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/32rrH)z2001:658:22a:cafe::/128rMz2001:658:22a:cafe::2/128)z2001:658:22a:cafe::fd/128z2001:658:22a:cafe::fe/128z2001:658:22a:cafe::ff/128)rrXrr*rOrr)r r[rXrs r testGetSubnets3IpaddrUnitTest.testGetSubnets3=s#'#4#4#<# Ws+ ,,-FG #/#7#7#:;#:a3q6#:; ! ) *  * + Ws+#A @rcBUR[URRRS5 UR[UR RRS5 UR[UR RRS5 g)Nr>rB)rJr2rrAr2rrr s r !testSupernetFailsForLargeCidrDiff0IpaddrUnitTest.testSupernetFailsForLargeCidrDiff_sz *--55>> D *--55>> D *44<<EEr KrcUR[[URRR S55 UR[[UR R S55 UR[[URRR S55 UR[[URR S55 UR[[URRR S55 UR[[URR S55 g)Nrvrsr s r "testSubnetFailsForNegativeCidrDiff1IpaddrUnitTest.testSubnetFailsForNegativeCidrDiffgs *d--55==bA C *d++33B7 9 *d--55==bA C *d++33B7 9 *d44<<DDRH J *d22::2> @rcURURRS5 UR[URR 55SRS5 URURR 5RS5 URUR RS5 UR[UR R 55SRS5 URUR R 5RS5 URURRS5 UR[URR 55SRS5 URURR 5RS5 g)Nrrrill )r*r num_addressesrrXr2rrr s r testGetNum_Addresses#IpaddrUnitTest.testGetNum_Addressesusc **88#> d//779:1=KK  **335CCSI **88:NO d//779:1=KK, . **335CC- / 11??AUV d66>>@A!DRR, . 11::<JJ- /rcUR[R"S5UR5 UR [R"S5UR5 [R "S5nURXR5 UR [R"S5R[R"S555 g)Nz 1.2.3.128/25z 1.2.4.1/24z1.2.3.37z 1.1.0.0/16z 1.0.0.0/15) rrrrrrrr __contains__)r addr1s r testContainsIpaddrUnitTest.testContainss i--n='' ) 00>** ,%%j1 e../ ..|<II%%l35 6rcUR[URS5S5 UR[URR S5 UR[UR S5S5 UR[UR R S5 UR[URS5S5 UR[URR S5 g)Nr1.2.3.5rz2001:658:22a:cafe::5r})r*rrrJ IndexError __getitem__rrr s r testNthIpaddrUnitTest.testNths T..q12I> *d&7&7&C&CSI T..q12/ 1 *d&7&7&C&CWM T55a89/ 1 *d&>&>&J&JGTrc[R"S5nURSUR5 [ U5nURS[ US55 URS[ US55 URS[ US55 URS[ US55 URUSUS5 g)Nz172.31.255.128/255.255.255.240z172.31.255.128rz172.31.255.143rv)rrr*rrr)r rZ addr_lists r testGetitemIpaddrUnitTest.testGetitems$$%EF T^^,J  )3y|+<= )3tAw<8 )3y}+=> )3tBx=9 2R1rc4URUR[R"S5:H5 UR UR[R"S5:H5 UR UR[R "S5:H5 UR UR[R "S5:H5 UR URS:H5 UR UR/:H5 UR URS:H5 URUR [R "S5:H5 UR UR [R "S5:H5 UR UR [R"S5:H5 UR UR S:H5 UR UR /:H5 UR UR S:H5 URUR[R "S 5:H5 URUR[R "S 5:H5 UR UR[R "S 5:H5 UR UR[R "S5:H5 UR UR[R "S5:H5 UR UR[R"S5:H5 UR URS:H5 UR UR/:H5 UR URS:H5 g) Nr 1.2.3.4/23 ::1.2.3.4/24::1.2.3.4%scope/24r>r2001:658:22a:cafe:200::1/642001:658:22a:cafe:200::1/63!2001:658:22a:cafe:200::1%scope/64z'0000:0000:0000:0000:0000:0000:0102:0304!2001:658:22a:cafe:200::1%scope/63) rrrrrr#rrrr s r testEqualIpaddrUnitTest.testEquals  ++!// => ? ,,"00>? @ ,,"00@A B ,,"001EFG H ,,23 ,,23 ,,12 ++  # #$A BC D ,,  # #$A BC D ,,"00>? @ ,,23 ,,23 ,,12 22  # #$G HI J 00  # #$M NO P 33  # #$G HI J 33  # #$A BC D 33  # #$A BC D 33"00>? @ 33r9: 33r9: 33q89rc URUR[R"S5:g5 UR UR[R"S5:g5 UR UR[R "S5:g5 UR UR[R "S5:g5 UR URS:g5 UR UR/:g5 UR URS:g5 UR UR [R"S5:g5 UR UR S:g5 UR UR /:g5 UR UR S:g5 URUR[R "S5:g5 UR UR[R "S 5:g5 UR UR[R"S5:g5 UR URS:g5 UR UR/:g5 UR URS:g5 UR UR[R"S 5:g5 UR URS:g5 UR UR/:g5 UR URS:g5 URUR[R "S 5:g5 UR UR[R "S 5:g5 UR UR[R "S5:g5 UR UR[R "S 5:g5 UR UR[R"S5:g5 UR URS:g5 UR UR/:g5 UR URS:g5 UR UR[R"S 5:g5 UR URS:g5 UR UR/:g5 UR URS:g5 g) Nrrrrr>rrrrrrr) rrrrrr#rrrrrrr s r testNotEqualIpaddrUnitTest.testNotEquals ,,"00>? @ ++!// => ? ++!//?@ A ++!//0DEF G ++r12 ++r12 ++q01 ))"..y9: ; ))R/0 ))R/0 ))Q./ ,,  # #$A BC D ++  # #$A BC D ++!// => ? ++r12 ++r12 ++q01 ))!--i89 : ))R/0 ))R/0 ))Q./ 33  # #$G HI J 22  # #$G HI J 22  # #$A BC D 22  # #$A BC D 22!// => ? 22b89 22b89 22a78 00!--i89 : 00B67 00B67 00A56rcbUR[[R"S55S5 g)Nz1.2.3.4/255.255.255.255rr*rrrr s r testSlash32Constructor%IpaddrUnitTest.testSlash32Constructors* Y44-/01= ?rcUR[[R"S55S5 UR[[R"S55S5 g)Nrr)r*rrr#r s r testSlash128Constructor&IpaddrUnitTest.testSlash128Constructor sH Y44Y?@"+ - Y44_EF"1 3rcbUR[[R"S55S5 g)Nz1.2.3.4/0.0.0.0rrr s r testSlash0Constructor$IpaddrUnitTest.testSlash0Constructors& Y445FGH% 'rcL [R"S5n[R"S5n[R"S5n[R"S5n[R"S5n[R"S5n[R"XX4XV/5nUR[ U5[R "S5[R "S5/5 [R"S5n[R"S5n[R"S5n[R"S5n[R"XX4/5nUR[ U5[R "S5/5 [R "S5n[R "S 5n[R "S 5n[R "S 5n[R "S 5n[R "S 5n[R"XX4UU/5nUR[ U5[R "S 5[R "S 5/5 [R"X/5nUR[ U5[R "S5/5 [R "S5=pUR[ [R"X/55U/5 [R"S5=pUR[ [R"X/55[R "S5/5 [R"S5n[R"S5n[R"S5n[R"XU/5nUR[ U5U/5 [R"S5n[R"S5n[R"S5n[R"XU/5nUR[ U5U/5 [R"S5[R"S54[R "S5[R"S54[R "S5[R"S54/n U H+upUR[[RX/5 M- [R"S5[R"S54[R "S5[R"S54[R "S5[R"S54/n U H+upUR[[RX/5 M- g)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) rrcollapse_addressesr*rrrBrr7rJrK) r rrrip4ip5ip6 collapsedip_same1ip_same2 addr_tupless r testCollapsingIpaddrUnitTest.testCollapsings##I.##I.##I.##I.##I.##I.00 s *,  i&&|4&&|46 7 ##I.##I.##I.##I.00#C1EF  i#// => @##L1##L1##L1##L1##L1##L100#Cc582:;  i#// =#// =? @ 00#<  i#// => @(33LAA i::(*+" % (33I>> i::(*+#..|<= ?##L1##L1##K000#CA  i3%0##$67##$67##$5600#CA  i3%0%%i0%%e,.&&|4&&|46&&|4&&|46  $HC   i)E)E"j *$ %%i0%%k24&&|4&&'9:<&&|4&&'9:<  $HC   i)E)E"j *$rc r [Rn[R"S5n[R"S5n"SS[R5nU"S5nU"S5nUR [ [ U"XV55 UR [[ U"U[R"S555 UR [[ U"U[R"S555 UR[ U"X#55S[R"S55 [R"S 5nUR[ U"X#55[R"S 5[R"S 5/5 [R"S5n[R"[RR5nUR[R"S 5/[ U"X#555 [R"S 5n[R"S 5nUR[ U"X#55S[R"S55 [R"S5nUR[ U"X#55[R"S5[R"S5/5 [R"S5n[R"S5nUR[ U"X#55S[R"S55 [R"S5nUR[ U"X#55[R"S5[R"S5/5 UR [ [ U"[R"S5[R"S555 UR [[ U"[R"S5[R"S555 UR [[ U"[R"S5[R"S555 UR [[ U"[R"S5[R"S555 g)Nrz 1.1.1.255c$\rSrSr\S5rSrg)3IpaddrUnitTest.testSummarizing..IPv7Addressicg)Nr0r s r r;IpaddrUnitTest.testSummarizing..IPv7Address.versionsrr0N)r1r2r3r4r5rr8r0rr IPv7Addressrs   rrrrrrz1.1.1.8z 1.1.1.0/29r0rz$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) rsummarize_address_ranger7r#rJr2rrKr*rBr _ALL_ONESr)r summarizerrr ip_invalid1 ip_invalid2s r testSummarizingIpaddrUnitTest.testSummarizingws55 ""9-"";/ )// "%( !%(  *d#K= ? )T#C)>)>u)EF H )T#C)>)>{)KL N i1215"--l; =""9- i12#..|<#..y9; <##A&##I$9$9$C$CD )// <=i12 4""5)""#IJ i1215"--h7 9""5) i12#..x8#..y9; <"";/""#OP i1215"--h7 9"";/ i12#..x8#..y9; < *d#I$8$8$C$-$8$8$CE F )T#I$8$8$C$-$8$8$CE F )T#I$8$8$C$-$8$8$CE F )T#I$8$8$>$-$8$8$CE FrcUR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 g)Nrrr::2rrG)rrr7r s r testAddressComparison$IpaddrUnitTest.testAddressComparisons   ,,Y7!,,Y78 9  ,,Y7!,,Y78 9  ,,U3!,,U34 5  ,,U3!,,U34 5  ,,[9!,,[9: ;  ,,[9!,,[9: ;rclUR[R"S5[R"S5:H5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:H5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S5[R"S5:5 UR[R"S 5[R"S 5:H5 UR[R"S 5[R"S 5:5 UR[R"S 5[R"S 5:5 UR[R"S 5[R"S 5:5 UR[R"S 5[R"S 5:5 UR[R"S 5[R"S 5:5 UR[R"S 5[R"S 5:5 UR[R"S 5[R"S5:H5 UR[R"S 5[R"S5:5 UR[R"S 5[R"S5:5 UR[R"S 5[R"S5:5 UR[R"S 5[R"S5:5 UR[R"S 5[R"S5:5 UR[R"S 5[R"S5:5 UR[R"S5[R"S 5:H5 UR[R"S5[R"S 5:5 UR[R"S5[R"S 5:5 UR[R"S5[R"S 5:5 UR[R"S5[R"S 5:5 UR[R"S5[R"S 5:5 UR[R"S5[R"S 5:5 g) Nz 1.1.1.1/24z 1.1.1.1/16z 1.1.1.2/24z 1.1.1.2/16z::1/64z::1/80z::2/64z::2/48z ::1%scope/64z ::1%scope/80z ::2%scope/64z ::2%scope/48)rrr=rr s r testInterfaceComparison&IpaddrUnitTest.testInterfaceComparisons   ..|<!..|<= >  ..|<!..|<= >  ..|<!..|<= >  ..|<!..|<= >  ..|<!..|<= >  ..|<!..|<= >  ..|<!..|<= >  ..x8!..x89 :  ..x8!..x89 :  ..x8!..x89 :  ..x8!..x89 :  ..x8!..x89 :  ..x8!..x89 :  ..x8!..x89 :  ..~>!..~>? @  ..~>!..~>? @  ..~>!..~>? @  ..~>!..~>? @  ..~>!..~>? @  ..~>!..~>? @  ..~>!..~>? @ //?!..x89 :  ..~>!..x89 :  ..~>!..x89 :  ..~>!..x89 :  ..~>!..x89 :  ..~>!..x89 :  ..~>!..x89 : //9!..~>? @  ..x8!..~>? @  ..x8!..~>? @  ..x8!..~>? @  ..x8!..~>? @  ..x8!..~>? @  ..x8!..~>? @rc [R"S5n[R"S5n[R"S5nURX:5 URX2:5 URUR U5S5 URUR U5S5 URUR U5S5 URUR U5S5 URUR U5S5 URUR 5UR 5:5 [R "S5n[R "S5n[R "S 5nURX:5 URX2:5 URUR U5S5 URUR 5UR 5:5 UR[URRUR5 [R"S 5n[R"S 5nUR[URU5 UR[URU5 UR[URU5 UR[URU5 [R"S 5nUR!X:5 UR!X:5 [R"S 5nURX:5 UR!X!:5 UR!X:5 URX!:5 [R"S5nURX#:5 UR!X2:5 UR!X#:5 URX2:5 [R"S5n[R"S5n[R"S5n[R"S5nXX6/nX&X/nUR#5 URXx5 XaX2/nUR#5 URXx5 UR%UR&"S55[(5 UR%UR&"S55[(5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR![R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR[R"S5[R"S5:*5 UR![R"S5[R"S5:*5 g)Nrz 1.1.1.0/32rrrvrIz2001:2000::/96z2001:2001::/96z2001:ffff:2000::/96::/0r0z 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)rrrr*compare_networks_get_networks_keyrrJrKrrr#rrrrBrsortassertIsr7rM) r rrrrrrrunsorteds r testNetworkComparison$IpaddrUnitTest.testNetworkComparisons##L1##L1##L1  "  " --c2A6 --c2B7 --c2A6 --c2B7 --c2A6 --/#2G2G2IIJ##$45##$45##$9:  "  " --c2B7 --/#2G2G2IIJ )++<<++ -&&v.&&{3 )T[[$7 )T[[$7 )T[[$7 )T[[$7""?3 # #""=1  " # #  """=1  " # #  """?3""<0""?3""<0C%c'  *c'  * cjj!5!5l!CD$ & cjj!5!5l!CD$ &  ,,Y7!,,Y78 9  ,,Y7!,,Y78 9 --i8!,,Y78 9  ,,U3!,,U34 5  ,,U3!,,U34 5 --e4"--e45 6rcUR[[RS5 UR[[RS5 UR[[RS5 g)Nz192.168.1.1/24z::1/120z ::1%scope/120)rJr2rrBr s r testStrictNetworks!IpaddrUnitTest.testStrictNetworksrsK *i&:&: 001DELL* + 00?FF@ B 1188= > 001JKRR* + 001DELL@ Brc[R"S5n[R"S5n[R"S5n[R"S5nUR[R[ U55 UR[R [ U55 UR[R[ U55 UR[R[ U55 g)Nrr) rrBr7r*rrrrr#)r ipv4netipv4addripv6netipv6addrs r testIpTypeIpaddrUnitTest.testIpTypes&&y1'' 2&&{3'' 4 ..W > ..X? ..W > ..X?rcURS[R"S5R5 URS[R"S5R5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S 5R 5 URS[R"S 5R 5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R 5 URS[R"S5R5 URS[R"S5R 5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S 5R 5 URS[R"S 5R 5 UR[R"S5R5 UR[R"S5R5 UR[R"S5R5 UR[R"S5R5 URS[R"S5R5 URS[R"S5R5 UR[R"S5R5 UR[R"S 5R5 URS[R"S!5R5 URS[R"S"5R5 URS[R"S5R5 URS[R"S5R5 g)#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/24riz 224.1.1.1z 240.0.0.1z239.255.255.255rz 192.0.0.0z 192.0.0.9z 192.0.0.10z 192.0.0.255z169.254.100.200z169.255.100.200z 192.0.7.1z 203.0.113.1z127.100.200.254z 127.42.0.0)r*rr= is_multicastrB is_reserved is_private is_link_local is_loopback is_globalr7is_unspecifiedrrr s r testReservedIpv4IpaddrUnitTest.testReservedIpv4s y55 ,  .  4 4[ A N NO y33K@LLM y55  "",* .  4 4] C N NO y33  "",* .  4 4Z @ K KL  4 4Z @ L LM y33  "",* .  4 4\ B M MN "--.>?MM O #00244AM C #00244AM C #..244?K A y33 !!, .  4 4[ A M MN "--o>II K  4 4_ E O OP "--.>?JJ L "--n=GG I y33I>MMN y33K@MMN  4 4[ A N NO y33K@LLM "--.?@LL N y33MBMMN  4 4] C N NO y33  "",* .  4 4Z @ K KL y33  "",* .  4 4\ B M MN --k:DDE  ,,[9CCD  ,,\:DDE --m<FFG "--.?@NN P "--.?@NN P  ,,[9CCD --m<FFG #../@AMM O y33LAMMN  4 4[ A M MN y33I>MMNrc URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 g) NFr0z 1.0.0.0/8Tz 0.0.0.0/8 10.0.0.0/8z 127.0.0.0/8z169.254.0.0/16z 172.16.0.0/12z 192.0.0.0/29z 192.0.0.9/32z192.0.0.170/31rz192.168.0.0/16z 198.18.0.0/15z198.51.100.0/24z203.0.113.0/24z 240.0.0.0/4z255.255.255.255/32rz::ff/128r::/128z ::ffff:0:0/96z100::/64z 2001:2::/48z 2001:3::/48rz 2001:10::/28zfc00::/7z fe80::/10)r*rrBrr s r testPrivateNetworks"IpaddrUnitTest.testPrivateNetworks s  4 4[ A L LM  4 4[ A L LM y33K@KKL y33LALLM y33MBMMN y334DEPPQ y33ODOOP y33NCNNO  4 4^ D O OP y334DEPPQ y33NCNNO y334DEPPQ y33ODOOP y334EFQQR y334DEPPQ y33MBMMN y334HITTU  4 4V < G GH  4 4Z @ K KL y33I>IIJ y33H=HHI y33ODOOP y33J?JJK y33MBMMN  4 4] C N NO y33ODOOP y33NCNNO y33J?JJK y33K@KKLrc@URS[R"S5R5 URS[R"SS-S- 5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S5R5 URS[R"S 5R 5 URS[R"S 5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R 5 URS[R"S5R5 URS[R"S5R5 URS[R"SS-S- 5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S 5R5 URS[R"S5R5 URS[R"S 5R 5 URS[R"S 5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R 5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 UR[R"S5R5 UR[R"S5R5 UR[R"S5R5 UR[R"S 5R5 UR[R"S!5R5 UR[R"S"5R5 UR[R"S#5R5 UR[R"S$5R5 UR[R"S%5R5 UR[R"S&5R5 UR[R"S'5R5 UR[R"S(5R5 UR[R"S)5R5 UR[R"S*5R5 URS[R"S+5R5 URS[R"S,5R5 g)-NTzffff::rrrIzff00::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/127rrz0::0rz::/127z 2001::1/128z 200::1/128z 64:ff9b:1::z2001::z 2001:1::1z 2001:1::2z2001:2::z2001:3::z2001:4::z 2001:4:112::z 2001:10::z 2001:20::z 2001:30::z 2001:40::z2002::z3fff::z100::z 4000::1/128)r*rrBr is_site_localrrr=rrrr7rrrr s r testReservedIpv6IpaddrUnitTest.testReservedIpv6B s y33H=JJK y33AsFQJ?LLM y33H=JJK  4 4X > K KL y33H=KKL y33' ))6 8  4 4!+m -  4 4X > L LM y33H=HHI y33' ))3 5  4 4] C N NO  4 4X > I IJ y33H=KKL y33 ,} .  4 4!,} .  4 4X > L LM y55kBNNO  6 6y A M MN  4 4T : F FG  4 4U ; G GH y33F;JJK  4 4U ; J JK  4 4X > M MN "--m<GG I "--l;EE G y33H=JJK y33AsFQJ?LLM y33H=JJK  4 4X > K KL y33H=KKL y33' ))6 8  4 4!+m -  4 4X > L LM y33H=HHI y33' ))3 5  4 4] C N NO  4 4X > I IJ y33H=KKL y33 ,} .  4 4!,} .  4 4X > L LM y33K@LLM y33E:FFG  4 4U ; G GH y33F;JJK  4 4U ; J JK --m<FFG --h7AAB  ,,[9CCD  ,,[9CCD --j9CCD  ,,Z8BBC --j9CCD  ,,^<FFG --k:DDE  ,,[9CCD  ,,[9CCD --k:DDE --h7AAB --h7AAB y33G<HHI y33MBNNOrctUR[R"S5R[R"S55 UR[R"S5RS5 UR[R"S5R[R"S55 g)Nr rz ::c0a8:101r!)r*rr7r$r s r testIpv4MappedIpaddrUnitTest.testIpv4Mapped s $$%9:FF$$]3 5 --l;GGN --.?@LL"--m< >rcSGHWnURU5 [R"U5n[R"SU35nUR UR UR 5 UR UR UR 5 UR URUR5 UR URUR5 UR URUR5 UR URUR5 UR URUR5 SSS5 GMZ g!,(df  GMm=f)N)z 178.62.3.251z169.254.169.254 127.0.0.1z 224.0.0.1rkriz 100.64.0.1r) rWrrr#r*rrrrrrr)r addr4rrs r testIpv4MappedProperties'IpaddrUnitTest.testIpv4MappedProperties s Ee$ ,,U3 ,,wug->?  @  $//B  !1!143C3CD  !2!2D4E4EF  !4!4d6I6IJ  !3!3T5G5GH  !1!143C3CD%$ %$s D:E  E0 cURS[R"S5R5 URS[R"S5R5 g)NTr Fz::ffff:172.32.0.0)r*rr7rr s r testIpv4MappedPrivateCheck)IpaddrUnitTest.testIpv4MappedPrivateCheck sN i**+?@KK M y++,?@KK MrcDURS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 URS[R"S5R5 g)NTz::ffff:127.100.200.254/128z::ffff:127.42.0.0/112Fz::ffff:128.0.0.0z::ffff:127.100.200.254z::ffff:127.42.0.0)r*rrBrr7r s r testIpv4MappedLoopbackCheck*IpaddrUnitTest.testIpv4MappedLoopbackCheck s y33, ..9k ; y33' ))4 6  4 4"!$$/K 1 y33( **5+ 7 y33# %%0[ 2  4 4"!$$/K 1rc [R"S5n[R"S5n[R"S5n[R"S5n[R"S5n[R"S5nUR[ [ UR U555[R"S5[R"S5/5 UR[[ UR U55 UR[[ UR U55 UR[[ UR U55 UR[ UR U55/5 UR[ [ UR U555[R"S 5[R"S 5[R"S 5[R"S 5[R"S 5[R"S5[R"S5[R"S5/5 g)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) rrBr7r*rraddress_excluderJr2rKr raddr2addr3raddr5addr6s r testAddrExcludeIpaddrUnitTest.testAddrExclude s$$]3$$]3$$]3$$Z0$$%56$$]3 U%:%:5%A BC#..~>#..?A B *dE,A,A%,HI )T5+@+@+GH )T5+@+@+GH e33E:;R@ U%:%:5%A BC#..}=#..}=#..}=#..}=#..~>#..~>#..~>#..?A Brc UR[[R"S55[[R"S555 UR[[R"S55[[R"S555 UR[[R "S55[[R "S555 UR[[R "S55[[R "[ [R "S5R5555 [R "S5n[R "S5n0nSX0R'SX0R'SX1'SX2'URURU5 URX#5 g)Nrrrr) r*hashrr=rBr7rrrrr)r rrdummys r testHashIpaddrUnitTest.testHash s` i44]CDi44]CD F i22=ABi22=AB D i22:>?i22:>? A i229=>i22 ,,Y7;;<>? @"":.""5)#' #'    d''/ c!rcURnURSUR5 URnUR [ UR SS-S-5 g)NrrrrI)rr* compressedrrJr2_string_from_ip_intr"s r testIPBasesIpaddrUnitTest.testIPBases sL s~~6 *c&=&=q#vzJrcURnURSUR5 URSUR5 URSUR5 URS[ U55 g)Nrz)2001:658:22a:cafe::/ffff:ffff:ffff:ffff::z)2001:658:22a:cafe::/::ffff:ffff:ffff:ffff)rr*with_prefixlen with_netmask with_hostmaskrr"s r testIPv6NetworkHelpers%IpaddrUnitTest.testIPv6NetworkHelpers sm 133E3EF D)) + D** , 13s8+>+F+F+O+OP j$"5"5"="="F"FGrc>[R"S5n[R"S5nSnURX4[R"U5R5 SnUR [R"U5R5 SnUR [R"U5R5 [R "S5nUR[R"S5[R"S54UR5 g) 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:fdd2rCz94.245.121.253z 95.26.244.94)rrr*r7teredorr#)r serverclient teredo_addrbad_addrs r testTeredoIpaddrUnitTest.testTeredo s&&7&&|4?  &)"--k:AA C8 --h7>>?< --h7>>? ++,MN  )//0@A#//?A$++ -rc[R"S5n[R"S5nUR[R"S5UR5 UR UR5 g)Nz2002:ac1d:2d64::1z2000:ac1d:2d64::1z 172.29.45.100)rr7r*r sixtofourr)r sixtofouraddrras r testsixtofourIpaddrUnitTest.testsixtofour s\!,,-@A ''(;< ..?&00 2 ++,rc[R"S5n[R"S5nURUR5UR55 g)Nrz2.3.4.5)rrrK__hash__)r ipv4_address1 ipv4_address2s r testV4HashIsNotConstant&IpaddrUnitTest.testV4HashIsNotConstant sD!// : !// :  M224m6L6L6NOrc[R"S5n[R"S5nURUR5UR55 g)Nrz2001:658:22a:cafe:200:0:0:2)rr#rKrj)r ipv6_address1 ipv6_address2s r testV6HashIsNotConstant&IpaddrUnitTest.testV6HashIsNotConstant sF!//0MN !//0MN  M224m6L6L6NOrcUR[R"S5R5[R"S5R55 UR[R"S5R5[R"S5R55 UR[R"S5R5[R"S5R55 g)Nz192.168.1.255/32z192.168.1.0/24z172.24.255.0/24z 172.24.0.0/16z192.168.1.87/32z192.168.1.86/31)rKrrrjr s r testNetworkV4HashCollisions*IpaddrUnitTest.testNetworkV4HashCollisions s   ! !"4 5 > > @  ! !"2 3 < < >    ! !"3 4 = = ?  ! !/ 2 ; ; =    ! !"3 4 = = ?  ! !"3 4 = = ? rc\UR[R"S5R5[R"S5R55 UR[R"S5R5[R"S5R55 g)Nz fe80::/64zfe80::ffff:ffff:ffff:0/112rz'ffff:ffff:ffff:ffff:ffff:ffff:aff:0/112)rKrrrjrr s r testNetworkV6HashCollisions*IpaddrUnitTest.testNetworkV6HashCollisions s~   ! !+ . 7 7 9  ! !"> ? H H J    ! !, / 8 8 :  ! !9 hj  r) rrrrrrrrrrN)Tr1r2r3r4rrrrrrrrrrrr rrrr#r)r,r3r8rDrSrYr\rardrjrortrwrzrrrrrrrrrrrrrrrrrrrrrrrrr rrrrr$r)r.r4r7r:r@rDrMrPrSrVrZrbrgrmrrrurxr8r0rr rr:sH"EDEN@CF @5 O2"00 5 A "A V, BK 0" 0K*4GlK. T- - -,( @K @/" 6 U 2%:N57n?3 '`*DGFR ;K@ZU6nM 12I<> H B,@KOZ MD[Pz>E0M 1 B0"*K =1 > <: $AL1 >K (HT-$-P P    rr__main__)rrunittestrCr6rLrUrr test.supportrrTestCaserr:r`rrr(rrrrr"r%r/rFrr1mainr0rr rs2%   *3?8$$3?l''2..b/"/"bu?'9u?pE4'9E4PV&,V&r&<)<&36':36lf1,f1R&<)<&,0':,0^ALA&rAh''rAjA X&&A H6 z MMOr