annotate Lib/test/test_socket.py @ 83191:0437c19cdad0

gibibytes (Arfrever)
author Antoine Pitrou <solipsis@pitrou.net>
date Sun, 07 Apr 2013 23:46:52 +0200
parents 5c09e1c57200
children 1410b7790de6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59522
fcfe324663a6 convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents: 58415
diff changeset
1 #!/usr/bin/env python3
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
2
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3 import unittest
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
4 from test import support
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
5
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
6 import errno
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
7 import io
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
8 import socket
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
9 import select
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
10 import tempfile
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
11 import _testcapi
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
12 import time
46161
848160d10780 Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44782
diff changeset
13 import traceback
46899
bd2c95c165ea Rename Queue module to queue.
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46370
diff changeset
14 import queue
25152
0c9dfd5a06d4 Skip UDP testing for MacPython (for now), it hangs. This may be due to
Jack Jansen <jack.jansen@cwi.nl>
parents: 24772
diff changeset
15 import sys
44535
420fe6d7d5f4 Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43954
diff changeset
16 import os
420fe6d7d5f4 Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43954
diff changeset
17 import array
65604
8d7f18332db7 Fix SOCK_CLOEXEC and SOCK_NONBLOCK tests on recent glibcs with old Linux kernels.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65416
diff changeset
18 import platform
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
19 import contextlib
32160
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
20 from weakref import proxy
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
21 import signal
64961
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
22 import math
68774
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
23 import pickle
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
24 import struct
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
25 try:
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
26 import fcntl
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
27 except ImportError:
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
28 fcntl = False
76150
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
29 try:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
30 import multiprocessing
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
31 except ImportError:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
32 multiprocessing = False
65606
a30e75820b8d Also guard other SOCK_NONBLOCK test
Antoine Pitrou <solipsis@pitrou.net>
parents: 65604
diff changeset
33
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
34 HOST = support.HOST
68142
be6c38d1817b Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents: 67382
diff changeset
35 MSG = 'Michael Gilfix was here\u1234\r\n'.encode('utf-8') ## test unicode string and carriage return
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
36
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
37 try:
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
38 import _thread as thread
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
39 import threading
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
40 except ImportError:
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
41 thread = None
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
42 threading = None
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
43
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
44 def _have_socket_can():
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
45 """Check whether CAN sockets are supported on this host."""
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
46 try:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
47 s = socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
48 except (AttributeError, OSError):
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
49 return False
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
50 else:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
51 s.close()
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
52 return True
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
53
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
54 def _have_socket_rds():
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
55 """Check whether RDS sockets are supported on this host."""
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
56 try:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
57 s = socket.socket(socket.PF_RDS, socket.SOCK_SEQPACKET, 0)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
58 except (AttributeError, OSError):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
59 return False
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
60 else:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
61 s.close()
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
62 return True
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
63
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
64 HAVE_SOCKET_CAN = _have_socket_can()
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
65
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
66 HAVE_SOCKET_RDS = _have_socket_rds()
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
67
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
68 # Size in bytes of the int type
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
69 SIZEOF_INT = array.array("i").itemsize
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
70
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
71 class SocketTCPTest(unittest.TestCase):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
72
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
73 def setUp(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
74 self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
75 self.port = support.bind_port(self.serv)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
76 self.serv.listen(1)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
77
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
78 def tearDown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
79 self.serv.close()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
80 self.serv = None
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
81
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
82 class SocketUDPTest(unittest.TestCase):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
83
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
84 def setUp(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
85 self.serv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
86 self.port = support.bind_port(self.serv)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
87
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
88 def tearDown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
89 self.serv.close()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
90 self.serv = None
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
91
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
92 class ThreadSafeCleanupTestCase(unittest.TestCase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
93 """Subclass of unittest.TestCase with thread-safe cleanup methods.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
94
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
95 This subclass protects the addCleanup() and doCleanups() methods
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
96 with a recursive lock.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
97 """
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
98
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
99 if threading:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
100 def __init__(self, *args, **kwargs):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
101 super().__init__(*args, **kwargs)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
102 self._cleanup_lock = threading.RLock()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
103
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
104 def addCleanup(self, *args, **kwargs):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
105 with self._cleanup_lock:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
106 return super().addCleanup(*args, **kwargs)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
107
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
108 def doCleanups(self, *args, **kwargs):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
109 with self._cleanup_lock:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
110 return super().doCleanups(*args, **kwargs)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
111
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
112 class SocketCANTest(unittest.TestCase):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
113
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
114 """To be able to run this test, a `vcan0` CAN interface can be created with
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
115 the following commands:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
116 # modprobe vcan
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
117 # ip link add dev vcan0 type vcan
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
118 # ifconfig vcan0 up
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
119 """
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
120 interface = 'vcan0'
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
121 bufsize = 128
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
122
82024
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
123 """The CAN frame structure is defined in <linux/can.h>:
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
124
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
125 struct can_frame {
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
126 canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
127 __u8 can_dlc; /* data length code: 0 .. 8 */
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
128 __u8 data[8] __attribute__((aligned(8)));
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
129 };
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
130 """
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
131 can_frame_fmt = "=IB3x8s"
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
132 can_frame_size = struct.calcsize(can_frame_fmt)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
133
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
134 """The Broadcast Management Command frame structure is defined
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
135 in <linux/can/bcm.h>:
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
136
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
137 struct bcm_msg_head {
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
138 __u32 opcode;
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
139 __u32 flags;
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
140 __u32 count;
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
141 struct timeval ival1, ival2;
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
142 canid_t can_id;
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
143 __u32 nframes;
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
144 struct can_frame frames[0];
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
145 }
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
146
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
147 `bcm_msg_head` must be 8 bytes aligned because of the `frames` member (see
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
148 `struct can_frame` definition). Must use native not standard types for packing.
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
149 """
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
150 bcm_cmd_msg_fmt = "@3I4l2I"
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
151 bcm_cmd_msg_fmt += "x" * (struct.calcsize(bcm_cmd_msg_fmt) % 8)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
152
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
153 def setUp(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
154 self.s = socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
72849
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
155 self.addCleanup(self.s.close)
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
156 try:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
157 self.s.bind((self.interface,))
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
158 except OSError:
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
159 self.skipTest('network interface `%s` does not exist' %
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
160 self.interface)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
161
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
162
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
163 class SocketRDSTest(unittest.TestCase):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
164
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
165 """To be able to run this test, the `rds` kernel module must be loaded:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
166 # modprobe rds
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
167 """
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
168 bufsize = 8192
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
169
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
170 def setUp(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
171 self.serv = socket.socket(socket.PF_RDS, socket.SOCK_SEQPACKET, 0)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
172 self.addCleanup(self.serv.close)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
173 try:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
174 self.port = support.bind_port(self.serv)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
175 except OSError:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
176 self.skipTest('unable to bind RDS socket')
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
177
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
178
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
179 class ThreadableTest:
23909
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
180 """Threadable Test class
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
181
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
182 The ThreadableTest class makes it easy to create a threaded
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
183 client/server pair from an existing unit test. To create a
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
184 new threaded class from an existing unit test, use multiple
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
185 inheritance:
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
186
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
187 class NewClass (OldClass, ThreadableTest):
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
188 pass
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
189
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
190 This class defines two new fixture functions with obvious
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
191 purposes for overriding:
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
192
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
193 clientSetUp ()
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
194 clientTearDown ()
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
195
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
196 Any new test functions within the class must then define
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
197 tests in pairs, where the test name is preceeded with a
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
198 '_' to indicate the client portion of the test. Ex:
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
199
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
200 def testFoo(self):
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
201 # Server portion
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
202
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
203 def _testFoo(self):
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
204 # Client portion
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
205
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
206 Any exceptions raised by the clients during their tests
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
207 are caught and transferred to the main thread to alert
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
208 the testing framework.
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
209
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
210 Note, the server setup function cannot call any blocking
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
211 functions that rely on the client thread during setup,
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
212 unless serverExplicitReady() is called just before
23909
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
213 the blocking call (such as in setting up a client/server
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
214 connection and performing the accept() in setUp().
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
215 """
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
216
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
217 def __init__(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
218 # Swap the true setup function
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
219 self.__setUp = self.setUp
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
220 self.__tearDown = self.tearDown
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
221 self.setUp = self._setUp
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
222 self.tearDown = self._tearDown
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
223
23909
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
224 def serverExplicitReady(self):
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
225 """This method allows the server to explicitly indicate that
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
226 it wants the client thread to proceed. This is useful if the
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
227 server is about to execute a blocking routine that is
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
228 dependent upon the client thread during its setup routine."""
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
229 self.server_ready.set()
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
230
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
231 def _setUp(self):
23909
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
232 self.server_ready = threading.Event()
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
233 self.client_ready = threading.Event()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
234 self.done = threading.Event()
46899
bd2c95c165ea Rename Queue module to queue.
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46370
diff changeset
235 self.queue = queue.Queue(1)
72849
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
236 self.server_crashed = False
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
237
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
238 # Do some munging to start the client test.
23815
203d1412a7e8 Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents: 23814
diff changeset
239 methodname = self.id()
203d1412a7e8 Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents: 23814
diff changeset
240 i = methodname.rfind('.')
203d1412a7e8 Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents: 23814
diff changeset
241 methodname = methodname[i+1:]
203d1412a7e8 Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents: 23814
diff changeset
242 test_method = getattr(self, '_' + methodname)
23800
bf1555a92711 Remove some overly complicated ways to concatenate and repeat strings
Guido van Rossum <guido@python.org>
parents: 23799
diff changeset
243 self.client_thread = thread.start_new_thread(
bf1555a92711 Remove some overly complicated ways to concatenate and repeat strings
Guido van Rossum <guido@python.org>
parents: 23799
diff changeset
244 self.clientRun, (test_method,))
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
245
72849
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
246 try:
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
247 self.__setUp()
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
248 except:
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
249 self.server_crashed = True
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
250 raise
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
251 finally:
23909
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
252 self.server_ready.set()
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
253 self.client_ready.wait()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
254
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
255 def _tearDown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
256 self.__tearDown()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
257 self.done.wait()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
258
44675
627f2e2273b9 Remove Queue.empty() and Queue.full() in favor of using qsize() or trapping the Empty and Full exceptions.
Raymond Hettinger <python@rcn.com>
parents: 44604
diff changeset
259 if self.queue.qsize():
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
260 exc = self.queue.get()
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
261 raise exc
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
262
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
263 def clientRun(self, test_func):
23909
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
264 self.server_ready.wait()
72448
aa4b9ed71538 Fix a race condition in test_socket.ThreadableTest: the client is reported as
Charles-François Natali <neologix@free.fr>
parents: 70016
diff changeset
265 self.clientSetUp()
23909
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
266 self.client_ready.set()
72849
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
267 if self.server_crashed:
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
268 self.clientTearDown()
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
269 return
41824
24b60622b944 Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41809
diff changeset
270 if not hasattr(test_func, '__call__'):
43014
9834301a2fd3 Raise statement normalization in Lib/test/.
Collin Winter <collinw@gmail.com>
parents: 42637
diff changeset
271 raise TypeError("test_func must be a callable function")
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
272 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
273 test_func()
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
274 except BaseException as e:
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
275 self.queue.put(e)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
276 finally:
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
277 self.clientTearDown()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
278
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
279 def clientSetUp(self):
43014
9834301a2fd3 Raise statement normalization in Lib/test/.
Collin Winter <collinw@gmail.com>
parents: 42637
diff changeset
280 raise NotImplementedError("clientSetUp must be implemented.")
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
281
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
282 def clientTearDown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
283 self.done.set()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
284 thread.exit()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
285
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
286 class ThreadedTCPSocketTest(SocketTCPTest, ThreadableTest):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
287
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
288 def __init__(self, methodName='runTest'):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
289 SocketTCPTest.__init__(self, methodName=methodName)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
290 ThreadableTest.__init__(self)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
291
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
292 def clientSetUp(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
293 self.cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
294
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
295 def clientTearDown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
296 self.cli.close()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
297 self.cli = None
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
298 ThreadableTest.clientTearDown(self)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
299
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
300 class ThreadedUDPSocketTest(SocketUDPTest, ThreadableTest):
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
301
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
302 def __init__(self, methodName='runTest'):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
303 SocketUDPTest.__init__(self, methodName=methodName)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
304 ThreadableTest.__init__(self)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
305
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
306 def clientSetUp(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
307 self.cli = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
308
65926
8d659a5479ca Merged revisions 86151 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 65429
diff changeset
309 def clientTearDown(self):
8d659a5479ca Merged revisions 86151 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 65429
diff changeset
310 self.cli.close()
8d659a5479ca Merged revisions 86151 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 65429
diff changeset
311 self.cli = None
8d659a5479ca Merged revisions 86151 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 65429
diff changeset
312 ThreadableTest.clientTearDown(self)
8d659a5479ca Merged revisions 86151 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 65429
diff changeset
313
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
314 class ThreadedCANSocketTest(SocketCANTest, ThreadableTest):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
315
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
316 def __init__(self, methodName='runTest'):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
317 SocketCANTest.__init__(self, methodName=methodName)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
318 ThreadableTest.__init__(self)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
319
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
320 def clientSetUp(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
321 self.cli = socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
322 try:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
323 self.cli.bind((self.interface,))
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
324 except OSError:
72849
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
325 # skipTest should not be called here, and will be called in the
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
326 # server instead
f7f9d5ac6d60 Fix the threading infrastructure in test_socket to support skipping
Antoine Pitrou <solipsis@pitrou.net>
parents: 72758
diff changeset
327 pass
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
328
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
329 def clientTearDown(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
330 self.cli.close()
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
331 self.cli = None
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
332 ThreadableTest.clientTearDown(self)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
333
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
334 class ThreadedRDSSocketTest(SocketRDSTest, ThreadableTest):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
335
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
336 def __init__(self, methodName='runTest'):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
337 SocketRDSTest.__init__(self, methodName=methodName)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
338 ThreadableTest.__init__(self)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
339
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
340 def clientSetUp(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
341 self.cli = socket.socket(socket.PF_RDS, socket.SOCK_SEQPACKET, 0)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
342 try:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
343 # RDS sockets must be bound explicitly to send or receive data
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
344 self.cli.bind((HOST, 0))
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
345 self.cli_addr = self.cli.getsockname()
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
346 except OSError:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
347 # skipTest should not be called here, and will be called in the
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
348 # server instead
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
349 pass
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
350
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
351 def clientTearDown(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
352 self.cli.close()
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
353 self.cli = None
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
354 ThreadableTest.clientTearDown(self)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
355
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
356 class SocketConnectedTest(ThreadedTCPSocketTest):
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
357 """Socket tests for client-server connection.
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
358
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
359 self.cli_conn is a client socket connected to the server. The
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
360 setUp() method guarantees that it is connected to the server.
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
361 """
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
362
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
363 def __init__(self, methodName='runTest'):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
364 ThreadedTCPSocketTest.__init__(self, methodName=methodName)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
365
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
366 def setUp(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
367 ThreadedTCPSocketTest.setUp(self)
23909
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
368 # Indicate explicitly we're ready for the client thread to
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
369 # proceed and then perform the blocking call to accept
b16d4be6a232 Michael fixed the race conditions and removed the sleeps.
Guido van Rossum <guido@python.org>
parents: 23831
diff changeset
370 self.serverExplicitReady()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
371 conn, addr = self.serv.accept()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
372 self.cli_conn = conn
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
373
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
374 def tearDown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
375 self.cli_conn.close()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
376 self.cli_conn = None
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
377 ThreadedTCPSocketTest.tearDown(self)
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
378
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
379 def clientSetUp(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
380 ThreadedTCPSocketTest.clientSetUp(self)
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
381 self.cli.connect((HOST, self.port))
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
382 self.serv_conn = self.cli
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
383
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
384 def clientTearDown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
385 self.serv_conn.close()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
386 self.serv_conn = None
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
387 ThreadedTCPSocketTest.clientTearDown(self)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
388
33063
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
389 class SocketPairTest(unittest.TestCase, ThreadableTest):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
390
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
391 def __init__(self, methodName='runTest'):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
392 unittest.TestCase.__init__(self, methodName=methodName)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
393 ThreadableTest.__init__(self)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
394
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
395 def setUp(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
396 self.serv, self.cli = socket.socketpair()
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
397
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
398 def tearDown(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
399 self.serv.close()
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
400 self.serv = None
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
401
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
402 def clientSetUp(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
403 pass
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
404
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
405 def clientTearDown(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
406 self.cli.close()
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
407 self.cli = None
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
408 ThreadableTest.clientTearDown(self)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
409
33076
836e77266f97 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 33063
diff changeset
410
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
411 # The following classes are used by the sendmsg()/recvmsg() tests.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
412 # Combining, for instance, ConnectedStreamTestMixin and TCPTestBase
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
413 # gives a drop-in replacement for SocketConnectedTest, but different
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
414 # address families can be used, and the attributes serv_addr and
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
415 # cli_addr will be set to the addresses of the endpoints.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
416
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
417 class SocketTestBase(unittest.TestCase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
418 """A base class for socket tests.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
419
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
420 Subclasses must provide methods newSocket() to return a new socket
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
421 and bindSock(sock) to bind it to an unused address.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
422
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
423 Creates a socket self.serv and sets self.serv_addr to its address.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
424 """
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
425
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
426 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
427 self.serv = self.newSocket()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
428 self.bindServer()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
429
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
430 def bindServer(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
431 """Bind server socket and set self.serv_addr to its address."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
432 self.bindSock(self.serv)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
433 self.serv_addr = self.serv.getsockname()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
434
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
435 def tearDown(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
436 self.serv.close()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
437 self.serv = None
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
438
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
439
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
440 class SocketListeningTestMixin(SocketTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
441 """Mixin to listen on the server socket."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
442
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
443 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
444 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
445 self.serv.listen(1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
446
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
447
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
448 class ThreadedSocketTestMixin(ThreadSafeCleanupTestCase, SocketTestBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
449 ThreadableTest):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
450 """Mixin to add client socket and allow client/server tests.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
451
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
452 Client socket is self.cli and its address is self.cli_addr. See
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
453 ThreadableTest for usage information.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
454 """
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
455
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
456 def __init__(self, *args, **kwargs):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
457 super().__init__(*args, **kwargs)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
458 ThreadableTest.__init__(self)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
459
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
460 def clientSetUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
461 self.cli = self.newClientSocket()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
462 self.bindClient()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
463
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
464 def newClientSocket(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
465 """Return a new socket for use as client."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
466 return self.newSocket()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
467
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
468 def bindClient(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
469 """Bind client socket and set self.cli_addr to its address."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
470 self.bindSock(self.cli)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
471 self.cli_addr = self.cli.getsockname()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
472
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
473 def clientTearDown(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
474 self.cli.close()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
475 self.cli = None
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
476 ThreadableTest.clientTearDown(self)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
477
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
478
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
479 class ConnectedStreamTestMixin(SocketListeningTestMixin,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
480 ThreadedSocketTestMixin):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
481 """Mixin to allow client/server stream tests with connected client.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
482
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
483 Server's socket representing connection to client is self.cli_conn
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
484 and client's connection to server is self.serv_conn. (Based on
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
485 SocketConnectedTest.)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
486 """
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
487
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
488 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
489 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
490 # Indicate explicitly we're ready for the client thread to
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
491 # proceed and then perform the blocking call to accept
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
492 self.serverExplicitReady()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
493 conn, addr = self.serv.accept()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
494 self.cli_conn = conn
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
495
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
496 def tearDown(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
497 self.cli_conn.close()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
498 self.cli_conn = None
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
499 super().tearDown()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
500
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
501 def clientSetUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
502 super().clientSetUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
503 self.cli.connect(self.serv_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
504 self.serv_conn = self.cli
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
505
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
506 def clientTearDown(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
507 self.serv_conn.close()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
508 self.serv_conn = None
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
509 super().clientTearDown()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
510
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
511
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
512 class UnixSocketTestBase(SocketTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
513 """Base class for Unix-domain socket tests."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
514
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
515 # This class is used for file descriptor passing tests, so we
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
516 # create the sockets in a private directory so that other users
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
517 # can't send anything that might be problematic for a privileged
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
518 # user running the tests.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
519
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
520 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
521 self.dir_path = tempfile.mkdtemp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
522 self.addCleanup(os.rmdir, self.dir_path)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
523 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
524
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
525 def bindSock(self, sock):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
526 path = tempfile.mktemp(dir=self.dir_path)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
527 sock.bind(path)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
528 self.addCleanup(support.unlink, path)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
529
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
530 class UnixStreamBase(UnixSocketTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
531 """Base class for Unix-domain SOCK_STREAM tests."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
532
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
533 def newSocket(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
534 return socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
535
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
536
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
537 class InetTestBase(SocketTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
538 """Base class for IPv4 socket tests."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
539
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
540 host = HOST
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
541
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
542 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
543 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
544 self.port = self.serv_addr[1]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
545
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
546 def bindSock(self, sock):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
547 support.bind_port(sock, host=self.host)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
548
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
549 class TCPTestBase(InetTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
550 """Base class for TCP-over-IPv4 tests."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
551
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
552 def newSocket(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
553 return socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
554
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
555 class UDPTestBase(InetTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
556 """Base class for UDP-over-IPv4 tests."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
557
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
558 def newSocket(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
559 return socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
560
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
561 class SCTPStreamBase(InetTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
562 """Base class for SCTP tests in one-to-one (SOCK_STREAM) mode."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
563
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
564 def newSocket(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
565 return socket.socket(socket.AF_INET, socket.SOCK_STREAM,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
566 socket.IPPROTO_SCTP)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
567
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
568
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
569 class Inet6TestBase(InetTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
570 """Base class for IPv6 socket tests."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
571
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
572 # Don't use "localhost" here - it may not have an IPv6 address
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
573 # assigned to it by default (e.g. in /etc/hosts), and if someone
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
574 # has assigned it an IPv4-mapped address, then it's unlikely to
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
575 # work with the full IPv6 API.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
576 host = "::1"
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
577
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
578 class UDP6TestBase(Inet6TestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
579 """Base class for UDP-over-IPv6 tests."""
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
580
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
581 def newSocket(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
582 return socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
583
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
584
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
585 # Test-skipping decorators for use with ThreadableTest.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
586
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
587 def skipWithClientIf(condition, reason):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
588 """Skip decorated test if condition is true, add client_skip decorator.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
589
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
590 If the decorated object is not a class, sets its attribute
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
591 "client_skip" to a decorator which will return an empty function
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
592 if the test is to be skipped, or the original function if it is
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
593 not. This can be used to avoid running the client part of a
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
594 skipped test when using ThreadableTest.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
595 """
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
596 def client_pass(*args, **kwargs):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
597 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
598 def skipdec(obj):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
599 retval = unittest.skip(reason)(obj)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
600 if not isinstance(obj, type):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
601 retval.client_skip = lambda f: client_pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
602 return retval
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
603 def noskipdec(obj):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
604 if not (isinstance(obj, type) or hasattr(obj, "client_skip")):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
605 obj.client_skip = lambda f: f
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
606 return obj
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
607 return skipdec if condition else noskipdec
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
608
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
609
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
610 def requireAttrs(obj, *attributes):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
611 """Skip decorated test if obj is missing any of the given attributes.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
612
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
613 Sets client_skip attribute as skipWithClientIf() does.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
614 """
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
615 missing = [name for name in attributes if not hasattr(obj, name)]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
616 return skipWithClientIf(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
617 missing, "don't have " + ", ".join(name for name in missing))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
618
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
619
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
620 def requireSocket(*args):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
621 """Skip decorated test if a socket cannot be created with given arguments.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
622
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
623 When an argument is given as a string, will use the value of that
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
624 attribute of the socket module, or skip the test if it doesn't
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
625 exist. Sets client_skip attribute as skipWithClientIf() does.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
626 """
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
627 err = None
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
628 missing = [obj for obj in args if
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
629 isinstance(obj, str) and not hasattr(socket, obj)]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
630 if missing:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
631 err = "don't have " + ", ".join(name for name in missing)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
632 else:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
633 callargs = [getattr(socket, obj) if isinstance(obj, str) else obj
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
634 for obj in args]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
635 try:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
636 s = socket.socket(*callargs)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
637 except OSError as e:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
638 # XXX: check errno?
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
639 err = str(e)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
640 else:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
641 s.close()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
642 return skipWithClientIf(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
643 err is not None,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
644 "can't create socket({0}): {1}".format(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
645 ", ".join(str(o) for o in args), err))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
646
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
647
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
648 #######################################################################
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
649 ## Begin Tests
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
650
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
651 class GeneralModuleTests(unittest.TestCase):
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
652
41941
e4ab08039c75 Simplify socket_repr() by using PyUnicode_FromFormat()
Walter Dörwald <walter@livinglogic.de>
parents: 41824
diff changeset
653 def test_repr(self):
e4ab08039c75 Simplify socket_repr() by using PyUnicode_FromFormat()
Walter Dörwald <walter@livinglogic.de>
parents: 41824
diff changeset
654 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
655 self.addCleanup(s.close)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
656 self.assertTrue(repr(s).startswith("<socket.socket object"))
41941
e4ab08039c75 Simplify socket_repr() by using PyUnicode_FromFormat()
Walter Dörwald <walter@livinglogic.de>
parents: 41824
diff changeset
657
32160
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
658 def test_weakref(self):
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
659 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
660 p = proxy(s)
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
661 self.assertEqual(p.fileno(), s.fileno())
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
662 s.close()
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
663 s = None
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
664 try:
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
665 p.fileno()
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
666 except ReferenceError:
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
667 pass
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
668 else:
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
669 self.fail('Socket proxy still exists')
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
670
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
671 def testSocketError(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
672 # Testing socket module exceptions
69940
9af64d83c217 Refactor buggy test to correctly use the msg argument of assertRaises.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69918
diff changeset
673 msg = "Error raising socket exception (%s)."
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
674 with self.assertRaises(OSError, msg=msg % 'OSError'):
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
675 raise OSError
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
676 with self.assertRaises(OSError, msg=msg % 'socket.herror'):
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
677 raise socket.herror
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
678 with self.assertRaises(OSError, msg=msg % 'socket.gaierror'):
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
679 raise socket.gaierror
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
680
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
681 def testSendtoErrors(self):
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
682 # Testing that sendto doens't masks failures. See #10169.
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
683 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
684 self.addCleanup(s.close)
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
685 s.bind(('', 0))
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
686 sockname = s.getsockname()
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
687 # 2 args
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
688 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
689 s.sendto('\u2620', sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
690 self.assertEqual(str(cm.exception),
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
691 "'str' does not support the buffer interface")
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
692 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
693 s.sendto(5j, sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
694 self.assertEqual(str(cm.exception),
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
695 "'complex' does not support the buffer interface")
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
696 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
697 s.sendto(b'foo', None)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
698 self.assertIn('not NoneType',str(cm.exception))
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
699 # 3 args
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
700 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
701 s.sendto('\u2620', 0, sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
702 self.assertEqual(str(cm.exception),
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
703 "'str' does not support the buffer interface")
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
704 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
705 s.sendto(5j, 0, sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
706 self.assertEqual(str(cm.exception),
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
707 "'complex' does not support the buffer interface")
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
708 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
709 s.sendto(b'foo', 0, None)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
710 self.assertIn('not NoneType', str(cm.exception))
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
711 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
712 s.sendto(b'foo', 'bar', sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
713 self.assertIn('an integer is required', str(cm.exception))
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
714 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
715 s.sendto(b'foo', None, None)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
716 self.assertIn('an integer is required', str(cm.exception))
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
717 # wrong number of args
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
718 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
719 s.sendto(b'foo')
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
720 self.assertIn('(1 given)', str(cm.exception))
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
721 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
722 s.sendto(b'foo', 0, sockname, 4)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
723 self.assertIn('(4 given)', str(cm.exception))
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
724
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
725 def testCrucialConstants(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
726 # Testing for mission critical constants
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
727 socket.AF_INET
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
728 socket.SOCK_STREAM
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
729 socket.SOCK_DGRAM
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
730 socket.SOCK_RAW
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
731 socket.SOCK_RDM
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
732 socket.SOCK_SEQPACKET
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
733 socket.SOL_SOCKET
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
734 socket.SO_REUSEADDR
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
735
23831
f7306ae8662d Temporarily disable the timeout and socket tests.
Guido van Rossum <guido@python.org>
parents: 23819
diff changeset
736 def testHostnameRes(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
737 # Testing hostname resolution mechanisms
23831
f7306ae8662d Temporarily disable the timeout and socket tests.
Guido van Rossum <guido@python.org>
parents: 23819
diff changeset
738 hostname = socket.gethostname()
26799
507aa96a128f Skip testHostnameRes() if gethostbyname() raises an exception.
Guido van Rossum <guido@python.org>
parents: 25285
diff changeset
739 try:
507aa96a128f Skip testHostnameRes() if gethostbyname() raises an exception.
Guido van Rossum <guido@python.org>
parents: 25285
diff changeset
740 ip = socket.gethostbyname(hostname)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
741 except OSError:
26799
507aa96a128f Skip testHostnameRes() if gethostbyname() raises an exception.
Guido van Rossum <guido@python.org>
parents: 25285
diff changeset
742 # Probably name lookup wasn't set up right; skip this test
507aa96a128f Skip testHostnameRes() if gethostbyname() raises an exception.
Guido van Rossum <guido@python.org>
parents: 25285
diff changeset
743 return
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
744 self.assertTrue(ip.find('.') >= 0, "Error resolving host to ip.")
26800
b2b4797052c6 Also skip testHostnameRes() if gethostbyaddr() raises an exception.
Guido van Rossum <guido@python.org>
parents: 26799
diff changeset
745 try:
b2b4797052c6 Also skip testHostnameRes() if gethostbyaddr() raises an exception.
Guido van Rossum <guido@python.org>
parents: 26799
diff changeset
746 hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
747 except OSError:
26800
b2b4797052c6 Also skip testHostnameRes() if gethostbyaddr() raises an exception.
Guido van Rossum <guido@python.org>
parents: 26799
diff changeset
748 # Probably a similar problem as above; skip this test
b2b4797052c6 Also skip testHostnameRes() if gethostbyaddr() raises an exception.
Guido van Rossum <guido@python.org>
parents: 26799
diff changeset
749 return
34739
0c82a7ef9554 Fix test_socket's test for socket.getfqdn() to also accept the result from
Brett Cannon <bcannon@gmail.com>
parents: 34014
diff changeset
750 all_host_names = [hostname, hname] + aliases
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
751 fqhn = socket.getfqdn(ip)
23831
f7306ae8662d Temporarily disable the timeout and socket tests.
Guido van Rossum <guido@python.org>
parents: 23819
diff changeset
752 if not fqhn in all_host_names:
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
753 self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
754
68194
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
755 @unittest.skipUnless(hasattr(socket, 'sethostname'), "test needs socket.sethostname()")
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
756 @unittest.skipUnless(hasattr(socket, 'gethostname'), "test needs socket.gethostname()")
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
757 def test_sethostname(self):
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
758 oldhn = socket.gethostname()
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
759 try:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
760 socket.sethostname('new')
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
761 except OSError as e:
68194
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
762 if e.errno == errno.EPERM:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
763 self.skipTest("test should be run as root")
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
764 else:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
765 raise
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
766 try:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
767 # running test as root!
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
768 self.assertEqual(socket.gethostname(), 'new')
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
769 # Should work with bytes objects too
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
770 socket.sethostname(b'bar')
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
771 self.assertEqual(socket.gethostname(), 'bar')
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
772 finally:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
773 socket.sethostname(oldhn)
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
774
70136
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
775 @unittest.skipUnless(hasattr(socket, 'if_nameindex'),
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
776 'socket.if_nameindex() not available.')
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
777 def testInterfaceNameIndex(self):
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
778 interfaces = socket.if_nameindex()
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
779 for index, name in interfaces:
70226
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
780 self.assertIsInstance(index, int)
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
781 self.assertIsInstance(name, str)
70136
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
782 # interface indices are non-zero integers
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
783 self.assertGreater(index, 0)
70226
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
784 _index = socket.if_nametoindex(name)
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
785 self.assertIsInstance(_index, int)
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
786 self.assertEqual(index, _index)
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
787 _name = socket.if_indextoname(index)
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
788 self.assertIsInstance(_name, str)
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
789 self.assertEqual(name, _name)
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
790
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
791 @unittest.skipUnless(hasattr(socket, 'if_nameindex'),
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
792 'socket.if_nameindex() not available.')
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
793 def testInvalidInterfaceNameIndex(self):
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
794 # test nonexistent interface index/name
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
795 self.assertRaises(OSError, socket.if_indextoname, 0)
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
796 self.assertRaises(OSError, socket.if_nametoindex, '_DEADBEEF')
70226
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
797 # test with invalid values
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
798 self.assertRaises(TypeError, socket.if_nametoindex, 0)
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
799 self.assertRaises(TypeError, socket.if_indextoname, '_DEADBEEF')
70136
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
800
23799
2ad13ee6d850 Don't test for Java, test for sys.getrefcount.
Guido van Rossum <guido@python.org>
parents: 23798
diff changeset
801 def testRefCountGetNameInfo(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
802 # Testing reference count for getnameinfo
23799
2ad13ee6d850 Don't test for Java, test for sys.getrefcount.
Guido van Rossum <guido@python.org>
parents: 23798
diff changeset
803 if hasattr(sys, "getrefcount"):
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
804 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
805 # On some versions, this loses a reference
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
806 orig = sys.getrefcount(__name__)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
807 socket.getnameinfo(__name__,0)
56368
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 55593
diff changeset
808 except TypeError:
39648
efe3f2c0da5e Killed the <> operator. You must now use !=.
Guido van Rossum <guido@python.org>
parents: 39442
diff changeset
809 if sys.getrefcount(__name__) != orig:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
810 self.fail("socket.getnameinfo loses a reference")
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
811
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
812 def testInterpreterCrash(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
813 # Making sure getnameinfo doesn't crash the interpreter
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
814 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
815 # On some versions, this crashes the interpreter.
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
816 socket.getnameinfo(('x', 0, 0, 0), 0)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
817 except OSError:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
818 pass
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
819
25285
4d6f8204234a Since it tests both ntohl and ntohs, the test should not be called
Guido van Rossum <guido@python.org>
parents: 25256
diff changeset
820 def testNtoH(self):
25256
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
821 # This just checks that htons etc. are their own inverse,
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
822 # when looking at the lower 16 or 32 bits.
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
823 sizes = {socket.htonl: 32, socket.ntohl: 32,
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
824 socket.htons: 16, socket.ntohs: 16}
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
825 for func, size in sizes.items():
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 40638
diff changeset
826 mask = (1<<size) - 1
25256
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
827 for i in (0, 1, 0xffff, ~0xffff, 2, 0x01234567, 0x76543210):
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
828 self.assertEqual(i & mask, func(func(i&mask)) & mask)
24450
747fa65a9b47 Repair testNtoH for large long arguments.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24375
diff changeset
829
25256
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
830 swapped = func(mask)
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
831 self.assertEqual(swapped & mask, mask)
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 40638
diff changeset
832 self.assertRaises(OverflowError, func, 1<<34)
24375
89ce62126664 Extended socket.htonl and ntohl to accept longs.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24374
diff changeset
833
40638
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
834 def testNtoHErrors(self):
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 40638
diff changeset
835 good_values = [ 1, 2, 3, 1, 2, 3 ]
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 40638
diff changeset
836 bad_values = [ -1, -2, -3, -1, -2, -3 ]
40638
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
837 for k in good_values:
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
838 socket.ntohl(k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
839 socket.ntohs(k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
840 socket.htonl(k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
841 socket.htons(k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
842 for k in bad_values:
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
843 self.assertRaises(OverflowError, socket.ntohl, k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
844 self.assertRaises(OverflowError, socket.ntohs, k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
845 self.assertRaises(OverflowError, socket.htonl, k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
846 self.assertRaises(OverflowError, socket.htons, k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
847
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
848 def testGetServBy(self):
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
849 eq = self.assertEqual
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
850 # Find one service that exists, then check all the related interfaces.
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
851 # I've ordered this by protocols that have both a tcp and udp
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
852 # protocol, at least for modern Linuxes.
72011
b5ccdf7c032a Issue #12326: refactor usage of sys.platform
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71897
diff changeset
853 if (sys.platform.startswith(('freebsd', 'netbsd'))
b5ccdf7c032a Issue #12326: refactor usage of sys.platform
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71897
diff changeset
854 or sys.platform in ('linux', 'darwin')):
32630
059dae06585b FreeBSD's services file contains an additional echo service entry, with
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 32508
diff changeset
855 # avoid the 'echo' service on this platform, as there is an
059dae06585b FreeBSD's services file contains an additional echo service entry, with
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 32508
diff changeset
856 # assumption breaking non-standard port/protocol entry
059dae06585b FreeBSD's services file contains an additional echo service entry, with
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 32508
diff changeset
857 services = ('daytime', 'qotd', 'domain')
059dae06585b FreeBSD's services file contains an additional echo service entry, with
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 32508
diff changeset
858 else:
059dae06585b FreeBSD's services file contains an additional echo service entry, with
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 32508
diff changeset
859 services = ('echo', 'daytime', 'domain')
059dae06585b FreeBSD's services file contains an additional echo service entry, with
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 32508
diff changeset
860 for service in services:
24485
f05a311d7988 testGetServByName shouldn't check for getservbyname - the socket module
Skip Montanaro <skip@pobox.com>
parents: 24470
diff changeset
861 try:
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
862 port = socket.getservbyname(service, 'tcp')
24485
f05a311d7988 testGetServByName shouldn't check for getservbyname - the socket module
Skip Montanaro <skip@pobox.com>
parents: 24470
diff changeset
863 break
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
864 except OSError:
24485
f05a311d7988 testGetServByName shouldn't check for getservbyname - the socket module
Skip Montanaro <skip@pobox.com>
parents: 24470
diff changeset
865 pass
31503
eb48b2503f20 Fix indentation error in testGetServByName and rewrite loop to avoid clumsy
Skip Montanaro <skip@pobox.com>
parents: 29662
diff changeset
866 else:
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
867 raise OSError
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
868 # Try same call with optional protocol omitted
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
869 port2 = socket.getservbyname(service)
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
870 eq(port, port2)
82618
3f5f961262ec Issue #17047: remove doubled words found in 2.7 to 3.4 Lib/*,
Terry Jan Reedy <tjreedy@udel.edu>
parents: 81587
diff changeset
871 # Try udp, but don't barf if it doesn't exist
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
872 try:
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
873 udpport = socket.getservbyname(service, 'udp')
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
874 except OSError:
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
875 udpport = None
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
876 else:
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
877 eq(udpport, port)
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
878 # Now make sure the lookup by port returns the same service name
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
879 eq(socket.getservbyport(port2), service)
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
880 eq(socket.getservbyport(port, 'tcp'), service)
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
881 if udpport is not None:
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
882 eq(socket.getservbyport(udpport, 'udp'), service)
51382
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
883 # Make sure getservbyport does not accept out of range ports.
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
884 self.assertRaises(OverflowError, socket.getservbyport, -1)
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
885 self.assertRaises(OverflowError, socket.getservbyport, 65536)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
886
24293
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
887 def testDefaultTimeout(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
888 # Testing default timeout
24293
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
889 # The default timeout should initially be None
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
890 self.assertEqual(socket.getdefaulttimeout(), None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
891 s = socket.socket()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
892 self.assertEqual(s.gettimeout(), None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
893 s.close()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
894
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
895 # Set the default timeout to 10, and see if it propagates
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
896 socket.setdefaulttimeout(10)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
897 self.assertEqual(socket.getdefaulttimeout(), 10)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
898 s = socket.socket()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
899 self.assertEqual(s.gettimeout(), 10)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
900 s.close()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
901
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
902 # Reset the default timeout to None, and see if it propagates
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
903 socket.setdefaulttimeout(None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
904 self.assertEqual(socket.getdefaulttimeout(), None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
905 s = socket.socket()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
906 self.assertEqual(s.gettimeout(), None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
907 s.close()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
908
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
909 # Check that setting it to an invalid value raises ValueError
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
910 self.assertRaises(ValueError, socket.setdefaulttimeout, -1)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
911
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
912 # Check that setting it to an invalid type raises TypeError
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
913 self.assertRaises(TypeError, socket.setdefaulttimeout, "spam")
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
914
51579
648e07dd0825 Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51382
diff changeset
915 def testIPv4_inet_aton_fourbytes(self):
648e07dd0825 Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51382
diff changeset
916 if not hasattr(socket, 'inet_aton'):
648e07dd0825 Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51382
diff changeset
917 return # No inet_aton, nothing to check
648e07dd0825 Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51382
diff changeset
918 # Test that issue1008086 and issue767150 are fixed.
648e07dd0825 Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51382
diff changeset
919 # It must return 4 bytes.
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
920 self.assertEqual(b'\x00'*4, socket.inet_aton('0.0.0.0'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
921 self.assertEqual(b'\xff'*4, socket.inet_aton('255.255.255.255'))
51579
648e07dd0825 Merged revisions 69364-69365,69409-69410,69413,69417,69435,69442,69447,69495,69519-69521 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 51382
diff changeset
922
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
923 def testIPv4toString(self):
28833
fa159fef2730 Skip testing inet_ntop() an inet_pton() if they aren't defined.
Guido van Rossum <guido@python.org>
parents: 28818
diff changeset
924 if not hasattr(socket, 'inet_pton'):
fa159fef2730 Skip testing inet_ntop() an inet_pton() if they aren't defined.
Guido van Rossum <guido@python.org>
parents: 28818
diff changeset
925 return # No inet_pton() on this platform
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
926 from socket import inet_aton as f, inet_pton, AF_INET
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
927 g = lambda a: inet_pton(AF_INET, a)
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
928
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
929 assertInvalid = lambda func,a: self.assertRaises(
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
930 (OSError, ValueError), func, a
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
931 )
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
932
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
933 self.assertEqual(b'\x00\x00\x00\x00', f('0.0.0.0'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
934 self.assertEqual(b'\xff\x00\xff\x00', f('255.0.255.0'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
935 self.assertEqual(b'\xaa\xaa\xaa\xaa', f('170.170.170.170'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
936 self.assertEqual(b'\x01\x02\x03\x04', f('1.2.3.4'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
937 self.assertEqual(b'\xff\xff\xff\xff', f('255.255.255.255'))
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
938 assertInvalid(f, '0.0.0.')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
939 assertInvalid(f, '300.0.0.0')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
940 assertInvalid(f, 'a.0.0.0')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
941 assertInvalid(f, '1.2.3.4.5')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
942 assertInvalid(f, '::1')
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
943
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
944 self.assertEqual(b'\x00\x00\x00\x00', g('0.0.0.0'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
945 self.assertEqual(b'\xff\x00\xff\x00', g('255.0.255.0'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
946 self.assertEqual(b'\xaa\xaa\xaa\xaa', g('170.170.170.170'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
947 self.assertEqual(b'\xff\xff\xff\xff', g('255.255.255.255'))
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
948 assertInvalid(g, '0.0.0.')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
949 assertInvalid(g, '300.0.0.0')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
950 assertInvalid(g, 'a.0.0.0')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
951 assertInvalid(g, '1.2.3.4.5')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
952 assertInvalid(g, '::1')
29087
526f37fb380d Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28917
diff changeset
953
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
954 def testIPv6toString(self):
28833
fa159fef2730 Skip testing inet_ntop() an inet_pton() if they aren't defined.
Guido van Rossum <guido@python.org>
parents: 28818
diff changeset
955 if not hasattr(socket, 'inet_pton'):
fa159fef2730 Skip testing inet_ntop() an inet_pton() if they aren't defined.
Guido van Rossum <guido@python.org>
parents: 28818
diff changeset
956 return # No inet_pton() on this platform
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
957 try:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
958 from socket import inet_pton, AF_INET6, has_ipv6
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
959 if not has_ipv6:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
960 return
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
961 except ImportError:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
962 return
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
963 f = lambda a: inet_pton(AF_INET6, a)
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
964 assertInvalid = lambda a: self.assertRaises(
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
965 (OSError, ValueError), f, a
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
966 )
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
967
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
968 self.assertEqual(b'\x00' * 16, f('::'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
969 self.assertEqual(b'\x00' * 16, f('0::0'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
970 self.assertEqual(b'\x00\x01' + b'\x00' * 14, f('1::'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
971 self.assertEqual(
42169
e38047550383 Fix test_socket.py. Simple str/bytes issue with IPV6 addresse.
Guido van Rossum <guido@python.org>
parents: 41941
diff changeset
972 b'\x45\xef\x76\xcb\x00\x1a\x56\xef\xaf\xeb\x0b\xac\x19\x24\xae\xae',
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
973 f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae')
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
974 )
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
975 self.assertEqual(
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
976 b'\xad\x42\x0a\xbc' + b'\x00' * 4 + b'\x01\x27\x00\x00\x02\x54\x00\x02',
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
977 f('ad42:abc::127:0:254:2')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
978 )
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
979 self.assertEqual(b'\x00\x12\x00\x0a' + b'\x00' * 12, f('12:a::'))
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
980 assertInvalid('0x20::')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
981 assertInvalid(':::')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
982 assertInvalid('::0::')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
983 assertInvalid('1::abc::')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
984 assertInvalid('1::abc::def')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
985 assertInvalid('1:2:3:4:5:6:')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
986 assertInvalid('1:2:3:4:5:6')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
987 assertInvalid('1:2:3:4:5:6:7:8:')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
988 assertInvalid('1:2:3:4:5:6:7:8:0')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
989
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
990 self.assertEqual(b'\x00' * 12 + b'\xfe\x2a\x17\x40',
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
991 f('::254.42.23.64')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
992 )
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
993 self.assertEqual(
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
994 b'\x00\x42' + b'\x00' * 8 + b'\xa2\x9b\xfe\x2a\x17\x40',
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
995 f('42::a29b:254.42.23.64')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
996 )
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
997 self.assertEqual(
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
998 b'\x00\x42\xa8\xb9\x00\x00\x00\x02\xff\xff\xa2\x9b\xfe\x2a\x17\x40',
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
999 f('42:a8b9:0:2:ffff:a29b:254.42.23.64')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1000 )
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1001 assertInvalid('255.254.253.252')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1002 assertInvalid('1::260.2.3.0')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1003 assertInvalid('1::0.be.e.0')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1004 assertInvalid('1:2:3:4:5:6:7:1.2.3.4')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1005 assertInvalid('::1.2.3.4:0')
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1006 assertInvalid('0.100.200.0:3:4:5:6:7:8')
29087
526f37fb380d Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28917
diff changeset
1007
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1008 def testStringToIPv4(self):
28833
fa159fef2730 Skip testing inet_ntop() an inet_pton() if they aren't defined.
Guido van Rossum <guido@python.org>
parents: 28818
diff changeset
1009 if not hasattr(socket, 'inet_ntop'):
fa159fef2730 Skip testing inet_ntop() an inet_pton() if they aren't defined.
Guido van Rossum <guido@python.org>
parents: 28818
diff changeset
1010 return # No inet_ntop() on this platform
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1011 from socket import inet_ntoa as f, inet_ntop, AF_INET
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1012 g = lambda a: inet_ntop(AF_INET, a)
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1013 assertInvalid = lambda func,a: self.assertRaises(
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
1014 (OSError, ValueError), func, a
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1015 )
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1016
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1017 self.assertEqual('1.0.1.0', f(b'\x01\x00\x01\x00'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1018 self.assertEqual('170.85.170.85', f(b'\xaa\x55\xaa\x55'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1019 self.assertEqual('255.255.255.255', f(b'\xff\xff\xff\xff'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1020 self.assertEqual('1.2.3.4', f(b'\x01\x02\x03\x04'))
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1021 assertInvalid(f, b'\x00' * 3)
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1022 assertInvalid(f, b'\x00' * 5)
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1023 assertInvalid(f, b'\x00' * 16)
29087
526f37fb380d Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28917
diff changeset
1024
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1025 self.assertEqual('1.0.1.0', g(b'\x01\x00\x01\x00'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1026 self.assertEqual('170.85.170.85', g(b'\xaa\x55\xaa\x55'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1027 self.assertEqual('255.255.255.255', g(b'\xff\xff\xff\xff'))
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1028 assertInvalid(g, b'\x00' * 3)
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1029 assertInvalid(g, b'\x00' * 5)
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1030 assertInvalid(g, b'\x00' * 16)
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1031
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1032 def testStringToIPv6(self):
28833
fa159fef2730 Skip testing inet_ntop() an inet_pton() if they aren't defined.
Guido van Rossum <guido@python.org>
parents: 28818
diff changeset
1033 if not hasattr(socket, 'inet_ntop'):
fa159fef2730 Skip testing inet_ntop() an inet_pton() if they aren't defined.
Guido van Rossum <guido@python.org>
parents: 28818
diff changeset
1034 return # No inet_ntop() on this platform
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1035 try:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1036 from socket import inet_ntop, AF_INET6, has_ipv6
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1037 if not has_ipv6:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1038 return
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1039 except ImportError:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1040 return
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1041 f = lambda a: inet_ntop(AF_INET6, a)
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1042 assertInvalid = lambda a: self.assertRaises(
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
1043 (OSError, ValueError), f, a
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1044 )
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1045
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1046 self.assertEqual('::', f(b'\x00' * 16))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1047 self.assertEqual('::1', f(b'\x00' * 15 + b'\x01'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1048 self.assertEqual(
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1049 'aef:b01:506:1001:ffff:9997:55:170',
42169
e38047550383 Fix test_socket.py. Simple str/bytes issue with IPV6 addresse.
Guido van Rossum <guido@python.org>
parents: 41941
diff changeset
1050 f(b'\x0a\xef\x0b\x01\x05\x06\x10\x01\xff\xff\x99\x97\x00\x55\x01\x70')
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1051 )
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1052
74082
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1053 assertInvalid(b'\x12' * 15)
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1054 assertInvalid(b'\x12' * 17)
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1055 assertInvalid(b'\x12' * 4)
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1056
24318
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
1057 # XXX The following don't test module-level functionality...
24293
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
1058
51382
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1059 def testSockName(self):
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1060 # Testing getsockname()
70016
695a7acae392 Issue #12054: use support.find_unused_port() instead of reinventing the wheel
Antoine Pitrou <solipsis@pitrou.net>
parents: 70012
diff changeset
1061 port = support.find_unused_port()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1062 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
1063 self.addCleanup(sock.close)
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
1064 sock.bind(("0.0.0.0", port))
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1065 name = sock.getsockname()
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
1066 # XXX(nnorwitz): http://tinyurl.com/os5jz seems to indicate
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
1067 # it reasonable to get the host's addr in addition to 0.0.0.0.
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
1068 # At least for eCos. This is required for the S/390 to pass.
66478
7281937b2d65 Merged revisions 86134,86315-86316,86390,86424-86425,86428,86550,86561-86562,86564-86565,86705,86708,86713 via svnmerge from
Georg Brandl <georg@python.org>
parents: 66340
diff changeset
1069 try:
7281937b2d65 Merged revisions 86134,86315-86316,86390,86424-86425,86428,86550,86561-86562,86564-86565,86705,86708,86713 via svnmerge from
Georg Brandl <georg@python.org>
parents: 66340
diff changeset
1070 my_ip_addr = socket.gethostbyname(socket.gethostname())
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
1071 except OSError:
66478
7281937b2d65 Merged revisions 86134,86315-86316,86390,86424-86425,86428,86550,86561-86562,86564-86565,86705,86708,86713 via svnmerge from
Georg Brandl <georg@python.org>
parents: 66340
diff changeset
1072 # Probably name lookup wasn't set up right; skip this test
7281937b2d65 Merged revisions 86134,86315-86316,86390,86424-86425,86428,86550,86561-86562,86564-86565,86705,86708,86713 via svnmerge from
Georg Brandl <georg@python.org>
parents: 66340
diff changeset
1073 return
58415
f6a626f34840 use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents: 58146
diff changeset
1074 self.assertIn(name[0], ("0.0.0.0", my_ip_addr), '%s invalid' % name[0])
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
1075 self.assertEqual(name[1], port)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1076
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1077 def testGetSockOpt(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1078 # Testing getsockopt()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1079 # We know a socket should start without reuse==0
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1080 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
1081 self.addCleanup(sock.close)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1082 reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1083 self.assertFalse(reuse != 0, "initial mode is reuse")
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1084
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1085 def testSetSockOpt(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1086 # Testing setsockopt()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1087 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
1088 self.addCleanup(sock.close)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1089 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1090 reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1091 self.assertFalse(reuse == 0, "failed to set reuse mode")
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1092
24318
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
1093 def testSendAfterClose(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1094 # testing send() after close() with timeout
24318
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
1095 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
1096 sock.settimeout(1)
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
1097 sock.close()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
1098 self.assertRaises(OSError, sock.send, b"spam")
24318
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
1099
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
1100 def testNewAttributes(self):
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
1101 # testing .family, .type and .protocol
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
1102 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
1103 self.assertEqual(sock.family, socket.AF_INET)
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
1104 self.assertEqual(sock.type, socket.SOCK_STREAM)
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
1105 self.assertEqual(sock.proto, 0)
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
1106 sock.close()
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
1107
51382
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1108 def test_getsockaddrarg(self):
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1109 host = '0.0.0.0'
70016
695a7acae392 Issue #12054: use support.find_unused_port() instead of reinventing the wheel
Antoine Pitrou <solipsis@pitrou.net>
parents: 70012
diff changeset
1110 port = support.find_unused_port()
51382
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1111 big_port = port + 65536
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1112 neg_port = port - 65536
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1113 sock = socket.socket()
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1114 try:
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1115 self.assertRaises(OverflowError, sock.bind, (host, big_port))
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1116 self.assertRaises(OverflowError, sock.bind, (host, neg_port))
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1117 sock.bind((host, port))
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1118 finally:
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1119 sock.close()
7e28a2b0c1b1 Merged revisions 69129-69131,69139-69140,69143,69154-69159,69169,69288-69289,69293,69297-69301,69348 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50800
diff changeset
1120
65975
e213e465a2dc Add socket cleanup for ResourceWarning and update test to use skip decorator
Brian Curtin <brian.curtin@gmail.com>
parents: 65925
diff changeset
1121 @unittest.skipUnless(os.name == "nt", "Windows specific")
44535
420fe6d7d5f4 Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43954
diff changeset
1122 def test_sock_ioctl(self):
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1123 self.assertTrue(hasattr(socket.socket, 'ioctl'))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1124 self.assertTrue(hasattr(socket, 'SIO_RCVALL'))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1125 self.assertTrue(hasattr(socket, 'RCVALL_ON'))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1126 self.assertTrue(hasattr(socket, 'RCVALL_OFF'))
56252
debb245ebb40 http://bugs.python.org/issue6971
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 55593
diff changeset
1127 self.assertTrue(hasattr(socket, 'SIO_KEEPALIVE_VALS'))
debb245ebb40 http://bugs.python.org/issue6971
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 55593
diff changeset
1128 s = socket.socket()
65975
e213e465a2dc Add socket cleanup for ResourceWarning and update test to use skip decorator
Brian Curtin <brian.curtin@gmail.com>
parents: 65925
diff changeset
1129 self.addCleanup(s.close)
56252
debb245ebb40 http://bugs.python.org/issue6971
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 55593
diff changeset
1130 self.assertRaises(ValueError, s.ioctl, -1, None)
debb245ebb40 http://bugs.python.org/issue6971
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 55593
diff changeset
1131 s.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 100, 100))
44535
420fe6d7d5f4 Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43954
diff changeset
1132
64000
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1133 def testGetaddrinfo(self):
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1134 try:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1135 socket.getaddrinfo('localhost', 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1136 except socket.gaierror as err:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1137 if err.errno == socket.EAI_SERVICE:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1138 # see http://bugs.python.org/issue1282647
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1139 self.skipTest("buggy libc version")
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1140 raise
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1141 # len of every sequence is supposed to be == 5
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1142 for info in socket.getaddrinfo(HOST, None):
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1143 self.assertEqual(len(info), 5)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1144 # host can be a domain name, a string representation of an
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1145 # IPv4/v6 address or None
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1146 socket.getaddrinfo('localhost', 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1147 socket.getaddrinfo('127.0.0.1', 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1148 socket.getaddrinfo(None, 80)
69672
0518f32cb747 Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents: 69123
diff changeset
1149 if support.IPV6_ENABLED:
64000
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1150 socket.getaddrinfo('::1', 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1151 # port can be a string service name such as "http", a numeric
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1152 # port number or None
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1153 socket.getaddrinfo(HOST, "http")
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1154 socket.getaddrinfo(HOST, 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1155 socket.getaddrinfo(HOST, None)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1156 # test family and socktype filters
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1157 infos = socket.getaddrinfo(HOST, None, socket.AF_INET)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1158 for family, _, _, _, _ in infos:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1159 self.assertEqual(family, socket.AF_INET)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1160 infos = socket.getaddrinfo(HOST, None, 0, socket.SOCK_STREAM)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1161 for _, socktype, _, _, _ in infos:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1162 self.assertEqual(socktype, socket.SOCK_STREAM)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1163 # test proto and flags arguments
64060
bf18dd70c180 Merged revisions 84089 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64000
diff changeset
1164 socket.getaddrinfo(HOST, None, 0, 0, socket.SOL_TCP)
64000
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1165 socket.getaddrinfo(HOST, None, 0, 0, 0, socket.AI_PASSIVE)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1166 # a server willing to support both IPv4 and IPv6 will
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1167 # usually do this
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1168 socket.getaddrinfo(None, 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0,
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1169 socket.AI_PASSIVE)
64113
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1170 # test keyword arguments
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1171 a = socket.getaddrinfo(HOST, None)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1172 b = socket.getaddrinfo(host=HOST, port=None)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1173 self.assertEqual(a, b)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1174 a = socket.getaddrinfo(HOST, None, socket.AF_INET)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1175 b = socket.getaddrinfo(HOST, None, family=socket.AF_INET)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1176 self.assertEqual(a, b)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1177 a = socket.getaddrinfo(HOST, None, 0, socket.SOCK_STREAM)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1178 b = socket.getaddrinfo(HOST, None, type=socket.SOCK_STREAM)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1179 self.assertEqual(a, b)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1180 a = socket.getaddrinfo(HOST, None, 0, 0, socket.SOL_TCP)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1181 b = socket.getaddrinfo(HOST, None, proto=socket.SOL_TCP)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1182 self.assertEqual(a, b)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1183 a = socket.getaddrinfo(HOST, None, 0, 0, 0, socket.AI_PASSIVE)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1184 b = socket.getaddrinfo(HOST, None, flags=socket.AI_PASSIVE)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1185 self.assertEqual(a, b)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1186 a = socket.getaddrinfo(None, 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0,
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1187 socket.AI_PASSIVE)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1188 b = socket.getaddrinfo(host=None, port=0, family=socket.AF_UNSPEC,
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1189 type=socket.SOCK_STREAM, proto=0,
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1190 flags=socket.AI_PASSIVE)
ca2a859e9bf6 fix issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64059
diff changeset
1191 self.assertEqual(a, b)
66799
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66310
diff changeset
1192 # Issue #6697.
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66310
diff changeset
1193 self.assertRaises(UnicodeEncodeError, socket.getaddrinfo, 'localhost', '\uD800')
64000
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1194
64277
2ccd043aad5c Issue #1027206: getnameinfo is now restricted to numeric addresses as input.
Martin v. Löwis <martin@v.loewis.de>
parents: 64241
diff changeset
1195 def test_getnameinfo(self):
2ccd043aad5c Issue #1027206: getnameinfo is now restricted to numeric addresses as input.
Martin v. Löwis <martin@v.loewis.de>
parents: 64241
diff changeset
1196 # only IP addresses are allowed
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
1197 self.assertRaises(OSError, socket.getnameinfo, ('mail.python.org',0), 0)
64277
2ccd043aad5c Issue #1027206: getnameinfo is now restricted to numeric addresses as input.
Martin v. Löwis <martin@v.loewis.de>
parents: 64241
diff changeset
1198
64593
6f14f02359e8 Skip socket tests that require the network, if the network resource is not enabled
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents: 64574
diff changeset
1199 @unittest.skipUnless(support.is_resource_enabled('network'),
6f14f02359e8 Skip socket tests that require the network, if the network resource is not enabled
Daniel Stutzbach <daniel@stutzbachenterprises.com>
parents: 64574
diff changeset
1200 'network is not enabled')
64230
35304c2fe9e0 Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents: 64113
diff changeset
1201 def test_idna(self):
74607
585d3664da89 Issue #12804: Fix test failures on systems without internet access.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 74606
diff changeset
1202 # Check for internet access before running test (issue #12804).
585d3664da89 Issue #12804: Fix test failures on systems without internet access.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 74606
diff changeset
1203 try:
585d3664da89 Issue #12804: Fix test failures on systems without internet access.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 74606
diff changeset
1204 socket.gethostbyname('python.org')
585d3664da89 Issue #12804: Fix test failures on systems without internet access.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 74606
diff changeset
1205 except socket.gaierror as e:
585d3664da89 Issue #12804: Fix test failures on systems without internet access.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 74606
diff changeset
1206 if e.errno == socket.EAI_NODATA:
585d3664da89 Issue #12804: Fix test failures on systems without internet access.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 74606
diff changeset
1207 self.skipTest('internet access required for this test')
64230
35304c2fe9e0 Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents: 64113
diff changeset
1208 # these should all be successful
35304c2fe9e0 Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents: 64113
diff changeset
1209 socket.gethostbyname('испытание.python.org')
35304c2fe9e0 Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex and
Martin v. Löwis <martin@v.loewis.de>
parents: 64113
diff changeset
1210 socket.gethostbyname_ex('испытание.python.org')
64241
7e1e343b708b Explicitly pass socket type and family for getaddrinfo,
Martin v. Löwis <martin@v.loewis.de>
parents: 64231
diff changeset
1211 socket.getaddrinfo('испытание.python.org',0,socket.AF_UNSPEC,socket.SOCK_STREAM)
7e1e343b708b Explicitly pass socket type and family for getaddrinfo,
Martin v. Löwis <martin@v.loewis.de>
parents: 64231
diff changeset
1212 # this may not work if the forward lookup choses the IPv6 address, as that doesn't
7e1e343b708b Explicitly pass socket type and family for getaddrinfo,
Martin v. Löwis <martin@v.loewis.de>
parents: 64231
diff changeset
1213 # have a reverse entry yet
7e1e343b708b Explicitly pass socket type and family for getaddrinfo,
Martin v. Löwis <martin@v.loewis.de>
parents: 64231
diff changeset
1214 # socket.gethostbyaddr('испытание.python.org')
44535
420fe6d7d5f4 Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43954
diff changeset
1215
64961
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1216 def check_sendall_interrupted(self, with_timeout):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1217 # socketpair() is not stricly required, but it makes things easier.
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1218 if not hasattr(signal, 'alarm') or not hasattr(socket, 'socketpair'):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1219 self.skipTest("signal.alarm and socket.socketpair required for this test")
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1220 # Our signal handlers clobber the C errno by calling a math function
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1221 # with an invalid domain value.
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1222 def ok_handler(*args):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1223 self.assertRaises(ValueError, math.acosh, 0)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1224 def raising_handler(*args):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1225 self.assertRaises(ValueError, math.acosh, 0)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1226 1 // 0
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1227 c, s = socket.socketpair()
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1228 old_alarm = signal.signal(signal.SIGALRM, raising_handler)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1229 try:
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1230 if with_timeout:
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1231 # Just above the one second minimum for signal.alarm
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1232 c.settimeout(1.5)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1233 with self.assertRaises(ZeroDivisionError):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1234 signal.alarm(1)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1235 c.sendall(b"x" * (1024**2))
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1236 if with_timeout:
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1237 signal.signal(signal.SIGALRM, ok_handler)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1238 signal.alarm(1)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1239 self.assertRaises(socket.timeout, c.sendall, b"x" * (1024**2))
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1240 finally:
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1241 signal.signal(signal.SIGALRM, old_alarm)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1242 c.close()
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1243 s.close()
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1244
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1245 def test_sendall_interrupted(self):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1246 self.check_sendall_interrupted(False)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1247
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1248 def test_sendall_interrupted_with_timeout(self):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1249 self.check_sendall_interrupted(True)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1250
65707
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1251 def test_dealloc_warn(self):
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1252 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1253 r = repr(sock)
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1254 with self.assertWarns(ResourceWarning) as cm:
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1255 sock = None
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1256 support.gc_collect()
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1257 self.assertIn(r, str(cm.warning.args[0]))
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1258 # An open socket file object gets dereferenced after the socket
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1259 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1260 f = sock.makefile('rb')
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1261 r = repr(sock)
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1262 sock = None
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1263 support.gc_collect()
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1264 with self.assertWarns(ResourceWarning):
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1265 f = None
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1266 support.gc_collect()
64961
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1267
67344
f4a808f5a66d Issue #10819: SocketIO.name property returns -1 when its closed, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67299
diff changeset
1268 def test_name_closed_socketio(self):
f4a808f5a66d Issue #10819: SocketIO.name property returns -1 when its closed, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67299
diff changeset
1269 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
f4a808f5a66d Issue #10819: SocketIO.name property returns -1 when its closed, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67299
diff changeset
1270 fp = sock.makefile("rb")
f4a808f5a66d Issue #10819: SocketIO.name property returns -1 when its closed, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67299
diff changeset
1271 fp.close()
f4a808f5a66d Issue #10819: SocketIO.name property returns -1 when its closed, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67299
diff changeset
1272 self.assertEqual(repr(fp), "<_io.BufferedReader name=-1>")
f4a808f5a66d Issue #10819: SocketIO.name property returns -1 when its closed, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67299
diff changeset
1273
79026
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1274 def test_unusable_closed_socketio(self):
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1275 with socket.socket() as sock:
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1276 fp = sock.makefile("rb", buffering=0)
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1277 self.assertTrue(fp.readable())
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1278 self.assertFalse(fp.writable())
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1279 self.assertFalse(fp.seekable())
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1280 fp.close()
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1281 self.assertRaises(ValueError, fp.readable)
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1282 self.assertRaises(ValueError, fp.writable)
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1283 self.assertRaises(ValueError, fp.seekable)
fad797916266 Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Antoine Pitrou <solipsis@pitrou.net>
parents: 76033
diff changeset
1284
68774
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
1285 def test_pickle(self):
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
1286 sock = socket.socket()
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
1287 with sock:
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
1288 for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
1289 self.assertRaises(TypeError, pickle.dumps, sock, protocol)
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
1290
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1291 def test_listen_backlog(self):
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1292 for backlog in 0, -1:
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1293 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1294 srv.bind((HOST, 0))
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1295 srv.listen(backlog)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1296 srv.close()
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1297
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1298 # Issue 15989
70012
713006ecee0c Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents: 69917
diff changeset
1299 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
713006ecee0c Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents: 69917
diff changeset
1300 srv.bind((HOST, 0))
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1301 self.assertRaises(OverflowError, srv.listen, _testcapi.INT_MAX + 1)
70012
713006ecee0c Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents: 69917
diff changeset
1302 srv.close()
713006ecee0c Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
Antoine Pitrou <solipsis@pitrou.net>
parents: 69917
diff changeset
1303
74234
9222b8e7a7bc Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents: 74083 74233
diff changeset
1304 @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
74233
cc346a672091 Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents: 74082
diff changeset
1305 def test_flowinfo(self):
cc346a672091 Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents: 74082
diff changeset
1306 self.assertRaises(OverflowError, socket.getnameinfo,
cc346a672091 Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents: 74082
diff changeset
1307 ('::1',0, 0xffffffff), 0)
cc346a672091 Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents: 74082
diff changeset
1308 with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as s:
cc346a672091 Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents: 74082
diff changeset
1309 self.assertRaises(OverflowError, s.bind, ('::1', 0, -10))
cc346a672091 Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
Charles-François Natali <neologix@free.fr>
parents: 74082
diff changeset
1310
64959
aed04b3f0fe3 Issue #9950: Fix socket.sendall() crash or misbehaviour when a signal is
Antoine Pitrou <solipsis@pitrou.net>
parents: 64817
diff changeset
1311
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1312 @unittest.skipUnless(HAVE_SOCKET_CAN, 'SocketCan required for this test.')
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1313 class BasicCANTest(unittest.TestCase):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1314
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1315 def testCrucialConstants(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1316 socket.AF_CAN
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1317 socket.PF_CAN
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1318 socket.CAN_RAW
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1319
82024
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1320 @unittest.skipUnless(hasattr(socket, "CAN_BCM"),
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1321 'socket.CAN_BCM required for this test.')
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1322 def testBCMConstants(self):
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1323 socket.CAN_BCM
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1324
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1325 # opcodes
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1326 socket.CAN_BCM_TX_SETUP # create (cyclic) transmission task
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1327 socket.CAN_BCM_TX_DELETE # remove (cyclic) transmission task
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1328 socket.CAN_BCM_TX_READ # read properties of (cyclic) transmission task
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1329 socket.CAN_BCM_TX_SEND # send one CAN frame
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1330 socket.CAN_BCM_RX_SETUP # create RX content filter subscription
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1331 socket.CAN_BCM_RX_DELETE # remove RX content filter subscription
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1332 socket.CAN_BCM_RX_READ # read properties of RX content filter subscription
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1333 socket.CAN_BCM_TX_STATUS # reply to TX_READ request
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1334 socket.CAN_BCM_TX_EXPIRED # notification on performed transmissions (count=0)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1335 socket.CAN_BCM_RX_STATUS # reply to RX_READ request
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1336 socket.CAN_BCM_RX_TIMEOUT # cyclic message is absent
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1337 socket.CAN_BCM_RX_CHANGED # updated CAN frame (detected content change)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1338
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1339 def testCreateSocket(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1340 with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1341 pass
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1342
82024
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1343 @unittest.skipUnless(hasattr(socket, "CAN_BCM"),
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1344 'socket.CAN_BCM required for this test.')
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1345 def testCreateBCMSocket(self):
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1346 with socket.socket(socket.PF_CAN, socket.SOCK_DGRAM, socket.CAN_BCM) as s:
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1347 pass
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1348
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1349 def testBindAny(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1350 with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1351 s.bind(('', ))
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1352
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1353 def testTooLongInterfaceName(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1354 # most systems limit IFNAMSIZ to 16, take 1024 to be sure
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1355 with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s:
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
1356 self.assertRaisesRegex(OSError, 'interface name too long',
72870
e2cb12decd9f Fix deprecation warning
Antoine Pitrou <solipsis@pitrou.net>
parents: 72849
diff changeset
1357 s.bind, ('x' * 1024,))
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1358
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1359 @unittest.skipUnless(hasattr(socket, "CAN_RAW_LOOPBACK"),
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1360 'socket.CAN_RAW_LOOPBACK required for this test.')
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1361 def testLoopback(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1362 with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1363 for loopback in (0, 1):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1364 s.setsockopt(socket.SOL_CAN_RAW, socket.CAN_RAW_LOOPBACK,
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1365 loopback)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1366 self.assertEqual(loopback,
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1367 s.getsockopt(socket.SOL_CAN_RAW, socket.CAN_RAW_LOOPBACK))
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1368
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1369 @unittest.skipUnless(hasattr(socket, "CAN_RAW_FILTER"),
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1370 'socket.CAN_RAW_FILTER required for this test.')
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1371 def testFilter(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1372 can_id, can_mask = 0x200, 0x700
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1373 can_filter = struct.pack("=II", can_id, can_mask)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1374 with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s:
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1375 s.setsockopt(socket.SOL_CAN_RAW, socket.CAN_RAW_FILTER, can_filter)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1376 self.assertEqual(can_filter,
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1377 s.getsockopt(socket.SOL_CAN_RAW, socket.CAN_RAW_FILTER, 8))
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1378
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1379
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1380 @unittest.skipUnless(HAVE_SOCKET_CAN, 'SocketCan required for this test.')
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1381 class CANTest(ThreadedCANSocketTest):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1382
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1383 def __init__(self, methodName='runTest'):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1384 ThreadedCANSocketTest.__init__(self, methodName=methodName)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1385
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1386 @classmethod
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1387 def build_can_frame(cls, can_id, data):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1388 """Build a CAN frame."""
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1389 can_dlc = len(data)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1390 data = data.ljust(8, b'\x00')
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1391 return struct.pack(cls.can_frame_fmt, can_id, can_dlc, data)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1392
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1393 @classmethod
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1394 def dissect_can_frame(cls, frame):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1395 """Dissect a CAN frame."""
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1396 can_id, can_dlc, data = struct.unpack(cls.can_frame_fmt, frame)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1397 return (can_id, can_dlc, data[:can_dlc])
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1398
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1399 def testSendFrame(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1400 cf, addr = self.s.recvfrom(self.bufsize)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1401 self.assertEqual(self.cf, cf)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1402 self.assertEqual(addr[0], self.interface)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1403 self.assertEqual(addr[1], socket.AF_CAN)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1404
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1405 def _testSendFrame(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1406 self.cf = self.build_can_frame(0x00, b'\x01\x02\x03\x04\x05')
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1407 self.cli.send(self.cf)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1408
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1409 def testSendMaxFrame(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1410 cf, addr = self.s.recvfrom(self.bufsize)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1411 self.assertEqual(self.cf, cf)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1412
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1413 def _testSendMaxFrame(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1414 self.cf = self.build_can_frame(0x00, b'\x07' * 8)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1415 self.cli.send(self.cf)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1416
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1417 def testSendMultiFrames(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1418 cf, addr = self.s.recvfrom(self.bufsize)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1419 self.assertEqual(self.cf1, cf)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1420
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1421 cf, addr = self.s.recvfrom(self.bufsize)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1422 self.assertEqual(self.cf2, cf)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1423
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1424 def _testSendMultiFrames(self):
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1425 self.cf1 = self.build_can_frame(0x07, b'\x44\x33\x22\x11')
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1426 self.cli.send(self.cf1)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1427
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1428 self.cf2 = self.build_can_frame(0x12, b'\x99\x22\x33')
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1429 self.cli.send(self.cf2)
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1430
82024
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1431 @unittest.skipUnless(hasattr(socket, "CAN_BCM"),
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1432 'socket.CAN_BCM required for this test.')
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1433 def _testBCM(self):
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1434 cf, addr = self.cli.recvfrom(self.bufsize)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1435 self.assertEqual(self.cf, cf)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1436 can_id, can_dlc, data = self.dissect_can_frame(cf)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1437 self.assertEqual(self.can_id, can_id)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1438 self.assertEqual(self.data, data)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1439
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1440 @unittest.skipUnless(hasattr(socket, "CAN_BCM"),
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1441 'socket.CAN_BCM required for this test.')
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1442 def testBCM(self):
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1443 bcm = socket.socket(socket.PF_CAN, socket.SOCK_DGRAM, socket.CAN_BCM)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1444 self.addCleanup(bcm.close)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1445 bcm.connect((self.interface,))
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1446 self.can_id = 0x123
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1447 self.data = bytes([0xc0, 0xff, 0xee])
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1448 self.cf = self.build_can_frame(self.can_id, self.data)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1449 opcode = socket.CAN_BCM_TX_SEND
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1450 flags = 0
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1451 count = 0
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1452 ival1_seconds = ival1_usec = ival2_seconds = ival2_usec = 0
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1453 bcm_can_id = 0x0222
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1454 nframes = 1
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1455 assert len(self.cf) == 16
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1456 header = struct.pack(self.bcm_cmd_msg_fmt,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1457 opcode,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1458 flags,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1459 count,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1460 ival1_seconds,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1461 ival1_usec,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1462 ival2_seconds,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1463 ival2_usec,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1464 bcm_can_id,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1465 nframes,
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1466 )
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1467 header_plus_frame = header + self.cf
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1468 bytes_sent = bcm.send(header_plus_frame)
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1469 self.assertEqual(bytes_sent, len(header_plus_frame))
f714af60508d Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian
Charles-François Natali <cf.natali@gmail.com>
parents: 81589
diff changeset
1470
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1471
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1472 @unittest.skipUnless(HAVE_SOCKET_RDS, 'RDS sockets required for this test.')
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1473 class BasicRDSTest(unittest.TestCase):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1474
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1475 def testCrucialConstants(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1476 socket.AF_RDS
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1477 socket.PF_RDS
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1479 def testCreateSocket(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1480 with socket.socket(socket.PF_RDS, socket.SOCK_SEQPACKET, 0) as s:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1481 pass
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1482
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1483 def testSocketBufferSize(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1484 bufsize = 16384
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1485 with socket.socket(socket.PF_RDS, socket.SOCK_SEQPACKET, 0) as s:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1486 s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, bufsize)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1487 s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, bufsize)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1488
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1489
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1490 @unittest.skipUnless(HAVE_SOCKET_RDS, 'RDS sockets required for this test.')
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1491 @unittest.skipUnless(thread, 'Threading required for this test.')
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1492 class RDSTest(ThreadedRDSSocketTest):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1493
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1494 def __init__(self, methodName='runTest'):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1495 ThreadedRDSSocketTest.__init__(self, methodName=methodName)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1496
73485
fa9bbfc0bcec Fix test_socket when built whithout threads.
Charles-François Natali <neologix@free.fr>
parents: 73478
diff changeset
1497 def setUp(self):
fa9bbfc0bcec Fix test_socket when built whithout threads.
Charles-François Natali <neologix@free.fr>
parents: 73478
diff changeset
1498 super().setUp()
fa9bbfc0bcec Fix test_socket when built whithout threads.
Charles-François Natali <neologix@free.fr>
parents: 73478
diff changeset
1499 self.evt = threading.Event()
fa9bbfc0bcec Fix test_socket when built whithout threads.
Charles-François Natali <neologix@free.fr>
parents: 73478
diff changeset
1500
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1501 def testSendAndRecv(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1502 data, addr = self.serv.recvfrom(self.bufsize)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1503 self.assertEqual(self.data, data)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1504 self.assertEqual(self.cli_addr, addr)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1505
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1506 def _testSendAndRecv(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1507 self.data = b'spam'
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1508 self.cli.sendto(self.data, 0, (HOST, self.port))
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1509
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1510 def testPeek(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1511 data, addr = self.serv.recvfrom(self.bufsize, socket.MSG_PEEK)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1512 self.assertEqual(self.data, data)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1513 data, addr = self.serv.recvfrom(self.bufsize)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1514 self.assertEqual(self.data, data)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1515
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1516 def _testPeek(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1517 self.data = b'spam'
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1518 self.cli.sendto(self.data, 0, (HOST, self.port))
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1519
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1520 @requireAttrs(socket.socket, 'recvmsg')
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1521 def testSendAndRecvMsg(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1522 data, ancdata, msg_flags, addr = self.serv.recvmsg(self.bufsize)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1523 self.assertEqual(self.data, data)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1524
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1525 @requireAttrs(socket.socket, 'sendmsg')
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1526 def _testSendAndRecvMsg(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1527 self.data = b'hello ' * 10
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1528 self.cli.sendmsg([self.data], (), 0, (HOST, self.port))
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1529
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1530 def testSendAndRecvMulti(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1531 data, addr = self.serv.recvfrom(self.bufsize)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1532 self.assertEqual(self.data1, data)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1533
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1534 data, addr = self.serv.recvfrom(self.bufsize)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1535 self.assertEqual(self.data2, data)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1536
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1537 def _testSendAndRecvMulti(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1538 self.data1 = b'bacon'
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1539 self.cli.sendto(self.data1, 0, (HOST, self.port))
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1540
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1541 self.data2 = b'egg'
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1542 self.cli.sendto(self.data2, 0, (HOST, self.port))
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1543
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1544 def testSelect(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1545 r, w, x = select.select([self.serv], [], [], 3.0)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1546 self.assertIn(self.serv, r)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1547 data, addr = self.serv.recvfrom(self.bufsize)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1548 self.assertEqual(self.data, data)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1549
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1550 def _testSelect(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1551 self.data = b'select'
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1552 self.cli.sendto(self.data, 0, (HOST, self.port))
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1553
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1554 def testCongestion(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1555 # wait until the sender is done
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1556 self.evt.wait()
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1557
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1558 def _testCongestion(self):
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1559 # test the behavior in case of congestion
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1560 self.data = b'fill'
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1561 self.cli.setblocking(False)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1562 try:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1563 # try to lower the receiver's socket buffer size
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1564 self.cli.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 16384)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1565 except OSError:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1566 pass
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1567 with self.assertRaises(OSError) as cm:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1568 try:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1569 # fill the receiver's socket buffer
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1570 while True:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1571 self.cli.sendto(self.data, 0, (HOST, self.port))
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1572 finally:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1573 # signal the receiver we're done
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1574 self.evt.set()
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1575 # sendto() should have failed with ENOBUFS
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1576 self.assertEqual(cm.exception.errno, errno.ENOBUFS)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1577 # and we should have received a congestion notification through poll
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1578 r, w, x = select.select([self.serv], [], [], 3.0)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1579 self.assertIn(self.serv, r)
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1580
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1581
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
1582 @unittest.skipUnless(thread, 'Threading required for this test.')
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1583 class BasicTCPTest(SocketConnectedTest):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1584
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1585 def __init__(self, methodName='runTest'):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1586 SocketConnectedTest.__init__(self, methodName=methodName)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1587
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1588 def testRecv(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1589 # Testing large receive over TCP
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1590 msg = self.cli_conn.recv(1024)
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1591 self.assertEqual(msg, MSG)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1592
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1593 def _testRecv(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1594 self.serv_conn.send(MSG)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1595
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1596 def testOverFlowRecv(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1597 # Testing receive in chunks over TCP
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1598 seg1 = self.cli_conn.recv(len(MSG) - 3)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1599 seg2 = self.cli_conn.recv(1024)
23800
bf1555a92711 Remove some overly complicated ways to concatenate and repeat strings
Guido van Rossum <guido@python.org>
parents: 23799
diff changeset
1600 msg = seg1 + seg2
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1601 self.assertEqual(msg, MSG)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1602
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1603 def _testOverFlowRecv(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1604 self.serv_conn.send(MSG)
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
1605
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1606 def testRecvFrom(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1607 # Testing large recvfrom() over TCP
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1608 msg, addr = self.cli_conn.recvfrom(1024)
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1609 self.assertEqual(msg, MSG)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1610
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1611 def _testRecvFrom(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1612 self.serv_conn.send(MSG)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1613
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1614 def testOverFlowRecvFrom(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1615 # Testing recvfrom() in chunks over TCP
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1616 seg1, addr = self.cli_conn.recvfrom(len(MSG)-3)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1617 seg2, addr = self.cli_conn.recvfrom(1024)
23800
bf1555a92711 Remove some overly complicated ways to concatenate and repeat strings
Guido van Rossum <guido@python.org>
parents: 23799
diff changeset
1618 msg = seg1 + seg2
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1619 self.assertEqual(msg, MSG)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1620
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1621 def _testOverFlowRecvFrom(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1622 self.serv_conn.send(MSG)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1623
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1624 def testSendAll(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1625 # Testing sendall() with a 2048 byte string over TCP
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
1626 msg = b''
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1627 while 1:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1628 read = self.cli_conn.recv(1024)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1629 if not read:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1630 break
24675
fec0b0aef14b testSendAll(): loop until all data is read; this was necessary at
Guido van Rossum <guido@python.org>
parents: 24674
diff changeset
1631 msg += read
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
1632 self.assertEqual(msg, b'f' * 2048)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1633
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1634 def _testSendAll(self):
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
1635 big_chunk = b'f' * 2048
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1636 self.serv_conn.sendall(big_chunk)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1637
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1638 def testFromFd(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1639 # Testing fromfd()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1640 fd = self.cli_conn.fileno()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1641 sock = socket.fromfd(fd, socket.AF_INET, socket.SOCK_STREAM)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
1642 self.addCleanup(sock.close)
64747
534853ba8cd3 Issue #1552: socket.socketpair() now returns regular socket.socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 64593
diff changeset
1643 self.assertIsInstance(sock, socket.socket)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1644 msg = sock.recv(1024)
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1645 self.assertEqual(msg, MSG)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1646
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1647 def _testFromFd(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1648 self.serv_conn.send(MSG)
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
1649
43881
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1650 def testDup(self):
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1651 # Testing dup()
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1652 sock = self.cli_conn.dup()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
1653 self.addCleanup(sock.close)
43881
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1654 msg = sock.recv(1024)
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1655 self.assertEqual(msg, MSG)
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1656
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1657 def _testDup(self):
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1658 self.serv_conn.send(MSG)
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1659
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1660 def testShutdown(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1661 # Testing shutdown()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1662 msg = self.cli_conn.recv(1024)
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1663 self.assertEqual(msg, MSG)
50800
b17ec4c4a7c3 Merged revisions 68611-68613 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 50741
diff changeset
1664 # wait for _testShutdown to finish: on OS X, when the server
b17ec4c4a7c3 Merged revisions 68611-68613 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 50741
diff changeset
1665 # closes the connection the client also becomes disconnected,
b17ec4c4a7c3 Merged revisions 68611-68613 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 50741
diff changeset
1666 # and the client's shutdown call will fail. (Issue #4397.)
b17ec4c4a7c3 Merged revisions 68611-68613 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 50741
diff changeset
1667 self.done.wait()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1668
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1669 def _testShutdown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1670 self.serv_conn.send(MSG)
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1671 # Issue 15989
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1672 self.assertRaises(OverflowError, self.serv_conn.shutdown,
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1673 _testcapi.INT_MAX + 1)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1674 self.assertRaises(OverflowError, self.serv_conn.shutdown,
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1675 2 + (_testcapi.UINT_MAX + 1))
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1676 self.serv_conn.shutdown(2)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1677
63890
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1678 def testDetach(self):
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1679 # Testing detach()
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1680 fileno = self.cli_conn.fileno()
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1681 f = self.cli_conn.detach()
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1682 self.assertEqual(f, fileno)
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1683 # cli_conn cannot be used anymore...
76033
3a220feafa15 Issue #13872: socket.detach() now marks the socket closed (as mirrored in the socket repr()).
Antoine Pitrou <solipsis@pitrou.net>
parents: 74233
diff changeset
1684 self.assertTrue(self.cli_conn._closed)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
1685 self.assertRaises(OSError, self.cli_conn.recv, 1024)
63856
3f8cef837f07 Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents: 61259
diff changeset
1686 self.cli_conn.close()
63890
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1687 # ...but we can create another socket using the (still open)
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1688 # file descriptor
63856
3f8cef837f07 Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents: 61259
diff changeset
1689 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, fileno=f)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
1690 self.addCleanup(sock.close)
63856
3f8cef837f07 Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents: 61259
diff changeset
1691 msg = sock.recv(1024)
3f8cef837f07 Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents: 61259
diff changeset
1692 self.assertEqual(msg, MSG)
3f8cef837f07 Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents: 61259
diff changeset
1693
63890
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1694 def _testDetach(self):
63856
3f8cef837f07 Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents: 61259
diff changeset
1695 self.serv_conn.send(MSG)
3f8cef837f07 Issue #8524: Add a forget() method to socket objects, so as to put the
Antoine Pitrou <solipsis@pitrou.net>
parents: 61259
diff changeset
1696
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
1697 @unittest.skipUnless(thread, 'Threading required for this test.')
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1698 class BasicUDPTest(ThreadedUDPSocketTest):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1699
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1700 def __init__(self, methodName='runTest'):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1701 ThreadedUDPSocketTest.__init__(self, methodName=methodName)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1702
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1703 def testSendtoAndRecv(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1704 # Testing sendto() and Recv() over UDP
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1705 msg = self.serv.recv(len(MSG))
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1706 self.assertEqual(msg, MSG)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1707
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1708 def _testSendtoAndRecv(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
1709 self.cli.sendto(MSG, 0, (HOST, self.port))
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
1710
23798
1da6d67f4a05 Some provisional changes to get more tests to run on Windows (I hope).
Guido van Rossum <guido@python.org>
parents: 23797
diff changeset
1711 def testRecvFrom(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1712 # Testing recvfrom() over UDP
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1713 msg, addr = self.serv.recvfrom(len(MSG))
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1714 self.assertEqual(msg, MSG)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1715
23798
1da6d67f4a05 Some provisional changes to get more tests to run on Windows (I hope).
Guido van Rossum <guido@python.org>
parents: 23797
diff changeset
1716 def _testRecvFrom(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
1717 self.cli.sendto(MSG, 0, (HOST, self.port))
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1718
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1719 def testRecvFromNegative(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1720 # Negative lengths passed to recvfrom should give ValueError.
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1721 self.assertRaises(ValueError, self.serv.recvfrom, -1)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1722
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1723 def _testRecvFromNegative(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
1724 self.cli.sendto(MSG, 0, (HOST, self.port))
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1725
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1726 # Tests for the sendmsg()/recvmsg() interface. Where possible, the
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1727 # same test code is used with different families and types of socket
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1728 # (e.g. stream, datagram), and tests using recvmsg() are repeated
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1729 # using recvmsg_into().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1730 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1731 # The generic test classes such as SendmsgTests and
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1732 # RecvmsgGenericTests inherit from SendrecvmsgBase and expect to be
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1733 # supplied with sockets cli_sock and serv_sock representing the
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1734 # client's and the server's end of the connection respectively, and
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1735 # attributes cli_addr and serv_addr holding their (numeric where
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1736 # appropriate) addresses.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1737 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1738 # The final concrete test classes combine these with subclasses of
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1739 # SocketTestBase which set up client and server sockets of a specific
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1740 # type, and with subclasses of SendrecvmsgBase such as
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1741 # SendrecvmsgDgramBase and SendrecvmsgConnectedBase which map these
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1742 # sockets to cli_sock and serv_sock and override the methods and
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1743 # attributes of SendrecvmsgBase to fill in destination addresses if
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1744 # needed when sending, check for specific flags in msg_flags, etc.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1745 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1746 # RecvmsgIntoMixin provides a version of doRecvmsg() implemented using
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1747 # recvmsg_into().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1748
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1749 # XXX: like the other datagram (UDP) tests in this module, the code
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1750 # here assumes that datagram delivery on the local machine will be
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1751 # reliable.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1752
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1753 class SendrecvmsgBase(ThreadSafeCleanupTestCase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1754 # Base class for sendmsg()/recvmsg() tests.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1755
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1756 # Time in seconds to wait before considering a test failed, or
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1757 # None for no timeout. Not all tests actually set a timeout.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1758 fail_timeout = 3.0
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1759
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1760 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1761 self.misc_event = threading.Event()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1762 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1763
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1764 def sendToServer(self, msg):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1765 # Send msg to the server.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1766 return self.cli_sock.send(msg)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1767
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1768 # Tuple of alternative default arguments for sendmsg() when called
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1769 # via sendmsgToServer() (e.g. to include a destination address).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1770 sendmsg_to_server_defaults = ()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1771
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1772 def sendmsgToServer(self, *args):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1773 # Call sendmsg() on self.cli_sock with the given arguments,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1774 # filling in any arguments which are not supplied with the
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1775 # corresponding items of self.sendmsg_to_server_defaults, if
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1776 # any.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1777 return self.cli_sock.sendmsg(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1778 *(args + self.sendmsg_to_server_defaults[len(args):]))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1779
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1780 def doRecvmsg(self, sock, bufsize, *args):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1781 # Call recvmsg() on sock with given arguments and return its
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1782 # result. Should be used for tests which can use either
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1783 # recvmsg() or recvmsg_into() - RecvmsgIntoMixin overrides
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1784 # this method with one which emulates it using recvmsg_into(),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1785 # thus allowing the same test to be used for both methods.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1786 result = sock.recvmsg(bufsize, *args)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1787 self.registerRecvmsgResult(result)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1788 return result
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1789
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1790 def registerRecvmsgResult(self, result):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1791 # Called by doRecvmsg() with the return value of recvmsg() or
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1792 # recvmsg_into(). Can be overridden to arrange cleanup based
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1793 # on the returned ancillary data, for instance.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1794 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1795
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1796 def checkRecvmsgAddress(self, addr1, addr2):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1797 # Called to compare the received address with the address of
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1798 # the peer.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1799 self.assertEqual(addr1, addr2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1800
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1801 # Flags that are normally unset in msg_flags
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1802 msg_flags_common_unset = 0
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1803 for name in ("MSG_CTRUNC", "MSG_OOB"):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1804 msg_flags_common_unset |= getattr(socket, name, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1805
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1806 # Flags that are normally set
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1807 msg_flags_common_set = 0
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1808
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1809 # Flags set when a complete record has been received (e.g. MSG_EOR
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1810 # for SCTP)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1811 msg_flags_eor_indicator = 0
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1812
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1813 # Flags set when a complete record has not been received
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1814 # (e.g. MSG_TRUNC for datagram sockets)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1815 msg_flags_non_eor_indicator = 0
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1816
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1817 def checkFlags(self, flags, eor=None, checkset=0, checkunset=0, ignore=0):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1818 # Method to check the value of msg_flags returned by recvmsg[_into]().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1819 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1820 # Checks that all bits in msg_flags_common_set attribute are
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1821 # set in "flags" and all bits in msg_flags_common_unset are
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1822 # unset.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1823 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1824 # The "eor" argument specifies whether the flags should
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1825 # indicate that a full record (or datagram) has been received.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1826 # If "eor" is None, no checks are done; otherwise, checks
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1827 # that:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1828 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1829 # * if "eor" is true, all bits in msg_flags_eor_indicator are
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1830 # set and all bits in msg_flags_non_eor_indicator are unset
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1831 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1832 # * if "eor" is false, all bits in msg_flags_non_eor_indicator
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1833 # are set and all bits in msg_flags_eor_indicator are unset
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1834 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1835 # If "checkset" and/or "checkunset" are supplied, they require
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1836 # the given bits to be set or unset respectively, overriding
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1837 # what the attributes require for those bits.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1838 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1839 # If any bits are set in "ignore", they will not be checked,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1840 # regardless of the other inputs.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1841 #
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1842 # Will raise Exception if the inputs require a bit to be both
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1843 # set and unset, and it is not ignored.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1844
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1845 defaultset = self.msg_flags_common_set
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1846 defaultunset = self.msg_flags_common_unset
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1847
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1848 if eor:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1849 defaultset |= self.msg_flags_eor_indicator
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1850 defaultunset |= self.msg_flags_non_eor_indicator
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1851 elif eor is not None:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1852 defaultset |= self.msg_flags_non_eor_indicator
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1853 defaultunset |= self.msg_flags_eor_indicator
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1854
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1855 # Function arguments override defaults
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1856 defaultset &= ~checkunset
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1857 defaultunset &= ~checkset
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1858
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1859 # Merge arguments with remaining defaults, and check for conflicts
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1860 checkset |= defaultset
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1861 checkunset |= defaultunset
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1862 inboth = checkset & checkunset & ~ignore
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1863 if inboth:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1864 raise Exception("contradictory set, unset requirements for flags "
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1865 "{0:#x}".format(inboth))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1866
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1867 # Compare with given msg_flags value
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1868 mask = (checkset | checkunset) & ~ignore
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1869 self.assertEqual(flags & mask, checkset & mask)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1870
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1871
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1872 class RecvmsgIntoMixin(SendrecvmsgBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1873 # Mixin to implement doRecvmsg() using recvmsg_into().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1874
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1875 def doRecvmsg(self, sock, bufsize, *args):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1876 buf = bytearray(bufsize)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1877 result = sock.recvmsg_into([buf], *args)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1878 self.registerRecvmsgResult(result)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1879 self.assertGreaterEqual(result[0], 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1880 self.assertLessEqual(result[0], bufsize)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1881 return (bytes(buf[:result[0]]),) + result[1:]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1882
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1883
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1884 class SendrecvmsgDgramFlagsBase(SendrecvmsgBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1885 # Defines flags to be checked in msg_flags for datagram sockets.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1886
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1887 @property
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1888 def msg_flags_non_eor_indicator(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1889 return super().msg_flags_non_eor_indicator | socket.MSG_TRUNC
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1890
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1891
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1892 class SendrecvmsgSCTPFlagsBase(SendrecvmsgBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1893 # Defines flags to be checked in msg_flags for SCTP sockets.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1894
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1895 @property
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1896 def msg_flags_eor_indicator(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1897 return super().msg_flags_eor_indicator | socket.MSG_EOR
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1898
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1899
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1900 class SendrecvmsgConnectionlessBase(SendrecvmsgBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1901 # Base class for tests on connectionless-mode sockets. Users must
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1902 # supply sockets on attributes cli and serv to be mapped to
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1903 # cli_sock and serv_sock respectively.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1904
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1905 @property
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1906 def serv_sock(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1907 return self.serv
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1908
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1909 @property
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1910 def cli_sock(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1911 return self.cli
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1912
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1913 @property
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1914 def sendmsg_to_server_defaults(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1915 return ([], [], 0, self.serv_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1916
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1917 def sendToServer(self, msg):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1918 return self.cli_sock.sendto(msg, self.serv_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1919
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1920
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1921 class SendrecvmsgConnectedBase(SendrecvmsgBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1922 # Base class for tests on connected sockets. Users must supply
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1923 # sockets on attributes serv_conn and cli_conn (representing the
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1924 # connections *to* the server and the client), to be mapped to
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1925 # cli_sock and serv_sock respectively.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1926
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1927 @property
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1928 def serv_sock(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1929 return self.cli_conn
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1930
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1931 @property
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1932 def cli_sock(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1933 return self.serv_conn
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1934
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1935 def checkRecvmsgAddress(self, addr1, addr2):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1936 # Address is currently "unspecified" for a connected socket,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1937 # so we don't examine it
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1938 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1939
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1940
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1941 class SendrecvmsgServerTimeoutBase(SendrecvmsgBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1942 # Base class to set a timeout on server's socket.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1943
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1944 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1945 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1946 self.serv_sock.settimeout(self.fail_timeout)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1947
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1948
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1949 class SendmsgTests(SendrecvmsgServerTimeoutBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1950 # Tests for sendmsg() which can use any socket type and do not
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1951 # involve recvmsg() or recvmsg_into().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1952
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1953 def testSendmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1954 # Send a simple message with sendmsg().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1955 self.assertEqual(self.serv_sock.recv(len(MSG)), MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1956
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1957 def _testSendmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1958 self.assertEqual(self.sendmsgToServer([MSG]), len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1959
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1960 def testSendmsgDataGenerator(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1961 # Send from buffer obtained from a generator (not a sequence).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1962 self.assertEqual(self.serv_sock.recv(len(MSG)), MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1963
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1964 def _testSendmsgDataGenerator(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1965 self.assertEqual(self.sendmsgToServer((o for o in [MSG])),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1966 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1967
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1968 def testSendmsgAncillaryGenerator(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1969 # Gather (empty) ancillary data from a generator.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1970 self.assertEqual(self.serv_sock.recv(len(MSG)), MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1971
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1972 def _testSendmsgAncillaryGenerator(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1973 self.assertEqual(self.sendmsgToServer([MSG], (o for o in [])),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1974 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1975
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1976 def testSendmsgArray(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1977 # Send data from an array instead of the usual bytes object.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1978 self.assertEqual(self.serv_sock.recv(len(MSG)), MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1979
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1980 def _testSendmsgArray(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1981 self.assertEqual(self.sendmsgToServer([array.array("B", MSG)]),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1982 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1983
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1984 def testSendmsgGather(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1985 # Send message data from more than one buffer (gather write).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1986 self.assertEqual(self.serv_sock.recv(len(MSG)), MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1987
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1988 def _testSendmsgGather(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1989 self.assertEqual(self.sendmsgToServer([MSG[:3], MSG[3:]]), len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1990
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1991 def testSendmsgBadArgs(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1992 # Check that sendmsg() rejects invalid arguments.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1993 self.assertEqual(self.serv_sock.recv(1000), b"done")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1994
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1995 def _testSendmsgBadArgs(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1996 self.assertRaises(TypeError, self.cli_sock.sendmsg)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1997 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1998 b"not in an iterable")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
1999 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2000 object())
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2001 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2002 [object()])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2003 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2004 [MSG, object()])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2005 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2006 [MSG], object())
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2007 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2008 [MSG], [], object())
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2009 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2010 [MSG], [], 0, object())
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2011 self.sendToServer(b"done")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2012
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2013 def testSendmsgBadCmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2014 # Check that invalid ancillary data items are rejected.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2015 self.assertEqual(self.serv_sock.recv(1000), b"done")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2016
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2017 def _testSendmsgBadCmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2018 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2019 [MSG], [object()])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2020 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2021 [MSG], [(object(), 0, b"data")])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2022 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2023 [MSG], [(0, object(), b"data")])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2024 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2025 [MSG], [(0, 0, object())])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2026 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2027 [MSG], [(0, 0)])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2028 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2029 [MSG], [(0, 0, b"data", 42)])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2030 self.sendToServer(b"done")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2031
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2032 @requireAttrs(socket, "CMSG_SPACE")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2033 def testSendmsgBadMultiCmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2034 # Check that invalid ancillary data items are rejected when
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2035 # more than one item is present.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2036 self.assertEqual(self.serv_sock.recv(1000), b"done")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2037
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2038 @testSendmsgBadMultiCmsg.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2039 def _testSendmsgBadMultiCmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2040 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2041 [MSG], [0, 0, b""])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2042 self.assertRaises(TypeError, self.sendmsgToServer,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2043 [MSG], [(0, 0, b""), object()])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2044 self.sendToServer(b"done")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2045
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2046 def testSendmsgExcessCmsgReject(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2047 # Check that sendmsg() rejects excess ancillary data items
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2048 # when the number that can be sent is limited.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2049 self.assertEqual(self.serv_sock.recv(1000), b"done")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2050
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2051 def _testSendmsgExcessCmsgReject(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2052 if not hasattr(socket, "CMSG_SPACE"):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2053 # Can only send one item
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2054 with self.assertRaises(OSError) as cm:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2055 self.sendmsgToServer([MSG], [(0, 0, b""), (0, 0, b"")])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2056 self.assertIsNone(cm.exception.errno)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2057 self.sendToServer(b"done")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2058
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2059 def testSendmsgAfterClose(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2060 # Check that sendmsg() fails on a closed socket.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2061 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2062
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2063 def _testSendmsgAfterClose(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2064 self.cli_sock.close()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2065 self.assertRaises(OSError, self.sendmsgToServer, [MSG])
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2066
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2067
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2068 class SendmsgStreamTests(SendmsgTests):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2069 # Tests for sendmsg() which require a stream socket and do not
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2070 # involve recvmsg() or recvmsg_into().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2071
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2072 def testSendmsgExplicitNoneAddr(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2073 # Check that peer address can be specified as None.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2074 self.assertEqual(self.serv_sock.recv(len(MSG)), MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2075
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2076 def _testSendmsgExplicitNoneAddr(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2077 self.assertEqual(self.sendmsgToServer([MSG], [], 0, None), len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2078
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2079 def testSendmsgTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2080 # Check that timeout works with sendmsg().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2081 self.assertEqual(self.serv_sock.recv(512), b"a"*512)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2082 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2083
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2084 def _testSendmsgTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2085 try:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2086 self.cli_sock.settimeout(0.03)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2087 with self.assertRaises(socket.timeout):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2088 while True:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2089 self.sendmsgToServer([b"a"*512])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2090 finally:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2091 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2092
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2093 # XXX: would be nice to have more tests for sendmsg flags argument.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2094
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2095 # Linux supports MSG_DONTWAIT when sending, but in general, it
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2096 # only works when receiving. Could add other platforms if they
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2097 # support it too.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2098 @skipWithClientIf(sys.platform not in {"linux2"},
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2099 "MSG_DONTWAIT not known to work on this platform when "
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2100 "sending")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2101 def testSendmsgDontWait(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2102 # Check that MSG_DONTWAIT in flags causes non-blocking behaviour.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2103 self.assertEqual(self.serv_sock.recv(512), b"a"*512)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2104 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2105
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2106 @testSendmsgDontWait.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2107 def _testSendmsgDontWait(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2108 try:
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2109 with self.assertRaises(OSError) as cm:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2110 while True:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2111 self.sendmsgToServer([b"a"*512], [], socket.MSG_DONTWAIT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2112 self.assertIn(cm.exception.errno,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2113 (errno.EAGAIN, errno.EWOULDBLOCK))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2114 finally:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2115 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2116
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2117
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2118 class SendmsgConnectionlessTests(SendmsgTests):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2119 # Tests for sendmsg() which require a connectionless-mode
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2120 # (e.g. datagram) socket, and do not involve recvmsg() or
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2121 # recvmsg_into().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2122
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2123 def testSendmsgNoDestAddr(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2124 # Check that sendmsg() fails when no destination address is
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2125 # given for unconnected socket.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2126 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2127
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2128 def _testSendmsgNoDestAddr(self):
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2129 self.assertRaises(OSError, self.cli_sock.sendmsg,
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2130 [MSG])
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2131 self.assertRaises(OSError, self.cli_sock.sendmsg,
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2132 [MSG], [], 0, None)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2133
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2134
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2135 class RecvmsgGenericTests(SendrecvmsgBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2136 # Tests for recvmsg() which can also be emulated using
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2137 # recvmsg_into(), and can use any socket type.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2138
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2139 def testRecvmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2140 # Receive a simple message with recvmsg[_into]().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2141 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock, len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2142 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2143 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2144 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2145 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2146
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2147 def _testRecvmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2148 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2149
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2150 def testRecvmsgExplicitDefaults(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2151 # Test recvmsg[_into]() with default arguments provided explicitly.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2152 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2153 len(MSG), 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2154 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2155 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2156 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2157 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2158
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2159 def _testRecvmsgExplicitDefaults(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2160 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2161
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2162 def testRecvmsgShorter(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2163 # Receive a message smaller than buffer.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2164 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2165 len(MSG) + 42)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2166 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2167 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2168 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2169 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2170
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2171 def _testRecvmsgShorter(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2172 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2173
72619
4378bae6b8dc Issue #13001: Fix test_socket.testRecvmsgTrunc failure on FreeBSD < 8, which
Charles-François Natali <neologix@free.fr>
parents: 72587
diff changeset
2174 # FreeBSD < 8 doesn't always set the MSG_TRUNC flag when a truncated
4378bae6b8dc Issue #13001: Fix test_socket.testRecvmsgTrunc failure on FreeBSD < 8, which
Charles-François Natali <neologix@free.fr>
parents: 72587
diff changeset
2175 # datagram is received (issue #13001).
4378bae6b8dc Issue #13001: Fix test_socket.testRecvmsgTrunc failure on FreeBSD < 8, which
Charles-François Natali <neologix@free.fr>
parents: 72587
diff changeset
2176 @support.requires_freebsd_version(8)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2177 def testRecvmsgTrunc(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2178 # Receive part of message, check for truncation indicators.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2179 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2180 len(MSG) - 3)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2181 self.assertEqual(msg, MSG[:-3])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2182 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2183 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2184 self.checkFlags(flags, eor=False)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2185
72619
4378bae6b8dc Issue #13001: Fix test_socket.testRecvmsgTrunc failure on FreeBSD < 8, which
Charles-François Natali <neologix@free.fr>
parents: 72587
diff changeset
2186 @support.requires_freebsd_version(8)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2187 def _testRecvmsgTrunc(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2188 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2189
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2190 def testRecvmsgShortAncillaryBuf(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2191 # Test ancillary data buffer too small to hold any ancillary data.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2192 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2193 len(MSG), 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2194 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2195 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2196 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2197 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2198
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2199 def _testRecvmsgShortAncillaryBuf(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2200 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2201
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2202 def testRecvmsgLongAncillaryBuf(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2203 # Test large ancillary data buffer.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2204 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2205 len(MSG), 10240)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2206 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2207 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2208 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2209 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2210
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2211 def _testRecvmsgLongAncillaryBuf(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2212 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2213
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2214 def testRecvmsgAfterClose(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2215 # Check that recvmsg[_into]() fails on a closed socket.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2216 self.serv_sock.close()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2217 self.assertRaises(OSError, self.doRecvmsg, self.serv_sock, 1024)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2218
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2219 def _testRecvmsgAfterClose(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2220 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2221
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2222 def testRecvmsgTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2223 # Check that timeout works.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2224 try:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2225 self.serv_sock.settimeout(0.03)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2226 self.assertRaises(socket.timeout,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2227 self.doRecvmsg, self.serv_sock, len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2228 finally:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2229 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2230
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2231 def _testRecvmsgTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2232 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2233
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2234 @requireAttrs(socket, "MSG_PEEK")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2235 def testRecvmsgPeek(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2236 # Check that MSG_PEEK in flags enables examination of pending
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2237 # data without consuming it.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2238
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2239 # Receive part of data with MSG_PEEK.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2240 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2241 len(MSG) - 3, 0,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2242 socket.MSG_PEEK)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2243 self.assertEqual(msg, MSG[:-3])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2244 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2245 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2246 # Ignoring MSG_TRUNC here (so this test is the same for stream
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2247 # and datagram sockets). Some wording in POSIX seems to
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2248 # suggest that it needn't be set when peeking, but that may
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2249 # just be a slip.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2250 self.checkFlags(flags, eor=False,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2251 ignore=getattr(socket, "MSG_TRUNC", 0))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2252
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2253 # Receive all data with MSG_PEEK.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2254 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2255 len(MSG), 0,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2256 socket.MSG_PEEK)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2257 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2258 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2259 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2260 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2261
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2262 # Check that the same data can still be received normally.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2263 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock, len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2264 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2265 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2266 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2267 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2268
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2269 @testRecvmsgPeek.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2270 def _testRecvmsgPeek(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2271 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2272
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2273 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2274 def testRecvmsgFromSendmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2275 # Test receiving with recvmsg[_into]() when message is sent
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2276 # using sendmsg().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2277 self.serv_sock.settimeout(self.fail_timeout)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2278 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock, len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2279 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2280 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2281 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2282 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2283
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2284 @testRecvmsgFromSendmsg.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2285 def _testRecvmsgFromSendmsg(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2286 self.assertEqual(self.sendmsgToServer([MSG[:3], MSG[3:]]), len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2287
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2288
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2289 class RecvmsgGenericStreamTests(RecvmsgGenericTests):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2290 # Tests which require a stream socket and can use either recvmsg()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2291 # or recvmsg_into().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2292
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2293 def testRecvmsgEOF(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2294 # Receive end-of-stream indicator (b"", peer socket closed).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2295 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock, 1024)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2296 self.assertEqual(msg, b"")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2297 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2298 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2299 self.checkFlags(flags, eor=None) # Might not have end-of-record marker
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2300
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2301 def _testRecvmsgEOF(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2302 self.cli_sock.close()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2303
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2304 def testRecvmsgOverflow(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2305 # Receive a message in more than one chunk.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2306 seg1, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2307 len(MSG) - 3)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2308 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2309 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2310 self.checkFlags(flags, eor=False)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2311
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2312 seg2, ancdata, flags, addr = self.doRecvmsg(self.serv_sock, 1024)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2313 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2314 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2315 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2316
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2317 msg = seg1 + seg2
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2318 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2319
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2320 def _testRecvmsgOverflow(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2321 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2322
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2323
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2324 class RecvmsgTests(RecvmsgGenericTests):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2325 # Tests for recvmsg() which can use any socket type.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2326
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2327 def testRecvmsgBadArgs(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2328 # Check that recvmsg() rejects invalid arguments.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2329 self.assertRaises(TypeError, self.serv_sock.recvmsg)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2330 self.assertRaises(ValueError, self.serv_sock.recvmsg,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2331 -1, 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2332 self.assertRaises(ValueError, self.serv_sock.recvmsg,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2333 len(MSG), -1, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2334 self.assertRaises(TypeError, self.serv_sock.recvmsg,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2335 [bytearray(10)], 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2336 self.assertRaises(TypeError, self.serv_sock.recvmsg,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2337 object(), 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2338 self.assertRaises(TypeError, self.serv_sock.recvmsg,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2339 len(MSG), object(), 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2340 self.assertRaises(TypeError, self.serv_sock.recvmsg,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2341 len(MSG), 0, object())
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2342
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2343 msg, ancdata, flags, addr = self.serv_sock.recvmsg(len(MSG), 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2344 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2345 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2346 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2347 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2348
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2349 def _testRecvmsgBadArgs(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2350 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2351
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2352
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2353 class RecvmsgIntoTests(RecvmsgIntoMixin, RecvmsgGenericTests):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2354 # Tests for recvmsg_into() which can use any socket type.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2355
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2356 def testRecvmsgIntoBadArgs(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2357 # Check that recvmsg_into() rejects invalid arguments.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2358 buf = bytearray(len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2359 self.assertRaises(TypeError, self.serv_sock.recvmsg_into)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2360 self.assertRaises(TypeError, self.serv_sock.recvmsg_into,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2361 len(MSG), 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2362 self.assertRaises(TypeError, self.serv_sock.recvmsg_into,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2363 buf, 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2364 self.assertRaises(TypeError, self.serv_sock.recvmsg_into,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2365 [object()], 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2366 self.assertRaises(TypeError, self.serv_sock.recvmsg_into,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2367 [b"I'm not writable"], 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2368 self.assertRaises(TypeError, self.serv_sock.recvmsg_into,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2369 [buf, object()], 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2370 self.assertRaises(ValueError, self.serv_sock.recvmsg_into,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2371 [buf], -1, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2372 self.assertRaises(TypeError, self.serv_sock.recvmsg_into,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2373 [buf], object(), 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2374 self.assertRaises(TypeError, self.serv_sock.recvmsg_into,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2375 [buf], 0, object())
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2376
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2377 nbytes, ancdata, flags, addr = self.serv_sock.recvmsg_into([buf], 0, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2378 self.assertEqual(nbytes, len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2379 self.assertEqual(buf, bytearray(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2380 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2381 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2382 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2383
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2384 def _testRecvmsgIntoBadArgs(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2385 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2386
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2387 def testRecvmsgIntoGenerator(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2388 # Receive into buffer obtained from a generator (not a sequence).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2389 buf = bytearray(len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2390 nbytes, ancdata, flags, addr = self.serv_sock.recvmsg_into(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2391 (o for o in [buf]))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2392 self.assertEqual(nbytes, len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2393 self.assertEqual(buf, bytearray(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2394 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2395 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2396 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2397
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2398 def _testRecvmsgIntoGenerator(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2399 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2400
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2401 def testRecvmsgIntoArray(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2402 # Receive into an array rather than the usual bytearray.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2403 buf = array.array("B", [0] * len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2404 nbytes, ancdata, flags, addr = self.serv_sock.recvmsg_into([buf])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2405 self.assertEqual(nbytes, len(MSG))
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2406 self.assertEqual(buf.tobytes(), MSG)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2407 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2408 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2409 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2410
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2411 def _testRecvmsgIntoArray(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2412 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2413
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2414 def testRecvmsgIntoScatter(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2415 # Receive into multiple buffers (scatter write).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2416 b1 = bytearray(b"----")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2417 b2 = bytearray(b"0123456789")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2418 b3 = bytearray(b"--------------")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2419 nbytes, ancdata, flags, addr = self.serv_sock.recvmsg_into(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2420 [b1, memoryview(b2)[2:9], b3])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2421 self.assertEqual(nbytes, len(b"Mary had a little lamb"))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2422 self.assertEqual(b1, bytearray(b"Mary"))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2423 self.assertEqual(b2, bytearray(b"01 had a 9"))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2424 self.assertEqual(b3, bytearray(b"little lamb---"))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2425 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2426 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2427 self.checkFlags(flags, eor=True)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2428
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2429 def _testRecvmsgIntoScatter(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2430 self.sendToServer(b"Mary had a little lamb")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2431
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2432
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2433 class CmsgMacroTests(unittest.TestCase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2434 # Test the functions CMSG_LEN() and CMSG_SPACE(). Tests
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2435 # assumptions used by sendmsg() and recvmsg[_into](), which share
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2436 # code with these functions.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2437
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2438 # Match the definition in socketmodule.c
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2439 socklen_t_limit = min(0x7fffffff, _testcapi.INT_MAX)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2440
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2441 @requireAttrs(socket, "CMSG_LEN")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2442 def testCMSG_LEN(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2443 # Test CMSG_LEN() with various valid and invalid values,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2444 # checking the assumptions used by recvmsg() and sendmsg().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2445 toobig = self.socklen_t_limit - socket.CMSG_LEN(0) + 1
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2446 values = list(range(257)) + list(range(toobig - 257, toobig))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2447
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2448 # struct cmsghdr has at least three members, two of which are ints
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2449 self.assertGreater(socket.CMSG_LEN(0), array.array("i").itemsize * 2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2450 for n in values:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2451 ret = socket.CMSG_LEN(n)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2452 # This is how recvmsg() calculates the data size
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2453 self.assertEqual(ret - socket.CMSG_LEN(0), n)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2454 self.assertLessEqual(ret, self.socklen_t_limit)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2455
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2456 self.assertRaises(OverflowError, socket.CMSG_LEN, -1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2457 # sendmsg() shares code with these functions, and requires
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2458 # that it reject values over the limit.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2459 self.assertRaises(OverflowError, socket.CMSG_LEN, toobig)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2460 self.assertRaises(OverflowError, socket.CMSG_LEN, sys.maxsize)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2461
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2462 @requireAttrs(socket, "CMSG_SPACE")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2463 def testCMSG_SPACE(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2464 # Test CMSG_SPACE() with various valid and invalid values,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2465 # checking the assumptions used by sendmsg().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2466 toobig = self.socklen_t_limit - socket.CMSG_SPACE(1) + 1
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2467 values = list(range(257)) + list(range(toobig - 257, toobig))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2468
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2469 last = socket.CMSG_SPACE(0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2470 # struct cmsghdr has at least three members, two of which are ints
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2471 self.assertGreater(last, array.array("i").itemsize * 2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2472 for n in values:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2473 ret = socket.CMSG_SPACE(n)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2474 self.assertGreaterEqual(ret, last)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2475 self.assertGreaterEqual(ret, socket.CMSG_LEN(n))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2476 self.assertGreaterEqual(ret, n + socket.CMSG_LEN(0))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2477 self.assertLessEqual(ret, self.socklen_t_limit)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2478 last = ret
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2479
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2480 self.assertRaises(OverflowError, socket.CMSG_SPACE, -1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2481 # sendmsg() shares code with these functions, and requires
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2482 # that it reject values over the limit.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2483 self.assertRaises(OverflowError, socket.CMSG_SPACE, toobig)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2484 self.assertRaises(OverflowError, socket.CMSG_SPACE, sys.maxsize)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2485
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2486
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2487 class SCMRightsTest(SendrecvmsgServerTimeoutBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2488 # Tests for file descriptor passing on Unix-domain sockets.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2489
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2490 # Invalid file descriptor value that's unlikely to evaluate to a
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2491 # real FD even if one of its bytes is replaced with a different
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2492 # value (which shouldn't actually happen).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2493 badfd = -0x5555
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2494
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2495 def newFDs(self, n):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2496 # Return a list of n file descriptors for newly-created files
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2497 # containing their list indices as ASCII numbers.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2498 fds = []
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2499 for i in range(n):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2500 fd, path = tempfile.mkstemp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2501 self.addCleanup(os.unlink, path)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2502 self.addCleanup(os.close, fd)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2503 os.write(fd, str(i).encode())
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2504 fds.append(fd)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2505 return fds
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2506
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2507 def checkFDs(self, fds):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2508 # Check that the file descriptors in the given list contain
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2509 # their correct list indices as ASCII numbers.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2510 for n, fd in enumerate(fds):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2511 os.lseek(fd, 0, os.SEEK_SET)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2512 self.assertEqual(os.read(fd, 1024), str(n).encode())
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2513
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2514 def registerRecvmsgResult(self, result):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2515 self.addCleanup(self.closeRecvmsgFDs, result)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2516
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2517 def closeRecvmsgFDs(self, recvmsg_result):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2518 # Close all file descriptors specified in the ancillary data
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2519 # of the given return value from recvmsg() or recvmsg_into().
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2520 for cmsg_level, cmsg_type, cmsg_data in recvmsg_result[1]:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2521 if (cmsg_level == socket.SOL_SOCKET and
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2522 cmsg_type == socket.SCM_RIGHTS):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2523 fds = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2524 fds.frombytes(cmsg_data[:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2525 len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2526 for fd in fds:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2527 os.close(fd)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2528
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2529 def createAndSendFDs(self, n):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2530 # Send n new file descriptors created by newFDs() to the
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2531 # server, with the constant MSG as the non-ancillary data.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2532 self.assertEqual(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2533 self.sendmsgToServer([MSG],
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2534 [(socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2535 socket.SCM_RIGHTS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2536 array.array("i", self.newFDs(n)))]),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2537 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2538
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2539 def checkRecvmsgFDs(self, numfds, result, maxcmsgs=1, ignoreflags=0):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2540 # Check that constant MSG was received with numfds file
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2541 # descriptors in a maximum of maxcmsgs control messages (which
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2542 # must contain only complete integers). By default, check
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2543 # that MSG_CTRUNC is unset, but ignore any flags in
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2544 # ignoreflags.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2545 msg, ancdata, flags, addr = result
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2546 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2547 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2548 self.checkFlags(flags, eor=True, checkunset=socket.MSG_CTRUNC,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2549 ignore=ignoreflags)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2550
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2551 self.assertIsInstance(ancdata, list)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2552 self.assertLessEqual(len(ancdata), maxcmsgs)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2553 fds = array.array("i")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2554 for item in ancdata:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2555 self.assertIsInstance(item, tuple)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2556 cmsg_level, cmsg_type, cmsg_data = item
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2557 self.assertEqual(cmsg_level, socket.SOL_SOCKET)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2558 self.assertEqual(cmsg_type, socket.SCM_RIGHTS)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2559 self.assertIsInstance(cmsg_data, bytes)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2560 self.assertEqual(len(cmsg_data) % SIZEOF_INT, 0)
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2561 fds.frombytes(cmsg_data)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2562
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2563 self.assertEqual(len(fds), numfds)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2564 self.checkFDs(fds)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2565
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2566 def testFDPassSimple(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2567 # Pass a single FD (array read from bytes object).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2568 self.checkRecvmsgFDs(1, self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2569 len(MSG), 10240))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2570
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2571 def _testFDPassSimple(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2572 self.assertEqual(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2573 self.sendmsgToServer(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2574 [MSG],
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2575 [(socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2576 socket.SCM_RIGHTS,
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2577 array.array("i", self.newFDs(1)).tobytes())]),
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2578 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2579
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2580 def testMultipleFDPass(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2581 # Pass multiple FDs in a single array.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2582 self.checkRecvmsgFDs(4, self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2583 len(MSG), 10240))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2584
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2585 def _testMultipleFDPass(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2586 self.createAndSendFDs(4)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2587
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2588 @requireAttrs(socket, "CMSG_SPACE")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2589 def testFDPassCMSG_SPACE(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2590 # Test using CMSG_SPACE() to calculate ancillary buffer size.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2591 self.checkRecvmsgFDs(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2592 4, self.doRecvmsg(self.serv_sock, len(MSG),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2593 socket.CMSG_SPACE(4 * SIZEOF_INT)))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2594
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2595 @testFDPassCMSG_SPACE.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2596 def _testFDPassCMSG_SPACE(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2597 self.createAndSendFDs(4)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2598
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2599 def testFDPassCMSG_LEN(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2600 # Test using CMSG_LEN() to calculate ancillary buffer size.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2601 self.checkRecvmsgFDs(1,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2602 self.doRecvmsg(self.serv_sock, len(MSG),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2603 socket.CMSG_LEN(4 * SIZEOF_INT)),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2604 # RFC 3542 says implementations may set
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2605 # MSG_CTRUNC if there isn't enough space
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2606 # for trailing padding.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2607 ignoreflags=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2608
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2609 def _testFDPassCMSG_LEN(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2610 self.createAndSendFDs(1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2611
72400
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
2612 # Issue #12958: The following test has problems on Mac OS X
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
2613 @support.anticipate_failure(sys.platform == "darwin")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2614 @requireAttrs(socket, "CMSG_SPACE")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2615 def testFDPassSeparate(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2616 # Pass two FDs in two separate arrays. Arrays may be combined
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2617 # into a single control message by the OS.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2618 self.checkRecvmsgFDs(2,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2619 self.doRecvmsg(self.serv_sock, len(MSG), 10240),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2620 maxcmsgs=2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2621
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2622 @testFDPassSeparate.client_skip
72400
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
2623 @support.anticipate_failure(sys.platform == "darwin")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2624 def _testFDPassSeparate(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2625 fd0, fd1 = self.newFDs(2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2626 self.assertEqual(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2627 self.sendmsgToServer([MSG], [(socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2628 socket.SCM_RIGHTS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2629 array.array("i", [fd0])),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2630 (socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2631 socket.SCM_RIGHTS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2632 array.array("i", [fd1]))]),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2633 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2634
72400
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
2635 # Issue #12958: The following test has problems on Mac OS X
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
2636 @support.anticipate_failure(sys.platform == "darwin")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2637 @requireAttrs(socket, "CMSG_SPACE")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2638 def testFDPassSeparateMinSpace(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2639 # Pass two FDs in two separate arrays, receiving them into the
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2640 # minimum space for two arrays.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2641 self.checkRecvmsgFDs(2,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2642 self.doRecvmsg(self.serv_sock, len(MSG),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2643 socket.CMSG_SPACE(SIZEOF_INT) +
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2644 socket.CMSG_LEN(SIZEOF_INT)),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2645 maxcmsgs=2, ignoreflags=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2646
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2647 @testFDPassSeparateMinSpace.client_skip
72400
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
2648 @support.anticipate_failure(sys.platform == "darwin")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2649 def _testFDPassSeparateMinSpace(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2650 fd0, fd1 = self.newFDs(2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2651 self.assertEqual(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2652 self.sendmsgToServer([MSG], [(socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2653 socket.SCM_RIGHTS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2654 array.array("i", [fd0])),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2655 (socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2656 socket.SCM_RIGHTS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2657 array.array("i", [fd1]))]),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2658 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2659
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2660 def sendAncillaryIfPossible(self, msg, ancdata):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2661 # Try to send msg and ancdata to server, but if the system
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2662 # call fails, just send msg with no ancillary data.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2663 try:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2664 nbytes = self.sendmsgToServer([msg], ancdata)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2665 except OSError as e:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2666 # Check that it was the system call that failed
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2667 self.assertIsInstance(e.errno, int)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2668 nbytes = self.sendmsgToServer([msg])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2669 self.assertEqual(nbytes, len(msg))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2670
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2671 def testFDPassEmpty(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2672 # Try to pass an empty FD array. Can receive either no array
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2673 # or an empty array.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2674 self.checkRecvmsgFDs(0, self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2675 len(MSG), 10240),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2676 ignoreflags=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2677
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2678 def _testFDPassEmpty(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2679 self.sendAncillaryIfPossible(MSG, [(socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2680 socket.SCM_RIGHTS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2681 b"")])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2682
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2683 def testFDPassPartialInt(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2684 # Try to pass a truncated FD array.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2685 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2686 len(MSG), 10240)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2687 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2688 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2689 self.checkFlags(flags, eor=True, ignore=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2690 self.assertLessEqual(len(ancdata), 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2691 for cmsg_level, cmsg_type, cmsg_data in ancdata:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2692 self.assertEqual(cmsg_level, socket.SOL_SOCKET)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2693 self.assertEqual(cmsg_type, socket.SCM_RIGHTS)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2694 self.assertLess(len(cmsg_data), SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2695
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2696 def _testFDPassPartialInt(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2697 self.sendAncillaryIfPossible(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2698 MSG,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2699 [(socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2700 socket.SCM_RIGHTS,
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2701 array.array("i", [self.badfd]).tobytes()[:-1])])
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2702
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2703 @requireAttrs(socket, "CMSG_SPACE")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2704 def testFDPassPartialIntInMiddle(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2705 # Try to pass two FD arrays, the first of which is truncated.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2706 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2707 len(MSG), 10240)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2708 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2709 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2710 self.checkFlags(flags, eor=True, ignore=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2711 self.assertLessEqual(len(ancdata), 2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2712 fds = array.array("i")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2713 # Arrays may have been combined in a single control message
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2714 for cmsg_level, cmsg_type, cmsg_data in ancdata:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2715 self.assertEqual(cmsg_level, socket.SOL_SOCKET)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2716 self.assertEqual(cmsg_type, socket.SCM_RIGHTS)
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2717 fds.frombytes(cmsg_data[:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2718 len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2719 self.assertLessEqual(len(fds), 2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2720 self.checkFDs(fds)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2721
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2722 @testFDPassPartialIntInMiddle.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2723 def _testFDPassPartialIntInMiddle(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2724 fd0, fd1 = self.newFDs(2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2725 self.sendAncillaryIfPossible(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2726 MSG,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2727 [(socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2728 socket.SCM_RIGHTS,
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2729 array.array("i", [fd0, self.badfd]).tobytes()[:-1]),
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2730 (socket.SOL_SOCKET,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2731 socket.SCM_RIGHTS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2732 array.array("i", [fd1]))])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2733
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2734 def checkTruncatedHeader(self, result, ignoreflags=0):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2735 # Check that no ancillary data items are returned when data is
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2736 # truncated inside the cmsghdr structure.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2737 msg, ancdata, flags, addr = result
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2738 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2739 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2740 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2741 self.checkFlags(flags, eor=True, checkset=socket.MSG_CTRUNC,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2742 ignore=ignoreflags)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2743
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2744 def testCmsgTruncNoBufSize(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2745 # Check that no ancillary data is received when no buffer size
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2746 # is specified.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2747 self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG)),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2748 # BSD seems to set MSG_CTRUNC only
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2749 # if an item has been partially
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2750 # received.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2751 ignoreflags=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2752
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2753 def _testCmsgTruncNoBufSize(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2754 self.createAndSendFDs(1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2755
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2756 def testCmsgTrunc0(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2757 # Check that no ancillary data is received when buffer size is 0.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2758 self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG), 0),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2759 ignoreflags=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2760
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2761 def _testCmsgTrunc0(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2762 self.createAndSendFDs(1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2763
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2764 # Check that no ancillary data is returned for various non-zero
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2765 # (but still too small) buffer sizes.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2766
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2767 def testCmsgTrunc1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2768 self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG), 1))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2769
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2770 def _testCmsgTrunc1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2771 self.createAndSendFDs(1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2772
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2773 def testCmsgTrunc2Int(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2774 # The cmsghdr structure has at least three members, two of
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2775 # which are ints, so we still shouldn't see any ancillary
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2776 # data.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2777 self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2778 SIZEOF_INT * 2))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2779
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2780 def _testCmsgTrunc2Int(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2781 self.createAndSendFDs(1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2782
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2783 def testCmsgTruncLen0Minus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2784 self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2785 socket.CMSG_LEN(0) - 1))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2786
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2787 def _testCmsgTruncLen0Minus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2788 self.createAndSendFDs(1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2789
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2790 # The following tests try to truncate the control message in the
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2791 # middle of the FD array.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2792
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2793 def checkTruncatedArray(self, ancbuf, maxdata, mindata=0):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2794 # Check that file descriptor data is truncated to between
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2795 # mindata and maxdata bytes when received with buffer size
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2796 # ancbuf, and that any complete file descriptor numbers are
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2797 # valid.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2798 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2799 len(MSG), ancbuf)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2800 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2801 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2802 self.checkFlags(flags, eor=True, checkset=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2803
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2804 if mindata == 0 and ancdata == []:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2805 return
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2806 self.assertEqual(len(ancdata), 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2807 cmsg_level, cmsg_type, cmsg_data = ancdata[0]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2808 self.assertEqual(cmsg_level, socket.SOL_SOCKET)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2809 self.assertEqual(cmsg_type, socket.SCM_RIGHTS)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2810 self.assertGreaterEqual(len(cmsg_data), mindata)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2811 self.assertLessEqual(len(cmsg_data), maxdata)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2812 fds = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2813 fds.frombytes(cmsg_data[:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2814 len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2815 self.checkFDs(fds)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2816
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2817 def testCmsgTruncLen0(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2818 self.checkTruncatedArray(ancbuf=socket.CMSG_LEN(0), maxdata=0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2819
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2820 def _testCmsgTruncLen0(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2821 self.createAndSendFDs(1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2822
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2823 def testCmsgTruncLen0Plus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2824 self.checkTruncatedArray(ancbuf=socket.CMSG_LEN(0) + 1, maxdata=1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2825
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2826 def _testCmsgTruncLen0Plus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2827 self.createAndSendFDs(2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2828
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2829 def testCmsgTruncLen1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2830 self.checkTruncatedArray(ancbuf=socket.CMSG_LEN(SIZEOF_INT),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2831 maxdata=SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2832
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2833 def _testCmsgTruncLen1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2834 self.createAndSendFDs(2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2835
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2836 def testCmsgTruncLen2Minus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2837 self.checkTruncatedArray(ancbuf=socket.CMSG_LEN(2 * SIZEOF_INT) - 1,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2838 maxdata=(2 * SIZEOF_INT) - 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2839
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2840 def _testCmsgTruncLen2Minus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2841 self.createAndSendFDs(2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2842
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2843
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2844 class RFC3542AncillaryTest(SendrecvmsgServerTimeoutBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2845 # Test sendmsg() and recvmsg[_into]() using the ancillary data
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2846 # features of the RFC 3542 Advanced Sockets API for IPv6.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2847 # Currently we can only handle certain data items (e.g. traffic
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2848 # class, hop limit, MTU discovery and fragmentation settings)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2849 # without resorting to unportable means such as the struct module,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2850 # but the tests here are aimed at testing the ancillary data
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2851 # handling in sendmsg() and recvmsg() rather than the IPv6 API
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2852 # itself.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2853
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2854 # Test value to use when setting hop limit of packet
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2855 hop_limit = 2
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2856
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2857 # Test value to use when setting traffic class of packet.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2858 # -1 means "use kernel default".
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2859 traffic_class = -1
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2860
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2861 def ancillaryMapping(self, ancdata):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2862 # Given ancillary data list ancdata, return a mapping from
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2863 # pairs (cmsg_level, cmsg_type) to corresponding cmsg_data.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2864 # Check that no (level, type) pair appears more than once.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2865 d = {}
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2866 for cmsg_level, cmsg_type, cmsg_data in ancdata:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2867 self.assertNotIn((cmsg_level, cmsg_type), d)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2868 d[(cmsg_level, cmsg_type)] = cmsg_data
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2869 return d
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2870
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2871 def checkHopLimit(self, ancbufsize, maxhop=255, ignoreflags=0):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2872 # Receive hop limit into ancbufsize bytes of ancillary data
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2873 # space. Check that data is MSG, ancillary data is not
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2874 # truncated (but ignore any flags in ignoreflags), and hop
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2875 # limit is between 0 and maxhop inclusive.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2876 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2877 socket.IPV6_RECVHOPLIMIT, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2878 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2879 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2880 len(MSG), ancbufsize)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2881
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2882 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2883 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2884 self.checkFlags(flags, eor=True, checkunset=socket.MSG_CTRUNC,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2885 ignore=ignoreflags)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2886
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2887 self.assertEqual(len(ancdata), 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2888 self.assertIsInstance(ancdata[0], tuple)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2889 cmsg_level, cmsg_type, cmsg_data = ancdata[0]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2890 self.assertEqual(cmsg_level, socket.IPPROTO_IPV6)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2891 self.assertEqual(cmsg_type, socket.IPV6_HOPLIMIT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2892 self.assertIsInstance(cmsg_data, bytes)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2893 self.assertEqual(len(cmsg_data), SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2894 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2895 a.frombytes(cmsg_data)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2896 self.assertGreaterEqual(a[0], 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2897 self.assertLessEqual(a[0], maxhop)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2898
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2899 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2900 def testRecvHopLimit(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2901 # Test receiving the packet hop limit as ancillary data.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2902 self.checkHopLimit(ancbufsize=10240)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2903
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2904 @testRecvHopLimit.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2905 def _testRecvHopLimit(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2906 # Need to wait until server has asked to receive ancillary
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2907 # data, as implementations are not required to buffer it
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2908 # otherwise.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2909 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2910 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2911
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2912 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2913 def testRecvHopLimitCMSG_SPACE(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2914 # Test receiving hop limit, using CMSG_SPACE to calculate buffer size.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2915 self.checkHopLimit(ancbufsize=socket.CMSG_SPACE(SIZEOF_INT))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2916
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2917 @testRecvHopLimitCMSG_SPACE.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2918 def _testRecvHopLimitCMSG_SPACE(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2919 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2920 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2921
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2922 # Could test receiving into buffer sized using CMSG_LEN, but RFC
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2923 # 3542 says portable applications must provide space for trailing
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2924 # padding. Implementations may set MSG_CTRUNC if there isn't
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2925 # enough space for the padding.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2926
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2927 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2928 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2929 def testSetHopLimit(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2930 # Test setting hop limit on outgoing packet and receiving it
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2931 # at the other end.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2932 self.checkHopLimit(ancbufsize=10240, maxhop=self.hop_limit)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2933
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2934 @testSetHopLimit.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2935 def _testSetHopLimit(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2936 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2937 self.assertEqual(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2938 self.sendmsgToServer([MSG],
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2939 [(socket.IPPROTO_IPV6, socket.IPV6_HOPLIMIT,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2940 array.array("i", [self.hop_limit]))]),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2941 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2942
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2943 def checkTrafficClassAndHopLimit(self, ancbufsize, maxhop=255,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2944 ignoreflags=0):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2945 # Receive traffic class and hop limit into ancbufsize bytes of
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2946 # ancillary data space. Check that data is MSG, ancillary
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2947 # data is not truncated (but ignore any flags in ignoreflags),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2948 # and traffic class and hop limit are in range (hop limit no
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2949 # more than maxhop).
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2950 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2951 socket.IPV6_RECVHOPLIMIT, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2952 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2953 socket.IPV6_RECVTCLASS, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2954 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2955 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2956 len(MSG), ancbufsize)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2957
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2958 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2959 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2960 self.checkFlags(flags, eor=True, checkunset=socket.MSG_CTRUNC,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2961 ignore=ignoreflags)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2962 self.assertEqual(len(ancdata), 2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2963 ancmap = self.ancillaryMapping(ancdata)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2964
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2965 tcdata = ancmap[(socket.IPPROTO_IPV6, socket.IPV6_TCLASS)]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2966 self.assertEqual(len(tcdata), SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2967 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2968 a.frombytes(tcdata)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2969 self.assertGreaterEqual(a[0], 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2970 self.assertLessEqual(a[0], 255)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2971
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2972 hldata = ancmap[(socket.IPPROTO_IPV6, socket.IPV6_HOPLIMIT)]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2973 self.assertEqual(len(hldata), SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2974 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2975 a.frombytes(hldata)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2976 self.assertGreaterEqual(a[0], 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2977 self.assertLessEqual(a[0], maxhop)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2978
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2979 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2980 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2981 def testRecvTrafficClassAndHopLimit(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2982 # Test receiving traffic class and hop limit as ancillary data.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2983 self.checkTrafficClassAndHopLimit(ancbufsize=10240)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2984
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2985 @testRecvTrafficClassAndHopLimit.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2986 def _testRecvTrafficClassAndHopLimit(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2987 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2988 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2989
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2990 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2991 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2992 def testRecvTrafficClassAndHopLimitCMSG_SPACE(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2993 # Test receiving traffic class and hop limit, using
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2994 # CMSG_SPACE() to calculate buffer size.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2995 self.checkTrafficClassAndHopLimit(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2996 ancbufsize=socket.CMSG_SPACE(SIZEOF_INT) * 2)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2997
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2998 @testRecvTrafficClassAndHopLimitCMSG_SPACE.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2999 def _testRecvTrafficClassAndHopLimitCMSG_SPACE(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3000 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3001 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3002
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3003 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3004 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3005 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3006 def testSetTrafficClassAndHopLimit(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3007 # Test setting traffic class and hop limit on outgoing packet,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3008 # and receiving them at the other end.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3009 self.checkTrafficClassAndHopLimit(ancbufsize=10240,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3010 maxhop=self.hop_limit)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3011
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3012 @testSetTrafficClassAndHopLimit.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3013 def _testSetTrafficClassAndHopLimit(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3014 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3015 self.assertEqual(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3016 self.sendmsgToServer([MSG],
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3017 [(socket.IPPROTO_IPV6, socket.IPV6_TCLASS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3018 array.array("i", [self.traffic_class])),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3019 (socket.IPPROTO_IPV6, socket.IPV6_HOPLIMIT,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3020 array.array("i", [self.hop_limit]))]),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3021 len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3022
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3023 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3024 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3025 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3026 def testOddCmsgSize(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3027 # Try to send ancillary data with first item one byte too
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3028 # long. Fall back to sending with correct size if this fails,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3029 # and check that second item was handled correctly.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3030 self.checkTrafficClassAndHopLimit(ancbufsize=10240,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3031 maxhop=self.hop_limit)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3032
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3033 @testOddCmsgSize.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3034 def _testOddCmsgSize(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3035 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3036 try:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3037 nbytes = self.sendmsgToServer(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3038 [MSG],
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3039 [(socket.IPPROTO_IPV6, socket.IPV6_TCLASS,
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
3040 array.array("i", [self.traffic_class]).tobytes() + b"\x00"),
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3041 (socket.IPPROTO_IPV6, socket.IPV6_HOPLIMIT,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3042 array.array("i", [self.hop_limit]))])
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3043 except OSError as e:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3044 self.assertIsInstance(e.errno, int)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3045 nbytes = self.sendmsgToServer(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3046 [MSG],
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3047 [(socket.IPPROTO_IPV6, socket.IPV6_TCLASS,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3048 array.array("i", [self.traffic_class])),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3049 (socket.IPPROTO_IPV6, socket.IPV6_HOPLIMIT,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3050 array.array("i", [self.hop_limit]))])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3051 self.assertEqual(nbytes, len(MSG))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3052
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3053 # Tests for proper handling of truncated ancillary data
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3054
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3055 def checkHopLimitTruncatedHeader(self, ancbufsize, ignoreflags=0):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3056 # Receive hop limit into ancbufsize bytes of ancillary data
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3057 # space, which should be too small to contain the ancillary
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3058 # data header (if ancbufsize is None, pass no second argument
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3059 # to recvmsg()). Check that data is MSG, MSG_CTRUNC is set
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3060 # (unless included in ignoreflags), and no ancillary data is
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3061 # returned.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3062 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3063 socket.IPV6_RECVHOPLIMIT, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3064 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3065 args = () if ancbufsize is None else (ancbufsize,)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3066 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3067 len(MSG), *args)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3068
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3069 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3070 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3071 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3072 self.checkFlags(flags, eor=True, checkset=socket.MSG_CTRUNC,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3073 ignore=ignoreflags)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3074
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3075 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3076 def testCmsgTruncNoBufSize(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3077 # Check that no ancillary data is received when no ancillary
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3078 # buffer size is provided.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3079 self.checkHopLimitTruncatedHeader(ancbufsize=None,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3080 # BSD seems to set
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3081 # MSG_CTRUNC only if an item
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3082 # has been partially
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3083 # received.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3084 ignoreflags=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3085
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3086 @testCmsgTruncNoBufSize.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3087 def _testCmsgTruncNoBufSize(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3088 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3089 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3090
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3091 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3092 def testSingleCmsgTrunc0(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3093 # Check that no ancillary data is received when ancillary
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3094 # buffer size is zero.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3095 self.checkHopLimitTruncatedHeader(ancbufsize=0,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3096 ignoreflags=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3097
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3098 @testSingleCmsgTrunc0.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3099 def _testSingleCmsgTrunc0(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3100 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3101 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3102
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3103 # Check that no ancillary data is returned for various non-zero
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3104 # (but still too small) buffer sizes.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3105
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3106 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3107 def testSingleCmsgTrunc1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3108 self.checkHopLimitTruncatedHeader(ancbufsize=1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3109
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3110 @testSingleCmsgTrunc1.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3111 def _testSingleCmsgTrunc1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3112 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3113 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3114
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3115 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3116 def testSingleCmsgTrunc2Int(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3117 self.checkHopLimitTruncatedHeader(ancbufsize=2 * SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3118
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3119 @testSingleCmsgTrunc2Int.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3120 def _testSingleCmsgTrunc2Int(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3121 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3122 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3123
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3124 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3125 def testSingleCmsgTruncLen0Minus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3126 self.checkHopLimitTruncatedHeader(ancbufsize=socket.CMSG_LEN(0) - 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3127
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3128 @testSingleCmsgTruncLen0Minus1.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3129 def _testSingleCmsgTruncLen0Minus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3130 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3131 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3132
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3133 @requireAttrs(socket, "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3134 def testSingleCmsgTruncInData(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3135 # Test truncation of a control message inside its associated
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3136 # data. The message may be returned with its data truncated,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3137 # or not returned at all.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3138 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3139 socket.IPV6_RECVHOPLIMIT, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3140 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3141 msg, ancdata, flags, addr = self.doRecvmsg(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3142 self.serv_sock, len(MSG), socket.CMSG_LEN(SIZEOF_INT) - 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3143
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3144 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3145 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3146 self.checkFlags(flags, eor=True, checkset=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3147
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3148 self.assertLessEqual(len(ancdata), 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3149 if ancdata:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3150 cmsg_level, cmsg_type, cmsg_data = ancdata[0]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3151 self.assertEqual(cmsg_level, socket.IPPROTO_IPV6)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3152 self.assertEqual(cmsg_type, socket.IPV6_HOPLIMIT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3153 self.assertLess(len(cmsg_data), SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3154
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3155 @testSingleCmsgTruncInData.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3156 def _testSingleCmsgTruncInData(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3157 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3158 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3159
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3160 def checkTruncatedSecondHeader(self, ancbufsize, ignoreflags=0):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3161 # Receive traffic class and hop limit into ancbufsize bytes of
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3162 # ancillary data space, which should be large enough to
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3163 # contain the first item, but too small to contain the header
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3164 # of the second. Check that data is MSG, MSG_CTRUNC is set
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3165 # (unless included in ignoreflags), and only one ancillary
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3166 # data item is returned.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3167 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3168 socket.IPV6_RECVHOPLIMIT, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3169 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3170 socket.IPV6_RECVTCLASS, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3171 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3172 msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3173 len(MSG), ancbufsize)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3174
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3175 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3176 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3177 self.checkFlags(flags, eor=True, checkset=socket.MSG_CTRUNC,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3178 ignore=ignoreflags)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3179
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3180 self.assertEqual(len(ancdata), 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3181 cmsg_level, cmsg_type, cmsg_data = ancdata[0]
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3182 self.assertEqual(cmsg_level, socket.IPPROTO_IPV6)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3183 self.assertIn(cmsg_type, {socket.IPV6_TCLASS, socket.IPV6_HOPLIMIT})
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3184 self.assertEqual(len(cmsg_data), SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3185 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
3186 a.frombytes(cmsg_data)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3187 self.assertGreaterEqual(a[0], 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3188 self.assertLessEqual(a[0], 255)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3189
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3190 # Try the above test with various buffer sizes.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3191
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3192 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3193 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3194 def testSecondCmsgTrunc0(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3195 self.checkTruncatedSecondHeader(socket.CMSG_SPACE(SIZEOF_INT),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3196 ignoreflags=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3197
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3198 @testSecondCmsgTrunc0.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3199 def _testSecondCmsgTrunc0(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3200 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3201 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3202
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3203 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3204 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3205 def testSecondCmsgTrunc1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3206 self.checkTruncatedSecondHeader(socket.CMSG_SPACE(SIZEOF_INT) + 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3207
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3208 @testSecondCmsgTrunc1.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3209 def _testSecondCmsgTrunc1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3210 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3211 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3212
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3213 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3214 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3215 def testSecondCmsgTrunc2Int(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3216 self.checkTruncatedSecondHeader(socket.CMSG_SPACE(SIZEOF_INT) +
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3217 2 * SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3218
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3219 @testSecondCmsgTrunc2Int.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3220 def _testSecondCmsgTrunc2Int(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3221 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3222 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3223
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3224 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3225 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3226 def testSecondCmsgTruncLen0Minus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3227 self.checkTruncatedSecondHeader(socket.CMSG_SPACE(SIZEOF_INT) +
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3228 socket.CMSG_LEN(0) - 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3229
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3230 @testSecondCmsgTruncLen0Minus1.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3231 def _testSecondCmsgTruncLen0Minus1(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3232 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3233 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3234
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3235 @requireAttrs(socket, "CMSG_SPACE", "IPV6_RECVHOPLIMIT", "IPV6_HOPLIMIT",
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3236 "IPV6_RECVTCLASS", "IPV6_TCLASS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3237 def testSecomdCmsgTruncInData(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3238 # Test truncation of the second of two control messages inside
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3239 # its associated data.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3240 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3241 socket.IPV6_RECVHOPLIMIT, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3242 self.serv_sock.setsockopt(socket.IPPROTO_IPV6,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3243 socket.IPV6_RECVTCLASS, 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3244 self.misc_event.set()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3245 msg, ancdata, flags, addr = self.doRecvmsg(
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3246 self.serv_sock, len(MSG),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3247 socket.CMSG_SPACE(SIZEOF_INT) + socket.CMSG_LEN(SIZEOF_INT) - 1)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3248
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3249 self.assertEqual(msg, MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3250 self.checkRecvmsgAddress(addr, self.cli_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3251 self.checkFlags(flags, eor=True, checkset=socket.MSG_CTRUNC)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3252
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3253 cmsg_types = {socket.IPV6_TCLASS, socket.IPV6_HOPLIMIT}
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3254
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3255 cmsg_level, cmsg_type, cmsg_data = ancdata.pop(0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3256 self.assertEqual(cmsg_level, socket.IPPROTO_IPV6)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3257 cmsg_types.remove(cmsg_type)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3258 self.assertEqual(len(cmsg_data), SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3259 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
3260 a.frombytes(cmsg_data)
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3261 self.assertGreaterEqual(a[0], 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3262 self.assertLessEqual(a[0], 255)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3263
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3264 if ancdata:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3265 cmsg_level, cmsg_type, cmsg_data = ancdata.pop(0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3266 self.assertEqual(cmsg_level, socket.IPPROTO_IPV6)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3267 cmsg_types.remove(cmsg_type)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3268 self.assertLess(len(cmsg_data), SIZEOF_INT)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3269
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3270 self.assertEqual(ancdata, [])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3271
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3272 @testSecomdCmsgTruncInData.client_skip
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3273 def _testSecomdCmsgTruncInData(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3274 self.assertTrue(self.misc_event.wait(timeout=self.fail_timeout))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3275 self.sendToServer(MSG)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3276
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3277
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3278 # Derive concrete test classes for different socket types.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3279
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3280 class SendrecvmsgUDPTestBase(SendrecvmsgDgramFlagsBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3281 SendrecvmsgConnectionlessBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3282 ThreadedSocketTestMixin, UDPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3283 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3284
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3285 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3286 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3287 class SendmsgUDPTest(SendmsgConnectionlessTests, SendrecvmsgUDPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3288 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3289
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3290 @requireAttrs(socket.socket, "recvmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3291 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3292 class RecvmsgUDPTest(RecvmsgTests, SendrecvmsgUDPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3293 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3294
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3295 @requireAttrs(socket.socket, "recvmsg_into")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3296 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3297 class RecvmsgIntoUDPTest(RecvmsgIntoTests, SendrecvmsgUDPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3298 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3299
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3300
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3301 class SendrecvmsgUDP6TestBase(SendrecvmsgDgramFlagsBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3302 SendrecvmsgConnectionlessBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3303 ThreadedSocketTestMixin, UDP6TestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3304 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3305
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3306 @requireAttrs(socket.socket, "sendmsg")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3307 @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3308 @requireSocket("AF_INET6", "SOCK_DGRAM")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3309 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3310 class SendmsgUDP6Test(SendmsgConnectionlessTests, SendrecvmsgUDP6TestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3311 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3312
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3313 @requireAttrs(socket.socket, "recvmsg")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3314 @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3315 @requireSocket("AF_INET6", "SOCK_DGRAM")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3316 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3317 class RecvmsgUDP6Test(RecvmsgTests, SendrecvmsgUDP6TestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3318 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3319
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3320 @requireAttrs(socket.socket, "recvmsg_into")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3321 @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3322 @requireSocket("AF_INET6", "SOCK_DGRAM")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3323 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3324 class RecvmsgIntoUDP6Test(RecvmsgIntoTests, SendrecvmsgUDP6TestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3325 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3326
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3327 @requireAttrs(socket.socket, "recvmsg")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3328 @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3329 @requireAttrs(socket, "IPPROTO_IPV6")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3330 @requireSocket("AF_INET6", "SOCK_DGRAM")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3331 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3332 class RecvmsgRFC3542AncillaryUDP6Test(RFC3542AncillaryTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3333 SendrecvmsgUDP6TestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3334 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3335
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3336 @requireAttrs(socket.socket, "recvmsg_into")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3337 @unittest.skipUnless(support.IPV6_ENABLED, 'IPv6 required for this test.')
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3338 @requireAttrs(socket, "IPPROTO_IPV6")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3339 @requireSocket("AF_INET6", "SOCK_DGRAM")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3340 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3341 class RecvmsgIntoRFC3542AncillaryUDP6Test(RecvmsgIntoMixin,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3342 RFC3542AncillaryTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3343 SendrecvmsgUDP6TestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3344 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3345
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3346
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3347 class SendrecvmsgTCPTestBase(SendrecvmsgConnectedBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3348 ConnectedStreamTestMixin, TCPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3349 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3350
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3351 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3352 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3353 class SendmsgTCPTest(SendmsgStreamTests, SendrecvmsgTCPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3354 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3355
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3356 @requireAttrs(socket.socket, "recvmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3357 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3358 class RecvmsgTCPTest(RecvmsgTests, RecvmsgGenericStreamTests,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3359 SendrecvmsgTCPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3360 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3361
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3362 @requireAttrs(socket.socket, "recvmsg_into")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3363 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3364 class RecvmsgIntoTCPTest(RecvmsgIntoTests, RecvmsgGenericStreamTests,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3365 SendrecvmsgTCPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3366 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3367
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3368
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3369 class SendrecvmsgSCTPStreamTestBase(SendrecvmsgSCTPFlagsBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3370 SendrecvmsgConnectedBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3371 ConnectedStreamTestMixin, SCTPStreamBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3372 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3373
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3374 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3375 @requireSocket("AF_INET", "SOCK_STREAM", "IPPROTO_SCTP")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3376 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3377 class SendmsgSCTPStreamTest(SendmsgStreamTests, SendrecvmsgSCTPStreamTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3378 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3379
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3380 @requireAttrs(socket.socket, "recvmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3381 @requireSocket("AF_INET", "SOCK_STREAM", "IPPROTO_SCTP")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3382 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3383 class RecvmsgSCTPStreamTest(RecvmsgTests, RecvmsgGenericStreamTests,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3384 SendrecvmsgSCTPStreamTestBase):
80889
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3385
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3386 def testRecvmsgEOF(self):
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3387 try:
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3388 super(RecvmsgSCTPStreamTest, self).testRecvmsgEOF()
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3389 except OSError as e:
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3390 if e.errno != errno.ENOTCONN:
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3391 raise
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3392 self.skipTest("sporadic ENOTCONN (kernel issue?) - see issue #13876")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3393
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3394 @requireAttrs(socket.socket, "recvmsg_into")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3395 @requireSocket("AF_INET", "SOCK_STREAM", "IPPROTO_SCTP")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3396 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3397 class RecvmsgIntoSCTPStreamTest(RecvmsgIntoTests, RecvmsgGenericStreamTests,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3398 SendrecvmsgSCTPStreamTestBase):
80941
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3399
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3400 def testRecvmsgEOF(self):
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3401 try:
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3402 super(RecvmsgIntoSCTPStreamTest, self).testRecvmsgEOF()
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3403 except OSError as e:
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3404 if e.errno != errno.ENOTCONN:
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3405 raise
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3406 self.skipTest("sporadic ENOTCONN (kernel issue?) - see issue #13876")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3407
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3408
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3409 class SendrecvmsgUnixStreamTestBase(SendrecvmsgConnectedBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3410 ConnectedStreamTestMixin, UnixStreamBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3411 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3412
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3413 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3414 @requireAttrs(socket, "AF_UNIX")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3415 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3416 class SendmsgUnixStreamTest(SendmsgStreamTests, SendrecvmsgUnixStreamTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3417 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3418
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3419 @requireAttrs(socket.socket, "recvmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3420 @requireAttrs(socket, "AF_UNIX")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3421 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3422 class RecvmsgUnixStreamTest(RecvmsgTests, RecvmsgGenericStreamTests,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3423 SendrecvmsgUnixStreamTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3424 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3425
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3426 @requireAttrs(socket.socket, "recvmsg_into")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3427 @requireAttrs(socket, "AF_UNIX")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3428 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3429 class RecvmsgIntoUnixStreamTest(RecvmsgIntoTests, RecvmsgGenericStreamTests,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3430 SendrecvmsgUnixStreamTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3431 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3432
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3433 @requireAttrs(socket.socket, "sendmsg", "recvmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3434 @requireAttrs(socket, "AF_UNIX", "SOL_SOCKET", "SCM_RIGHTS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3435 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3436 class RecvmsgSCMRightsStreamTest(SCMRightsTest, SendrecvmsgUnixStreamTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3437 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3438
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3439 @requireAttrs(socket.socket, "sendmsg", "recvmsg_into")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3440 @requireAttrs(socket, "AF_UNIX", "SOL_SOCKET", "SCM_RIGHTS")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3441 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3442 class RecvmsgIntoSCMRightsStreamTest(RecvmsgIntoMixin, SCMRightsTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3443 SendrecvmsgUnixStreamTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3444 pass
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3445
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3446
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3447 # Test interrupting the interruptible send/receive methods with a
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3448 # signal when a timeout is set. These tests avoid having multiple
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3449 # threads alive during the test so that the OS cannot deliver the
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3450 # signal to the wrong one.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3451
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3452 class InterruptedTimeoutBase(unittest.TestCase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3453 # Base class for interrupted send/receive tests. Installs an
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3454 # empty handler for SIGALRM and removes it on teardown, along with
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3455 # any scheduled alarms.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3456
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3457 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3458 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3459 orig_alrm_handler = signal.signal(signal.SIGALRM,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3460 lambda signum, frame: None)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3461 self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3462 self.addCleanup(self.setAlarm, 0)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3463
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3464 # Timeout for socket operations
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3465 timeout = 4.0
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3466
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3467 # Provide setAlarm() method to schedule delivery of SIGALRM after
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3468 # given number of seconds, or cancel it if zero, and an
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3469 # appropriate time value to use. Use setitimer() if available.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3470 if hasattr(signal, "setitimer"):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3471 alarm_time = 0.05
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3472
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3473 def setAlarm(self, seconds):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3474 signal.setitimer(signal.ITIMER_REAL, seconds)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3475 else:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3476 # Old systems may deliver the alarm up to one second early
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3477 alarm_time = 2
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3478
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3479 def setAlarm(self, seconds):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3480 signal.alarm(seconds)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3481
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3482
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3483 # Require siginterrupt() in order to ensure that system calls are
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3484 # interrupted by default.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3485 @requireAttrs(signal, "siginterrupt")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3486 @unittest.skipUnless(hasattr(signal, "alarm") or hasattr(signal, "setitimer"),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3487 "Don't have signal.alarm or signal.setitimer")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3488 class InterruptedRecvTimeoutTest(InterruptedTimeoutBase, UDPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3489 # Test interrupting the recv*() methods with signals when a
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3490 # timeout is set.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3491
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3492 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3493 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3494 self.serv.settimeout(self.timeout)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3495
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3496 def checkInterruptedRecv(self, func, *args, **kwargs):
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3497 # Check that func(*args, **kwargs) raises OSError with an
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3498 # errno of EINTR when interrupted by a signal.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3499 self.setAlarm(self.alarm_time)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3500 with self.assertRaises(OSError) as cm:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3501 func(*args, **kwargs)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3502 self.assertNotIsInstance(cm.exception, socket.timeout)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3503 self.assertEqual(cm.exception.errno, errno.EINTR)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3504
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3505 def testInterruptedRecvTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3506 self.checkInterruptedRecv(self.serv.recv, 1024)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3507
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3508 def testInterruptedRecvIntoTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3509 self.checkInterruptedRecv(self.serv.recv_into, bytearray(1024))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3510
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3511 def testInterruptedRecvfromTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3512 self.checkInterruptedRecv(self.serv.recvfrom, 1024)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3513
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3514 def testInterruptedRecvfromIntoTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3515 self.checkInterruptedRecv(self.serv.recvfrom_into, bytearray(1024))
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3516
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3517 @requireAttrs(socket.socket, "recvmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3518 def testInterruptedRecvmsgTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3519 self.checkInterruptedRecv(self.serv.recvmsg, 1024)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3520
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3521 @requireAttrs(socket.socket, "recvmsg_into")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3522 def testInterruptedRecvmsgIntoTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3523 self.checkInterruptedRecv(self.serv.recvmsg_into, [bytearray(1024)])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3524
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3525
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3526 # Require siginterrupt() in order to ensure that system calls are
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3527 # interrupted by default.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3528 @requireAttrs(signal, "siginterrupt")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3529 @unittest.skipUnless(hasattr(signal, "alarm") or hasattr(signal, "setitimer"),
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3530 "Don't have signal.alarm or signal.setitimer")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3531 @unittest.skipUnless(thread, 'Threading required for this test.')
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3532 class InterruptedSendTimeoutTest(InterruptedTimeoutBase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3533 ThreadSafeCleanupTestCase,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3534 SocketListeningTestMixin, TCPTestBase):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3535 # Test interrupting the interruptible send*() methods with signals
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3536 # when a timeout is set.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3537
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3538 def setUp(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3539 super().setUp()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3540 self.serv_conn = self.newSocket()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3541 self.addCleanup(self.serv_conn.close)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3542 # Use a thread to complete the connection, but wait for it to
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3543 # terminate before running the test, so that there is only one
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3544 # thread to accept the signal.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3545 cli_thread = threading.Thread(target=self.doConnect)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3546 cli_thread.start()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3547 self.cli_conn, addr = self.serv.accept()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3548 self.addCleanup(self.cli_conn.close)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3549 cli_thread.join()
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3550 self.serv_conn.settimeout(self.timeout)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3551
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3552 def doConnect(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3553 self.serv_conn.connect(self.serv_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3554
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3555 def checkInterruptedSend(self, func, *args, **kwargs):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3556 # Check that func(*args, **kwargs), run in a loop, raises
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3557 # OSError with an errno of EINTR when interrupted by a
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3558 # signal.
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3559 with self.assertRaises(OSError) as cm:
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3560 while True:
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3561 self.setAlarm(self.alarm_time)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3562 func(*args, **kwargs)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3563 self.assertNotIsInstance(cm.exception, socket.timeout)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3564 self.assertEqual(cm.exception.errno, errno.EINTR)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3565
72400
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
3566 # Issue #12958: The following tests have problems on Mac OS X
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
3567 @support.anticipate_failure(sys.platform == "darwin")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3568 def testInterruptedSendTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3569 self.checkInterruptedSend(self.serv_conn.send, b"a"*512)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3570
72400
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
3571 @support.anticipate_failure(sys.platform == "darwin")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3572 def testInterruptedSendtoTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3573 # Passing an actual address here as Python's wrapper for
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3574 # sendto() doesn't allow passing a zero-length one; POSIX
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3575 # requires that the address is ignored since the socket is
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3576 # connection-mode, however.
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3577 self.checkInterruptedSend(self.serv_conn.sendto, b"a"*512,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3578 self.serv_addr)
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3579
72400
a4e4facad164 Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents: 72034
diff changeset
3580 @support.anticipate_failure(sys.platform == "darwin")
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3581 @requireAttrs(socket.socket, "sendmsg")
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3582 def testInterruptedSendmsgTimeout(self):
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3583 self.checkInterruptedSend(self.serv_conn.sendmsg, [b"a"*512])
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3584
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3585
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
3586 @unittest.skipUnless(thread, 'Threading required for this test.')
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3587 class TCPCloserTest(ThreadedTCPSocketTest):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3588
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3589 def testClose(self):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3590 conn, addr = self.serv.accept()
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3591 conn.close()
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3592
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3593 sd = self.cli
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3594 read, write, err = select.select([sd], [], [], 1.0)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3595 self.assertEqual(read, [sd])
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
3596 self.assertEqual(sd.recv(1), b'')
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3597
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3598 # Calling close() many times should be safe.
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3599 conn.close()
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3600 conn.close()
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3601
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3602 def _testClose(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
3603 self.cli.connect((HOST, self.port))
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3604 time.sleep(1.0)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3605
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
3606 @unittest.skipUnless(thread, 'Threading required for this test.')
33063
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3607 class BasicSocketPairTest(SocketPairTest):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3608
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3609 def __init__(self, methodName='runTest'):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3610 SocketPairTest.__init__(self, methodName=methodName)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3611
64754
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3612 def _check_defaults(self, sock):
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3613 self.assertIsInstance(sock, socket.socket)
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3614 if hasattr(socket, 'AF_UNIX'):
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3615 self.assertEqual(sock.family, socket.AF_UNIX)
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3616 else:
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3617 self.assertEqual(sock.family, socket.AF_INET)
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3618 self.assertEqual(sock.type, socket.SOCK_STREAM)
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3619 self.assertEqual(sock.proto, 0)
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3620
64747
534853ba8cd3 Issue #1552: socket.socketpair() now returns regular socket.socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 64593
diff changeset
3621 def _testDefaults(self):
64754
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3622 self._check_defaults(self.cli)
64747
534853ba8cd3 Issue #1552: socket.socketpair() now returns regular socket.socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 64593
diff changeset
3623
534853ba8cd3 Issue #1552: socket.socketpair() now returns regular socket.socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 64593
diff changeset
3624 def testDefaults(self):
64754
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3625 self._check_defaults(self.serv)
64747
534853ba8cd3 Issue #1552: socket.socketpair() now returns regular socket.socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 64593
diff changeset
3626
33063
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3627 def testRecv(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3628 msg = self.serv.recv(1024)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3629 self.assertEqual(msg, MSG)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3630
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3631 def _testRecv(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3632 self.cli.send(MSG)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3633
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3634 def testSend(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3635 self.serv.send(MSG)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3636
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3637 def _testSend(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3638 msg = self.cli.recv(1024)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3639 self.assertEqual(msg, MSG)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3640
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
3641 @unittest.skipUnless(thread, 'Threading required for this test.')
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3642 class NonBlockingTCPTests(ThreadedTCPSocketTest):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3643
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3644 def __init__(self, methodName='runTest'):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3645 ThreadedTCPSocketTest.__init__(self, methodName=methodName)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3646
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3647 def testSetBlocking(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3648 # Testing whether set blocking works
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3649 self.serv.setblocking(True)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3650 self.assertIsNone(self.serv.gettimeout())
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3651 self.serv.setblocking(False)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3652 self.assertEqual(self.serv.gettimeout(), 0.0)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3653 start = time.time()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3654 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3655 self.serv.accept()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3656 except OSError:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3657 pass
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3658 end = time.time()
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
3659 self.assertTrue((end - start) < 1.0, "Error setting non-blocking mode.")
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3660 # Issue 15989
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3661 if _testcapi.UINT_MAX < _testcapi.ULONG_MAX:
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3662 self.serv.setblocking(_testcapi.UINT_MAX + 1)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3663 self.assertIsNone(self.serv.gettimeout())
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3664
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3665 def _testSetBlocking(self):
17208
c8817a9bbbdd Make socket.getservbyname test optional on socket module having that
Barry Warsaw <barry@python.org>
parents: 16519
diff changeset
3666 pass
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
3667
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3668 if hasattr(socket, "SOCK_NONBLOCK"):
70612
277bbe6cae53 Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents: 70324
diff changeset
3669 @support.requires_linux_version(2, 6, 28)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3670 def testInitNonBlocking(self):
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3671 # reinit server socket
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3672 self.serv.close()
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3673 self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM |
65606
a30e75820b8d Also guard other SOCK_NONBLOCK test
Antoine Pitrou <solipsis@pitrou.net>
parents: 65604
diff changeset
3674 socket.SOCK_NONBLOCK)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3675 self.port = support.bind_port(self.serv)
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3676 self.serv.listen(1)
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3677 # actual testing
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3678 start = time.time()
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3679 try:
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3680 self.serv.accept()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3681 except OSError:
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3682 pass
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3683 end = time.time()
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3684 self.assertTrue((end - start) < 1.0, "Error creating with non-blocking mode.")
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3685
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3686 def _testInitNonBlocking(self):
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3687 pass
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3688
67382
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3689 def testInheritFlags(self):
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3690 # Issue #7995: when calling accept() on a listening socket with a
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3691 # timeout, the resulting socket should not be non-blocking.
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3692 self.serv.settimeout(10)
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3693 try:
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3694 conn, addr = self.serv.accept()
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3695 message = conn.recv(len(MSG))
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3696 finally:
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3697 conn.close()
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3698 self.serv.settimeout(None)
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3699
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3700 def _testInheritFlags(self):
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3701 time.sleep(0.1)
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3702 self.cli.connect((HOST, self.port))
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3703 time.sleep(0.5)
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3704 self.cli.send(MSG)
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3705
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3706 def testAccept(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3707 # Testing non-blocking accept
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3708 self.serv.setblocking(0)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3709 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3710 conn, addr = self.serv.accept()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3711 except OSError:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3712 pass
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3713 else:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3714 self.fail("Error trying to do non-blocking accept.")
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3715 read, write, err = select.select([self.serv], [], [])
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3716 if self.serv in read:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3717 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
3718 conn.close()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3719 else:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3720 self.fail("Error trying to do accept after select.")
20853
77bb2ae067c2 Correct getnameinfo refcounting and tuple parsing. Fixes #476648.
Martin v. Löwis <martin@v.loewis.de>
parents: 20733
diff changeset
3721
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3722 def _testAccept(self):
24318
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
3723 time.sleep(0.1)
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
3724 self.cli.connect((HOST, self.port))
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3725
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3726 def testConnect(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3727 # Testing non-blocking connect
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3728 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
3729 conn.close()
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
3730
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3731 def _testConnect(self):
23818
8a0a14e3725e Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents: 23815
diff changeset
3732 self.cli.settimeout(10)
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
3733 self.cli.connect((HOST, self.port))
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3734
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3735 def testRecv(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3736 # Testing non-blocking recv
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3737 conn, addr = self.serv.accept()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3738 conn.setblocking(0)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3739 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3740 msg = conn.recv(len(MSG))
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3741 except OSError:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3742 pass
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3743 else:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3744 self.fail("Error trying to do non-blocking recv.")
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3745 read, write, err = select.select([conn], [], [])
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3746 if conn in read:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3747 msg = conn.recv(len(MSG))
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
3748 conn.close()
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
3749 self.assertEqual(msg, MSG)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3750 else:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3751 self.fail("Error during select call to non-blocking socket.")
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3752
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3753 def _testRecv(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
3754 self.cli.connect((HOST, self.port))
24318
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
3755 time.sleep(0.1)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3756 self.cli.send(MSG)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3757
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
3758 @unittest.skipUnless(thread, 'Threading required for this test.')
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3759 class FileObjectClassTestCase(SocketConnectedTest):
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3760 """Unit tests for the object returned by socket.makefile()
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3761
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3762 self.read_file is the io object returned by makefile() on
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3763 the client connection. You can read from this file to
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3764 get output from the server.
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3765
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3766 self.write_file is the io object returned by makefile() on the
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3767 server connection. You can write to this file to send output
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3768 to the client.
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3769 """
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 21315
diff changeset
3770
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
3771 bufsize = -1 # Use default buffer size
68142
be6c38d1817b Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents: 67382
diff changeset
3772 encoding = 'utf-8'
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3773 errors = 'strict'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3774 newline = None
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3775
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3776 read_mode = 'rb'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3777 read_msg = MSG
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3778 write_mode = 'wb'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3779 write_msg = MSG
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
3780
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3781 def __init__(self, methodName='runTest'):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3782 SocketConnectedTest.__init__(self, methodName=methodName)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3783
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3784 def setUp(self):
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
3785 self.evt1, self.evt2, self.serv_finished, self.cli_finished = [
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
3786 threading.Event() for i in range(4)]
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3787 SocketConnectedTest.setUp(self)
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3788 self.read_file = self.cli_conn.makefile(
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3789 self.read_mode, self.bufsize,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3790 encoding = self.encoding,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3791 errors = self.errors,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3792 newline = self.newline)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3793
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3794 def tearDown(self):
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
3795 self.serv_finished.set()
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3796 self.read_file.close()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3797 self.assertTrue(self.read_file.closed)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3798 self.read_file = None
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3799 SocketConnectedTest.tearDown(self)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3800
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3801 def clientSetUp(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3802 SocketConnectedTest.clientSetUp(self)
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3803 self.write_file = self.serv_conn.makefile(
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3804 self.write_mode, self.bufsize,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3805 encoding = self.encoding,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3806 errors = self.errors,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3807 newline = self.newline)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 21315
diff changeset
3808
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3809 def clientTearDown(self):
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
3810 self.cli_finished.set()
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3811 self.write_file.close()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3812 self.assertTrue(self.write_file.closed)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3813 self.write_file = None
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3814 SocketConnectedTest.clientTearDown(self)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3815
68032
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3816 def testReadAfterTimeout(self):
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3817 # Issue #7322: A file object must disallow further reads
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3818 # after a timeout has occurred.
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3819 self.cli_conn.settimeout(1)
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3820 self.read_file.read(3)
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3821 # First read raises a timeout
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3822 self.assertRaises(socket.timeout, self.read_file.read, 1)
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3823 # Second read is disallowed
81039
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80942
diff changeset
3824 with self.assertRaises(OSError) as ctx:
68032
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3825 self.read_file.read(1)
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3826 self.assertIn("cannot read from timed out object", str(ctx.exception))
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3827
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3828 def _testReadAfterTimeout(self):
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3829 self.write_file.write(self.write_msg[0:3])
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3830 self.write_file.flush()
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3831 self.serv_finished.wait()
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3832
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3833 def testSmallRead(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3834 # Performing small file read test
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3835 first_seg = self.read_file.read(len(self.read_msg)-3)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3836 second_seg = self.read_file.read(3)
23800
bf1555a92711 Remove some overly complicated ways to concatenate and repeat strings
Guido van Rossum <guido@python.org>
parents: 23799
diff changeset
3837 msg = first_seg + second_seg
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3838 self.assertEqual(msg, self.read_msg)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3839
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3840 def _testSmallRead(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3841 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3842 self.write_file.flush()
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 21315
diff changeset
3843
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3844 def testFullRead(self):
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3845 # read until EOF
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3846 msg = self.read_file.read()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3847 self.assertEqual(msg, self.read_msg)
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3848
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3849 def _testFullRead(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3850 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3851 self.write_file.close()
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3852
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3853 def testUnbufferedRead(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3854 # Performing unbuffered file read test
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3855 buf = type(self.read_msg)()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3856 while 1:
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3857 char = self.read_file.read(1)
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3858 if not char:
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3859 break
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3860 buf += char
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3861 self.assertEqual(buf, self.read_msg)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3862
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3863 def _testUnbufferedRead(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3864 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3865 self.write_file.flush()
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 21315
diff changeset
3866
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3867 def testReadline(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3868 # Performing file readline test
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3869 line = self.read_file.readline()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3870 self.assertEqual(line, self.read_msg)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3871
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3872 def _testReadline(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3873 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3874 self.write_file.flush()
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 21315
diff changeset
3875
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3876 def testCloseAfterMakefile(self):
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3877 # The file returned by makefile should keep the socket open.
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3878 self.cli_conn.close()
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3879 # read until EOF
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3880 msg = self.read_file.read()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3881 self.assertEqual(msg, self.read_msg)
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3882
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3883 def _testCloseAfterMakefile(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3884 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3885 self.write_file.flush()
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3886
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3887 def testMakefileAfterMakefileClose(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3888 self.read_file.close()
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3889 msg = self.cli_conn.recv(len(MSG))
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3890 if isinstance(self.read_msg, str):
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3891 msg = msg.decode()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3892 self.assertEqual(msg, self.read_msg)
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3893
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3894 def _testMakefileAfterMakefileClose(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3895 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3896 self.write_file.flush()
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3897
31833
a910b822b12c SF bug 924242: socket._fileobject._getclosed() returns wrong value
Tim Peters <tim.peters@gmail.com>
parents: 31503
diff changeset
3898 def testClosedAttr(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3899 self.assertTrue(not self.read_file.closed)
31833
a910b822b12c SF bug 924242: socket._fileobject._getclosed() returns wrong value
Tim Peters <tim.peters@gmail.com>
parents: 31503
diff changeset
3900
a910b822b12c SF bug 924242: socket._fileobject._getclosed() returns wrong value
Tim Peters <tim.peters@gmail.com>
parents: 31503
diff changeset
3901 def _testClosedAttr(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3902 self.assertTrue(not self.write_file.closed)
31833
a910b822b12c SF bug 924242: socket._fileobject._getclosed() returns wrong value
Tim Peters <tim.peters@gmail.com>
parents: 31503
diff changeset
3903
49782
5ffd67df8c9f Follow-up of r67300: correct a failure in socket.makefile().
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 48623
diff changeset
3904 def testAttributes(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3905 self.assertEqual(self.read_file.mode, self.read_mode)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3906 self.assertEqual(self.read_file.name, self.cli_conn.fileno())
49782
5ffd67df8c9f Follow-up of r67300: correct a failure in socket.makefile().
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 48623
diff changeset
3907
5ffd67df8c9f Follow-up of r67300: correct a failure in socket.makefile().
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 48623
diff changeset
3908 def _testAttributes(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3909 self.assertEqual(self.write_file.mode, self.write_mode)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3910 self.assertEqual(self.write_file.name, self.serv_conn.fileno())
49782
5ffd67df8c9f Follow-up of r67300: correct a failure in socket.makefile().
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 48623
diff changeset
3911
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3912 def testRealClose(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3913 self.read_file.close()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3914 self.assertRaises(ValueError, self.read_file.fileno)
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3915 self.cli_conn.close()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3916 self.assertRaises(OSError, self.cli_conn.getsockname)
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3917
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3918 def _testRealClose(self):
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3919 pass
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3920
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3921
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3922 class FileObjectInterruptedTestCase(unittest.TestCase):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3923 """Test that the file object correctly handles EINTR internally."""
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3924
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3925 class MockSocket(object):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3926 def __init__(self, recv_funcs=()):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3927 # A generator that returns callables that we'll call for each
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3928 # call to recv().
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3929 self._recv_step = iter(recv_funcs)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3930
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3931 def recv_into(self, buffer):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3932 data = next(self._recv_step)()
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3933 assert len(buffer) >= len(data)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3934 buffer[:len(data)] = data
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3935 return len(data)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3936
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3937 def _decref_socketios(self):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3938 pass
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3939
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3940 def _textiowrap_for_test(self, buffering=-1):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3941 raw = socket.SocketIO(self, "r")
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3942 if buffering < 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3943 buffering = io.DEFAULT_BUFFER_SIZE
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3944 if buffering == 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3945 return raw
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3946 buffer = io.BufferedReader(raw, buffering)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3947 text = io.TextIOWrapper(buffer, None, None)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3948 text.mode = "rb"
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3949 return text
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3950
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3951 @staticmethod
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3952 def _raise_eintr():
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3953 raise OSError(errno.EINTR, "interrupted")
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3954
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3955 def _textiowrap_mock_socket(self, mock, buffering=-1):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3956 raw = socket.SocketIO(mock, "r")
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3957 if buffering < 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3958 buffering = io.DEFAULT_BUFFER_SIZE
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3959 if buffering == 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3960 return raw
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3961 buffer = io.BufferedReader(raw, buffering)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3962 text = io.TextIOWrapper(buffer, None, None)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3963 text.mode = "rb"
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3964 return text
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3965
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3966 def _test_readline(self, size=-1, buffering=-1):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3967 mock_sock = self.MockSocket(recv_funcs=[
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3968 lambda : b"This is the first line\nAnd the sec",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3969 self._raise_eintr,
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3970 lambda : b"ond line is here\n",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3971 lambda : b"",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3972 lambda : b"", # XXX(gps): io library does an extra EOF read
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3973 ])
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3974 fo = mock_sock._textiowrap_for_test(buffering=buffering)
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66279
diff changeset
3975 self.assertEqual(fo.readline(size), "This is the first line\n")
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66279
diff changeset
3976 self.assertEqual(fo.readline(size), "And the second line is here\n")
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3977
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3978 def _test_read(self, size=-1, buffering=-1):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3979 mock_sock = self.MockSocket(recv_funcs=[
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3980 lambda : b"This is the first line\nAnd the sec",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3981 self._raise_eintr,
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3982 lambda : b"ond line is here\n",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3983 lambda : b"",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3984 lambda : b"", # XXX(gps): io library does an extra EOF read
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3985 ])
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3986 expecting = (b"This is the first line\n"
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3987 b"And the second line is here\n")
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3988 fo = mock_sock._textiowrap_for_test(buffering=buffering)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3989 if buffering == 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3990 data = b''
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3991 else:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3992 data = ''
68142
be6c38d1817b Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents: 67382
diff changeset
3993 expecting = expecting.decode('utf-8')
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3994 while len(data) != len(expecting):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3995 part = fo.read(size)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3996 if not part:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3997 break
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3998 data += part
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66279
diff changeset
3999 self.assertEqual(data, expecting)
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4000
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4001 def test_default(self):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4002 self._test_readline()
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4003 self._test_readline(size=100)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4004 self._test_read()
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4005 self._test_read(size=100)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4006
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4007 def test_with_1k_buffer(self):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4008 self._test_readline(buffering=1024)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4009 self._test_readline(size=100, buffering=1024)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4010 self._test_read(buffering=1024)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4011 self._test_read(size=100, buffering=1024)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4012
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4013 def _test_readline_no_buffer(self, size=-1):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4014 mock_sock = self.MockSocket(recv_funcs=[
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4015 lambda : b"a",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4016 lambda : b"\n",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4017 lambda : b"B",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4018 self._raise_eintr,
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4019 lambda : b"b",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4020 lambda : b"",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4021 ])
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4022 fo = mock_sock._textiowrap_for_test(buffering=0)
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66279
diff changeset
4023 self.assertEqual(fo.readline(size), b"a\n")
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66279
diff changeset
4024 self.assertEqual(fo.readline(size), b"Bb")
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4025
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4026 def test_no_buffer(self):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4027 self._test_readline_no_buffer()
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4028 self._test_readline_no_buffer(size=4)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4029 self._test_read(buffering=0)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4030 self._test_read(size=100, buffering=0)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4031
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4032
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4033 class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4034
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4035 """Repeat the tests from FileObjectClassTestCase with bufsize==0.
24674
3269bdd65988 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 24655
diff changeset
4036
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4037 In this case (and in this case only), it should be possible to
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4038 create a file object, read a line from it, create another file
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4039 object, read another line from it, without loss of data in the
47318
e1fcc3881cb6 Create http package. #2883.
Georg Brandl <georg@python.org>
parents: 47266
diff changeset
4040 first file object's buffer. Note that http.client relies on this
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4041 when reading multiple requests from the same socket."""
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4042
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4043 bufsize = 0 # Use unbuffered mode
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4044
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4045 def testUnbufferedReadline(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4046 # Read a line, create a new file object, read another line with it
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4047 line = self.read_file.readline() # first line
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4048 self.assertEqual(line, b"A. " + self.write_msg) # first line
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4049 self.read_file = self.cli_conn.makefile('rb', 0)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4050 line = self.read_file.readline() # second line
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4051 self.assertEqual(line, b"B. " + self.write_msg) # second line
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4052
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4053 def _testUnbufferedReadline(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4054 self.write_file.write(b"A. " + self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4055 self.write_file.write(b"B. " + self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4056 self.write_file.flush()
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4057
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4058 def testMakefileClose(self):
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4059 # The file returned by makefile should keep the socket open...
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4060 self.cli_conn.close()
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4061 msg = self.cli_conn.recv(1024)
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4062 self.assertEqual(msg, self.read_msg)
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4063 # ...until the file is itself closed
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4064 self.read_file.close()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4065 self.assertRaises(OSError, self.cli_conn.recv, 1024)
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4066
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4067 def _testMakefileClose(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4068 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4069 self.write_file.flush()
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4070
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4071 def testMakefileCloseSocketDestroy(self):
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4072 refcount_before = sys.getrefcount(self.cli_conn)
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4073 self.read_file.close()
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4074 refcount_after = sys.getrefcount(self.cli_conn)
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4075 self.assertEqual(refcount_before - 1, refcount_after)
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4076
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4077 def _testMakefileCloseSocketDestroy(self):
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4078 pass
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4079
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4080 # Non-blocking ops
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4081 # NOTE: to set `read_file` as non-blocking, we must call
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4082 # `cli_conn.setblocking` and vice-versa (see setUp / clientSetUp).
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4083
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4084 def testSmallReadNonBlocking(self):
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4085 self.cli_conn.setblocking(False)
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4086 self.assertEqual(self.read_file.readinto(bytearray(10)), None)
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4087 self.assertEqual(self.read_file.read(len(self.read_msg) - 3), None)
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4088 self.evt1.set()
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4089 self.evt2.wait(1.0)
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4090 first_seg = self.read_file.read(len(self.read_msg) - 3)
69122
68a319ef70fc Issue #11749: try to fix transient test_socket failure
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
4091 if first_seg is None:
68a319ef70fc Issue #11749: try to fix transient test_socket failure
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
4092 # Data not arrived (can happen under Windows), wait a bit
68a319ef70fc Issue #11749: try to fix transient test_socket failure
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
4093 time.sleep(0.5)
68a319ef70fc Issue #11749: try to fix transient test_socket failure
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
4094 first_seg = self.read_file.read(len(self.read_msg) - 3)
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4095 buf = bytearray(10)
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4096 n = self.read_file.readinto(buf)
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4097 self.assertEqual(n, 3)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4098 msg = first_seg + buf[:n]
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4099 self.assertEqual(msg, self.read_msg)
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4100 self.assertEqual(self.read_file.readinto(bytearray(16)), None)
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4101 self.assertEqual(self.read_file.read(1), None)
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4102
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4103 def _testSmallReadNonBlocking(self):
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4104 self.evt1.wait(1.0)
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4105 self.write_file.write(self.write_msg)
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4106 self.write_file.flush()
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4107 self.evt2.set()
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4108 # Avoid cloding the socket before the server test has finished,
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4109 # otherwise system recv() will return 0 instead of EWOULDBLOCK.
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4110 self.serv_finished.wait(5.0)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4111
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4112 def testWriteNonBlocking(self):
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4113 self.cli_finished.wait(5.0)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4114 # The client thread can't skip directly - the SkipTest exception
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4115 # would appear as a failure.
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4116 if self.serv_skipped:
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4117 self.skipTest(self.serv_skipped)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4118
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4119 def _testWriteNonBlocking(self):
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4120 self.serv_skipped = None
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4121 self.serv_conn.setblocking(False)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4122 # Try to saturate the socket buffer pipe with repeated large writes.
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4123 BIG = b"x" * (1024 ** 2)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4124 LIMIT = 10
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4125 # The first write() succeeds since a chunk of data can be buffered
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4126 n = self.write_file.write(BIG)
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4127 self.assertGreater(n, 0)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4128 for i in range(LIMIT):
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4129 n = self.write_file.write(BIG)
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4130 if n is None:
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4131 # Succeeded
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4132 break
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4133 self.assertGreater(n, 0)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4134 else:
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4135 # Let us know that this test didn't manage to establish
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4136 # the expected conditions. This is not a failure in itself but,
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4137 # if it happens repeatedly, the test should be fixed.
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4138 self.serv_skipped = "failed to saturate the socket buffer"
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4139
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4140
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4141 class LineBufferedFileObjectClassTestCase(FileObjectClassTestCase):
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4142
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4143 bufsize = 1 # Default-buffered for reading; line-buffered for writing
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4144
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4145
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4146 class SmallBufferedFileObjectClassTestCase(FileObjectClassTestCase):
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4147
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4148 bufsize = 2 # Exercise the buffering code
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4149
40737
6ebad2a6b990 Merged revisions 53451-53537 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
4150
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4151 class UnicodeReadFileObjectClassTestCase(FileObjectClassTestCase):
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4152 """Tests for socket.makefile() in text mode (rather than binary)"""
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4153
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4154 read_mode = 'r'
68142
be6c38d1817b Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents: 67382
diff changeset
4155 read_msg = MSG.decode('utf-8')
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4156 write_mode = 'wb'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4157 write_msg = MSG
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4158 newline = ''
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4159
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4160
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4161 class UnicodeWriteFileObjectClassTestCase(FileObjectClassTestCase):
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4162 """Tests for socket.makefile() in text mode (rather than binary)"""
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4163
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4164 read_mode = 'rb'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4165 read_msg = MSG
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4166 write_mode = 'w'
68142
be6c38d1817b Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents: 67382
diff changeset
4167 write_msg = MSG.decode('utf-8')
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4168 newline = ''
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4169
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4170
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4171 class UnicodeReadWriteFileObjectClassTestCase(FileObjectClassTestCase):
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4172 """Tests for socket.makefile() in text mode (rather than binary)"""
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4173
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4174 read_mode = 'r'
68142
be6c38d1817b Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents: 67382
diff changeset
4175 read_msg = MSG.decode('utf-8')
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4176 write_mode = 'w'
68142
be6c38d1817b Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents: 67382
diff changeset
4177 write_msg = MSG.decode('utf-8')
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4178 newline = ''
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4179
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4180
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4181 class NetworkConnectionTest(object):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4182 """Prove network connection."""
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
4183
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4184 def clientSetUp(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
4185 # We're inherited below by BasicTCPTest2, which also inherits
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
4186 # BasicTCPTest, which defines self.port referenced below.
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
4187 self.cli = socket.create_connection((HOST, self.port))
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4188 self.serv_conn = self.cli
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4189
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4190 class BasicTCPTest2(NetworkConnectionTest, BasicTCPTest):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4191 """Tests that NetworkConnection does not break existing TCP functionality.
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4192 """
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4193
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4194 class NetworkConnectionNoServer(unittest.TestCase):
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
4195
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4196 class MockSocket(socket.socket):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4197 def connect(self, *args):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4198 raise socket.timeout('timed out')
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4199
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4200 @contextlib.contextmanager
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4201 def mocked_socket_module(self):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4202 """Return a socket which times out on connect"""
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4203 old_socket = socket.socket
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4204 socket.socket = self.MockSocket
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4205 try:
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4206 yield
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4207 finally:
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4208 socket.socket = old_socket
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4209
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4210 def test_connect(self):
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
4211 port = support.find_unused_port()
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4212 cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4213 self.addCleanup(cli.close)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4214 with self.assertRaises(OSError) as cm:
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4215 cli.connect((HOST, port))
64534
b2f7cf9c6776 Issue #9792: In case of connection failure, socket.create_connection()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64442
diff changeset
4216 self.assertEqual(cm.exception.errno, errno.ECONNREFUSED)
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4217
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4218 def test_create_connection(self):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4219 # Issue #9792: errors raised by create_connection() should have
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4220 # a proper errno attribute.
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4221 port = support.find_unused_port()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4222 with self.assertRaises(OSError) as cm:
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4223 socket.create_connection((HOST, port))
79784
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4224
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4225 # Issue #16257: create_connection() calls getaddrinfo() against
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4226 # 'localhost'. This may result in an IPV6 addr being returned
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4227 # as well as an IPV4 one:
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4228 # >>> socket.getaddrinfo('localhost', port, 0, SOCK_STREAM)
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4229 # >>> [(2, 2, 0, '', ('127.0.0.1', 41230)),
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4230 # (26, 2, 0, '', ('::1', 41230, 0, 0))]
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4231 #
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4232 # create_connection() enumerates through all the addresses returned
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4233 # and if it doesn't successfully bind to any of them, it propagates
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4234 # the last exception it encountered.
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4235 #
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4236 # On Solaris, ENETUNREACH is returned in this circumstance instead
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4237 # of ECONNREFUSED. So, if that errno exists, add it to our list of
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4238 # expected errnos.
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4239 expected_errnos = [ errno.ECONNREFUSED, ]
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4240 if hasattr(errno, 'ENETUNREACH'):
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4241 expected_errnos.append(errno.ENETUNREACH)
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4242
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4243 self.assertIn(cm.exception.errno, expected_errnos)
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4244
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4245 def test_create_connection_timeout(self):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4246 # Issue #9792: create_connection() should not recast timeout errors
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4247 # as generic socket errors.
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4248 with self.mocked_socket_module():
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4249 with self.assertRaises(socket.timeout):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4250 socket.create_connection((HOST, 1234))
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4251
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4252
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
4253 @unittest.skipUnless(thread, 'Threading required for this test.')
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4254 class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4255
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4256 def __init__(self, methodName='runTest'):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4257 SocketTCPTest.__init__(self, methodName=methodName)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4258 ThreadableTest.__init__(self)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4259
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4260 def clientSetUp(self):
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56367
diff changeset
4261 self.source_port = support.find_unused_port()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4262
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4263 def clientTearDown(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4264 self.cli.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4265 self.cli = None
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4266 ThreadableTest.clientTearDown(self)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4267
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4268 def _justAccept(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4269 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4270 conn.close()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4271
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4272 testFamily = _justAccept
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4273 def _testFamily(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
4274 self.cli = socket.create_connection((HOST, self.port), timeout=30)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4275 self.addCleanup(self.cli.close)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4276 self.assertEqual(self.cli.family, 2)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4277
58136
ecc8a45894c9 Merged revisions 77286 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58114
diff changeset
4278 testSourceAddress = _justAccept
ecc8a45894c9 Merged revisions 77286 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58114
diff changeset
4279 def _testSourceAddress(self):
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56367
diff changeset
4280 self.cli = socket.create_connection((HOST, self.port), timeout=30,
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56367
diff changeset
4281 source_address=('', self.source_port))
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4282 self.addCleanup(self.cli.close)
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56367
diff changeset
4283 self.assertEqual(self.cli.getsockname()[1], self.source_port)
58136
ecc8a45894c9 Merged revisions 77286 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58114
diff changeset
4284 # The port number being used is sufficient to show that the bind()
ecc8a45894c9 Merged revisions 77286 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58114
diff changeset
4285 # call happened.
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56367
diff changeset
4286
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4287 testTimeoutDefault = _justAccept
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4288 def _testTimeoutDefault(self):
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4289 # passing no explicit timeout uses socket's global default
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
4290 self.assertTrue(socket.getdefaulttimeout() is None)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4291 socket.setdefaulttimeout(42)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4292 try:
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4293 self.cli = socket.create_connection((HOST, self.port))
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4294 self.addCleanup(self.cli.close)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4295 finally:
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4296 socket.setdefaulttimeout(None)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
4297 self.assertEqual(self.cli.gettimeout(), 42)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4298
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4299 testTimeoutNone = _justAccept
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4300 def _testTimeoutNone(self):
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4301 # None timeout means the same as sock.settimeout(None)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
4302 self.assertTrue(socket.getdefaulttimeout() is None)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4303 socket.setdefaulttimeout(30)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4304 try:
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4305 self.cli = socket.create_connection((HOST, self.port), timeout=None)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4306 self.addCleanup(self.cli.close)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4307 finally:
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4308 socket.setdefaulttimeout(None)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47318
diff changeset
4309 self.assertEqual(self.cli.gettimeout(), None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4310
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4311 testTimeoutValueNamed = _justAccept
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4312 def _testTimeoutValueNamed(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
4313 self.cli = socket.create_connection((HOST, self.port), timeout=30)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4314 self.assertEqual(self.cli.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4315
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4316 testTimeoutValueNonamed = _justAccept
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4317 def _testTimeoutValueNonamed(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
4318 self.cli = socket.create_connection((HOST, self.port), 30)
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4319 self.addCleanup(self.cli.close)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4320 self.assertEqual(self.cli.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4321
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
4322 @unittest.skipUnless(thread, 'Threading required for this test.')
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4323 class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4324
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4325 def __init__(self, methodName='runTest'):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4326 SocketTCPTest.__init__(self, methodName=methodName)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4327 ThreadableTest.__init__(self)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4328
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4329 def clientSetUp(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4330 pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4331
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4332 def clientTearDown(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4333 self.cli.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4334 self.cli = None
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4335 ThreadableTest.clientTearDown(self)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4336
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4337 def testInsideTimeout(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4338 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4339 self.addCleanup(conn.close)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4340 time.sleep(3)
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
4341 conn.send(b"done!")
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4342 testOutsideTimeout = testInsideTimeout
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4343
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4344 def _testInsideTimeout(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
4345 self.cli = sock = socket.create_connection((HOST, self.port))
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4346 data = sock.recv(5)
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
4347 self.assertEqual(data, b"done!")
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4348
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4349 def _testOutsideTimeout(self):
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46262
diff changeset
4350 self.cli = sock = socket.create_connection((HOST, self.port), timeout=1)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
4351 self.assertRaises(socket.timeout, lambda: sock.recv(5))
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4352
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4353
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4354 class TCPTimeoutTest(SocketTCPTest):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4355
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4356 def testTCPTimeout(self):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4357 def raise_timeout(*args, **kwargs):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4358 self.serv.settimeout(1.0)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4359 self.serv.accept()
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
4360 self.assertRaises(socket.timeout, raise_timeout,
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4361 "Error generating a timeout exception (TCP)")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4362
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4363 def testTimeoutZero(self):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4364 ok = False
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4365 try:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4366 self.serv.settimeout(0.0)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4367 foo = self.serv.accept()
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4368 except socket.timeout:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4369 self.fail("caught timeout instead of error (TCP)")
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4370 except OSError:
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4371 ok = True
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4372 except:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4373 self.fail("caught unexpected exception (TCP)")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4374 if not ok:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4375 self.fail("accept() returned success when we did not expect it")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4376
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4377 def testInterruptedTimeout(self):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4378 # XXX I don't know how to do this test on MSWindows or any other
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4379 # plaform that doesn't support signal.alarm() or os.kill(), though
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4380 # the bug should have existed on all platforms.
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4381 if not hasattr(signal, "alarm"):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4382 return # can only test on *nix
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4383 self.serv.settimeout(5.0) # must be longer than alarm
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4384 class Alarm(Exception):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4385 pass
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4386 def alarm_handler(signal, frame):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4387 raise Alarm
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4388 old_alarm = signal.signal(signal.SIGALRM, alarm_handler)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4389 try:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4390 signal.alarm(2) # POSIX allows alarm to be up to 1 second early
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4391 try:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4392 foo = self.serv.accept()
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4393 except socket.timeout:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4394 self.fail("caught timeout instead of Alarm")
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4395 except Alarm:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4396 pass
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4397 except:
46161
848160d10780 Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44782
diff changeset
4398 self.fail("caught other exception instead of Alarm:"
848160d10780 Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44782
diff changeset
4399 " %s(%s):\n%s" %
848160d10780 Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44782
diff changeset
4400 (sys.exc_info()[:2] + (traceback.format_exc(),)))
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4401 else:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4402 self.fail("nothing caught")
46161
848160d10780 Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44782
diff changeset
4403 finally:
848160d10780 Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44782
diff changeset
4404 signal.alarm(0) # shut off alarm
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4405 except Alarm:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4406 self.fail("got Alarm in wrong place")
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4407 finally:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4408 # no alarm can be pending. Safe to restore old handler.
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4409 signal.signal(signal.SIGALRM, old_alarm)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4410
73612
b410bcd300a1 #11112: Fix typo in a base class in test_socket.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 72586
diff changeset
4411 class UDPTimeoutTest(SocketUDPTest):
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4412
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4413 def testUDPTimeout(self):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4414 def raise_timeout(*args, **kwargs):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4415 self.serv.settimeout(1.0)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4416 self.serv.recv(1024)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
4417 self.assertRaises(socket.timeout, raise_timeout,
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4418 "Error generating a timeout exception (UDP)")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4419
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4420 def testTimeoutZero(self):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4421 ok = False
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4422 try:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4423 self.serv.settimeout(0.0)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4424 foo = self.serv.recv(1024)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4425 except socket.timeout:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4426 self.fail("caught timeout instead of error (UDP)")
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4427 except OSError:
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4428 ok = True
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4429 except:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4430 self.fail("caught unexpected exception (UDP)")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4431 if not ok:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4432 self.fail("recv() returned success when we did not expect it")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4433
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4434 class TestExceptions(unittest.TestCase):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4435
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4436 def testExceptionTree(self):
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4437 self.assertTrue(issubclass(OSError, Exception))
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4438 self.assertTrue(issubclass(socket.herror, OSError))
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4439 self.assertTrue(issubclass(socket.gaierror, OSError))
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4440 self.assertTrue(issubclass(socket.timeout, OSError))
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4441
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4442 class TestLinuxAbstractNamespace(unittest.TestCase):
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4443
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4444 UNIX_PATH_MAX = 108
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4445
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4446 def testLinuxAbstractNamespace(self):
42596
980308fbda29 Down with str8!
Guido van Rossum <guido@python.org>
parents: 42434
diff changeset
4447 address = b"\x00python-test-hello\x00\xff"
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4448 with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s1:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4449 s1.bind(address)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4450 s1.listen(1)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4451 with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s2:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4452 s2.connect(s1.getsockname())
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4453 with s1.accept()[0] as s3:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4454 self.assertEqual(s1.getsockname(), address)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4455 self.assertEqual(s2.getpeername(), address)
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4456
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4457 def testMaxName(self):
42596
980308fbda29 Down with str8!
Guido van Rossum <guido@python.org>
parents: 42434
diff changeset
4458 address = b"\x00" + b"h" * (self.UNIX_PATH_MAX - 1)
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4459 with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4460 s.bind(address)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4461 self.assertEqual(s.getsockname(), address)
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4462
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4463 def testNameOverflow(self):
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4464 address = "\x00" + "h" * self.UNIX_PATH_MAX
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4465 with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s:
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4466 self.assertRaises(OSError, s.bind, address)
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4467
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4468 def testStrName(self):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4469 # Check that an abstract name can be passed as a string.
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4470 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4471 try:
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4472 s.bind("\x00python\x00test\x00")
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4473 self.assertEqual(s.getsockname(), b"\x00python\x00test\x00")
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4474 finally:
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4475 s.close()
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4476
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4477 class TestUnixDomain(unittest.TestCase):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4478
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4479 def setUp(self):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4480 self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4481
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4482 def tearDown(self):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4483 self.sock.close()
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4484
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4485 def encoded(self, path):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4486 # Return the given path encoded in the file system encoding,
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4487 # or skip the test if this is not possible.
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4488 try:
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4489 return os.fsencode(path)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4490 except UnicodeEncodeError:
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4491 self.skipTest(
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4492 "Pathname {0!a} cannot be represented in file "
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4493 "system encoding {1!r}".format(
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4494 path, sys.getfilesystemencoding()))
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4495
73999
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4496 def bind(self, sock, path):
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4497 # Bind the socket
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4498 try:
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4499 sock.bind(path)
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4500 except OSError as e:
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4501 if str(e) == "AF_UNIX path too long":
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4502 self.skipTest(
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4503 "Pathname {0!a} is too long to serve as a AF_UNIX path"
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4504 .format(path))
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4505 else:
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4506 raise
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4507
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4508 def testStrAddr(self):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4509 # Test binding to and retrieving a normal string pathname.
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4510 path = os.path.abspath(support.TESTFN)
73999
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4511 self.bind(self.sock, path)
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4512 self.addCleanup(support.unlink, path)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4513 self.assertEqual(self.sock.getsockname(), path)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4514
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4515 def testBytesAddr(self):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4516 # Test binding to a bytes pathname.
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4517 path = os.path.abspath(support.TESTFN)
73999
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4518 self.bind(self.sock, self.encoded(path))
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4519 self.addCleanup(support.unlink, path)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4520 self.assertEqual(self.sock.getsockname(), path)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4521
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4522 def testSurrogateescapeBind(self):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4523 # Test binding to a valid non-ASCII pathname, with the
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4524 # non-ASCII bytes supplied using surrogateescape encoding.
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4525 path = os.path.abspath(support.TESTFN_UNICODE)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4526 b = self.encoded(path)
73999
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4527 self.bind(self.sock, b.decode("ascii", "surrogateescape"))
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4528 self.addCleanup(support.unlink, path)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4529 self.assertEqual(self.sock.getsockname(), path)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4530
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4531 def testUnencodableAddr(self):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4532 # Test binding to a pathname that cannot be encoded in the
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4533 # file system encoding.
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4534 if support.TESTFN_UNENCODABLE is None:
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4535 self.skipTest("No unencodable filename available")
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4536 path = os.path.abspath(support.TESTFN_UNENCODABLE)
73999
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4537 self.bind(self.sock, path)
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4538 self.addCleanup(support.unlink, path)
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4539 self.assertEqual(self.sock.getsockname(), path)
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4540
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
4541 @unittest.skipUnless(thread, 'Threading required for this test.')
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4542 class BufferIOTest(SocketConnectedTest):
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4543 """
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4544 Test the buffer versions of socket.recv() and socket.send().
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4545 """
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4546 def __init__(self, methodName='runTest'):
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4547 SocketConnectedTest.__init__(self, methodName=methodName)
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4548
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4549 def testRecvIntoArray(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4550 buf = bytearray(1024)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4551 nbytes = self.cli_conn.recv_into(buf)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4552 self.assertEqual(nbytes, len(MSG))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4553 msg = buf[:len(MSG)]
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4554 self.assertEqual(msg, MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4555
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4556 def _testRecvIntoArray(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4557 buf = bytes(MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4558 self.serv_conn.send(buf)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4559
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4560 def testRecvIntoBytearray(self):
48623
bf50085fbcd3 #2538: bytes objects can only provide read-only buffers
Antoine Pitrou <solipsis@pitrou.net>
parents: 47615
diff changeset
4561 buf = bytearray(1024)
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
4562 nbytes = self.cli_conn.recv_into(buf)
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4563 self.assertEqual(nbytes, len(MSG))
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
4564 msg = buf[:len(MSG)]
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4565 self.assertEqual(msg, MSG)
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4566
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4567 _testRecvIntoBytearray = _testRecvIntoArray
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4568
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4569 def testRecvIntoMemoryview(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4570 buf = bytearray(1024)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4571 nbytes = self.cli_conn.recv_into(memoryview(buf))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4572 self.assertEqual(nbytes, len(MSG))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4573 msg = buf[:len(MSG)]
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4574 self.assertEqual(msg, MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4575
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4576 _testRecvIntoMemoryview = _testRecvIntoArray
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4577
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4578 def testRecvFromIntoArray(self):
48623
bf50085fbcd3 #2538: bytes objects can only provide read-only buffers
Antoine Pitrou <solipsis@pitrou.net>
parents: 47615
diff changeset
4579 buf = bytearray(1024)
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
4580 nbytes, addr = self.cli_conn.recvfrom_into(buf)
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4581 self.assertEqual(nbytes, len(MSG))
41809
8e062e572ea4 Sockets facelift. APIs that could return binary data (e.g. aton() and
Guido van Rossum <guido@python.org>
parents: 41770
diff changeset
4582 msg = buf[:len(MSG)]
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4583 self.assertEqual(msg, MSG)
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4584
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4585 def _testRecvFromIntoArray(self):
41770
651fa2c9c2ab Make test_socket pass. There was an unchecked error when a Unicode
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
4586 buf = bytes(MSG)
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4587 self.serv_conn.send(buf)
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4588
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4589 def testRecvFromIntoBytearray(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4590 buf = bytearray(1024)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4591 nbytes, addr = self.cli_conn.recvfrom_into(buf)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4592 self.assertEqual(nbytes, len(MSG))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4593 msg = buf[:len(MSG)]
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4594 self.assertEqual(msg, MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4595
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4596 _testRecvFromIntoBytearray = _testRecvFromIntoArray
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4597
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4598 def testRecvFromIntoMemoryview(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4599 buf = bytearray(1024)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4600 nbytes, addr = self.cli_conn.recvfrom_into(memoryview(buf))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4601 self.assertEqual(nbytes, len(MSG))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4602 msg = buf[:len(MSG)]
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4603 self.assertEqual(msg, MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4604
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4605 _testRecvFromIntoMemoryview = _testRecvFromIntoArray
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4606
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4607
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4608 TIPC_STYPE = 2000
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4609 TIPC_LOWER = 200
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4610 TIPC_UPPER = 210
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4611
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4612 def isTipcAvailable():
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4613 """Check if the TIPC module is loaded
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4614
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4615 The TIPC module is not loaded automatically on Ubuntu and probably
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4616 other Linux distros.
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4617 """
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4618 if not hasattr(socket, "AF_TIPC"):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4619 return False
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4620 if not os.path.isfile("/proc/modules"):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4621 return False
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4622 with open("/proc/modules") as f:
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4623 for line in f:
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4624 if line.startswith("tipc "):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4625 return True
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
4626 if support.verbose:
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4627 print("TIPC module is not loaded, please 'sudo modprobe tipc'")
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4628 return False
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4629
72586
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4630 class TIPCTest(unittest.TestCase):
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4631 def testRDM(self):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4632 srv = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4633 cli = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
72586
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4634 self.addCleanup(srv.close)
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4635 self.addCleanup(cli.close)
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4636
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4637 srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4638 srvaddr = (socket.TIPC_ADDR_NAMESEQ, TIPC_STYPE,
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4639 TIPC_LOWER, TIPC_UPPER)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4640 srv.bind(srvaddr)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4641
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4642 sendaddr = (socket.TIPC_ADDR_NAME, TIPC_STYPE,
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4643 TIPC_LOWER + int((TIPC_UPPER - TIPC_LOWER) / 2), 0)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4644 cli.sendto(MSG, sendaddr)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4645
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4646 msg, recvaddr = srv.recvfrom(1024)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4647
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4648 self.assertEqual(cli.getsockname(), recvaddr)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4649 self.assertEqual(msg, MSG)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4650
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4651
72586
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4652 class TIPCThreadableTest(unittest.TestCase, ThreadableTest):
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4653 def __init__(self, methodName = 'runTest'):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4654 unittest.TestCase.__init__(self, methodName = methodName)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4655 ThreadableTest.__init__(self)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4656
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4657 def setUp(self):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4658 self.srv = socket.socket(socket.AF_TIPC, socket.SOCK_STREAM)
72586
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4659 self.addCleanup(self.srv.close)
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4660 self.srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4661 srvaddr = (socket.TIPC_ADDR_NAMESEQ, TIPC_STYPE,
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4662 TIPC_LOWER, TIPC_UPPER)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4663 self.srv.bind(srvaddr)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4664 self.srv.listen(5)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4665 self.serverExplicitReady()
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4666 self.conn, self.connaddr = self.srv.accept()
72586
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4667 self.addCleanup(self.conn.close)
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4668
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4669 def clientSetUp(self):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4670 # The is a hittable race between serverExplicitReady() and the
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4671 # accept() call; sleep a little while to avoid it, otherwise
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4672 # we could get an exception
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4673 time.sleep(0.1)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4674 self.cli = socket.socket(socket.AF_TIPC, socket.SOCK_STREAM)
72586
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4675 self.addCleanup(self.cli.close)
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4676 addr = (socket.TIPC_ADDR_NAME, TIPC_STYPE,
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4677 TIPC_LOWER + int((TIPC_UPPER - TIPC_LOWER) / 2), 0)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4678 self.cli.connect(addr)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4679 self.cliaddr = self.cli.getsockname()
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4680
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4681 def testStream(self):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4682 msg = self.conn.recv(1024)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4683 self.assertEqual(msg, MSG)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4684 self.assertEqual(self.cliaddr, self.connaddr)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4685
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4686 def _testStream(self):
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4687 self.cli.send(MSG)
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4688 self.cli.close()
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4689
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4690
64574
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4691 @unittest.skipUnless(thread, 'Threading required for this test.')
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4692 class ContextManagersTest(ThreadedTCPSocketTest):
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4693
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4694 def _testSocketClass(self):
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4695 # base test
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4696 with socket.socket() as sock:
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4697 self.assertFalse(sock._closed)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4698 self.assertTrue(sock._closed)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4699 # close inside with block
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4700 with socket.socket() as sock:
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4701 sock.close()
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4702 self.assertTrue(sock._closed)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4703 # exception inside with block
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4704 with socket.socket() as sock:
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4705 self.assertRaises(OSError, sock.sendall, b'foo')
64574
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4706 self.assertTrue(sock._closed)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4707
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4708 def testCreateConnectionBase(self):
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4709 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4710 self.addCleanup(conn.close)
64574
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4711 data = conn.recv(1024)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4712 conn.sendall(data)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4713
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4714 def _testCreateConnectionBase(self):
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4715 address = self.serv.getsockname()
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4716 with socket.create_connection(address) as sock:
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4717 self.assertFalse(sock._closed)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4718 sock.sendall(b'foo')
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4719 self.assertEqual(sock.recv(1024), b'foo')
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4720 self.assertTrue(sock._closed)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4721
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4722 def testCreateConnectionClose(self):
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4723 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4724 self.addCleanup(conn.close)
64574
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4725 data = conn.recv(1024)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4726 conn.sendall(data)
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4727
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4728 def _testCreateConnectionClose(self):
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4729 address = self.serv.getsockname()
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4730 with socket.create_connection(address) as sock:
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4731 sock.close()
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4732 self.assertTrue(sock._closed)
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
4733 self.assertRaises(OSError, sock.sendall, b'foo')
64574
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4734
65604
8d7f18332db7 Fix SOCK_CLOEXEC and SOCK_NONBLOCK tests on recent glibcs with old Linux kernels.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65416
diff changeset
4735
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4736 @unittest.skipUnless(hasattr(socket, "SOCK_CLOEXEC"),
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4737 "SOCK_CLOEXEC not defined")
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4738 @unittest.skipUnless(fcntl, "module fcntl not available")
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4739 class CloexecConstantTest(unittest.TestCase):
70612
277bbe6cae53 Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents: 70324
diff changeset
4740 @support.requires_linux_version(2, 6, 28)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4741 def test_SOCK_CLOEXEC(self):
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4742 with socket.socket(socket.AF_INET,
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4743 socket.SOCK_STREAM | socket.SOCK_CLOEXEC) as s:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4744 self.assertTrue(s.type & socket.SOCK_CLOEXEC)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4745 self.assertTrue(fcntl.fcntl(s, fcntl.F_GETFD) & fcntl.FD_CLOEXEC)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4746
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4747
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4748 @unittest.skipUnless(hasattr(socket, "SOCK_NONBLOCK"),
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4749 "SOCK_NONBLOCK not defined")
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4750 class NonblockConstantTest(unittest.TestCase):
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4751 def checkNonblock(self, s, nonblock=True, timeout=0.0):
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4752 if nonblock:
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4753 self.assertTrue(s.type & socket.SOCK_NONBLOCK)
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4754 self.assertEqual(s.gettimeout(), timeout)
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4755 else:
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4756 self.assertFalse(s.type & socket.SOCK_NONBLOCK)
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4757 self.assertEqual(s.gettimeout(), None)
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4758
70612
277bbe6cae53 Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents: 70324
diff changeset
4759 @support.requires_linux_version(2, 6, 28)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4760 def test_SOCK_NONBLOCK(self):
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4761 # a lot of it seems silly and redundant, but I wanted to test that
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4762 # changing back and forth worked ok
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4763 with socket.socket(socket.AF_INET,
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4764 socket.SOCK_STREAM | socket.SOCK_NONBLOCK) as s:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4765 self.checkNonblock(s)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4766 s.setblocking(1)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4767 self.checkNonblock(s, False)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4768 s.setblocking(0)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4769 self.checkNonblock(s)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4770 s.settimeout(None)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4771 self.checkNonblock(s, False)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4772 s.settimeout(2.0)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4773 self.checkNonblock(s, timeout=2.0)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4774 s.setblocking(1)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4775 self.checkNonblock(s, False)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4776 # defaulttimeout
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4777 t = socket.getdefaulttimeout()
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4778 socket.setdefaulttimeout(0.0)
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4779 with socket.socket() as s:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4780 self.checkNonblock(s)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4781 socket.setdefaulttimeout(None)
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4782 with socket.socket() as s:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4783 self.checkNonblock(s, False)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4784 socket.setdefaulttimeout(2.0)
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4785 with socket.socket() as s:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4786 self.checkNonblock(s, timeout=2.0)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4787 socket.setdefaulttimeout(None)
67299
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4788 with socket.socket() as s:
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4789 self.checkNonblock(s, False)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4790 socket.setdefaulttimeout(t)
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4791
64574
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4792
76150
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4793 @unittest.skipUnless(os.name == "nt", "Windows specific")
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4794 @unittest.skipUnless(multiprocessing, "need multiprocessing")
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4795 class TestSocketSharing(SocketTCPTest):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4796 # This must be classmethod and not staticmethod or multiprocessing
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4797 # won't be able to bootstrap it.
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4798 @classmethod
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4799 def remoteProcessServer(cls, q):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4800 # Recreate socket from shared data
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4801 sdata = q.get()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4802 message = q.get()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4803
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4804 s = socket.fromshare(sdata)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4805 s2, c = s.accept()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4806
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4807 # Send the message
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4808 s2.sendall(message)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4809 s2.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4810 s.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4811
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4812 def testShare(self):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4813 # Transfer the listening server socket to another process
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4814 # and service it from there.
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4815
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4816 # Create process:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4817 q = multiprocessing.Queue()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4818 p = multiprocessing.Process(target=self.remoteProcessServer, args=(q,))
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4819 p.start()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4820
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4821 # Get the shared socket data
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4822 data = self.serv.share(p.pid)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4823
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4824 # Pass the shared socket to the other process
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4825 addr = self.serv.getsockname()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4826 self.serv.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4827 q.put(data)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4828
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4829 # The data that the server will send us
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4830 message = b"slapmahfro"
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4831 q.put(message)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4832
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4833 # Connect
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4834 s = socket.create_connection(addr)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4835 # listen for the data
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4836 m = []
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4837 while True:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4838 data = s.recv(100)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4839 if not data:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4840 break
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4841 m.append(data)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4842 s.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4843 received = b"".join(m)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4844 self.assertEqual(received, message)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4845 p.join()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4846
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4847 def testShareLength(self):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4848 data = self.serv.share(os.getpid())
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4849 self.assertRaises(ValueError, socket.fromshare, data[:-1])
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4850 self.assertRaises(ValueError, socket.fromshare, data+b"foo")
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4851
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4852 def compareSockets(self, org, other):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4853 # socket sharing is expected to work only for blocking socket
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4854 # since the internal python timout value isn't transfered.
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4855 self.assertEqual(org.gettimeout(), None)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4856 self.assertEqual(org.gettimeout(), other.gettimeout())
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4857
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4858 self.assertEqual(org.family, other.family)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4859 self.assertEqual(org.type, other.type)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4860 # If the user specified "0" for proto, then
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4861 # internally windows will have picked the correct value.
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4862 # Python introspection on the socket however will still return
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4863 # 0. For the shared socket, the python value is recreated
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4864 # from the actual value, so it may not compare correctly.
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4865 if org.proto != 0:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4866 self.assertEqual(org.proto, other.proto)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4867
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4868 def testShareLocal(self):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4869 data = self.serv.share(os.getpid())
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4870 s = socket.fromshare(data)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4871 try:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4872 self.compareSockets(self.serv, s)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4873 finally:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4874 s.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4875
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4876 def testTypes(self):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4877 families = [socket.AF_INET, socket.AF_INET6]
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4878 types = [socket.SOCK_STREAM, socket.SOCK_DGRAM]
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4879 for f in families:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4880 for t in types:
76157
9b858096044e Issue #14310: Catch testing errors when trying to create unsupported socket
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76150
diff changeset
4881 try:
9b858096044e Issue #14310: Catch testing errors when trying to create unsupported socket
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76150
diff changeset
4882 source = socket.socket(f, t)
9b858096044e Issue #14310: Catch testing errors when trying to create unsupported socket
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76150
diff changeset
4883 except OSError:
9b858096044e Issue #14310: Catch testing errors when trying to create unsupported socket
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76150
diff changeset
4884 continue # This combination is not supported
76150
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4885 try:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4886 data = source.share(os.getpid())
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4887 shared = socket.fromshare(data)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4888 try:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4889 self.compareSockets(source, shared)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4890 finally:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4891 shared.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4892 finally:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4893 source.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4894
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4895
24451
22570e76cca1 Enable test_socket again, if only to prevent mistakes like Jeremy
Guido van Rossum <guido@python.org>
parents: 24450
diff changeset
4896 def test_main():
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4897 tests = [GeneralModuleTests, BasicTCPTest, TCPCloserTest, TCPTimeoutTest,
61259
1f7506f23771 Remove traces of MacOS9 support.
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61073
diff changeset
4898 TestExceptions, BufferIOTest, BasicTCPTest2, BasicUDPTest, UDPTimeoutTest ]
28917
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
4899
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
4900 tests.extend([
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
4901 NonBlockingTCPTests,
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
4902 FileObjectClassTestCase,
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4903 FileObjectInterruptedTestCase,
28917
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
4904 UnbufferedFileObjectClassTestCase,
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
4905 LineBufferedFileObjectClassTestCase,
40737
6ebad2a6b990 Merged revisions 53451-53537 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
4906 SmallBufferedFileObjectClassTestCase,
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4907 UnicodeReadFileObjectClassTestCase,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4908 UnicodeWriteFileObjectClassTestCase,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4909 UnicodeReadWriteFileObjectClassTestCase,
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4910 NetworkConnectionNoServer,
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4911 NetworkConnectionAttributesTest,
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4912 NetworkConnectionBehaviourTest,
64574
caf0b4b0569e Fix issue 9794: adds context manager protocol to socket.socket so that socket.create_connection() can be used with the 'with' statement.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64534
diff changeset
4913 ContextManagersTest,
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4914 CloexecConstantTest,
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4915 NonblockConstantTest
28917
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
4916 ])
33063
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
4917 if hasattr(socket, "socketpair"):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
4918 tests.append(BasicSocketPairTest)
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4919 if hasattr(socket, "AF_UNIX"):
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4920 tests.append(TestUnixDomain)
72011
b5ccdf7c032a Issue #12326: refactor usage of sys.platform
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71897
diff changeset
4921 if sys.platform == 'linux':
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4922 tests.append(TestLinuxAbstractNamespace)
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4923 if isTipcAvailable():
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4924 tests.append(TIPCTest)
44587
fb5a6330f71b Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44568
diff changeset
4925 tests.append(TIPCThreadableTest)
72758
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
4926 tests.extend([BasicCANTest, CANTest])
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
4927 tests.extend([BasicRDSTest, RDSTest])
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4928 tests.extend([
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4929 CmsgMacroTests,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4930 SendmsgUDPTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4931 RecvmsgUDPTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4932 RecvmsgIntoUDPTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4933 SendmsgUDP6Test,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4934 RecvmsgUDP6Test,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4935 RecvmsgRFC3542AncillaryUDP6Test,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4936 RecvmsgIntoRFC3542AncillaryUDP6Test,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4937 RecvmsgIntoUDP6Test,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4938 SendmsgTCPTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4939 RecvmsgTCPTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4940 RecvmsgIntoTCPTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4941 SendmsgSCTPStreamTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4942 RecvmsgSCTPStreamTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4943 RecvmsgIntoSCTPStreamTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4944 SendmsgUnixStreamTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4945 RecvmsgUnixStreamTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4946 RecvmsgIntoUnixStreamTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4947 RecvmsgSCMRightsStreamTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4948 RecvmsgIntoSCMRightsStreamTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4949 # These are slow when setitimer() is not available
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4950 InterruptedRecvTimeoutTest,
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4951 InterruptedSendTimeoutTest,
76150
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4952 TestSocketSharing,
72029
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
4953 ])
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4954
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
4955 thread_info = support.threading_setup()
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
4956 support.run_unittest(*tests)
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
4957 support.threading_cleanup(*thread_info)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
4958
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
4959 if __name__ == "__main__":
24451
22570e76cca1 Enable test_socket again, if only to prevent mistakes like Jeremy
Guido van Rossum <guido@python.org>
parents: 24450
diff changeset
4960 test_main()