@@ -391,14 +391,16 @@ def assertBadSplit(addr):
391
391
392
392
def test_bad_address_split_v6_too_long (self ):
393
393
def assertBadSplit (addr ):
394
- msg = r"At most 39 characters expected in %s"
395
- with self .assertAddressError (msg , repr ( re .escape (addr [:14 ]) )):
394
+ msg = r"At most 45 characters expected in ' %s"
395
+ with self .assertAddressError (msg , re .escape (addr [:45 ] )):
396
396
ipaddress .IPv6Address (addr )
397
397
398
398
# Long IPv6 address
399
399
long_addr = ("0:" * 10000 ) + "0"
400
400
assertBadSplit (long_addr )
401
401
assertBadSplit (long_addr + "%zoneid" )
402
+ assertBadSplit (long_addr + ":255.255.255.255" )
403
+ assertBadSplit (long_addr + ":ffff:255.255.255.255" )
402
404
403
405
def test_bad_address_split_v6_too_many_parts (self ):
404
406
def assertBadSplit (addr ):
@@ -2172,6 +2174,11 @@ def testIPv6AddressTooLarge(self):
2172
2174
self .assertEqual (ipaddress .ip_address ('FFFF::192.0.2.1' ),
2173
2175
ipaddress .ip_address ('FFFF::c000:201' ))
2174
2176
2177
+ self .assertEqual (ipaddress .ip_address ('0000:0000:0000:0000:0000:FFFF:192.168.255.255' ),
2178
+ ipaddress .ip_address ('::ffff:c0a8:ffff' ))
2179
+ self .assertEqual (ipaddress .ip_address ('FFFF:0000:0000:0000:0000:0000:192.168.255.255' ),
2180
+ ipaddress .ip_address ('ffff::c0a8:ffff' ))
2181
+
2175
2182
self .assertEqual (ipaddress .ip_address ('::FFFF:192.0.2.1%scope' ),
2176
2183
ipaddress .ip_address ('::FFFF:c000:201%scope' ))
2177
2184
self .assertEqual (ipaddress .ip_address ('FFFF::192.0.2.1%scope' ),
@@ -2184,6 +2191,10 @@ def testIPv6AddressTooLarge(self):
2184
2191
ipaddress .ip_address ('::FFFF:c000:201%scope' ))
2185
2192
self .assertNotEqual (ipaddress .ip_address ('FFFF::192.0.2.1' ),
2186
2193
ipaddress .ip_address ('FFFF::c000:201%scope' ))
2194
+ self .assertEqual (ipaddress .ip_address ('0000:0000:0000:0000:0000:FFFF:192.168.255.255%scope' ),
2195
+ ipaddress .ip_address ('::ffff:c0a8:ffff%scope' ))
2196
+ self .assertEqual (ipaddress .ip_address ('FFFF:0000:0000:0000:0000:0000:192.168.255.255%scope' ),
2197
+ ipaddress .ip_address ('ffff::c0a8:ffff%scope' ))
2187
2198
2188
2199
def testIPVersion (self ):
2189
2200
self .assertEqual (self .ipv4_address .version , 4 )
@@ -2568,6 +2579,10 @@ def testCompressIPv6Address(self):
2568
2579
'::7:6:5:4:3:2:0' : '0:7:6:5:4:3:2:0/128' ,
2569
2580
'7:6:5:4:3:2:1::' : '7:6:5:4:3:2:1:0/128' ,
2570
2581
'0:6:5:4:3:2:1::' : '0:6:5:4:3:2:1:0/128' ,
2582
+ '0000:0000:0000:0000:0000:0000:255.255.255.255' : '::ffff:ffff/128' ,
2583
+ '0000:0000:0000:0000:0000:ffff:255.255.255.255' : '::ffff:255.255.255.255/128' ,
2584
+ 'ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255' :
2585
+ 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128' ,
2571
2586
}
2572
2587
for uncompressed , compressed in list (test_addresses .items ()):
2573
2588
self .assertEqual (compressed , str (ipaddress .IPv6Interface (
0 commit comments