annotate Lib/test/test_socket.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents fa7b90829262
children
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:
76150
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
26 import multiprocessing
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
27 except ImportError:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
28 multiprocessing = False
85619
b7f6f6f59e91 Issue #18904: test_socket: add inheritance tests using fcntl and FD_CLOEXEC
Victor Stinner <victor.stinner@gmail.com>
parents: 85481
diff changeset
29 try:
b7f6f6f59e91 Issue #18904: test_socket: add inheritance tests using fcntl and FD_CLOEXEC
Victor Stinner <victor.stinner@gmail.com>
parents: 85481
diff changeset
30 import fcntl
b7f6f6f59e91 Issue #18904: test_socket: add inheritance tests using fcntl and FD_CLOEXEC
Victor Stinner <victor.stinner@gmail.com>
parents: 85481
diff changeset
31 except ImportError:
b7f6f6f59e91 Issue #18904: test_socket: add inheritance tests using fcntl and FD_CLOEXEC
Victor Stinner <victor.stinner@gmail.com>
parents: 85481
diff changeset
32 fcntl = None
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
85470
f20201db7592 Use the recent support.HOSTv6 addition.
Charles-François Natali <cf.natali@gmail.com>
parents: 85454
diff changeset
572 host = support.HOSTv6
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
573
c64216addd7f Add support for the send/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 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
575 """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
576
c64216addd7f Add support for the send/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 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
578 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
579
c64216addd7f Add support for the send/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 # 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
582
c64216addd7f Add support for the send/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 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
584 """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
585
c64216addd7f Add support for the send/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 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
587 "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
588 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
589 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
590 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
591 """
c64216addd7f Add support for the send/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 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
593 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
594 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
595 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
596 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
597 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
598 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
599 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
600 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
601 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
602 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
603 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
604
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
607 """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
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 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
610 """
c64216addd7f Add support for the send/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 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
612 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
613 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
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
c64216addd7f Add support for the send/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 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
617 """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
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 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
620 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
621 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
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 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
624 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
625 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
626 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
627 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
628 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
629 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
630 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
631 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
632 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
633 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
634 # 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
635 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
636 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
637 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
638 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
639 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
640 "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
641 ", ".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
642
c64216addd7f Add support for the send/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
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
644 #######################################################################
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
645 ## Begin Tests
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
646
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
647 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
648
41941
e4ab08039c75 Simplify socket_repr() by using PyUnicode_FromFormat()
Walter Dörwald <walter@livinglogic.de>
parents: 41824
diff changeset
649 def test_repr(self):
e4ab08039c75 Simplify socket_repr() by using PyUnicode_FromFormat()
Walter Dörwald <walter@livinglogic.de>
parents: 41824
diff changeset
650 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
83230
1410b7790de6 Fix issue #17675: make socket repr() provide local and remote addresses (if any).
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 82844
diff changeset
651 with s:
1410b7790de6 Fix issue #17675: make socket repr() provide local and remote addresses (if any).
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 82844
diff changeset
652 self.assertIn('fd=%i' % s.fileno(), repr(s))
87077
fa7b90829262 Fix test_socket for repr update
Nick Coghlan <ncoghlan@gmail.com>
parents: 87036
diff changeset
653 self.assertIn('family=%s' % socket.AF_INET, repr(s))
fa7b90829262 Fix test_socket for repr update
Nick Coghlan <ncoghlan@gmail.com>
parents: 87036
diff changeset
654 self.assertIn('type=%s' % socket.SOCK_STREAM, repr(s))
83230
1410b7790de6 Fix issue #17675: make socket repr() provide local and remote addresses (if any).
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 82844
diff changeset
655 self.assertIn('proto=0', repr(s))
1410b7790de6 Fix issue #17675: make socket repr() provide local and remote addresses (if any).
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 82844
diff changeset
656 self.assertNotIn('raddr', repr(s))
1410b7790de6 Fix issue #17675: make socket repr() provide local and remote addresses (if any).
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 82844
diff changeset
657 s.bind(('127.0.0.1', 0))
83274
e68bd20b5434 attempt to fix bb failure as per http://bugs.python.org/issue17675#msg186595
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 83230
diff changeset
658 self.assertIn('laddr', repr(s))
83230
1410b7790de6 Fix issue #17675: make socket repr() provide local and remote addresses (if any).
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 82844
diff changeset
659 self.assertIn(str(s.getsockname()), repr(s))
1410b7790de6 Fix issue #17675: make socket repr() provide local and remote addresses (if any).
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 82844
diff changeset
660 self.assertIn('[closed]', repr(s))
1410b7790de6 Fix issue #17675: make socket repr() provide local and remote addresses (if any).
Giampaolo Rodola' <g.rodola@gmail.com>
parents: 82844
diff changeset
661 self.assertNotIn('laddr', repr(s))
41941
e4ab08039c75 Simplify socket_repr() by using PyUnicode_FromFormat()
Walter Dörwald <walter@livinglogic.de>
parents: 41824
diff changeset
662
32160
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
663 def test_weakref(self):
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
664 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
665 p = proxy(s)
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
666 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
667 s.close()
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
668 s = None
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
669 try:
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
670 p.fileno()
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
671 except ReferenceError:
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
672 pass
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
673 else:
aec9c98a47d2 Add weakref support to sockets and re pattern objects.
Raymond Hettinger <python@rcn.com>
parents: 31833
diff changeset
674 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
675
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
676 def testSocketError(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
677 # 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
678 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
679 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
680 raise OSError
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
681 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
682 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
683 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
684 raise socket.gaierror
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
685
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
686 def testSendtoErrors(self):
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
687 # Testing that sendto doens't masks failures. See #10169.
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
688 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
689 self.addCleanup(s.close)
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
690 s.bind(('', 0))
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
691 sockname = s.getsockname()
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
692 # 2 args
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
693 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
694 s.sendto('\u2620', sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
695 self.assertEqual(str(cm.exception),
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
696 "'str' does not support the buffer interface")
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
697 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
698 s.sendto(5j, sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
699 self.assertEqual(str(cm.exception),
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
700 "'complex' does not support the buffer interface")
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
701 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
702 s.sendto(b'foo', None)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
703 self.assertIn('not NoneType',str(cm.exception))
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
704 # 3 args
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
705 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
706 s.sendto('\u2620', 0, sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
707 self.assertEqual(str(cm.exception),
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
708 "'str' does not support the buffer interface")
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
709 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
710 s.sendto(5j, 0, sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
711 self.assertEqual(str(cm.exception),
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
712 "'complex' does not support the buffer interface")
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
713 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
714 s.sendto(b'foo', 0, None)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
715 self.assertIn('not NoneType', str(cm.exception))
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
716 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
717 s.sendto(b'foo', 'bar', sockname)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
718 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
719 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
720 s.sendto(b'foo', None, None)
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
721 self.assertIn('an integer is required', str(cm.exception))
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
722 # wrong number of args
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
723 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
724 s.sendto(b'foo')
69917
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
725 self.assertIn('(1 given)', str(cm.exception))
4b3352b49483 #5421: merge with 3.1.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 69122 69916
diff changeset
726 with self.assertRaises(TypeError) as cm:
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
727 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
728 self.assertIn('(4 given)', str(cm.exception))
69916
9222c9d747c1 #5421: add tests.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66478
diff changeset
729
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
730 def testCrucialConstants(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
731 # 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
732 socket.AF_INET
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
733 socket.SOCK_STREAM
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
734 socket.SOCK_DGRAM
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
735 socket.SOCK_RAW
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
736 socket.SOCK_RDM
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
737 socket.SOCK_SEQPACKET
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
738 socket.SOL_SOCKET
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
739 socket.SO_REUSEADDR
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
740
23831
f7306ae8662d Temporarily disable the timeout and socket tests.
Guido van Rossum <guido@python.org>
parents: 23819
diff changeset
741 def testHostnameRes(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
742 # Testing hostname resolution mechanisms
23831
f7306ae8662d Temporarily disable the timeout and socket tests.
Guido van Rossum <guido@python.org>
parents: 23819
diff changeset
743 hostname = socket.gethostname()
26799
507aa96a128f Skip testHostnameRes() if gethostbyname() raises an exception.
Guido van Rossum <guido@python.org>
parents: 25285
diff changeset
744 try:
507aa96a128f Skip testHostnameRes() if gethostbyname() raises an exception.
Guido van Rossum <guido@python.org>
parents: 25285
diff changeset
745 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
746 except OSError:
26799
507aa96a128f Skip testHostnameRes() if gethostbyname() raises an exception.
Guido van Rossum <guido@python.org>
parents: 25285
diff changeset
747 # 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
748 return
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
749 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
750 try:
b2b4797052c6 Also skip testHostnameRes() if gethostbyaddr() raises an exception.
Guido van Rossum <guido@python.org>
parents: 26799
diff changeset
751 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
752 except OSError:
26800
b2b4797052c6 Also skip testHostnameRes() if gethostbyaddr() raises an exception.
Guido van Rossum <guido@python.org>
parents: 26799
diff changeset
753 # 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
754 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
755 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
756 fqhn = socket.getfqdn(ip)
23831
f7306ae8662d Temporarily disable the timeout and socket tests.
Guido van Rossum <guido@python.org>
parents: 23819
diff changeset
757 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
758 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
759
85679
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
760 def test_host_resolution(self):
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
761 for addr in ['0.1.1.~1', '1+.1.1.1', '::1q', '::1::2',
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
762 '1:1:1:1:1:1:1:1:1']:
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
763 self.assertRaises(OSError, socket.gethostbyname, addr)
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
764 self.assertRaises(OSError, socket.gethostbyaddr, addr)
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
765
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
766 for addr in [support.HOST, '10.0.0.1', '255.255.255.255']:
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
767 self.assertEqual(socket.gethostbyname(addr), addr)
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
768
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
769 # we don't test support.HOSTv6 because there's a chance it doesn't have
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
770 # a matching name entry (e.g. 'ip6-localhost')
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
771 for host in [support.HOST]:
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
772 self.assertIn(host, socket.gethostbyaddr(host)[2])
540a9c69c2ea Issue #16201: socket: Use inet_pton()/inet_addr() instead of ad-hoc parsing for
Charles-François Natali <cf.natali@gmail.com>
parents: 85624
diff changeset
773
68194
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
774 @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
775 @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
776 def test_sethostname(self):
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
777 oldhn = socket.gethostname()
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
778 try:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
779 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
780 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
781 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
782 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
783 else:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
784 raise
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
785 try:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
786 # running test as root!
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
787 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
788 # 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
789 socket.sethostname(b'bar')
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
790 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
791 finally:
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
792 socket.sethostname(oldhn)
a2d61117c2d2 Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68159
diff changeset
793
70136
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
794 @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
795 '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
796 def testInterfaceNameIndex(self):
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
797 interfaces = socket.if_nameindex()
c2515cb23d9b Issue #1746656: Add if_nameindex, if_nametoindex, if_indextoname
Gregory P. Smith <greg@krypto.org>
parents: 70017
diff changeset
798 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
799 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
800 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
801 # 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
802 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
803 _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
804 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
805 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
806 _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
807 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
808 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
809
cc60d0283fad Issue #1746656: make if_nameindex(), if_indextoname() and if_nametoindex()
Charles-François Natali <neologix@free.fr>
parents: 70136
diff changeset
810 @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
811 '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
812 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
813 # 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
814 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
815 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
816 # 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
817 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
818 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
819
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
820 @unittest.skipUnless(hasattr(sys, 'getrefcount'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
821 'test needs sys.getrefcount()')
23799
2ad13ee6d850 Don't test for Java, test for sys.getrefcount.
Guido van Rossum <guido@python.org>
parents: 23798
diff changeset
822 def testRefCountGetNameInfo(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
823 # Testing reference count for getnameinfo
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
824 try:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
825 # On some versions, this loses a reference
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
826 orig = sys.getrefcount(__name__)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
827 socket.getnameinfo(__name__,0)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
828 except TypeError:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
829 if sys.getrefcount(__name__) != orig:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
830 self.fail("socket.getnameinfo loses a reference")
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
831
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
832 def testInterpreterCrash(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
833 # 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
834 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
835 # 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
836 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
837 except OSError:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
838 pass
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
839
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
840 def testNtoH(self):
25256
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
841 # 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
842 # 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
843 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
844 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
845 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
846 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
847 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
848 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
849
25256
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
850 swapped = func(mask)
04a541e68964 Maybe this fixes test_socket on 64-bit Linux.
Guido van Rossum <guido@python.org>
parents: 25152
diff changeset
851 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
852 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
853
40638
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
854 def testNtoHErrors(self):
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 40638
diff changeset
855 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
856 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
857 for k in good_values:
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
858 socket.ntohl(k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
859 socket.ntohs(k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
860 socket.htonl(k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
861 socket.htons(k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
862 for k in bad_values:
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
863 self.assertRaises(OverflowError, socket.ntohl, k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
864 self.assertRaises(OverflowError, socket.ntohs, k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
865 self.assertRaises(OverflowError, socket.htonl, k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
866 self.assertRaises(OverflowError, socket.htons, k)
86ce1df6a88e Merged revisions 53434 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
867
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
868 def testGetServBy(self):
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
869 eq = self.assertEqual
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
870 # 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
871 # 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
872 # 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
873 if (sys.platform.startswith(('freebsd', 'netbsd'))
b5ccdf7c032a Issue #12326: refactor usage of sys.platform
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71897
diff changeset
874 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
875 # 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
876 # 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
877 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
878 else:
059dae06585b FreeBSD's services file contains an additional echo service entry, with
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 32508
diff changeset
879 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
880 for service in services:
24485
f05a311d7988 testGetServByName shouldn't check for getservbyname - the socket module
Skip Montanaro <skip@pobox.com>
parents: 24470
diff changeset
881 try:
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
882 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
883 break
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
884 except OSError:
24485
f05a311d7988 testGetServByName shouldn't check for getservbyname - the socket module
Skip Montanaro <skip@pobox.com>
parents: 24470
diff changeset
885 pass
31503
eb48b2503f20 Fix indentation error in testGetServByName and rewrite loop to avoid clumsy
Skip Montanaro <skip@pobox.com>
parents: 29662
diff changeset
886 else:
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
887 raise OSError
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
888 # 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
889 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
890 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
891 # 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
892 try:
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
893 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
894 except OSError:
32429
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
895 udpport = None
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
896 else:
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
897 eq(udpport, port)
d8abf582f893 Added socket.getservbyport(), and make its second argument and that of
Barry Warsaw <barry@python.org>
parents: 32160
diff changeset
898 # 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
899 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
900 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
901 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
902 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
903 # 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
904 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
905 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
906
24293
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
907 def testDefaultTimeout(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
908 # Testing default timeout
24293
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
909 # 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
910 self.assertEqual(socket.getdefaulttimeout(), None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
911 s = socket.socket()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
912 self.assertEqual(s.gettimeout(), None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
913 s.close()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
914
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
915 # 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
916 socket.setdefaulttimeout(10)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
917 self.assertEqual(socket.getdefaulttimeout(), 10)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
918 s = socket.socket()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
919 self.assertEqual(s.gettimeout(), 10)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
920 s.close()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
921
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
922 # 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
923 socket.setdefaulttimeout(None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
924 self.assertEqual(socket.getdefaulttimeout(), None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
925 s = socket.socket()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
926 self.assertEqual(s.gettimeout(), None)
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
927 s.close()
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
928
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
929 # 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
930 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
931
640370f08e2a Add default timeout functionality. This adds setdefaulttimeout() and
Guido van Rossum <guido@python.org>
parents: 23931
diff changeset
932 # 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
933 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
934
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
935 @unittest.skipUnless(hasattr(socket, 'inet_aton'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
936 'test needs socket.inet_aton()')
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
937 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
938 # 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
939 # It must return 4 bytes.
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
940 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
941 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
942
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
943 @unittest.skipUnless(hasattr(socket, 'inet_pton'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
944 'test needs socket.inet_pton()')
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
945 def testIPv4toString(self):
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
946 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
947 g = lambda a: inet_pton(AF_INET, a)
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
948
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
949 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
950 (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
951 )
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
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
953 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
954 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
955 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
956 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
957 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
958 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
959 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
960 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
961 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
962 assertInvalid(f, '::1')
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
963
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
964 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
965 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
966 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
967 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
968 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
969 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
970 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
971 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
972 assertInvalid(g, '::1')
29087
526f37fb380d Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28917
diff changeset
973
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
974 @unittest.skipUnless(hasattr(socket, 'inet_pton'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
975 'test needs socket.inet_pton()')
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
976 def testIPv6toString(self):
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
977 try:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
978 from socket import inet_pton, AF_INET6, has_ipv6
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
979 if not has_ipv6:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
980 return
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
981 except ImportError:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
982 return
87036
892ec51a162f Normalize whitespace
Jason R. Coombs <jaraco@jaraco.com>
parents: 87034
diff changeset
983
87034
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
984 if sys.platform == "win32":
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
985 try:
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
986 inet_pton(AF_INET6, '::')
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
987 except OSError as e:
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
988 if e.winerror == 10022:
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
989 return # IPv6 might not be installed on this PC
87036
892ec51a162f Normalize whitespace
Jason R. Coombs <jaraco@jaraco.com>
parents: 87034
diff changeset
990
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
991 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
992 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
993 (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
994 )
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
995
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
996 self.assertEqual(b'\x00' * 16, f('::'))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
997 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
998 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
999 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
1000 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
1001 f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae')
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1002 )
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
1003 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
1004 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
1005 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
1006 )
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1007 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
1008 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
1009 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
1010 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
1011 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
1012 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
1013 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
1014 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
1015 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
1016 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
1017
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1018 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
1019 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
1020 )
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 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
1022 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
1023 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
1024 )
71e5a083f9b1 Issue #5424: add tests for inet_ntoa, inet_ntop, inet_aton and inet_pton.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73612
diff changeset
1025 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
1026 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
1027 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
1028 )
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('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
1030 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
1031 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
1032 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
1033 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
1034 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
1035
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
1036 @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
1037 'test needs socket.inet_ntop()')
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1038 def testStringToIPv4(self):
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1039 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
1040 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
1041 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
1042 (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
1043 )
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1044
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1045 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
1046 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
1047 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
1048 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
1049 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
1050 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
1051 assertInvalid(f, b'\x00' * 16)
29087
526f37fb380d Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28917
diff changeset
1052
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1053 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
1054 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
1055 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
1056 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
1057 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
1058 assertInvalid(g, b'\x00' * 16)
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1059
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
1060 @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
1061 'test needs socket.inet_ntop()')
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1062 def testStringToIPv6(self):
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1063 try:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1064 from socket import inet_ntop, AF_INET6, has_ipv6
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1065 if not has_ipv6:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1066 return
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1067 except ImportError:
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1068 return
87034
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
1069
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
1070 if sys.platform == "win32":
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
1071 try:
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
1072 inet_ntop(AF_INET6, b'\x00' * 16)
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
1073 except OSError as e:
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
1074 if e.winerror == 10022:
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
1075 return # IPv6 might not be installed on this PC
17b160baa20f Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module.
Atsuo Ishimoto <ishimoto@gembook.org>
parents: 86899
diff changeset
1076
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1077 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
1078 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
1079 (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
1080 )
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1081
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1082 self.assertEqual('::', f(b'\x00' * 16))
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
1083 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
1084 self.assertEqual(
28818
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1085 '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
1086 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
1087 )
57e61588571b Patch by Jp Calderone:
Guido van Rossum <guido@python.org>
parents: 26800
diff changeset
1088
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
1089 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
1090 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
1091 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
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 # 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
1094
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
1095 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
1096 # 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
1097 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
1098 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
1099 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
1100 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
1101 name = sock.getsockname()
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
1102 # 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
1103 # 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
1104 # 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
1105 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
1106 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
1107 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
1108 # 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
1109 return
58415
f6a626f34840 use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents: 58146
diff changeset
1110 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
1111 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
1112
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1113 def testGetSockOpt(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1114 # Testing getsockopt()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1115 # 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
1116 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
1117 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
1118 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
1119 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
1120
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1121 def testSetSockOpt(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1122 # Testing setsockopt()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1123 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
1124 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
1125 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
1126 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
1127 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
1128
24318
12815d05080c Add test for previous core dump when sending on closed socket with
Guido van Rossum <guido@python.org>
parents: 24293
diff changeset
1129 def testSendAfterClose(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1130 # 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
1131 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
1132 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
1133 sock.close()
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
1134 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
1135
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
1136 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
1137 # testing .family, .type and .protocol
85420
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
1138
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
1139 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
1140 self.assertEqual(sock.family, socket.AF_INET)
85420
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
1141 if hasattr(socket, 'SOCK_CLOEXEC'):
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
1142 self.assertIn(sock.type,
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
1143 (socket.SOCK_STREAM | socket.SOCK_CLOEXEC,
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
1144 socket.SOCK_STREAM))
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
1145 else:
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
1146 self.assertEqual(sock.type, socket.SOCK_STREAM)
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
1147 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
1148 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
1149
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
1150 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
1151 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
1152 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
1153 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
1154 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
1155 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
1156 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
1157 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
1158 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
1159 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
1160 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
1161 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
1162
65975
e213e465a2dc Add socket cleanup for ResourceWarning and update test to use skip decorator
Brian Curtin <brian.curtin@gmail.com>
parents: 65925
diff changeset
1163 @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
1164 def test_sock_ioctl(self):
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1165 self.assertTrue(hasattr(socket.socket, 'ioctl'))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1166 self.assertTrue(hasattr(socket, 'SIO_RCVALL'))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1167 self.assertTrue(hasattr(socket, 'RCVALL_ON'))
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
1168 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
1169 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
1170 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
1171 self.addCleanup(s.close)
56252
debb245ebb40 http://bugs.python.org/issue6971
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 55593
diff changeset
1172 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
1173 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
1174
64000
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1175 def testGetaddrinfo(self):
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1176 try:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1177 socket.getaddrinfo('localhost', 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1178 except socket.gaierror as err:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1179 if err.errno == socket.EAI_SERVICE:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1180 # see http://bugs.python.org/issue1282647
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1181 self.skipTest("buggy libc version")
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1182 raise
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1183 # 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
1184 for info in socket.getaddrinfo(HOST, None):
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1185 self.assertEqual(len(info), 5)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1186 # 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
1187 # IPv4/v6 address or None
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1188 socket.getaddrinfo('localhost', 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1189 socket.getaddrinfo('127.0.0.1', 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1190 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
1191 if support.IPV6_ENABLED:
64000
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1192 socket.getaddrinfo('::1', 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1193 # 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
1194 # port number or None
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1195 socket.getaddrinfo(HOST, "http")
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1196 socket.getaddrinfo(HOST, 80)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1197 socket.getaddrinfo(HOST, None)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1198 # test family and socktype filters
85481
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1199 infos = socket.getaddrinfo(HOST, 80, socket.AF_INET, socket.SOCK_STREAM)
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1200 for family, type, _, _, _ in infos:
64000
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1201 self.assertEqual(family, socket.AF_INET)
85481
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1202 self.assertEqual(str(family), 'AddressFamily.AF_INET')
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1203 self.assertEqual(type, socket.SOCK_STREAM)
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1204 self.assertEqual(str(type), 'SocketType.SOCK_STREAM')
64000
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1205 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
1206 for _, socktype, _, _, _ in infos:
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1207 self.assertEqual(socktype, socket.SOCK_STREAM)
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1208 # test proto and flags arguments
64060
bf18dd70c180 Merged revisions 84089 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64000
diff changeset
1209 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
1210 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
1211 # 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
1212 # usually do this
9bd082701776 Merged revisions 84024 via svnmerge from
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 56368
diff changeset
1213 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
1214 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
1215 # 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
1216 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
1217 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
1218 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
1219 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
1220 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
1221 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
1222 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
1223 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
1224 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
1225 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
1226 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
1227 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
1228 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
1229 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
1230 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
1231 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
1232 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
1233 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
1234 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
1235 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
1236 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
1237 # 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
1238 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
1239
83907
3c4a5dc29417 Issue #17269: Workaround for a platform bug in getaddrinfo on OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 82619
diff changeset
1240 # Issue 17269
84075
ef103e7e7af2 Ensure that the fix for #17269 also works on OSX 10.4
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 83907
diff changeset
1241 if hasattr(socket, 'AI_NUMERICSERV'):
ef103e7e7af2 Ensure that the fix for #17269 also works on OSX 10.4
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 83907
diff changeset
1242 socket.getaddrinfo("localhost", None, 0, 0, 0, socket.AI_NUMERICSERV)
83907
3c4a5dc29417 Issue #17269: Workaround for a platform bug in getaddrinfo on OSX
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 82619
diff changeset
1243
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
1244 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
1245 # 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
1246 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
1247
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
1248 @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
1249 '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
1250 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
1251 # 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
1252 try:
585d3664da89 Issue #12804: Fix test failures on systems without internet access.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 74606
diff changeset
1253 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
1254 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
1255 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
1256 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
1257 # 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
1258 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
1259 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
1260 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
1261 # 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
1262 # 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
1263 # socket.gethostbyaddr('испытание.python.org')
44535
420fe6d7d5f4 Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43954
diff changeset
1264
64961
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1265 def check_sendall_interrupted(self, with_timeout):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1266 # 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
1267 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
1268 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
1269 # 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
1270 # with an invalid domain value.
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1271 def ok_handler(*args):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1272 self.assertRaises(ValueError, math.acosh, 0)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1273 def raising_handler(*args):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1274 self.assertRaises(ValueError, math.acosh, 0)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1275 1 // 0
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1276 c, s = socket.socketpair()
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1277 old_alarm = signal.signal(signal.SIGALRM, raising_handler)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1278 try:
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1279 if with_timeout:
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1280 # 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
1281 c.settimeout(1.5)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1282 with self.assertRaises(ZeroDivisionError):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1283 signal.alarm(1)
85450
498957c97c2b Issue #18643: Fix some test_socket failures due to large default socket buffer
Charles-François Natali <cf.natali@gmail.com>
parents: 85360
diff changeset
1284 c.sendall(b"x" * support.SOCK_MAX_SIZE)
64961
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1285 if with_timeout:
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1286 signal.signal(signal.SIGALRM, ok_handler)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1287 signal.alarm(1)
85450
498957c97c2b Issue #18643: Fix some test_socket failures due to large default socket buffer
Charles-François Natali <cf.natali@gmail.com>
parents: 85360
diff changeset
1288 self.assertRaises(socket.timeout, c.sendall,
498957c97c2b Issue #18643: Fix some test_socket failures due to large default socket buffer
Charles-François Natali <cf.natali@gmail.com>
parents: 85360
diff changeset
1289 b"x" * support.SOCK_MAX_SIZE)
64961
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1290 finally:
85360
75728ef3d0c9 test_socket: cancel scheduled alarm on test failure
Victor Stinner <victor.stinner@gmail.com>
parents: 85019
diff changeset
1291 signal.alarm(0)
64961
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1292 signal.signal(signal.SIGALRM, old_alarm)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1293 c.close()
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1294 s.close()
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1295
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1296 def test_sendall_interrupted(self):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1297 self.check_sendall_interrupted(False)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1298
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1299 def test_sendall_interrupted_with_timeout(self):
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1300 self.check_sendall_interrupted(True)
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1301
65707
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1302 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
1303 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
1304 r = repr(sock)
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1305 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
1306 sock = None
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1307 support.gc_collect()
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1308 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
1309 # 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
1310 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
1311 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
1312 r = repr(sock)
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1313 sock = None
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1314 support.gc_collect()
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1315 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
1316 f = None
cff78ffb932a Issue #10093: ResourceWarnings are now issued when files and sockets are
Antoine Pitrou <solipsis@pitrou.net>
parents: 65606
diff changeset
1317 support.gc_collect()
64961
5a7bb85a5d99 Merged revisions 85032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
1318
67344
f4a808f5a66d Issue #10819: SocketIO.name property returns -1 when its closed, instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67299
diff changeset
1319 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
1320 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
1321 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
1322 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
1323 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
1324
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
1325 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
1326 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
1327 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
1328 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
1329 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
1330 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
1331 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
1332 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
1333 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
1334 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
1335
68774
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
1336 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
1337 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
1338 with sock:
5e13e5e6df30 Issue #11127: Raise a TypeError when trying to pickle a socket object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68258
diff changeset
1339 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
1340 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
1341
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1342 def test_listen_backlog(self):
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1343 for backlog in 0, -1:
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1344 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
1345 srv.bind((HOST, 0))
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1346 srv.listen(backlog)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1347 srv.close()
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1348
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1349 # 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
1350 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
1351 srv.bind((HOST, 0))
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1352 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
1353 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
1354
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
1355 @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
1356 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
1357 self.assertRaises(OverflowError, socket.getnameinfo,
85470
f20201db7592 Use the recent support.HOSTv6 addition.
Charles-François Natali <cf.natali@gmail.com>
parents: 85454
diff changeset
1358 (support.HOSTv6, 0, 0xffffffff), 0)
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
1359 with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as s:
85470
f20201db7592 Use the recent support.HOSTv6 addition.
Charles-François Natali <cf.natali@gmail.com>
parents: 85454
diff changeset
1360 self.assertRaises(OverflowError, s.bind, (support.HOSTv6, 0, -10))
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
1361
85481
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1362 def test_str_for_enums(self):
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1363 # Make sure that the AF_* and SOCK_* constants have enum-like string
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1364 # reprs.
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1365 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1366 self.assertEqual(str(s.family), 'AddressFamily.AF_INET')
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1367 self.assertEqual(str(s.type), 'SocketType.SOCK_STREAM')
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1368
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1369 @unittest.skipIf(os.name == 'nt', 'Will not work on Windows')
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1370 def test_uknown_socket_family_repr(self):
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1371 # Test that when created with a family that's not one of the known
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1372 # AF_*/SOCK_* constants, socket.family just returns the number.
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1373 #
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1374 # To do this we fool socket.socket into believing it already has an
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1375 # open fd because on this path it doesn't actually verify the family and
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1376 # type and populates the socket object.
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1377 #
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1378 # On Windows this trick won't work, so the test is skipped.
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1379 fd, _ = tempfile.mkstemp()
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1380 with socket.socket(family=42424, type=13331, fileno=fd) as s:
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1381 self.assertEqual(s.family, 42424)
038543d34166 Switch the AF_* and SOCK_* constants in the socket module to IntEnum.
Eli Bendersky <eliben@gmail.com>
parents: 85470
diff changeset
1382 self.assertEqual(s.type, 13331)
64959
aed04b3f0fe3 Issue #9950: Fix socket.sendall() crash or misbehaviour when a signal is
Antoine Pitrou <solipsis@pitrou.net>
parents: 64817
diff changeset
1383
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
1384 @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
1385 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
1386
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 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
1388 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
1389 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
1390 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
1391
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
1392 @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
1393 '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
1394 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
1395 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
1396
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
1397 # 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
1398 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
1399 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
1400 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
1401 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
1402 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
1403 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
1404 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
1405 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
1406 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
1407 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
1408 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
1409 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
1410
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
1411 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
1412 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
1413 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
1414
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
1415 @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
1416 '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
1417 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
1418 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
1419 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
1420
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
1421 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
1422 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
1423 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
1424
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 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
1426 # 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
1427 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
1428 self.assertRaisesRegex(OSError, 'interface name too long',
72870
e2cb12decd9f Fix deprecation warning
Antoine Pitrou <solipsis@pitrou.net>
parents: 72849
diff changeset
1429 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
1430
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1431 @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
1432 '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
1433 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
1434 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
1435 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
1436 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
1437 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
1438 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
1439 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
1440
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1441 @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
1442 '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
1443 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
1444 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
1445 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
1446 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
1447 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
1448 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
1449 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
1450
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1451
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1452 @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
1453 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
1454
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1455 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
1456 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
1457
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1458 @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
1459 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
1460 """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
1461 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
1462 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
1463 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
1464
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1465 @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
1466 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
1467 """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
1468 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
1469 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
1470
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 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
1472 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
1473 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
1474 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
1475 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
1476
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1477 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
1478 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
1479 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
1480
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1481 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
1482 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
1483 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
1484
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1485 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
1486 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
1487 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
1488
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1489 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
1490 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
1491 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
1492
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1493 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
1494 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
1495
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1496 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
1497 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
1498 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
1499
e767318baccd Issue #10141: socket: add SocketCAN (PF_CAN) support. Initial patch by Matthias
Charles-François Natali <neologix@free.fr>
parents: 72619
diff changeset
1500 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
1501 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
1502
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
1503 @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
1504 '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
1505 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
1506 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
1507 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
1508 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
1509 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
1510 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
1511
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
1512 @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
1513 '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
1514 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
1515 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
1516 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
1517 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
1518 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
1519 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
1520 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
1521 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
1522 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
1523 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
1524 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
1525 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
1526 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
1527 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
1528 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
1529 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
1530 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
1531 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
1532 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
1533 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
1534 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
1535 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
1536 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
1537 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
1538 )
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
1539 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
1540 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
1541 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
1542
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
1543
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1544 @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
1545 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
1546
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1547 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
1548 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
1549 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
1550
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1551 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
1552 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
1553 pass
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1554
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1555 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
1556 bufsize = 16384
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1557 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
1558 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
1559 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
1560
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1561
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1562 @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
1563 @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
1564 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
1565
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1566 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
1567 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
1568
73485
fa9bbfc0bcec Fix test_socket when built whithout threads.
Charles-François Natali <neologix@free.fr>
parents: 73478
diff changeset
1569 def setUp(self):
fa9bbfc0bcec Fix test_socket when built whithout threads.
Charles-François Natali <neologix@free.fr>
parents: 73478
diff changeset
1570 super().setUp()
fa9bbfc0bcec Fix test_socket when built whithout threads.
Charles-François Natali <neologix@free.fr>
parents: 73478
diff changeset
1571 self.evt = threading.Event()
fa9bbfc0bcec Fix test_socket when built whithout threads.
Charles-François Natali <neologix@free.fr>
parents: 73478
diff changeset
1572
73478
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1573 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
1574 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
1575 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
1576 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
1577
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1578 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
1579 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
1580 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
1581
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1582 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
1583 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
1584 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
1585 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
1586 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
1587
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1588 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
1589 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
1590 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
1591
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1592 @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
1593 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
1594 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
1595 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
1596
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1597 @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
1598 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
1599 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
1600 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
1601
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1602 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
1603 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
1604 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
1605
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1606 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
1607 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
1608
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1609 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
1610 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
1611 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
1612
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1613 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
1614 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
1615
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1616 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
1617 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
1618 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
1619 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
1620 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
1621
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1622 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
1623 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
1624 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
1625
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1626 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
1627 # 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
1628 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
1629
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1630 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
1631 # 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
1632 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
1633 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
1634 try:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1635 # 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
1636 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
1637 except OSError:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1638 pass
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1639 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
1640 try:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1641 # 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
1642 while True:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1643 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
1644 finally:
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1645 # 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
1646 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
1647 # 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
1648 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
1649 # 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
1650 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
1651 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
1652
2293ca739223 Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support.
Charles-François Natali <neologix@free.fr>
parents: 73085
diff changeset
1653
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
1654 @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
1655 class BasicTCPTest(SocketConnectedTest):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1656
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1657 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
1658 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
1659
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1660 def testRecv(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1661 # 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
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)
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1664
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1665 def _testRecv(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1666 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
1667
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1668 def testOverFlowRecv(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1669 # 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
1670 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
1671 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
1672 msg = seg1 + seg2
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1673 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
1674
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1675 def _testOverFlowRecv(self):
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.send(MSG)
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
1677
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1678 def testRecvFrom(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1679 # 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
1680 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
1681 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
1682
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1683 def _testRecvFrom(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1684 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
1685
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1686 def testOverFlowRecvFrom(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1687 # 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
1688 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
1689 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
1690 msg = seg1 + seg2
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1691 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
1692
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1693 def _testOverFlowRecvFrom(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1694 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
1695
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1696 def testSendAll(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1697 # 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
1698 msg = b''
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1699 while 1:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1700 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
1701 if not read:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1702 break
24675
fec0b0aef14b testSendAll(): loop until all data is read; this was necessary at
Guido van Rossum <guido@python.org>
parents: 24674
diff changeset
1703 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
1704 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
1705
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1706 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
1707 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
1708 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
1709
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1710 def testFromFd(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1711 # Testing fromfd()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1712 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
1713 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
1714 self.addCleanup(sock.close)
64747
534853ba8cd3 Issue #1552: socket.socketpair() now returns regular socket.socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 64593
diff changeset
1715 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
1716 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
1717 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
1718
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1719 def _testFromFd(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1720 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
1721
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
1722 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
1723 # 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
1724 sock = self.cli_conn.dup()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
1725 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
1726 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
1727 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
1728
70cfc7b504c2 This is roughly socket2.diff from issue 1378, with a few changes applied
Guido van Rossum <guido@python.org>
parents: 43734
diff changeset
1729 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
1730 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
1731
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1732 def testShutdown(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1733 # Testing shutdown()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1734 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
1735 self.assertEqual(msg, MSG)
50800
b17ec4c4a7c3 Merged revisions 68611-68613 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 50741
diff changeset
1736 # 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
1737 # 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
1738 # 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
1739 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
1740
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1741 def _testShutdown(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1742 self.serv_conn.send(MSG)
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1743 # Issue 15989
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1744 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
1745 _testcapi.INT_MAX + 1)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
1746 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
1747 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
1748 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
1749
63890
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1750 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
1751 # Testing detach()
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1752 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
1753 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
1754 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
1755 # 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
1756 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
1757 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
1758 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
1759 # ...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
1760 # 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
1761 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
1762 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
1763 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
1764 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
1765
63890
60076f28c023 Followup to r83869 and issue #8524: rename socket.forget() to socket.detach()
Antoine Pitrou <solipsis@pitrou.net>
parents: 63856
diff changeset
1766 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
1767 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
1768
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
1769 @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
1770 class BasicUDPTest(ThreadedUDPSocketTest):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1771
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1772 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
1773 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
1774
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1775 def testSendtoAndRecv(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1776 # 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
1777 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
1778 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
1779
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
1780 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
1781 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
1782
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
1783 def testRecvFrom(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
1784 # 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
1785 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
1786 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
1787
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
1788 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
1789 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
1790
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1791 def testRecvFromNegative(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1792 # 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
1793 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
1794
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
1795 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
1796 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
1797
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
1798 # 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
1799 # 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
1800 # (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
1801 # 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
1802 #
c64216addd7f Add support for the send/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 # 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
1804 # 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
1805 # 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
1806 # 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
1807 # 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
1808 # 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
1809 #
c64216addd7f Add support for the send/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 # 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
1811 # 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
1812 # 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
1813 # 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
1814 # 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
1815 # 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
1816 # 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
1817 #
c64216addd7f Add support for the send/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 # 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
1819 # 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
1820
c64216addd7f Add support for the send/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 # 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
1822 # 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
1823 # 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
1824
c64216addd7f Add support for the send/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 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
1826 # 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
1827
c64216addd7f Add support for the send/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 # 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
1829 # 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
1830 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
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 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
1833 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
1834 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
1835
c64216addd7f Add support for the send/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 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
1837 # 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
1838 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
1839
c64216addd7f Add support for the send/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 # 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
1841 # 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
1842 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
1843
c64216addd7f Add support for the send/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 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
1845 # 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
1846 # 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
1847 # 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
1848 # 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
1849 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
1850 *(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
1851
c64216addd7f Add support for the send/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 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
1853 # 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
1854 # 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
1855 # 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
1856 # 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
1857 # 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
1858 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
1859 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
1860 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
1861
c64216addd7f Add support for the send/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 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
1863 # 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
1864 # 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
1865 # 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
1866 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
1867
c64216addd7f Add support for the send/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 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
1869 # 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
1870 # 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
1871 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
1872
c64216addd7f Add support for the send/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 # 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
1874 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
1875 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
1876 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
1877
c64216addd7f Add support for the send/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 # 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
1879 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
1880
c64216addd7f Add support for the send/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 # 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
1882 # 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
1883 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
1884
c64216addd7f Add support for the send/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 # 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
1886 # (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
1887 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
1888
c64216addd7f Add support for the send/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 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
1890 # 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
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 # 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
1893 # 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
1894 # 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
1895 #
c64216addd7f Add support for the send/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 # 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
1897 # 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
1898 # 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
1899 # 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
1900 #
c64216addd7f Add support for the send/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 # * 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
1902 # 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
1903 #
c64216addd7f Add support for the send/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 # * 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
1905 # 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
1906 #
c64216addd7f Add support for the send/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 # 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
1908 # 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
1909 # 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
1910 #
c64216addd7f Add support for the send/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 # 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
1912 # 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
1913 #
c64216addd7f Add support for the send/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 # 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
1915 # 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
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 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
1918 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
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 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
1921 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
1922 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
1923 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
1924 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
1925 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
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 # 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
1928 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
1929 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
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 # 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
1932 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
1933 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
1934 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
1935 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
1936 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
1937 "{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
1938
c64216addd7f Add support for the send/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 # 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
1940 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
1941 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
1942
c64216addd7f Add support for the send/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 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
1945 # 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
1946
c64216addd7f Add support for the send/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 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
1948 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
1949 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
1950 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
1951 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
1952 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
1953 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
1954
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
1957 # 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
1958
c64216addd7f Add support for the send/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 @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
1960 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
1961 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
1962
c64216addd7f Add support for the send/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 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
1965 # 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
1966
c64216addd7f Add support for the send/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 @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
1968 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
1969 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
1970
c64216addd7f Add support for the send/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 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
1973 # 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
1974 # 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
1975 # 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
1976
c64216addd7f Add support for the send/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 @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
1978 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
1979 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
1980
c64216addd7f Add support for the send/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 @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
1982 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
1983 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
1984
c64216addd7f Add support for the send/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 @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
1986 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
1987 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
1988
c64216addd7f Add support for the send/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 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
1990 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
1991
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
1994 # 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
1995 # 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
1996 # 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
1997 # 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
1998
c64216addd7f Add support for the send/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 @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
2000 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
2001 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
2002
c64216addd7f Add support for the send/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 @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
2004 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
2005 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
2006
c64216addd7f Add support for the send/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 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
2008 # 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
2009 # 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
2010 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
2011
c64216addd7f Add support for the send/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 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
2014 # 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
2015
c64216addd7f Add support for the send/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 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
2017 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
2018 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
2019
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
2022 # 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
2023 # 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
2024
c64216addd7f Add support for the send/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 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
2026 # 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
2027 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
2028
c64216addd7f Add support for the send/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 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
2030 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
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 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
2033 # 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
2034 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
2035
c64216addd7f Add support for the send/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 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
2037 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
2038 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
2039
c64216addd7f Add support for the send/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 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
2041 # 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
2042 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
2043
c64216addd7f Add support for the send/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 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
2045 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
2046 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
2047
c64216addd7f Add support for the send/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 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
2049 # 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
2050 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
2051
c64216addd7f Add support for the send/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 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
2053 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
2054 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
2055
c64216addd7f Add support for the send/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 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
2057 # 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
2058 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
2059
c64216addd7f Add support for the send/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 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
2061 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
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 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
2064 # 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
2065 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
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 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
2068 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
2069 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
2070 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
2071 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
2072 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
2073 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
2074 [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
2075 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
2076 [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
2077 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
2078 [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
2079 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
2080 [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
2081 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
2082 [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
2083 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
2084
c64216addd7f Add support for the send/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 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
2086 # 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
2087 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
2088
c64216addd7f Add support for the send/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 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
2090 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
2091 [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
2092 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
2093 [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
2094 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
2095 [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
2096 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
2097 [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
2098 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
2099 [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
2100 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
2101 [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
2102 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
2103
c64216addd7f Add support for the send/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 @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
2105 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
2106 # 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
2107 # 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
2108 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
2109
c64216addd7f Add support for the send/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 @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
2111 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
2112 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
2113 [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
2114 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
2115 [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
2116 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
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 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
2119 # 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
2120 # 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
2121 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
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 _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
2124 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
2125 # 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
2126 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
2127 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
2128 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
2129 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
2130
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2131 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
2132 # 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
2133 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
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 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
2136 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
2137 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
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
c64216addd7f Add support for the send/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 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
2141 # 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
2142 # 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
2143
c64216addd7f Add support for the send/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 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
2145 # 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
2146 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
2147
c64216addd7f Add support for the send/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 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
2149 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
2150
c64216addd7f Add support for the send/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 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
2152 # 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
2153 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
2154 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
2155
c64216addd7f Add support for the send/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 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
2157 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
2158 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
2159 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
2160 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
2161 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
2162 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
2163 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
2164
c64216addd7f Add support for the send/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 # 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
2166
c64216addd7f Add support for the send/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 # 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
2168 # 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
2169 # 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
2170 @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
2171 "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
2172 "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
2173 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
2174 # 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
2175 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
2176 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
2177
c64216addd7f Add support for the send/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 @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
2179 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
2180 try:
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2181 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
2182 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
2183 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
2184 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
2185 (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
2186 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
2187 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
2188
c64216addd7f Add support for the send/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 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
2191 # 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
2192 # (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
2193 # 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
2194
c64216addd7f Add support for the send/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 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
2196 # 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
2197 # 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
2198 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
2199
c64216addd7f Add support for the send/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 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
2201 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
2202 [MSG])
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
2203 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
2204 [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
2205
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
2208 # 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
2209 # 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
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 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
2212 # 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
2213 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
2214 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
2215 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
2216 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
2217 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
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 _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
2220 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
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 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
2223 # 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
2224 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
2225 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
2226 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
2227 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
2228 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
2229 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
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 _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
2232 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
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 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
2235 # 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
2236 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
2237 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
2238 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
2239 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
2240 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
2241 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
2242
c64216addd7f Add support for the send/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 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
2244 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
2245
72619
4378bae6b8dc Issue #13001: Fix test_socket.testRecvmsgTrunc failure on FreeBSD < 8, which
Charles-François Natali <neologix@free.fr>
parents: 72587
diff changeset
2246 # 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
2247 # 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
2248 @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
2249 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
2250 # 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
2251 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
2252 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
2253 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
2254 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
2255 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
2256 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
2257
72619
4378bae6b8dc Issue #13001: Fix test_socket.testRecvmsgTrunc failure on FreeBSD < 8, which
Charles-François Natali <neologix@free.fr>
parents: 72587
diff changeset
2258 @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
2259 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
2260 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
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 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
2263 # 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
2264 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
2265 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
2266 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
2267 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
2268 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
2269 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
2270
c64216addd7f Add support for the send/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 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
2272 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
2273
c64216addd7f Add support for the send/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 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
2275 # 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
2276 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
2277 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
2278 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
2279 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
2280 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
2281 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
2282
c64216addd7f Add support for the send/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 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
2284 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
2285
c64216addd7f Add support for the send/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 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
2287 # 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
2288 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
2289 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
2290
c64216addd7f Add support for the send/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 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
2292 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
2293
c64216addd7f Add support for the send/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 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
2295 # 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
2296 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
2297 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
2298 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
2299 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
2300 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
2301 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
2302
c64216addd7f Add support for the send/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 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
2304 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
2305
c64216addd7f Add support for the send/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 @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
2307 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
2308 # 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
2309 # 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
2310
c64216addd7f Add support for the send/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 # 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
2312 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
2313 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
2314 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
2315 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
2316 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
2317 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
2318 # 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
2319 # 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
2320 # 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
2321 # 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
2322 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
2323 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
2324
c64216addd7f Add support for the send/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 # 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
2326 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
2327 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
2328 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
2329 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
2330 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
2331 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
2332 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
2333
c64216addd7f Add support for the send/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 # 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
2335 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
2336 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
2337 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
2338 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
2339 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
2340
c64216addd7f Add support for the send/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 @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
2342 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
2343 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
2344
c64216addd7f Add support for the send/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 @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
2346 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
2347 # 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
2348 # 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
2349 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
2350 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
2351 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
2352 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
2353 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
2354 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
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 @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
2357 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
2358 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
2359
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
2362 # 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
2363 # 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
2364
c64216addd7f Add support for the send/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 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
2366 # 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
2367 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
2368 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
2369 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
2370 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
2371 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
2372
c64216addd7f Add support for the send/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 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
2374 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
2375
c64216addd7f Add support for the send/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 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
2377 # 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
2378 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
2379 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
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=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
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 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
2385 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
2386 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
2387 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
2388
c64216addd7f Add support for the send/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 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
2390 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
2391
c64216addd7f Add support for the send/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 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
2393 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
2394
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
2397 # 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
2398
c64216addd7f Add support for the send/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 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
2400 # 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
2401 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
2402 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
2403 -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
2404 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
2405 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
2406 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
2407 [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
2408 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
2409 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
2410 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
2411 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
2412 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
2413 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
2414
c64216addd7f Add support for the send/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 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
2416 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
2417 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
2418 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
2419 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
2420
c64216addd7f Add support for the send/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 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
2422 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
2423
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
2426 # 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
2427
c64216addd7f Add support for the send/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 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
2429 # 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
2430 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
2431 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
2432 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
2433 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
2434 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
2435 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
2436 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
2437 [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
2438 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
2439 [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
2440 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
2441 [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
2442 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
2443 [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
2444 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
2445 [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
2446 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
2447 [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
2448
c64216addd7f Add support for the send/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 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
2450 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
2451 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
2452 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
2453 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
2454 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
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 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
2457 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
2458
c64216addd7f Add support for the send/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 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
2460 # 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
2461 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
2462 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
2463 (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
2464 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
2465 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
2466 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
2467 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
2468 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
2469
c64216addd7f Add support for the send/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 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
2471 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
2472
c64216addd7f Add support for the send/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 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
2474 # 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
2475 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
2476 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
2477 self.assertEqual(nbytes, len(MSG))
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2478 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
2479 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
2480 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
2481 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
2482
c64216addd7f Add support for the send/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 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
2484 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
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 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
2487 # 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
2488 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
2489 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
2490 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
2491 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
2492 [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
2493 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
2494 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
2495 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
2496 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
2497 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
2498 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
2499 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
2500
c64216addd7f Add support for the send/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 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
2502 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
2503
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
2506 # 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
2507 # 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
2508 # 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
2509
c64216addd7f Add support for the send/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 # 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
2511 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
2512
c64216addd7f Add support for the send/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 @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
2514 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
2515 # 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
2516 # 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
2517 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
2518 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
2519
c64216addd7f Add support for the send/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 # 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
2521 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
2522 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
2523 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
2524 # 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
2525 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
2526 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
2527
c64216addd7f Add support for the send/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 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
2529 # 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
2530 # 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
2531 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
2532 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
2533
c64216addd7f Add support for the send/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 @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
2535 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
2536 # 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
2537 # 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
2538 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
2539 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
2540
c64216addd7f Add support for the send/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 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
2542 # 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
2543 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
2544 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
2545 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
2546 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
2547 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
2548 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
2549 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
2550 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
2551
c64216addd7f Add support for the send/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.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
2553 # 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
2554 # 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
2555 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
2556 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
2557
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
2560 # 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
2561
c64216addd7f Add support for the send/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 # 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
2563 # 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
2564 # 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
2565 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
2566
c64216addd7f Add support for the send/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 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
2568 # 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
2569 # 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
2570 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
2571 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
2572 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
2573 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
2574 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
2575 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
2576 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
2577 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
2578
c64216addd7f Add support for the send/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 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
2580 # 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
2581 # 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
2582 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
2583 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
2584 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
2585
c64216addd7f Add support for the send/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 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
2587 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
2588
c64216addd7f Add support for the send/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 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
2590 # 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
2591 # 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
2592 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
2593 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
2594 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
2595 fds = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2596 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
2597 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
2598 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
2599 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
2600
c64216addd7f Add support for the send/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 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
2602 # 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
2603 # 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
2604 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
2605 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
2606 [(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
2607 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
2608 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
2609 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
2610
c64216addd7f Add support for the send/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 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
2612 # 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
2613 # 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
2614 # 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
2615 # 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
2616 # 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
2617 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
2618 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
2619 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
2620 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
2621 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
2622
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2623 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
2624 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
2625 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
2626 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
2627 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
2628 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
2629 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
2630 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
2631 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
2632 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
2633 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
2634
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2635 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
2636 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
2637
c64216addd7f Add support for the send/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 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
2639 # 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
2640 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
2641 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
2642
c64216addd7f Add support for the send/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 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
2644 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
2645 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
2646 [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
2647 [(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
2648 socket.SCM_RIGHTS,
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2649 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
2650 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
2651
c64216addd7f Add support for the send/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 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
2653 # 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
2654 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
2655 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
2656
c64216addd7f Add support for the send/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 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
2658 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
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 @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
2661 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
2662 # 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
2663 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
2664 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
2665 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
2666
c64216addd7f Add support for the send/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 @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
2668 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
2669 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
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 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
2672 # 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
2673 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
2674 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
2675 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
2676 # 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
2677 # 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
2678 # 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
2679 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
2680
c64216addd7f Add support for the send/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 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
2682 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
2683
85019
b7d764807343 Issue #17684: Fix some test_socket failures due to limited FD passing support
Charles-Francois Natali <cf.natali@gmail.com>
parents: 84527
diff changeset
2684 @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958")
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
2685 @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
2686 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
2687 # 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
2688 # 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
2689 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
2690 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
2691 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
2692
c64216addd7f Add support for the send/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 @testFDPassSeparate.client_skip
85019
b7d764807343 Issue #17684: Fix some test_socket failures due to limited FD passing support
Charles-Francois Natali <cf.natali@gmail.com>
parents: 84527
diff changeset
2694 @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958")
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
2695 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
2696 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
2697 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
2698 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
2699 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
2700 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
2701 (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
2702 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
2703 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
2704 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
2705
85019
b7d764807343 Issue #17684: Fix some test_socket failures due to limited FD passing support
Charles-Francois Natali <cf.natali@gmail.com>
parents: 84527
diff changeset
2706 @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958")
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
2707 @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
2708 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
2709 # 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
2710 # 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
2711 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
2712 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
2713 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
2714 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
2715 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
2716
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
2717 @testFDPassSeparateMinSpace.client_skip
85019
b7d764807343 Issue #17684: Fix some test_socket failures due to limited FD passing support
Charles-Francois Natali <cf.natali@gmail.com>
parents: 84527
diff changeset
2718 @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958")
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
2719 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
2720 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
2721 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
2722 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
2723 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
2724 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
2725 (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
2726 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
2727 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
2728 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
2729
c64216addd7f Add support for the send/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 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
2731 # 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
2732 # 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
2733 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
2734 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
2735 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
2736 # 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
2737 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
2738 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
2739 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
2740
c64216addd7f Add support for the send/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 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
2742 # 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
2743 # 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
2744 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
2745 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
2746 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
2747
c64216addd7f Add support for the send/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 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
2749 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
2750 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
2751 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
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 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
2754 # 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
2755 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
2756 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
2757 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
2758 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
2759 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
2760 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
2761 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
2762 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
2763 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
2764 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
2765
c64216addd7f Add support for the send/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 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
2767 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
2768 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
2769 [(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
2770 socket.SCM_RIGHTS,
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2771 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
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 @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
2774 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
2775 # 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
2776 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
2777 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
2778 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
2779 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
2780 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
2781 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
2782 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
2783 # 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
2784 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
2785 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
2786 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
2787 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
2788 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
2789 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
2790 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
2791
c64216addd7f Add support for the send/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 @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
2793 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
2794 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
2795 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
2796 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
2797 [(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
2798 socket.SCM_RIGHTS,
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2799 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
2800 (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
2801 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
2802 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
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 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
2805 # 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
2806 # 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
2807 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
2808 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
2809 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
2810 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
2811 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
2812 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
2813
c64216addd7f Add support for the send/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 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
2815 # 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
2816 # 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
2817 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
2818 # 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
2819 # 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
2820 # 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
2821 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
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 _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
2824 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
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 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
2827 # 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
2828 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
2829 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
2830
c64216addd7f Add support for the send/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 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
2832 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
2833
c64216addd7f Add support for the send/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 # 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
2835 # (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
2836
c64216addd7f Add support for the send/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 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
2838 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
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 _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
2841 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
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 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
2844 # 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
2845 # 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
2846 # 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
2847 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
2848 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
2849
c64216addd7f Add support for the send/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 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
2851 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
2852
c64216addd7f Add support for the send/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 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
2854 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
2855 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
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 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
2858 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
2859
c64216addd7f Add support for the send/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 # 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
2861 # 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
2862
c64216addd7f Add support for the send/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 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
2864 # 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
2865 # 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
2866 # 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
2867 # 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
2868 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
2869 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
2870 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
2871 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
2872 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
2873
c64216addd7f Add support for the send/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 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
2875 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
2876 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
2877 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
2878 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
2879 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
2880 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
2881 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
2882 fds = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2883 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
2884 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
2885 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
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 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
2888 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
2889
c64216addd7f Add support for the send/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 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
2891 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
2892
c64216addd7f Add support for the send/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 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
2894 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
2895
c64216addd7f Add support for the send/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 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
2897 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
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 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
2900 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
2901 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
2902
c64216addd7f Add support for the send/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 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
2904 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
2905
c64216addd7f Add support for the send/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 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
2907 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
2908 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
2909
c64216addd7f Add support for the send/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 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
2911 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
2912
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
2915 # 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
2916 # 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
2917 # 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
2918 # 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
2919 # 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
2920 # 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
2921 # 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
2922 # 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
2923
c64216addd7f Add support for the send/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 # 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
2925 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
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 # 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
2928 # -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
2929 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
2930
c64216addd7f Add support for the send/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 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
2932 # 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
2933 # 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
2934 # 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
2935 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
2936 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
2937 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
2938 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
2939 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
2940
c64216addd7f Add support for the send/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 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
2942 # 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
2943 # 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
2944 # 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
2945 # 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
2946 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
2947 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
2948 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
2949 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
2950 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
2951
c64216addd7f Add support for the send/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.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
2953 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
2954 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
2955 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
2956
c64216addd7f Add support for the send/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 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
2958 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
2959 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
2960 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
2961 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
2962 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
2963 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
2964 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
2965 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
2966 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
2967 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
2968
c64216addd7f Add support for the send/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 @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
2970 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
2971 # 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
2972 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
2973
c64216addd7f Add support for the send/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 @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
2975 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
2976 # 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
2977 # 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
2978 # 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
2979 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
2980 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
2981
c64216addd7f Add support for the send/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 @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
2983 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
2984 # 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
2985 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
2986
c64216addd7f Add support for the send/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 @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
2988 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
2989 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
2990 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
2991
c64216addd7f Add support for the send/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 # 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
2993 # 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
2994 # 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
2995 # 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
2996
c64216addd7f Add support for the send/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 @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
2998 @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
2999 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
3000 # 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
3001 # 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
3002 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
3003
c64216addd7f Add support for the send/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 @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
3005 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
3006 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
3007 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
3008 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
3009 [(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
3010 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
3011 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
3012
c64216addd7f Add support for the send/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 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
3014 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
3015 # 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
3016 # 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
3017 # 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
3018 # 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
3019 # 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
3020 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
3021 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
3022 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
3023 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
3024 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
3025 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
3026 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
3027
c64216addd7f Add support for the send/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 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
3029 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
3030 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
3031 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
3032 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
3033 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
3034
c64216addd7f Add support for the send/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 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
3036 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
3037 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
3038 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
3039 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
3040 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
3041
c64216addd7f Add support for the send/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 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
3043 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
3044 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
3045 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
3046 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
3047 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
3048
c64216addd7f Add support for the send/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 @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
3050 "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
3051 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
3052 # 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
3053 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
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 @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
3056 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
3057 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
3058 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
3059
c64216addd7f Add support for the send/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 @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
3061 "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
3062 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
3063 # 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
3064 # 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
3065 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
3066 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
3067
c64216addd7f Add support for the send/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 @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
3069 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
3070 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
3071 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
3072
c64216addd7f Add support for the send/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 @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
3074 @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
3075 "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
3076 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
3077 # 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
3078 # 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
3079 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
3080 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
3081
c64216addd7f Add support for the send/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 @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
3083 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
3084 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
3085 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
3086 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
3087 [(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
3088 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
3089 (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
3090 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
3091 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
3092
c64216addd7f Add support for the send/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 @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
3094 @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
3095 "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
3096 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
3097 # 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
3098 # 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
3099 # 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
3100 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
3101 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
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 @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
3104 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
3105 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
3106 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
3107 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
3108 [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
3109 [(socket.IPPROTO_IPV6, socket.IPV6_TCLASS,
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
3110 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
3111 (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
3112 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
3113 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
3114 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
3115 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
3116 [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
3117 [(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
3118 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
3119 (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
3120 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
3121 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
3122
c64216addd7f Add support for the send/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 # 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
3124
c64216addd7f Add support for the send/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 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
3126 # 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
3127 # 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
3128 # 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
3129 # 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
3130 # (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
3131 # 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
3132 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
3133 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
3134 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
3135 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
3136 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
3137 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
3138
c64216addd7f Add support for the send/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 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
3140 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
3141 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
3142 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
3143 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
3144
c64216addd7f Add support for the send/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 @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
3146 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
3147 # 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
3148 # 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
3149 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
3150 # 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
3151 # 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
3152 # 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
3153 # 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
3154 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
3155
c64216addd7f Add support for the send/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 @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
3157 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
3158 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
3159 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
3160
c64216addd7f Add support for the send/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 @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
3162 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
3163 # 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
3164 # 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
3165 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
3166 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
3167
c64216addd7f Add support for the send/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 @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
3169 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
3170 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
3171 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
3172
c64216addd7f Add support for the send/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 # 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
3174 # (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
3175
c64216addd7f Add support for the send/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 @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
3177 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
3178 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
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 @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
3181 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
3182 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
3183 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
3184
c64216addd7f Add support for the send/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 @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
3186 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
3187 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
3188
c64216addd7f Add support for the send/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 @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
3190 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
3191 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
3192 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
3193
c64216addd7f Add support for the send/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 @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
3195 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
3196 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
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 @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
3199 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
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, "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 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
3205 # 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
3206 # 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
3207 # 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
3208 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
3209 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
3210 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
3211 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
3212 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
3213
c64216addd7f Add support for the send/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 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
3215 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
3216 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
3217
c64216addd7f Add support for the send/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 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
3219 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
3220 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
3221 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
3222 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
3223 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
3224
c64216addd7f Add support for the send/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 @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
3226 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
3227 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
3228 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
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 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
3231 # 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
3232 # 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
3233 # 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
3234 # 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
3235 # (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
3236 # 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
3237 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
3238 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
3239 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
3240 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
3241 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
3242 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
3243 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
3244
c64216addd7f Add support for the send/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 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
3246 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
3247 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
3248 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
3249
c64216addd7f Add support for the send/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.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
3251 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
3252 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
3253 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
3254 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
3255 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
3256 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
3257 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
3258 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
3259
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3260 # 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
3261
c64216addd7f Add support for the send/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 @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
3263 "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
3264 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
3265 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
3266 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
3267
c64216addd7f Add support for the send/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 @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
3269 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
3270 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
3271 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
3272
c64216addd7f Add support for the send/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 @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
3274 "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
3275 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
3276 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
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 @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
3279 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
3280 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
3281 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
3282
c64216addd7f Add support for the send/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 @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
3284 "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
3285 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
3286 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
3287 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
3288
c64216addd7f Add support for the send/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 @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
3290 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
3291 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
3292 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
3293
c64216addd7f Add support for the send/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 @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
3295 "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
3296 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
3297 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
3298 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
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 @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
3301 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
3302 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
3303 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
3304
c64216addd7f Add support for the send/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 @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
3306 "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
3307 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
3308 # 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
3309 # 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
3310 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
3311 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
3312 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
3313 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
3314 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
3315 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
3316 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
3317 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
3318
c64216addd7f Add support for the send/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 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
3320 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
3321 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
3322
c64216addd7f Add support for the send/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 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
3324
c64216addd7f Add support for the send/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 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
3326 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
3327 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
3328 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
3329 a = array.array("i")
72034
d49cf0800c14 Fix deprecation warnings in test_socket.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 72029
diff changeset
3330 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
3331 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
3332 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
3333
c64216addd7f Add support for the send/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 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
3335 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
3336 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
3337 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
3338 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
3339
c64216addd7f Add support for the send/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 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
3341
c64216addd7f Add support for the send/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 @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
3343 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
3344 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
3345 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
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
c64216addd7f Add support for the send/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 # 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
3349
c64216addd7f Add support for the send/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 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
3351 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
3352 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
3353 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
3354
c64216addd7f Add support for the send/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 @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
3356 @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
3357 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
3358 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
3359
c64216addd7f Add support for the send/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 @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
3361 @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
3362 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
3363 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
3364
c64216addd7f Add support for the send/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 @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
3366 @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
3367 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
3368 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
3369
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
3372 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
3373 ThreadedSocketTestMixin, UDP6TestBase):
84527
330c7aa2922b Issue #18308: don't take the scope ID into account when comparing IPv6
Charles-François Natali <cf.natali@gmail.com>
parents: 84075
diff changeset
3374
330c7aa2922b Issue #18308: don't take the scope ID into account when comparing IPv6
Charles-François Natali <cf.natali@gmail.com>
parents: 84075
diff changeset
3375 def checkRecvmsgAddress(self, addr1, addr2):
330c7aa2922b Issue #18308: don't take the scope ID into account when comparing IPv6
Charles-François Natali <cf.natali@gmail.com>
parents: 84075
diff changeset
3376 # Called to compare the received address with the address of
330c7aa2922b Issue #18308: don't take the scope ID into account when comparing IPv6
Charles-François Natali <cf.natali@gmail.com>
parents: 84075
diff changeset
3377 # the peer, ignoring scope ID
330c7aa2922b Issue #18308: don't take the scope ID into account when comparing IPv6
Charles-François Natali <cf.natali@gmail.com>
parents: 84075
diff changeset
3378 self.assertEqual(addr1[:-1], addr2[:-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
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, "sendmsg")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3381 @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
3382 @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
3383 @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
3384 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
3385 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
3386
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3387 @requireAttrs(socket.socket, "recvmsg")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3388 @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
3389 @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
3390 @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
3391 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
3392 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
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")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3395 @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
3396 @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
3397 @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
3398 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
3399 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
3400
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3401 @requireAttrs(socket.socket, "recvmsg")
77988
b71dc2e9e00d #15284: Skip {send,recv}msg tests with disabled IPv6
Ross Lagerwall <rosslagerwall@gmail.com>
parents: 77662
diff changeset
3402 @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
3403 @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
3404 @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
3405 @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
3406 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
3407 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
3408 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
3409
c64216addd7f Add support for the send/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 @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
3411 @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
3412 @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
3413 @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
3414 @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
3415 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
3416 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
3417 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
3418 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
3419
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
3422 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
3423 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
3424
c64216addd7f Add support for the send/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 @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
3426 @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
3427 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
3428 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
3429
c64216addd7f Add support for the send/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 @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
3431 @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
3432 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
3433 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
3434 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
3435
c64216addd7f Add support for the send/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 @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
3437 @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
3438 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
3439 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
3440 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
3441
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/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 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
3444 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
3445 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
3446 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
3447
c64216addd7f Add support for the send/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 @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
3449 @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
3450 @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
3451 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
3452 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
3453
c64216addd7f Add support for the send/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 @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
3455 @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
3456 @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
3457 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
3458 SendrecvmsgSCTPStreamTestBase):
80889
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3459
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3460 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
3461 try:
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3462 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
3463 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
3464 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
3465 raise
391bda06fa65 Silence sporadic failure in RecvmsgSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 79785
diff changeset
3466 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
3467
c64216addd7f Add support for the send/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 @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
3469 @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
3470 @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
3471 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
3472 SendrecvmsgSCTPStreamTestBase):
80941
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3473
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3474 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
3475 try:
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3476 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
3477 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
3478 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
3479 raise
13d8c33de8ff Silence sporadic failure in RecvmsgIntoSCTPStreamTest.testRecvmsgEOF (issue #13876) - probably not Python-related.
Antoine Pitrou <solipsis@pitrou.net>
parents: 80889
diff changeset
3480 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
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 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
3484 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
3485 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
3486
c64216addd7f Add support for the send/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 @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
3488 @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
3489 @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
3490 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
3491 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
3492
c64216addd7f Add support for the send/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 @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
3494 @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
3495 @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
3496 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
3497 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
3498 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
3499
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3500 @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
3501 @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
3502 @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
3503 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
3504 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
3505 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
3506
c64216addd7f Add support for the send/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 @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
3508 @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
3509 @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
3510 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
3511 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
3512
c64216addd7f Add support for the send/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 @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
3514 @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
3515 @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
3516 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
3517 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
3518 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
3519
c64216addd7f Add support for the send/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 # 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
3522 # 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
3523 # 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
3524 # 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
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 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
3527 # 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
3528 # 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
3529 # 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
3530
c64216addd7f Add support for the send/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 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
3532 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
3533 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
3534 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
3535 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
3536 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
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 # 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
3539 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
3540
c64216addd7f Add support for the send/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 # 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
3542 # 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
3543 # 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
3544 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
3545 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
3546
c64216addd7f Add support for the send/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 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
3548 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
3549 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
3550 # 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
3551 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
3552
c64216addd7f Add support for the send/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 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
3554 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
3555
c64216addd7f Add support for the send/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
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3557 # 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
3558 # 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
3559 @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
3560 @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
3561 "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
3562 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
3563 # 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
3564 # 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
3565
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3566 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
3567 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
3568 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
3569
c64216addd7f Add support for the send/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 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
3571 # 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
3572 # 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
3573 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
3574 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
3575 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
3576 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
3577 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
3578
c64216addd7f Add support for the send/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 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
3580 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
3581
c64216addd7f Add support for the send/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 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
3583 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
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 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
3586 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
3587
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3588 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
3589 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
3590
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3591 @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
3592 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
3593 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
3594
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3595 @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
3596 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
3597 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
3598
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3599
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3600 # 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
3601 # 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
3602 @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
3603 @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
3604 "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
3605 @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
3606 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
3607 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
3608 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
3609 # 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
3610 # 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
3611
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3612 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
3613 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
3614 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
3615 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
3616 # 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
3617 # 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
3618 # 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
3619 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
3620 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
3621 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
3622 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
3623 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
3624 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
3625
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3626 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
3627 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
3628
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3629 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
3630 # 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
3631 # 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
3632 # signal.
80933
50d19c2fac82 Issue #16717: get rid of socket.error, replace with OSError
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80889
diff changeset
3633 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
3634 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
3635 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
3636 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
3637 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
3638 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
3639
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
3640 # 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
3641 @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
3642 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
3643 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
3644
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
3645 @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
3646 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
3647 # 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
3648 # 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
3649 # 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
3650 # 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
3651 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
3652 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
3653
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
3654 @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
3655 @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
3656 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
3657 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
3658
c64216addd7f Add support for the send/recvmsg API to the socket module. Patch by David Watson and Heiko Wundram. (Closes #6560)
Nick Coghlan <ncoghlan@gmail.com>
parents: 72011
diff changeset
3659
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
3660 @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
3661 class TCPCloserTest(ThreadedTCPSocketTest):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3662
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3663 def testClose(self):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3664 conn, addr = self.serv.accept()
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3665 conn.close()
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3666
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3667 sd = self.cli
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3668 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
3669 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
3670 self.assertEqual(sd.recv(1), b'')
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3671
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3672 # 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
3673 conn.close()
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3674 conn.close()
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3675
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3676 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
3677 self.cli.connect((HOST, self.port))
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3678 time.sleep(1.0)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
3679
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3680 @unittest.skipUnless(hasattr(socket, 'socketpair'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3681 'test needs socket.socketpair()')
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
3682 @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
3683 class BasicSocketPairTest(SocketPairTest):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3684
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3685 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
3686 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
3687
64754
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3688 def _check_defaults(self, sock):
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3689 self.assertIsInstance(sock, socket.socket)
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3690 if hasattr(socket, 'AF_UNIX'):
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3691 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
3692 else:
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3693 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
3694 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
3695 self.assertEqual(sock.proto, 0)
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3696
64747
534853ba8cd3 Issue #1552: socket.socketpair() now returns regular socket.socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 64593
diff changeset
3697 def _testDefaults(self):
64754
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3698 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
3699
534853ba8cd3 Issue #1552: socket.socketpair() now returns regular socket.socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 64593
diff changeset
3700 def testDefaults(self):
64754
b81e8e3fa5bb Make testDefaults in test.test_socket.BasicSocketPairTest more reliable.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64747
diff changeset
3701 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
3702
33063
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3703 def testRecv(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3704 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
3705 self.assertEqual(msg, MSG)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3706
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3707 def _testRecv(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3708 self.cli.send(MSG)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3709
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3710 def testSend(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3711 self.serv.send(MSG)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3712
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3713 def _testSend(self):
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3714 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
3715 self.assertEqual(msg, MSG)
90da70986407 Patch #1003700: Add socketpair function to socket module.
Dave Cole <djc@object-craft.com.au>
parents: 32630
diff changeset
3716
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
3717 @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
3718 class NonBlockingTCPTests(ThreadedTCPSocketTest):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3719
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3720 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
3721 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
3722
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3723 def testSetBlocking(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3724 # Testing whether set blocking works
81587
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3725 self.serv.setblocking(True)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3726 self.assertIsNone(self.serv.gettimeout())
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3727 self.serv.setblocking(False)
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3728 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
3729 start = time.time()
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3730 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3731 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
3732 except OSError:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3733 pass
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3734 end = time.time()
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
3735 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
3736 # Issue 15989
974ace29ee2d Issue #15989: Fix several occurrences of integer overflow
Serhiy Storchaka <storchaka@gmail.com>
parents: 79784
diff changeset
3737 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
3738 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
3739 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
3740
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3741 def _testSetBlocking(self):
17208
c8817a9bbbdd Make socket.getservbyname test optional on socket module having that
Barry Warsaw <barry@python.org>
parents: 16519
diff changeset
3742 pass
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
3743
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3744 @unittest.skipUnless(hasattr(socket, 'SOCK_NONBLOCK'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3745 'test needs socket.SOCK_NONBLOCK')
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3746 @support.requires_linux_version(2, 6, 28)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3747 def testInitNonBlocking(self):
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3748 # reinit server socket
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3749 self.serv.close()
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3750 self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM |
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3751 socket.SOCK_NONBLOCK)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3752 self.port = support.bind_port(self.serv)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3753 self.serv.listen(1)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3754 # actual testing
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3755 start = time.time()
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3756 try:
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3757 self.serv.accept()
86896
09105051b9f4 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85679
diff changeset
3758 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
3759 pass
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3760 end = time.time()
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3761 self.assertTrue((end - start) < 1.0, "Error creating with non-blocking mode.")
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3762
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3763 def _testInitNonBlocking(self):
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
3764 pass
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
3765
67382
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3766 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
3767 # 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
3768 # 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
3769 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
3770 try:
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3771 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
3772 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
3773 finally:
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3774 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
3775 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
3776
ed0259230611 Issue #7995: When calling accept() on a socket with a timeout, the returned
Antoine Pitrou <solipsis@pitrou.net>
parents: 67344
diff changeset
3777 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
3778 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
3779 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
3780 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
3781 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
3782
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3783 def testAccept(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3784 # 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
3785 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
3786 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3787 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
3788 except OSError:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3789 pass
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3790 else:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3791 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
3792 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
3793 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
3794 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
3795 conn.close()
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3796 else:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3797 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
3798
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3799 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
3800 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
3801 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
3802
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3803 def testConnect(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3804 # 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
3805 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
3806 conn.close()
4880
9a7e9f10aed6 Test of the socket module. The following functions and methods are
Barry Warsaw <barry@python.org>
parents:
diff changeset
3807
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3808 def _testConnect(self):
23818
8a0a14e3725e Fix non-blocking connect() for Windows. Refactored the code
Guido van Rossum <guido@python.org>
parents: 23815
diff changeset
3809 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
3810 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
3811
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3812 def testRecv(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3813 # 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
3814 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
3815 conn.setblocking(0)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3816 try:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3817 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
3818 except OSError:
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3819 pass
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3820 else:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3821 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
3822 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
3823 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
3824 msg = conn.recv(len(MSG))
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
3825 conn.close()
23794
1f1a6f7dd600 Lose the message on assertEqual calls -- they actually hide
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
3826 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
3827 else:
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3828 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
3829
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3830 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
3831 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
3832 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
3833 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
3834
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
3835 @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
3836 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
3837 """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
3838
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3839 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
3840 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
3841 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
3842
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3843 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
3844 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
3845 to the client.
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3846 """
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 21315
diff changeset
3847
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
3848 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
3849 encoding = 'utf-8'
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3850 errors = 'strict'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3851 newline = None
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3852
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3853 read_mode = 'rb'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3854 read_msg = MSG
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3855 write_mode = 'wb'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3856 write_msg = MSG
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
3857
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3858 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
3859 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
3860
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3861 def setUp(self):
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
3862 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
3863 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
3864 SocketConnectedTest.setUp(self)
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3865 self.read_file = self.cli_conn.makefile(
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3866 self.read_mode, self.bufsize,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3867 encoding = self.encoding,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3868 errors = self.errors,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3869 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
3870
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3871 def tearDown(self):
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
3872 self.serv_finished.set()
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3873 self.read_file.close()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3874 self.assertTrue(self.read_file.closed)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3875 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
3876 SocketConnectedTest.tearDown(self)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3877
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3878 def clientSetUp(self):
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3879 SocketConnectedTest.clientSetUp(self)
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3880 self.write_file = self.serv_conn.makefile(
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3881 self.write_mode, self.bufsize,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3882 encoding = self.encoding,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3883 errors = self.errors,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3884 newline = self.newline)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 21315
diff changeset
3885
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3886 def clientTearDown(self):
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
3887 self.cli_finished.set()
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3888 self.write_file.close()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3889 self.assertTrue(self.write_file.closed)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3890 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
3891 SocketConnectedTest.clientTearDown(self)
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3892
68032
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3893 def testReadAfterTimeout(self):
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3894 # 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
3895 # after a timeout has occurred.
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3896 self.cli_conn.settimeout(1)
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3897 self.read_file.read(3)
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3898 # First read raises a timeout
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3899 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
3900 # Second read is disallowed
81039
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80942
diff changeset
3901 with self.assertRaises(OSError) as ctx:
68032
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3902 self.read_file.read(1)
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3903 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
3904
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3905 def _testReadAfterTimeout(self):
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3906 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
3907 self.write_file.flush()
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3908 self.serv_finished.wait()
59f9ed12f17a Merged revisions 88622 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 67382
diff changeset
3909
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3910 def testSmallRead(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3911 # Performing small file read test
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3912 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
3913 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
3914 msg = first_seg + second_seg
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3915 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
3916
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3917 def _testSmallRead(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3918 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3919 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
3920
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3921 def testFullRead(self):
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3922 # read until EOF
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3923 msg = self.read_file.read()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3924 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
3925
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3926 def _testFullRead(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3927 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3928 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
3929
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3930 def testUnbufferedRead(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3931 # Performing unbuffered file read test
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3932 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
3933 while 1:
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3934 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
3935 if not char:
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3936 break
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3937 buf += char
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3938 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
3939
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3940 def _testUnbufferedRead(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3941 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3942 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
3943
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3944 def testReadline(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
3945 # Performing file readline test
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3946 line = self.read_file.readline()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3947 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
3948
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
3949 def _testReadline(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3950 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3951 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
3952
42434
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3953 def testCloseAfterMakefile(self):
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3954 # 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
3955 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
3956 # read until EOF
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3957 msg = self.read_file.read()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3958 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
3959
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3960 def _testCloseAfterMakefile(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3961 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3962 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
3963
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3964 def testMakefileAfterMakefileClose(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3965 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
3966 msg = self.cli_conn.recv(len(MSG))
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3967 if isinstance(self.read_msg, str):
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3968 msg = msg.decode()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3969 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
3970
c35140559f87 Make sure socket.close() doesn't interfere with socket.makefile().
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 42169
diff changeset
3971 def _testMakefileAfterMakefileClose(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3972 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3973 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
3974
31833
a910b822b12c SF bug 924242: socket._fileobject._getclosed() returns wrong value
Tim Peters <tim.peters@gmail.com>
parents: 31503
diff changeset
3975 def testClosedAttr(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3976 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
3977
a910b822b12c SF bug 924242: socket._fileobject._getclosed() returns wrong value
Tim Peters <tim.peters@gmail.com>
parents: 31503
diff changeset
3978 def _testClosedAttr(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3979 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
3980
49782
5ffd67df8c9f Follow-up of r67300: correct a failure in socket.makefile().
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 48623
diff changeset
3981 def testAttributes(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3982 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
3983 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
3984
5ffd67df8c9f Follow-up of r67300: correct a failure in socket.makefile().
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 48623
diff changeset
3985 def _testAttributes(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3986 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
3987 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
3988
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3989 def testRealClose(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3990 self.read_file.close()
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
3991 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
3992 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
3993 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
3994
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3995 def _testRealClose(self):
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3996 pass
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3997
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
3998
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
3999 class FileObjectInterruptedTestCase(unittest.TestCase):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4000 """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
4001
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4002 class MockSocket(object):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4003 def __init__(self, recv_funcs=()):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4004 # 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
4005 # call to recv().
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4006 self._recv_step = iter(recv_funcs)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4007
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4008 def recv_into(self, buffer):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4009 data = next(self._recv_step)()
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4010 assert len(buffer) >= len(data)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4011 buffer[:len(data)] = data
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4012 return len(data)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4013
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4014 def _decref_socketios(self):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4015 pass
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4016
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4017 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
4018 raw = socket.SocketIO(self, "r")
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4019 if buffering < 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4020 buffering = io.DEFAULT_BUFFER_SIZE
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4021 if buffering == 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4022 return raw
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4023 buffer = io.BufferedReader(raw, buffering)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4024 text = io.TextIOWrapper(buffer, None, None)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4025 text.mode = "rb"
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4026 return text
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4027
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4028 @staticmethod
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4029 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
4030 raise OSError(errno.EINTR, "interrupted")
58146
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 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
4033 raw = socket.SocketIO(mock, "r")
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4034 if buffering < 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4035 buffering = io.DEFAULT_BUFFER_SIZE
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4036 if buffering == 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4037 return raw
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4038 buffer = io.BufferedReader(raw, buffering)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4039 text = io.TextIOWrapper(buffer, None, None)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4040 text.mode = "rb"
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4041 return text
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4042
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4043 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
4044 mock_sock = self.MockSocket(recv_funcs=[
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4045 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
4046 self._raise_eintr,
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4047 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
4048 lambda : b"",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4049 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
4050 ])
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4051 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
4052 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
4053 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
4054
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4055 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
4056 mock_sock = self.MockSocket(recv_funcs=[
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4057 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
4058 self._raise_eintr,
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4059 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
4060 lambda : b"",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4061 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
4062 ])
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4063 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
4064 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
4065 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
4066 if buffering == 0:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4067 data = b''
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4068 else:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4069 data = ''
68142
be6c38d1817b Normalize the encoding names for Latin-1 and UTF-8 to
Marc-André Lemburg <mal@egenix.com>
parents: 67382
diff changeset
4070 expecting = expecting.decode('utf-8')
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4071 while len(data) != len(expecting):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4072 part = fo.read(size)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4073 if not part:
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4074 break
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4075 data += part
66310
9fe76c26ea9f #9424: Replace deprecated assert* methods in the Python test suite.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66279
diff changeset
4076 self.assertEqual(data, expecting)
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4077
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4078 def test_default(self):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4079 self._test_readline()
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4080 self._test_readline(size=100)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4081 self._test_read()
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4082 self._test_read(size=100)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4083
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4084 def test_with_1k_buffer(self):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4085 self._test_readline(buffering=1024)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4086 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
4087 self._test_read(buffering=1024)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4088 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
4089
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4090 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
4091 mock_sock = self.MockSocket(recv_funcs=[
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4092 lambda : b"a",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4093 lambda : b"\n",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4094 lambda : b"B",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4095 self._raise_eintr,
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4096 lambda : b"b",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4097 lambda : b"",
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4098 ])
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4099 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
4100 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
4101 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
4102
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4103 def test_no_buffer(self):
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4104 self._test_readline_no_buffer()
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4105 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
4106 self._test_read(buffering=0)
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4107 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
4108
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
4109
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4110 class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4111
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4112 """Repeat the tests from FileObjectClassTestCase with bufsize==0.
24674
3269bdd65988 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 24655
diff changeset
4113
24634
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4114 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
4115 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
4116 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
4117 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
4118 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
4119
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4120 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
4121
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4122 def testUnbufferedReadline(self):
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4123 # 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
4124 line = self.read_file.readline() # first line
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4125 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
4126 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
4127 line = self.read_file.readline() # second line
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4128 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
4129
778093533a46 "Unbuffered" mode of class _fileobject wasn't actually unbuffered,
Guido van Rossum <guido@python.org>
parents: 24485
diff changeset
4130 def _testUnbufferedReadline(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4131 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
4132 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
4133 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
4134
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4135 def testMakefileClose(self):
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4136 # 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
4137 self.cli_conn.close()
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4138 msg = self.cli_conn.recv(1024)
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4139 self.assertEqual(msg, self.read_msg)
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4140 # ...until the file is itself closed
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4141 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
4142 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
4143
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4144 def _testMakefileClose(self):
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4145 self.write_file.write(self.write_msg)
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4146 self.write_file.flush()
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4147
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4148 def testMakefileCloseSocketDestroy(self):
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4149 refcount_before = sys.getrefcount(self.cli_conn)
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4150 self.read_file.close()
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4151 refcount_after = sys.getrefcount(self.cli_conn)
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4152 self.assertEqual(refcount_before - 1, refcount_after)
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4153
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4154 def _testMakefileCloseSocketDestroy(self):
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4155 pass
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4156
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4157 # Non-blocking ops
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4158 # 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
4159 # `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
4160
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4161 def testSmallReadNonBlocking(self):
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4162 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
4163 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
4164 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
4165 self.evt1.set()
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4166 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
4167 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
4168 if first_seg is None:
68a319ef70fc Issue #11749: try to fix transient test_socket failure
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
4169 # 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
4170 time.sleep(0.5)
68a319ef70fc Issue #11749: try to fix transient test_socket failure
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
4171 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
4172 buf = bytearray(10)
65258
1875bfed5689 Issue #10041: The signature of optional arguments in socket.makefile()
Antoine Pitrou <solipsis@pitrou.net>
parents: 64959
diff changeset
4173 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
4174 self.assertEqual(n, 3)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4175 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
4176 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
4177 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
4178 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
4179
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4180 def _testSmallReadNonBlocking(self):
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4181 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
4182 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
4183 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
4184 self.evt2.set()
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4185 # 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
4186 # 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
4187 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
4188
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4189 def testWriteNonBlocking(self):
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4190 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
4191 # 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
4192 # 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
4193 if self.serv_skipped:
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4194 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
4195
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4196 def _testWriteNonBlocking(self):
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4197 self.serv_skipped = None
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4198 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
4199 # Try to saturate the socket buffer pipe with repeated large writes.
85450
498957c97c2b Issue #18643: Fix some test_socket failures due to large default socket buffer
Charles-François Natali <cf.natali@gmail.com>
parents: 85360
diff changeset
4200 BIG = b"x" * support.SOCK_MAX_SIZE
64817
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4201 LIMIT = 10
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4202 # 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
4203 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
4204 self.assertGreater(n, 0)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4205 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
4206 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
4207 if n is None:
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4208 # Succeeded
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4209 break
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4210 self.assertGreater(n, 0)
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4211 else:
f3dcb314c3e3 Issue #9854: SocketIO objects now observe the RawIOBase interface in
Antoine Pitrou <solipsis@pitrou.net>
parents: 64754
diff changeset
4212 # 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
4213 # 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
4214 # 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
4215 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
4216
50741
5f4c2de95091 Fixes issue #3826 and #4791:
Gregory P. Smith <greg@mad-scientist.com>
parents: 49800
diff changeset
4217
24655
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4218 class LineBufferedFileObjectClassTestCase(FileObjectClassTestCase):
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4219
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4220 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
4221
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4222
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4223 class SmallBufferedFileObjectClassTestCase(FileObjectClassTestCase):
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4224
18ca4e783f98 Replace docstrings on test functions witrh comments -- then unittest
Guido van Rossum <guido@python.org>
parents: 24648
diff changeset
4225 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
4226
40737
6ebad2a6b990 Merged revisions 53451-53537 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
4227
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4228 class UnicodeReadFileObjectClassTestCase(FileObjectClassTestCase):
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4229 """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
4230
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4231 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
4232 read_msg = MSG.decode('utf-8')
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4233 write_mode = 'wb'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4234 write_msg = MSG
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4235 newline = ''
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4236
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4237
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4238 class UnicodeWriteFileObjectClassTestCase(FileObjectClassTestCase):
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4239 """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
4240
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4241 read_mode = 'rb'
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4242 read_msg = MSG
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4243 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
4244 write_msg = MSG.decode('utf-8')
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4245 newline = ''
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4246
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4247
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4248 class UnicodeReadWriteFileObjectClassTestCase(FileObjectClassTestCase):
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4249 """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
4250
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4251 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
4252 read_msg = MSG.decode('utf-8')
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4253 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
4254 write_msg = MSG.decode('utf-8')
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4255 newline = ''
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4256
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
4257
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4258 class NetworkConnectionTest(object):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4259 """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
4260
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4261 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
4262 # 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
4263 # 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
4264 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
4265 self.serv_conn = self.cli
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4266
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4267 class BasicTCPTest2(NetworkConnectionTest, BasicTCPTest):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4268 """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
4269 """
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4270
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4271 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
4272
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4273 class MockSocket(socket.socket):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4274 def connect(self, *args):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4275 raise socket.timeout('timed out')
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4276
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4277 @contextlib.contextmanager
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4278 def mocked_socket_module(self):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4279 """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
4280 old_socket = socket.socket
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4281 socket.socket = self.MockSocket
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4282 try:
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4283 yield
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4284 finally:
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4285 socket.socket = old_socket
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4286
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4287 def test_connect(self):
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
4288 port = support.find_unused_port()
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4289 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
4290 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
4291 with self.assertRaises(OSError) as cm:
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4292 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
4293 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
4294
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4295 def test_create_connection(self):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4296 # 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
4297 # a proper errno attribute.
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4298 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
4299 with self.assertRaises(OSError) as cm:
64536
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4300 socket.create_connection((HOST, port))
79784
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4301
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4302 # 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
4303 # '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
4304 # as well as an IPV4 one:
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4305 # >>> 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
4306 # >>> [(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
4307 # (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
4308 #
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4309 # 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
4310 # 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
4311 # the last exception it encountered.
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4312 #
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4313 # 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
4314 # 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
4315 # expected errnos.
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4316 expected_errnos = [ errno.ECONNREFUSED, ]
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4317 if hasattr(errno, 'ENETUNREACH'):
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4318 expected_errnos.append(errno.ENETUNREACH)
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4319
b5fa9d8603b6 Issue #16257: make test_create_connection() handle ENETUNREACH.
Trent Nelson <trent@trent.me>
parents: 79026
diff changeset
4320 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
4321
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4322 def test_create_connection_timeout(self):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4323 # 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
4324 # as generic socket errors.
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4325 with self.mocked_socket_module():
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4326 with self.assertRaises(socket.timeout):
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4327 socket.create_connection((HOST, 1234))
2400f55ea312 Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64060
diff changeset
4328
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4329
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
4330 @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
4331 class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4332
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4333 def __init__(self, methodName='runTest'):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4334 SocketTCPTest.__init__(self, methodName=methodName)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4335 ThreadableTest.__init__(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 clientSetUp(self):
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56367
diff changeset
4338 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
4339
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4340 def clientTearDown(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4341 self.cli.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4342 self.cli = None
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4343 ThreadableTest.clientTearDown(self)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4344
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4345 def _justAccept(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4346 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4347 conn.close()
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 testFamily = _justAccept
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4350 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
4351 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
4352 self.addCleanup(self.cli.close)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4353 self.assertEqual(self.cli.family, 2)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4354
58136
ecc8a45894c9 Merged revisions 77286 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58114
diff changeset
4355 testSourceAddress = _justAccept
ecc8a45894c9 Merged revisions 77286 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58114
diff changeset
4356 def _testSourceAddress(self):
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56367
diff changeset
4357 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
4358 source_address=('', self.source_port))
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4359 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
4360 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
4361 # 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
4362 # call happened.
58114
b0386fe650c7 Merged revisions 77263-77264 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 56367
diff changeset
4363
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4364 testTimeoutDefault = _justAccept
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4365 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
4366 # 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
4367 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
4368 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
4369 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
4370 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
4371 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
4372 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
4373 socket.setdefaulttimeout(None)
66340
2beb25369289 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 65926
diff changeset
4374 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
4375
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
4376 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
4377 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
4378 # 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
4379 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
4380 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
4381 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
4382 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
4383 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
4384 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
4385 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
4386 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
4387
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4388 testTimeoutValueNamed = _justAccept
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4389 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
4390 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
4391 self.assertEqual(self.cli.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4392
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4393 testTimeoutValueNonamed = _justAccept
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4394 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
4395 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
4396 self.addCleanup(self.cli.close)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4397 self.assertEqual(self.cli.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4398
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
4399 @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
4400 class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4401
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4402 def __init__(self, methodName='runTest'):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4403 SocketTCPTest.__init__(self, methodName=methodName)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4404 ThreadableTest.__init__(self)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4405
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4406 def clientSetUp(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4407 pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4408
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4409 def clientTearDown(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4410 self.cli.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4411 self.cli = None
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4412 ThreadableTest.clientTearDown(self)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4413
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4414 def testInsideTimeout(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4415 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4416 self.addCleanup(conn.close)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4417 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
4418 conn.send(b"done!")
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4419 testOutsideTimeout = testInsideTimeout
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4420
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4421 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
4422 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
4423 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
4424 self.assertEqual(data, b"done!")
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4425
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4426 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
4427 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
4428 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
4429
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
4430
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4431 class TCPTimeoutTest(SocketTCPTest):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4432
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4433 def testTCPTimeout(self):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4434 def raise_timeout(*args, **kwargs):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4435 self.serv.settimeout(1.0)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4436 self.serv.accept()
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
4437 self.assertRaises(socket.timeout, raise_timeout,
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4438 "Error generating a timeout exception (TCP)")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4439
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4440 def testTimeoutZero(self):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4441 ok = False
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4442 try:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4443 self.serv.settimeout(0.0)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4444 foo = self.serv.accept()
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4445 except socket.timeout:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4446 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
4447 except OSError:
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4448 ok = True
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4449 except:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4450 self.fail("caught unexpected exception (TCP)")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4451 if not ok:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4452 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
4453
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
4454 @unittest.skipUnless(hasattr(signal, 'alarm'),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
4455 'test needs signal.alarm()')
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4456 def testInterruptedTimeout(self):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4457 # 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
4458 # 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
4459 # 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
4460 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
4461 class Alarm(Exception):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4462 pass
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4463 def alarm_handler(signal, frame):
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4464 raise Alarm
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4465 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
4466 try:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4467 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
4468 try:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4469 foo = self.serv.accept()
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4470 except socket.timeout:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4471 self.fail("caught timeout instead of Alarm")
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4472 except Alarm:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4473 pass
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4474 except:
46161
848160d10780 Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44782
diff changeset
4475 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
4476 " %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
4477 (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
4478 else:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4479 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
4480 finally:
848160d10780 Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44782
diff changeset
4481 signal.alarm(0) # shut off alarm
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4482 except Alarm:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4483 self.fail("got Alarm in wrong place")
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4484 finally:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4485 # 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
4486 signal.signal(signal.SIGALRM, old_alarm)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
4487
73612
b410bcd300a1 #11112: Fix typo in a base class in test_socket.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 72586
diff changeset
4488 class UDPTimeoutTest(SocketUDPTest):
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4489
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4490 def testUDPTimeout(self):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4491 def raise_timeout(*args, **kwargs):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4492 self.serv.settimeout(1.0)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4493 self.serv.recv(1024)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51579
diff changeset
4494 self.assertRaises(socket.timeout, raise_timeout,
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4495 "Error generating a timeout exception (UDP)")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4496
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4497 def testTimeoutZero(self):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4498 ok = False
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4499 try:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4500 self.serv.settimeout(0.0)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4501 foo = self.serv.recv(1024)
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4502 except socket.timeout:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4503 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
4504 except OSError:
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4505 ok = True
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4506 except:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4507 self.fail("caught unexpected exception (UDP)")
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4508 if not ok:
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4509 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
4510
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4511 class TestExceptions(unittest.TestCase):
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4512
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4513 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
4514 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
4515 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
4516 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
4517 self.assertTrue(issubclass(socket.timeout, OSError))
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4518
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
4519 @unittest.skipUnless(sys.platform == 'linux', 'Linux specific test')
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
4520 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
4521
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4522 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
4523
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4524 def testLinuxAbstractNamespace(self):
42596
980308fbda29 Down with str8!
Guido van Rossum <guido@python.org>
parents: 42434
diff changeset
4525 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
4526 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
4527 s1.bind(address)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4528 s1.listen(1)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4529 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
4530 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
4531 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
4532 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
4533 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
4534
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4535 def testMaxName(self):
42596
980308fbda29 Down with str8!
Guido van Rossum <guido@python.org>
parents: 42434
diff changeset
4536 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
4537 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
4538 s.bind(address)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4539 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
4540
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 35453
diff changeset
4541 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
4542 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
4543 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
4544 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
4545
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4546 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
4547 # 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
4548 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
4549 try:
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4550 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
4551 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
4552 finally:
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4553 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
4554
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
4555 @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'test needs socket.AF_UNIX')
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4556 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
4557
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4558 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
4559 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
4560
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4561 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
4562 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
4563
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4564 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
4565 # 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
4566 # 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
4567 try:
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4568 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
4569 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
4570 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
4571 "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
4572 "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
4573 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
4574
73999
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4575 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
4576 # 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
4577 try:
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4578 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
4579 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
4580 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
4581 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
4582 "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
4583 .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
4584 else:
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4585 raise
fb887a9ce2c9 Skip test if the path is too long for a AF_UNIX socket
Antoine Pitrou <solipsis@pitrou.net>
parents: 73998
diff changeset
4586
73998
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4587 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
4588 # 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
4589 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
4590 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
4591 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
4592 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
4593
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4594 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
4595 # 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
4596 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
4597 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
4598 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
4599 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
4600
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4601 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
4602 # 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
4603 # 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
4604 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
4605 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
4606 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
4607 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
4608 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
4609
1f23bb74f4bc Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem
Antoine Pitrou <solipsis@pitrou.net>
parents: 73613
diff changeset
4610 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
4611 # 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
4612 # 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
4613 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
4614 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
4615 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
4616 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
4617 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
4618 self.assertEqual(self.sock.getsockname(), path)
29662
1308d7ec9953 SF patch #760257: add socket.timeout exception
Raymond Hettinger <python@rcn.com>
parents: 29087
diff changeset
4619
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59677
diff changeset
4620 @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
4621 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
4622 """
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4623 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
4624 """
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
4625 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
4626 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
4627
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4628 def testRecvIntoArray(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4629 buf = bytearray(1024)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4630 nbytes = self.cli_conn.recv_into(buf)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4631 self.assertEqual(nbytes, len(MSG))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4632 msg = buf[:len(MSG)]
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4633 self.assertEqual(msg, MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4634
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4635 def _testRecvIntoArray(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4636 buf = bytes(MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4637 self.serv_conn.send(buf)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4638
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4639 def testRecvIntoBytearray(self):
48623
bf50085fbcd3 #2538: bytes objects can only provide read-only buffers
Antoine Pitrou <solipsis@pitrou.net>
parents: 47615
diff changeset
4640 buf = bytearray(1024)
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
4641 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
4642 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
4643 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
4644 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
4645
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4646 _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
4647
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4648 def testRecvIntoMemoryview(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4649 buf = bytearray(1024)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4650 nbytes = self.cli_conn.recv_into(memoryview(buf))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4651 self.assertEqual(nbytes, len(MSG))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4652 msg = buf[:len(MSG)]
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4653 self.assertEqual(msg, MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4654
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4655 _testRecvIntoMemoryview = _testRecvIntoArray
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4656
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4657 def testRecvFromIntoArray(self):
48623
bf50085fbcd3 #2538: bytes objects can only provide read-only buffers
Antoine Pitrou <solipsis@pitrou.net>
parents: 47615
diff changeset
4658 buf = bytearray(1024)
38673
a19c20c5e5c7 Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
4659 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
4660 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
4661 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
4662 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
4663
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4664 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
4665 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
4666 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
4667
59677
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4668 def testRecvFromIntoBytearray(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4669 buf = bytearray(1024)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4670 nbytes, addr = self.cli_conn.recvfrom_into(buf)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4671 self.assertEqual(nbytes, len(MSG))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4672 msg = buf[:len(MSG)]
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4673 self.assertEqual(msg, MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4674
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4675 _testRecvFromIntoBytearray = _testRecvFromIntoArray
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4676
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4677 def testRecvFromIntoMemoryview(self):
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4678 buf = bytearray(1024)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4679 nbytes, addr = self.cli_conn.recvfrom_into(memoryview(buf))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4680 self.assertEqual(nbytes, len(MSG))
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4681 msg = buf[:len(MSG)]
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4682 self.assertEqual(msg, MSG)
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4683
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4684 _testRecvFromIntoMemoryview = _testRecvFromIntoArray
d62ca1eaccb9 NOTE: just porting tests here.
Antoine Pitrou <solipsis@pitrou.net>
parents: 59522
diff changeset
4685
44568
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4686
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4687 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
4688 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
4689 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
4690
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4691 def isTipcAvailable():
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4692 """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
4693
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4694 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
4695 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
4696 """
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4697 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
4698 return False
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4699 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
4700 return False
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4701 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
4702 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
4703 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
4704 return True
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4705 return False
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4706
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
4707 @unittest.skipUnless(isTipcAvailable(),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
4708 "TIPC module is not loaded, please 'sudo modprobe tipc'")
72586
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4709 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
4710 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
4711 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
4712 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
4713 self.addCleanup(srv.close)
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4714 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
4715
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4716 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
4717 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
4718 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
4719 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
4720
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4721 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
4722 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
4723 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
4724
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4725 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
4726
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4727 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
4728 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
4729
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4730
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
4731 @unittest.skipUnless(isTipcAvailable(),
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
4732 "TIPC module is not loaded, please 'sudo modprobe tipc'")
72586
77397669c62f Fix ResourceWarnings in the TIPC socket tests.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72448
diff changeset
4733 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
4734 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
4735 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
4736 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
4737
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4738 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
4739 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
4740 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
4741 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
4742 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
4743 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
4744 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
4745 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
4746 self.serverExplicitReady()
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4747 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
4748 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
4749
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4750 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
4751 # 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
4752 # 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
4753 # 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
4754 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
4755 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
4756 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
4757 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
4758 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
4759 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
4760 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
4761
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4762 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
4763 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
4764 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
4765 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
4766
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4767 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
4768 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
4769 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
4770
305d7d2ce047 Copied doc for reload() from trunk's function.rst to imp.rst
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
4771
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
4772 @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
4773 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
4774
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
4775 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
4776 # 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
4777 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
4778 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
4779 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
4780 # 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
4781 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
4782 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
4783 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
4784 # 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
4785 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
4786 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
4787 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
4788
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
4789 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
4790 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4791 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
4792 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
4793 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
4794
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
4795 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
4796 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
4797 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
4798 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
4799 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
4800 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
4801 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
4802
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
4803 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
4804 conn, addr = self.serv.accept()
65882
889fd8ecbff4 Clean up ResourceWarnings due to unclosed sockets.
Brian Curtin <brian.curtin@gmail.com>
parents: 65707
diff changeset
4805 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
4806 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
4807 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
4808
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
4809 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
4810 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
4811 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
4812 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
4813 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
4814 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
4815
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
4816
85420
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4817 class InheritanceTest(unittest.TestCase):
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4818 @unittest.skipUnless(hasattr(socket, "SOCK_CLOEXEC"),
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4819 "SOCK_CLOEXEC not defined")
70612
277bbe6cae53 Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents: 70324
diff changeset
4820 @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
4821 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
4822 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
4823 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
4824 self.assertTrue(s.type & socket.SOCK_CLOEXEC)
85432
2cb26c67a55a Fix test_socket.test_SOCK_CLOEXEC(), the test was wrong
Victor Stinner <vstinner@wyplay.com>
parents: 85420
diff changeset
4825 self.assertFalse(s.get_inheritable())
85420
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4826
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4827 def test_default_inheritable(self):
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4828 sock = socket.socket()
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4829 with sock:
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4830 self.assertEqual(sock.get_inheritable(), False)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4831
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4832 def test_dup(self):
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4833 sock = socket.socket()
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4834 with sock:
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4835 newsock = sock.dup()
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4836 sock.close()
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4837 with newsock:
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4838 self.assertEqual(newsock.get_inheritable(), False)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4839
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4840 def test_set_inheritable(self):
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4841 sock = socket.socket()
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4842 with sock:
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4843 sock.set_inheritable(True)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4844 self.assertEqual(sock.get_inheritable(), True)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4845
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4846 sock.set_inheritable(False)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4847 self.assertEqual(sock.get_inheritable(), False)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4848
85624
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4849 @unittest.skipIf(fcntl is None, "need fcntl")
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4850 def test_get_inheritable_cloexec(self):
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4851 sock = socket.socket()
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4852 with sock:
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4853 fd = sock.fileno()
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4854 self.assertEqual(sock.get_inheritable(), False)
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4855
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4856 # clear FD_CLOEXEC flag
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4857 flags = fcntl.fcntl(fd, fcntl.F_GETFD)
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4858 flags &= ~fcntl.FD_CLOEXEC
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4859 fcntl.fcntl(fd, fcntl.F_SETFD, flags)
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4860
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4861 self.assertEqual(sock.get_inheritable(), True)
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4862
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4863 @unittest.skipIf(fcntl is None, "need fcntl")
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4864 def test_set_inheritable_cloexec(self):
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4865 sock = socket.socket()
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4866 with sock:
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4867 fd = sock.fileno()
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4868 self.assertEqual(fcntl.fcntl(fd, fcntl.F_GETFD) & fcntl.FD_CLOEXEC,
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4869 fcntl.FD_CLOEXEC)
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4870
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4871 sock.set_inheritable(True)
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4872 self.assertEqual(fcntl.fcntl(fd, fcntl.F_GETFD) & fcntl.FD_CLOEXEC,
aea58e1cae75 Issue #18904: test_os and test_socket use unittest.skipIf() to check if fcntl
Victor Stinner <victor.stinner@gmail.com>
parents: 85619
diff changeset
4873 0)
85619
b7f6f6f59e91 Issue #18904: test_socket: add inheritance tests using fcntl and FD_CLOEXEC
Victor Stinner <victor.stinner@gmail.com>
parents: 85481
diff changeset
4874
b7f6f6f59e91 Issue #18904: test_socket: add inheritance tests using fcntl and FD_CLOEXEC
Victor Stinner <victor.stinner@gmail.com>
parents: 85481
diff changeset
4875
85420
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4876 @unittest.skipUnless(hasattr(socket, "socketpair"),
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4877 "need socket.socketpair()")
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4878 def test_socketpair(self):
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4879 s1, s2 = socket.socketpair()
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4880 self.addCleanup(s1.close)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4881 self.addCleanup(s2.close)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4882 self.assertEqual(s1.get_inheritable(), False)
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
4883 self.assertEqual(s2.get_inheritable(), False)
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4884
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4885
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4886 @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
4887 "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
4888 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
4889 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
4890 if nonblock:
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4891 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
4892 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
4893 else:
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4894 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
4895 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
4896
70612
277bbe6cae53 Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents: 70324
diff changeset
4897 @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
4898 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
4899 # 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
4900 # 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
4901 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
4902 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
4903 self.checkNonblock(s)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4904 s.setblocking(1)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4905 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
4906 s.setblocking(0)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4907 self.checkNonblock(s)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4908 s.settimeout(None)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4909 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
4910 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
4911 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
4912 s.setblocking(1)
6cb7ed7b6697 test_socket: use context managers to close directly the socket
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
4913 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
4914 # defaulttimeout
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
4915 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
4916 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
4917 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
4918 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
4919 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
4920 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
4921 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
4922 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
4923 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
4924 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
4925 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
4926 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
4927 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
4928 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
4929
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
4930
76150
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4931 @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
4932 @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
4933 class TestSocketSharing(SocketTCPTest):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4934 # 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
4935 # 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
4936 @classmethod
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4937 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
4938 # 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
4939 sdata = q.get()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4940 message = q.get()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4941
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4942 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
4943 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
4944
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4945 # Send the message
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4946 s2.sendall(message)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4947 s2.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4948 s.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4949
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4950 def testShare(self):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4951 # 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
4952 # 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
4953
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4954 # Create process:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4955 q = multiprocessing.Queue()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4956 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
4957 p.start()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4958
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4959 # 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
4960 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
4961
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4962 # 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
4963 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
4964 self.serv.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4965 q.put(data)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4966
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4967 # 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
4968 message = b"slapmahfro"
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4969 q.put(message)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4970
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4971 # Connect
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4972 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
4973 # 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
4974 m = []
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4975 while True:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4976 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
4977 if not data:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4978 break
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4979 m.append(data)
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4980 s.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4981 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
4982 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
4983 p.join()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4984
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4985 def testShareLength(self):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4986 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
4987 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
4988 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
4989
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4990 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
4991 # 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
4992 # 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
4993 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
4994 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
4995
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
4996 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
4997 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
4998 # 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
4999 # 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
5000 # 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
5001 # 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
5002 # 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
5003 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
5004 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
5005
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5006 def testShareLocal(self):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5007 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
5008 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
5009 try:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5010 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
5011 finally:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5012 s.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5013
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5014 def testTypes(self):
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5015 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
5016 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
5017 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
5018 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
5019 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
5020 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
5021 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
5022 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
5023 try:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5024 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
5025 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
5026 try:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5027 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
5028 finally:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5029 shared.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5030 finally:
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5031 source.close()
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5032
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5033
24451
22570e76cca1 Enable test_socket again, if only to prevent mistakes like Jeremy
Guido van Rossum <guido@python.org>
parents: 24450
diff changeset
5034 def test_main():
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
5035 tests = [GeneralModuleTests, BasicTCPTest, TCPCloserTest, TCPTimeoutTest,
61259
1f7506f23771 Remove traces of MacOS9 support.
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61073
diff changeset
5036 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
5037
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
5038 tests.extend([
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
5039 NonBlockingTCPTests,
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
5040 FileObjectClassTestCase,
58146
efbac7d3a368 Merged revisions 74426 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents: 58136
diff changeset
5041 FileObjectInterruptedTestCase,
28917
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
5042 UnbufferedFileObjectClassTestCase,
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
5043 LineBufferedFileObjectClassTestCase,
40737
6ebad2a6b990 Merged revisions 53451-53537 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
5044 SmallBufferedFileObjectClassTestCase,
65259
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
5045 UnicodeReadFileObjectClassTestCase,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
5046 UnicodeWriteFileObjectClassTestCase,
3619c1214007 Merged revisions 85420 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64961
diff changeset
5047 UnicodeReadWriteFileObjectClassTestCase,
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
5048 NetworkConnectionNoServer,
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
5049 NetworkConnectionAttributesTest,
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40737
diff changeset
5050 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
5051 ContextManagersTest,
85420
ef889c3d5dc6 Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents: 85361
diff changeset
5052 InheritanceTest,
65314
12442ac3f7dd Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module,
Antoine Pitrou <solipsis@pitrou.net>
parents: 65258
diff changeset
5053 NonblockConstantTest
28917
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 28833
diff changeset
5054 ])
86895
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
5055 tests.append(BasicSocketPairTest)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
5056 tests.append(TestUnixDomain)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
5057 tests.append(TestLinuxAbstractNamespace)
1feeeb8992f8 Issue #18702: All skipped tests now reported as skipped.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85450
diff changeset
5058 tests.extend([TIPCTest, 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
5059 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
5060 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
5061 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
5062 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
5063 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
5064 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
5065 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
5066 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
5067 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
5068 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
5069 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
5070 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
5071 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
5072 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
5073 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
5074 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
5075 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
5076 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
5077 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
5078 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
5079 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
5080 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
5081 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
5082 # 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
5083 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
5084 InterruptedSendTimeoutTest,
76150
51b4bddd0e92 Issue #14310: inter-process socket duplication for windows
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 76034
diff changeset
5085 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
5086 ])
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38673
diff changeset
5087
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
5088 thread_info = support.threading_setup()
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
5089 support.run_unittest(*tests)
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46899
diff changeset
5090 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
5091
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
5092 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
5093 test_main()