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

Skip to content

Commit d130195

Browse files
committed
Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Patch by Philipp Hagemeister.
2 parents b01c32d + 7ded21e commit d130195

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
@@ -895,16 +895,30 @@ def testIPv4toString(self):
895895
from socket import inet_aton as f, inet_pton, AF_INET
896896
g = lambda a: inet_pton(AF_INET, a)
897897

898+
assertInvalid = lambda func,a: self.assertRaises(
899+
(socket.error, ValueError), func, a
900+
)
901+
898902
self.assertEqual(b'\x00\x00\x00\x00', f('0.0.0.0'))
899903
self.assertEqual(b'\xff\x00\xff\x00', f('255.0.255.0'))
900904
self.assertEqual(b'\xaa\xaa\xaa\xaa', f('170.170.170.170'))
901905
self.assertEqual(b'\x01\x02\x03\x04', f('1.2.3.4'))
902906
self.assertEqual(b'\xff\xff\xff\xff', f('255.255.255.255'))
907+
assertInvalid(f, '0.0.0.')
908+
assertInvalid(f, '300.0.0.0')
909+
assertInvalid(f, 'a.0.0.0')
910+
assertInvalid(f, '1.2.3.4.5')
911+
assertInvalid(f, '::1')
903912

904913
self.assertEqual(b'\x00\x00\x00\x00', g('0.0.0.0'))
905914
self.assertEqual(b'\xff\x00\xff\x00', g('255.0.255.0'))
906915
self.assertEqual(b'\xaa\xaa\xaa\xaa', g('170.170.170.170'))
907916
self.assertEqual(b'\xff\xff\xff\xff', g('255.255.255.255'))
917+
assertInvalid(g, '0.0.0.')
918+
assertInvalid(g, '300.0.0.0')
919+
assertInvalid(g, 'a.0.0.0')
920+
assertInvalid(g, '1.2.3.4.5')
921+
assertInvalid(g, '::1')
908922

909923
def testIPv6toString(self):
910924
if not hasattr(socket, 'inet_pton'):
@@ -916,6 +930,9 @@ def testIPv6toString(self):
916930
except ImportError:
917931
return
918932
f = lambda a: inet_pton(AF_INET6, a)
933+
assertInvalid = lambda a: self.assertRaises(
934+
(socket.error, ValueError), f, a
935+
)
919936

920937
self.assertEqual(b'\x00' * 16, f('::'))
921938
self.assertEqual(b'\x00' * 16, f('0::0'))
@@ -924,21 +941,62 @@ def testIPv6toString(self):
924941
b'\x45\xef\x76\xcb\x00\x1a\x56\xef\xaf\xeb\x0b\xac\x19\x24\xae\xae',
925942
f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae')
926943
)
944+
self.assertEqual(
945+
b'\xad\x42\x0a\xbc' + b'\x00' * 4 + b'\x01\x27\x00\x00\x02\x54\x00\x02',
946+
f('ad42:abc::127:0:254:2')
947+
)
948+
self.assertEqual(b'\x00\x12\x00\x0a' + b'\x00' * 12, f('12:a::'))
949+
assertInvalid('0x20::')
950+
assertInvalid(':::')
951+
assertInvalid('::0::')
952+
assertInvalid('1::abc::')
953+
assertInvalid('1::abc::def')
954+
assertInvalid('1:2:3:4:5:6:')
955+
assertInvalid('1:2:3:4:5:6')
956+
assertInvalid('1:2:3:4:5:6:7:8:')
957+
assertInvalid('1:2:3:4:5:6:7:8:0')
958+
959+
self.assertEqual(b'\x00' * 12 + b'\xfe\x2a\x17\x40',
960+
f('::254.42.23.64')
961+
)
962+
self.assertEqual(
963+
b'\x00\x42' + b'\x00' * 8 + b'\xa2\x9b\xfe\x2a\x17\x40',
964+
f('42::a29b:254.42.23.64')
965+
)
966+
self.assertEqual(
967+
b'\x00\x42\xa8\xb9\x00\x00\x00\x02\xff\xff\xa2\x9b\xfe\x2a\x17\x40',
968+
f('42:a8b9:0:2:ffff:a29b:254.42.23.64')
969+
)
970+
assertInvalid('255.254.253.252')
971+
assertInvalid('1::260.2.3.0')
972+
assertInvalid('1::0.be.e.0')
973+
assertInvalid('1:2:3:4:5:6:7:1.2.3.4')
974+
assertInvalid('::1.2.3.4:0')
975+
assertInvalid('0.100.200.0:3:4:5:6:7:8')
927976

928977
def testStringToIPv4(self):
929978
if not hasattr(socket, 'inet_ntop'):
930979
return # No inet_ntop() on this platform
931980
from socket import inet_ntoa as f, inet_ntop, AF_INET
932981
g = lambda a: inet_ntop(AF_INET, a)
982+
assertInvalid = lambda func,a: self.assertRaises(
983+
(socket.error, ValueError), func, a
984+
)
933985

934986
self.assertEqual('1.0.1.0', f(b'\x01\x00\x01\x00'))
935987
self.assertEqual('170.85.170.85', f(b'\xaa\x55\xaa\x55'))
936988
self.assertEqual('255.255.255.255', f(b'\xff\xff\xff\xff'))
937989
self.assertEqual('1.2.3.4', f(b'\x01\x02\x03\x04'))
990+
assertInvalid(f, b'\x00' * 3)
991+
assertInvalid(f, b'\x00' * 5)
992+
assertInvalid(f, b'\x00' * 16)
938993

939994
self.assertEqual('1.0.1.0', g(b'\x01\x00\x01\x00'))
940995
self.assertEqual('170.85.170.85', g(b'\xaa\x55\xaa\x55'))
941996
self.assertEqual('255.255.255.255', g(b'\xff\xff\xff\xff'))
997+
assertInvalid(g, b'\x00' * 3)
998+
assertInvalid(g, b'\x00' * 5)
999+
assertInvalid(g, b'\x00' * 16)
9421000

9431001
def testStringToIPv6(self):
9441002
if not hasattr(socket, 'inet_ntop'):
@@ -950,6 +1008,9 @@ def testStringToIPv6(self):
9501008
except ImportError:
9511009
return
9521010
f = lambda a: inet_ntop(AF_INET6, a)
1011+
assertInvalid = lambda a: self.assertRaises(
1012+
(socket.error, ValueError), f, a
1013+
)
9531014

9541015
self.assertEqual('::', f(b'\x00' * 16))
9551016
self.assertEqual('::1', f(b'\x00' * 15 + b'\x01'))
@@ -958,6 +1019,10 @@ def testStringToIPv6(self):
9581019
f(b'\x0a\xef\x0b\x01\x05\x06\x10\x01\xff\xff\x99\x97\x00\x55\x01\x70')
9591020
)
9601021

1022+
assertInvalid(b'\x12' * 15)
1023+
assertInvalid(b'\x12' * 17)
1024+
assertInvalid(b'\x12' * 4)
1025+
9611026
# XXX The following don't test module-level functionality...
9621027

9631028
def testSockName(self):

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ Lars Gustäbel
382382
Thomas Güttler
383383
Jonas H.
384384
Barry Haddow
385+
Philipp Hagemeister
385386
Paul ten Hagen
386387
Rasmus Hahn
387388
Peter Haight

0 commit comments

Comments
 (0)