]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_timeout.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / test / test_timeout.py
CommitLineData
4710c53d 1"""Unit tests for socket timeout feature."""\r
2\r
3import unittest\r
4from test import test_support\r
5\r
6# This requires the 'network' resource as given on the regrtest command line.\r
7skip_expected = not test_support.is_resource_enabled('network')\r
8\r
9import time\r
10import socket\r
11\r
12\r
13class CreationTestCase(unittest.TestCase):\r
14 """Test case for socket.gettimeout() and socket.settimeout()"""\r
15\r
16 def setUp(self):\r
17 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\r
18\r
19 def tearDown(self):\r
20 self.sock.close()\r
21\r
22 def testObjectCreation(self):\r
23 # Test Socket creation\r
24 self.assertEqual(self.sock.gettimeout(), None,\r
25 "timeout not disabled by default")\r
26\r
27 def testFloatReturnValue(self):\r
28 # Test return value of gettimeout()\r
29 self.sock.settimeout(7.345)\r
30 self.assertEqual(self.sock.gettimeout(), 7.345)\r
31\r
32 self.sock.settimeout(3)\r
33 self.assertEqual(self.sock.gettimeout(), 3)\r
34\r
35 self.sock.settimeout(None)\r
36 self.assertEqual(self.sock.gettimeout(), None)\r
37\r
38 def testReturnType(self):\r
39 # Test return type of gettimeout()\r
40 self.sock.settimeout(1)\r
41 self.assertEqual(type(self.sock.gettimeout()), type(1.0))\r
42\r
43 self.sock.settimeout(3.9)\r
44 self.assertEqual(type(self.sock.gettimeout()), type(1.0))\r
45\r
46 def testTypeCheck(self):\r
47 # Test type checking by settimeout()\r
48 self.sock.settimeout(0)\r
49 self.sock.settimeout(0L)\r
50 self.sock.settimeout(0.0)\r
51 self.sock.settimeout(None)\r
52 self.assertRaises(TypeError, self.sock.settimeout, "")\r
53 self.assertRaises(TypeError, self.sock.settimeout, u"")\r
54 self.assertRaises(TypeError, self.sock.settimeout, ())\r
55 self.assertRaises(TypeError, self.sock.settimeout, [])\r
56 self.assertRaises(TypeError, self.sock.settimeout, {})\r
57 self.assertRaises(TypeError, self.sock.settimeout, 0j)\r
58\r
59 def testRangeCheck(self):\r
60 # Test range checking by settimeout()\r
61 self.assertRaises(ValueError, self.sock.settimeout, -1)\r
62 self.assertRaises(ValueError, self.sock.settimeout, -1L)\r
63 self.assertRaises(ValueError, self.sock.settimeout, -1.0)\r
64\r
65 def testTimeoutThenBlocking(self):\r
66 # Test settimeout() followed by setblocking()\r
67 self.sock.settimeout(10)\r
68 self.sock.setblocking(1)\r
69 self.assertEqual(self.sock.gettimeout(), None)\r
70 self.sock.setblocking(0)\r
71 self.assertEqual(self.sock.gettimeout(), 0.0)\r
72\r
73 self.sock.settimeout(10)\r
74 self.sock.setblocking(0)\r
75 self.assertEqual(self.sock.gettimeout(), 0.0)\r
76 self.sock.setblocking(1)\r
77 self.assertEqual(self.sock.gettimeout(), None)\r
78\r
79 def testBlockingThenTimeout(self):\r
80 # Test setblocking() followed by settimeout()\r
81 self.sock.setblocking(0)\r
82 self.sock.settimeout(1)\r
83 self.assertEqual(self.sock.gettimeout(), 1)\r
84\r
85 self.sock.setblocking(1)\r
86 self.sock.settimeout(1)\r
87 self.assertEqual(self.sock.gettimeout(), 1)\r
88\r
89\r
90class TimeoutTestCase(unittest.TestCase):\r
91 """Test case for socket.socket() timeout functions"""\r
92\r
93 # There are a number of tests here trying to make sure that an operation\r
94 # doesn't take too much longer than expected. But competing machine\r
95 # activity makes it inevitable that such tests will fail at times.\r
96 # When fuzz was at 1.0, I (tim) routinely saw bogus failures on Win2K\r
97 # and Win98SE. Boosting it to 2.0 helped a lot, but isn't a real\r
98 # solution.\r
99 fuzz = 2.0\r
100\r
101 def setUp(self):\r
102 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\r
103 self.addr_remote = ('www.python.org.', 80)\r
104 self.localhost = '127.0.0.1'\r
105\r
106 def tearDown(self):\r
107 self.sock.close()\r
108\r
109 def testConnectTimeout(self):\r
110 # Choose a private address that is unlikely to exist to prevent\r
111 # failures due to the connect succeeding before the timeout.\r
112 # Use a dotted IP address to avoid including the DNS lookup time\r
113 # with the connect time. This avoids failing the assertion that\r
114 # the timeout occurred fast enough.\r
115 addr = ('10.0.0.0', 12345)\r
116\r
117 # Test connect() timeout\r
118 _timeout = 0.001\r
119 self.sock.settimeout(_timeout)\r
120\r
121 _t1 = time.time()\r
122 self.assertRaises(socket.error, self.sock.connect, addr)\r
123 _t2 = time.time()\r
124\r
125 _delta = abs(_t1 - _t2)\r
126 self.assertTrue(_delta < _timeout + self.fuzz,\r
127 "timeout (%g) is more than %g seconds more than expected (%g)"\r
128 %(_delta, self.fuzz, _timeout))\r
129\r
130 def testRecvTimeout(self):\r
131 # Test recv() timeout\r
132 _timeout = 0.02\r
133\r
134 with test_support.transient_internet(self.addr_remote[0]):\r
135 self.sock.connect(self.addr_remote)\r
136 self.sock.settimeout(_timeout)\r
137\r
138 _t1 = time.time()\r
139 self.assertRaises(socket.timeout, self.sock.recv, 1024)\r
140 _t2 = time.time()\r
141\r
142 _delta = abs(_t1 - _t2)\r
143 self.assertTrue(_delta < _timeout + self.fuzz,\r
144 "timeout (%g) is %g seconds more than expected (%g)"\r
145 %(_delta, self.fuzz, _timeout))\r
146\r
147 def testAcceptTimeout(self):\r
148 # Test accept() timeout\r
149 _timeout = 2\r
150 self.sock.settimeout(_timeout)\r
151 # Prevent "Address already in use" socket exceptions\r
152 test_support.bind_port(self.sock, self.localhost)\r
153 self.sock.listen(5)\r
154\r
155 _t1 = time.time()\r
156 self.assertRaises(socket.error, self.sock.accept)\r
157 _t2 = time.time()\r
158\r
159 _delta = abs(_t1 - _t2)\r
160 self.assertTrue(_delta < _timeout + self.fuzz,\r
161 "timeout (%g) is %g seconds more than expected (%g)"\r
162 %(_delta, self.fuzz, _timeout))\r
163\r
164 def testRecvfromTimeout(self):\r
165 # Test recvfrom() timeout\r
166 _timeout = 2\r
167 self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\r
168 self.sock.settimeout(_timeout)\r
169 # Prevent "Address already in use" socket exceptions\r
170 test_support.bind_port(self.sock, self.localhost)\r
171\r
172 _t1 = time.time()\r
173 self.assertRaises(socket.error, self.sock.recvfrom, 8192)\r
174 _t2 = time.time()\r
175\r
176 _delta = abs(_t1 - _t2)\r
177 self.assertTrue(_delta < _timeout + self.fuzz,\r
178 "timeout (%g) is %g seconds more than expected (%g)"\r
179 %(_delta, self.fuzz, _timeout))\r
180\r
181 def testSend(self):\r
182 # Test send() timeout\r
183 # couldn't figure out how to test it\r
184 pass\r
185\r
186 def testSendto(self):\r
187 # Test sendto() timeout\r
188 # couldn't figure out how to test it\r
189 pass\r
190\r
191 def testSendall(self):\r
192 # Test sendall() timeout\r
193 # couldn't figure out how to test it\r
194 pass\r
195\r
196\r
197def test_main():\r
198 test_support.requires('network')\r
199 test_support.run_unittest(CreationTestCase, TimeoutTestCase)\r
200\r
201if __name__ == "__main__":\r
202 test_main()\r