annotate Lib/test/test_timeout.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 89df1984adda
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
1 """Unit tests for socket timeout feature."""
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
85206
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
3 import functools
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 import unittest
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46115
diff changeset
5 from test import support
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
28112
2c8c2c6b2ab7 Fix SF bugs #692951 and 692988, test_timeout.py needs 'network' resource
Neal Norwitz <nnorwitz@gmail.com>
parents: 28011
diff changeset
7 # This requires the 'network' resource as given on the regrtest command line.
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46115
diff changeset
8 skip_expected = not support.is_resource_enabled('network')
28112
2c8c2c6b2ab7 Fix SF bugs #692951 and 692988, test_timeout.py needs 'network' resource
Neal Norwitz <nnorwitz@gmail.com>
parents: 28011
diff changeset
9
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 import time
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
11 import errno
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 import socket
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
14
85206
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
15 @functools.lru_cache()
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
16 def resolve_address(host, port):
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
17 """Resolve an (host, port) to an address.
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
18
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
19 We must perform name resolution before timeout tests, otherwise it will be
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
20 performed by connect().
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
21 """
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
22 with support.transient_internet(host):
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
23 return socket.getaddrinfo(host, port, socket.AF_INET,
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
24 socket.SOCK_STREAM)[0][4]
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
25
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
26
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
27 class CreationTestCase(unittest.TestCase):
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
28 """Test case for socket.gettimeout() and socket.settimeout()"""
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
29
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 def setUp(self):
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
31 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 def tearDown(self):
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
34 self.sock.close()
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 def testObjectCreation(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
37 # Test Socket creation
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
38 self.assertEqual(self.sock.gettimeout(), None,
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
39 "timeout not disabled by default")
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 def testFloatReturnValue(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
42 # Test return value of gettimeout()
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
43 self.sock.settimeout(7.345)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
44 self.assertEqual(self.sock.gettimeout(), 7.345)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
46 self.sock.settimeout(3)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
47 self.assertEqual(self.sock.gettimeout(), 3)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
48
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
49 self.sock.settimeout(None)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
50 self.assertEqual(self.sock.gettimeout(), None)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 def testReturnType(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
53 # Test return type of gettimeout()
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
54 self.sock.settimeout(1)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
55 self.assertEqual(type(self.sock.gettimeout()), type(1.0))
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
56
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
57 self.sock.settimeout(3.9)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
58 self.assertEqual(type(self.sock.gettimeout()), type(1.0))
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
59
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
60 def testTypeCheck(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
61 # Test type checking by settimeout()
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
62 self.sock.settimeout(0)
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 39442
diff changeset
63 self.sock.settimeout(0)
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
64 self.sock.settimeout(0.0)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
65 self.sock.settimeout(None)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
66 self.assertRaises(TypeError, self.sock.settimeout, "")
41575
beacf40b5960 Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents: 40644
diff changeset
67 self.assertRaises(TypeError, self.sock.settimeout, "")
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
68 self.assertRaises(TypeError, self.sock.settimeout, ())
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
69 self.assertRaises(TypeError, self.sock.settimeout, [])
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
70 self.assertRaises(TypeError, self.sock.settimeout, {})
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
71 self.assertRaises(TypeError, self.sock.settimeout, 0j)
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
72
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
73 def testRangeCheck(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
74 # Test range checking by settimeout()
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
75 self.assertRaises(ValueError, self.sock.settimeout, -1)
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 39442
diff changeset
76 self.assertRaises(ValueError, self.sock.settimeout, -1)
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
77 self.assertRaises(ValueError, self.sock.settimeout, -1.0)
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
78
23815
203d1412a7e8 Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents: 23793
diff changeset
79 def testTimeoutThenBlocking(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
80 # Test settimeout() followed by setblocking()
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
81 self.sock.settimeout(10)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
82 self.sock.setblocking(1)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
83 self.assertEqual(self.sock.gettimeout(), None)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
84 self.sock.setblocking(0)
23815
203d1412a7e8 Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents: 23793
diff changeset
85 self.assertEqual(self.sock.gettimeout(), 0.0)
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
86
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
87 self.sock.settimeout(10)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
88 self.sock.setblocking(0)
23815
203d1412a7e8 Major overhaul of timeout sockets:
Guido van Rossum <guido@python.org>
parents: 23793
diff changeset
89 self.assertEqual(self.sock.gettimeout(), 0.0)
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
90 self.sock.setblocking(1)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
91 self.assertEqual(self.sock.gettimeout(), None)
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
92
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
93 def testBlockingThenTimeout(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
94 # Test setblocking() followed by settimeout()
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
95 self.sock.setblocking(0)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
96 self.sock.settimeout(1)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
97 self.assertEqual(self.sock.gettimeout(), 1)
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
98
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
99 self.sock.setblocking(1)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
100 self.sock.settimeout(1)
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
101 self.assertEqual(self.sock.gettimeout(), 1)
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
102
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
103
23790
486f4045d13d New test suite for the socket module by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents: 23715
diff changeset
104 class TimeoutTestCase(unittest.TestCase):
28011
0eb948364990 Doubled TimeoutTestCase.fuzz, to slash the frequency of bogus failures
Tim Peters <tim.peters@gmail.com>
parents: 27912
diff changeset
105 # There are a number of tests here trying to make sure that an operation
0eb948364990 Doubled TimeoutTestCase.fuzz, to slash the frequency of bogus failures
Tim Peters <tim.peters@gmail.com>
parents: 27912
diff changeset
106 # doesn't take too much longer than expected. But competing machine
0eb948364990 Doubled TimeoutTestCase.fuzz, to slash the frequency of bogus failures
Tim Peters <tim.peters@gmail.com>
parents: 27912
diff changeset
107 # activity makes it inevitable that such tests will fail at times.
0eb948364990 Doubled TimeoutTestCase.fuzz, to slash the frequency of bogus failures
Tim Peters <tim.peters@gmail.com>
parents: 27912
diff changeset
108 # When fuzz was at 1.0, I (tim) routinely saw bogus failures on Win2K
0eb948364990 Doubled TimeoutTestCase.fuzz, to slash the frequency of bogus failures
Tim Peters <tim.peters@gmail.com>
parents: 27912
diff changeset
109 # and Win98SE. Boosting it to 2.0 helped a lot, but isn't a real
0eb948364990 Doubled TimeoutTestCase.fuzz, to slash the frequency of bogus failures
Tim Peters <tim.peters@gmail.com>
parents: 27912
diff changeset
110 # solution.
0eb948364990 Doubled TimeoutTestCase.fuzz, to slash the frequency of bogus failures
Tim Peters <tim.peters@gmail.com>
parents: 27912
diff changeset
111 fuzz = 2.0
23791
cde6608739c4 Add some more basic tests to validate the argument checking of
Guido van Rossum <guido@python.org>
parents: 23790
diff changeset
112
85302
7728b073c77c Issue #18792: Use "127.0.0.1" or "::1" instead of "localhost" as much as possible, since "localhost" goes through a DNS lookup under recent Windows versions.
Antoine Pitrou <solipsis@pitrou.net>
parents: 85206
diff changeset
113 localhost = support.HOST
67296
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
114
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
115 def setUp(self):
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
116 raise NotImplementedError()
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
117
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
118 tearDown = setUp
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
119
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
120 def _sock_operation(self, count, timeout, method, *args):
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
121 """
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
122 Test the specified socket method.
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
123
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
124 The method is run at most `count` times and must raise a socket.timeout
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
125 within `timeout` + self.fuzz seconds.
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
126 """
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
127 self.sock.settimeout(timeout)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
128 method = getattr(self.sock, method)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
129 for i in range(count):
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
130 t1 = time.time()
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
131 try:
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
132 method(*args)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
133 except socket.timeout as e:
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
134 delta = time.time() - t1
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
135 break
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
136 else:
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
137 self.fail('socket.timeout was not raised')
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
138 # These checks should account for timing unprecision
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
139 self.assertLess(delta, timeout + self.fuzz)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
140 self.assertGreater(delta, timeout - 1.0)
67296
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
141
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
142
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
143 class TCPTimeoutTestCase(TimeoutTestCase):
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
144 """TCP test case for socket.socket() timeout functions"""
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
145
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 def setUp(self):
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
147 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
85206
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
148 self.addr_remote = resolve_address('www.python.org.', 80)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
149
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
150 def tearDown(self):
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
151 self.sock.close()
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
152
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 def testConnectTimeout(self):
78690
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
154 # Testing connect timeout is tricky: we need to have IP connectivity
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
155 # to a host that silently drops our packets. We can't simulate this
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
156 # from Python because it's a function of the underlying TCP/IP stack.
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
157 # So, the following Snakebite host has been defined:
85206
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
158 blackhole = resolve_address('blackhole.snakebite.net', 56666)
78690
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
159
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
160 # Blackhole has been configured to silently drop any incoming packets.
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
161 # No RSTs (for TCP) or ICMP UNREACH (for UDP/ICMP) will be sent back
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
162 # to hosts that attempt to connect to this address: which is exactly
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
163 # what we need to confidently test connect timeout.
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
164
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
165 # However, we want to prevent false positives. It's not unreasonable
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
166 # to expect certain hosts may not be able to reach the blackhole, due
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
167 # to firewalling or general network configuration. In order to improve
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
168 # our confidence in testing the blackhole, a corresponding 'whitehole'
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
169 # has also been set up using one port higher:
85206
5880c7d33e13 Issue #16463: Fix a transient test_timeout failure.
Charles-François Natali <cf.natali@gmail.com>
parents: 78690
diff changeset
170 whitehole = resolve_address('whitehole.snakebite.net', 56667)
78690
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
171
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
172 # This address has been configured to immediately drop any incoming
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
173 # packets as well, but it does it respectfully with regards to the
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
174 # incoming protocol. RSTs are sent for TCP packets, and ICMP UNREACH
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
175 # is sent for UDP/ICMP packets. This means our attempts to connect to
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
176 # it should be met immediately with ECONNREFUSED. The test case has
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
177 # been structured around this premise: if we get an ECONNREFUSED from
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
178 # the whitehole, we proceed with testing connect timeout against the
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
179 # blackhole. If we don't, we skip the test (with a message about not
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
180 # getting the required RST from the whitehole within the required
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
181 # timeframe).
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
182
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
183 # For the records, the whitehole/blackhole configuration has been set
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
184 # up using the 'pf' firewall (available on BSDs), using the following:
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
185 #
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
186 # ext_if="bge0"
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
187 #
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
188 # blackhole_ip="35.8.247.6"
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
189 # whitehole_ip="35.8.247.6"
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
190 # blackhole_port="56666"
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
191 # whitehole_port="56667"
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
192 #
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
193 # block return in log quick on $ext_if proto { tcp udp } \
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
194 # from any to $whitehole_ip port $whitehole_port
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
195 # block drop in log quick on $ext_if proto { tcp udp } \
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
196 # from any to $blackhole_ip port $blackhole_port
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
197 #
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
198
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
199 skip = True
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
200 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
201 # Use a timeout of 3 seconds. Why 3? Because it's more than 1, and
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
202 # less than 5. i.e. no particular reason. Feel free to tweak it if
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
203 # you feel a different value would be more appropriate.
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
204 timeout = 3
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
205 sock.settimeout(timeout)
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
206 try:
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
207 sock.connect((whitehole))
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
208 except socket.timeout:
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
209 pass
81039
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 78690
diff changeset
210 except OSError as err:
78690
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
211 if err.errno == errno.ECONNREFUSED:
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
212 skip = False
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
213 finally:
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
214 sock.close()
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
215 del sock
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
216
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
217 if skip:
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
218 self.skipTest(
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
219 "We didn't receive a connection reset (RST) packet from "
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
220 "{}:{} within {} seconds, so we're unable to test connect "
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
221 "timeout against the corresponding {}:{} (which is "
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
222 "configured to silently drop packets)."
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
223 .format(
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
224 whitehole[0],
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
225 whitehole[1],
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
226 timeout,
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
227 blackhole[0],
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
228 blackhole[1],
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
229 )
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
230 )
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
231
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
232 # All that hard work just to test if connect times out in 0.001s ;-)
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
233 self.addr_remote = blackhole
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
234 with support.transient_internet(self.addr_remote[0]):
9c22222af1f9 Issue #15285: Refactor connect timeout test in test_timeout.
Trent Nelson <trent@trent.me>
parents: 67400
diff changeset
235 self._sock_operation(1, 0.001, 'connect', self.addr_remote)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
236
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 def testRecvTimeout(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
238 # Test recv() timeout
65718
61a9ae522dcc Issue #7547: fix transient failures due to network glitches in test_timeout.
Antoine Pitrou <solipsis@pitrou.net>
parents: 58740
diff changeset
239 with support.transient_internet(self.addr_remote[0]):
61a9ae522dcc Issue #7547: fix transient failures due to network glitches in test_timeout.
Antoine Pitrou <solipsis@pitrou.net>
parents: 58740
diff changeset
240 self.sock.connect(self.addr_remote)
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
241 self._sock_operation(1, 1.5, 'recv', 1024)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
242
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 def testAcceptTimeout(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
244 # Test accept() timeout
58740
0eb422624db5 Merged revisions 78014 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 55593
diff changeset
245 support.bind_port(self.sock, self.localhost)
23793
7cdc531e6a50 Docstring, layout and style tweaking. Increase fuzz to 1 second.
Guido van Rossum <guido@python.org>
parents: 23791
diff changeset
246 self.sock.listen(5)
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
247 self._sock_operation(1, 1.5, 'accept')
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
248
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 def testSend(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
250 # Test send() timeout
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
251 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serv:
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
252 support.bind_port(serv, self.localhost)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
253 serv.listen(5)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
254 self.sock.connect(serv.getsockname())
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
255 # Send a lot of data in order to bypass buffering in the TCP stack.
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
256 self._sock_operation(100, 1.5, 'send', b"X" * 200000)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
257
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
258 def testSendto(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
259 # Test sendto() timeout
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
260 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serv:
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
261 support.bind_port(serv, self.localhost)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
262 serv.listen(5)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
263 self.sock.connect(serv.getsockname())
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
264 # The address argument is ignored since we already connected.
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
265 self._sock_operation(100, 1.5, 'sendto', b"X" * 200000,
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
266 serv.getsockname())
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
267
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 def testSendall(self):
24964
d90a6add7ca3 Standardize behavior: no docstrings in test functions.
Guido van Rossum <guido@python.org>
parents: 24364
diff changeset
269 # Test sendall() timeout
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
270 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serv:
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
271 support.bind_port(serv, self.localhost)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
272 serv.listen(5)
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
273 self.sock.connect(serv.getsockname())
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
274 # Send a lot of data in order to bypass buffering in the TCP stack.
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
275 self._sock_operation(100, 1.5, 'sendall', b"X" * 200000)
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
276
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
277
67296
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
278 class UDPTimeoutTestCase(TimeoutTestCase):
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
279 """UDP test case for socket.socket() timeout functions"""
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
280
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
281 def setUp(self):
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
282 self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
283
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
284 def tearDown(self):
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
285 self.sock.close()
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
286
67296
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
287 def testRecvfromTimeout(self):
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
288 # Test recvfrom() timeout
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
289 # Prevent "Address already in use" socket exceptions
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
290 support.bind_port(self.sock, self.localhost)
67400
71e1a9961836 Issue #1677694: Refactor and improve test_timeout. Original patch by
Antoine Pitrou <solipsis@pitrou.net>
parents: 67296
diff changeset
291 self._sock_operation(1, 1.5, 'recvfrom', 1024)
67296
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
292
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
293
27912
c5ebacbba0be Actually run these tests from regrtest.py.
Neal Norwitz <nnorwitz@gmail.com>
parents: 25106
diff changeset
294 def test_main():
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46115
diff changeset
295 support.requires('network')
67296
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
296 support.run_unittest(
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
297 CreationTestCase,
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
298 TCPTimeoutTestCase,
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
299 UDPTimeoutTestCase,
f5b105c9f46b test_timeout: move testRecvfromTimeout() to a UDP-specific test case
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65718
diff changeset
300 )
23715
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
301
c2733e8f6612 SF patch 555085 (timeout socket implementation) by Michael Gilfix.
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 if __name__ == "__main__":
27912
c5ebacbba0be Actually run these tests from regrtest.py.
Neal Norwitz <nnorwitz@gmail.com>
parents: 25106
diff changeset
303 test_main()