Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7ded21e

Browse files
committed
Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Patch by Philipp Hagemeister.
1 parent 4ce2f36 commit 7ded21e

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

Lib/test/test_socket.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,16 +499,30 @@ def testIPv4toString(self):
499499
from socket import inet_aton as f, inet_pton, AF_INET
500500
g = lambda a: inet_pton(AF_INET, a)
501501

502+
assertInvalid = lambda func,a: self.assertRaises(
503+
(socket.error, ValueError), func, a
504+
)
505+
502506
self.assertEqual(b'\x00\x00\x00\x00', f('0.0.0.0'))
503507
self.assertEqual(b'\xff\x00\xff\x00', f('255.0.255.0'))
504508
self.assertEqual(b'\xaa\xaa\xaa\xaa', f('170.170.170.170'))
505509
self.assertEqual(b'\x01\x02\x03\x04', f('1.2.3.4'))
506510
self.assertEqual(b'\xff\xff\xff\xff', f('255.255.255.255'))
511+
assertInvalid(f, '0.0.0.')
512+
assertInvalid(f, '300.0.0.0')
513+
assertInvalid(f, 'a.0.0.0')
514+
assertInvalid(f, '1.2.3.4.5')
515+
assertInvalid(f, '::1')
507516

508517
self.assertEqual(b'\x00\x00\x00\x00', g('0.0.0.0'))
509518
self.assertEqual(b'\xff\x00\xff\x00', g('255.0.255.0'))
510519
self.assertEqual(b'\xaa\xaa\xaa\xaa', g('170.170.170.170'))
511520
self.assertEqual(b'\xff\xff\xff\xff', g('255.255.255.255'))
521+
assertInvalid(g, '0.0.0.')
522+
assertInvalid(g, '300.0.0.0')
523+
assertInvalid(g, 'a.0.0.0')
524+
assertInvalid(g, '1.2.3.4.5')
525+
assertInvalid(g, '::1')
512526

513527
def testIPv6toString(self):
514528
if not hasattr(socket, 'inet_pton'):
@@ -520,6 +534,9 @@ def testIPv6toString(self):
520534
except ImportError:
521535
return
522536
f = lambda a: inet_pton(AF_INET6, a)
537+
assertInvalid = lambda a: self.assertRaises(
538+
(socket.error, ValueError), f, a
539+
)
523540

524541
self.assertEqual(b'\x00' * 16, f('::'))
525542
self.assertEqual(b'\x00' * 16, f('0::0'))
@@ -528,21 +545,62 @@ def testIPv6toString(self):
528545
b'\x45\xef\x76\xcb\x00\x1a\x56\xef\xaf\xeb\x0b\xac\x19\x24\xae\xae',
529546
f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae')
530547
)
548+
self.assertEqual(
549+
b'\xad\x42\x0a\xbc' + b'\x00' * 4 + b'\x01\x27\x00\x00\x02\x54\x00\x02',
550+
f('ad42:abc::127:0:254:2')
551+
)
552+
self.assertEqual(b'\x00\x12\x00\x0a' + b'\x00' * 12, f('12:a::'))
553+
assertInvalid('0x20::')
554+
assertInvalid(':::')
555+
assertInvalid('::0::')
556+
assertInvalid('1::abc::')
557+
assertInvalid('1::abc::def')
558+
assertInvalid('1:2:3:4:5:6:')
559+
assertInvalid('1:2:3:4:5:6')
560+
assertInvalid('1:2:3:4:5:6:7:8:')
561+
assertInvalid('1:2:3:4:5:6:7:8:0')
562+
563+
self.assertEqual(b'\x00' * 12 + b'\xfe\x2a\x17\x40',
564+
f('::254.42.23.64')
565+
)
566+
self.assertEqual(
567+
b'\x00\x42' + b'\x00' * 8 + b'\xa2\x9b\xfe\x2a\x17\x40',
568+
f('42::a29b:254.42.23.64')
569+
)
570+
self.assertEqual(
571+
b'\x00\x42\xa8\xb9\x00\x00\x00\x02\xff\xff\xa2\x9b\xfe\x2a\x17\x40',
572+
f('42:a8b9:0:2:ffff:a29b:254.42.23.64')
573+
)
574+
assertInvalid('255.254.253.252')
575+
assertInvalid('1::260.2.3.0')
576+
assertInvalid('1::0.be.e.0')
577+
assertInvalid('1:2:3:4:5:6:7:1.2.3.4')
578+
assertInvalid('::1.2.3.4:0')
579+
assertInvalid('0.100.200.0:3:4:5:6:7:8')
531580

532581
def testStringToIPv4(self):
533582
if not hasattr(socket, 'inet_ntop'):
534583
return # No inet_ntop() on this platform
535584
from socket import inet_ntoa as f, inet_ntop, AF_INET
536585
g = lambda a: inet_ntop(AF_INET, a)
586+
assertInvalid = lambda func,a: self.assertRaises(
587+
(socket.error, ValueError), func, a
588+
)
537589

538590
self.assertEqual('1.0.1.0', f(b'\x01\x00\x01\x00'))
539591
self.assertEqual('170.85.170.85', f(b'\xaa\x55\xaa\x55'))
540592
self.assertEqual('255.255.255.255', f(b'\xff\xff\xff\xff'))
541593
self.assertEqual('1.2.3.4', f(b'\x01\x02\x03\x04'))
594+
assertInvalid(f, b'\x00' * 3)
595+
assertInvalid(f, b'\x00' * 5)
596+
assertInvalid(f, b'\x00' * 16)
542597

543598
self.assertEqual('1.0.1.0', g(b'\x01\x00\x01\x00'))
544599
self.assertEqual('170.85.170.85', g(b'\xaa\x55\xaa\x55'))
545600
self.assertEqual('255.255.255.255', g(b'\xff\xff\xff\xff'))
601+
assertInvalid(g, b'\x00' * 3)
602+
assertInvalid(g, b'\x00' * 5)
603+
assertInvalid(g, b'\x00' * 16)
546604

547605
def testStringToIPv6(self):
548606
if not hasattr(socket, 'inet_ntop'):
@@ -554,6 +612,9 @@ def testStringToIPv6(self):
554612
except ImportError:
555613
return
556614
f = lambda a: inet_ntop(AF_INET6, a)
615+
assertInvalid = lambda a: self.assertRaises(
616+
(socket.error, ValueError), f, a
617+
)
557618

558619
self.assertEqual('::', f(b'\x00' * 16))
559620
self.assertEqual('::1', f(b'\x00' * 15 + b'\x01'))
@@ -562,6 +623,10 @@ def testStringToIPv6(self):
562623
f(b'\x0a\xef\x0b\x01\x05\x06\x10\x01\xff\xff\x99\x97\x00\x55\x01\x70')
563624
)
564625

626+
assertInvalid(b'\x12' * 15)
627+
assertInvalid(b'\x12' * 17)
628+
assertInvalid(b'\x12' * 4)
629+
565630
# XXX The following don't test module-level functionality...
566631

567632
def testSockName(self):

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ Michael Guravage
353353
Lars Gustäbel
354354
Thomas Güttler
355355
Barry Haddow
356+
Philipp Hagemeister
356357
Paul ten Hagen
357358
Rasmus Hahn
358359
Peter Haight

0 commit comments

Comments
 (0)