append(): Fixing the test for convertability after consultation with
[python/dscho.git] / Lib / test / test_timeout.py
blob65470d7ef1d2210e5a19b53d7437499edb26b673
1 """Unit tests for socket timeout feature."""
3 import unittest
4 from test import test_support
6 import time
7 import socket
10 class CreationTestCase(unittest.TestCase):
11 """Test case for socket.gettimeout() and socket.settimeout()"""
13 def setUp(self):
14 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
16 def tearDown(self):
17 self.sock.close()
19 def testObjectCreation(self):
20 # Test Socket creation
21 self.assertEqual(self.sock.gettimeout(), None,
22 "timeout not disabled by default")
24 def testFloatReturnValue(self):
25 # Test return value of gettimeout()
26 self.sock.settimeout(7.345)
27 self.assertEqual(self.sock.gettimeout(), 7.345)
29 self.sock.settimeout(3)
30 self.assertEqual(self.sock.gettimeout(), 3)
32 self.sock.settimeout(None)
33 self.assertEqual(self.sock.gettimeout(), None)
35 def testReturnType(self):
36 # Test return type of gettimeout()
37 self.sock.settimeout(1)
38 self.assertEqual(type(self.sock.gettimeout()), type(1.0))
40 self.sock.settimeout(3.9)
41 self.assertEqual(type(self.sock.gettimeout()), type(1.0))
43 def testTypeCheck(self):
44 # Test type checking by settimeout()
45 self.sock.settimeout(0)
46 self.sock.settimeout(0L)
47 self.sock.settimeout(0.0)
48 self.sock.settimeout(None)
49 self.assertRaises(TypeError, self.sock.settimeout, "")
50 self.assertRaises(TypeError, self.sock.settimeout, u"")
51 self.assertRaises(TypeError, self.sock.settimeout, ())
52 self.assertRaises(TypeError, self.sock.settimeout, [])
53 self.assertRaises(TypeError, self.sock.settimeout, {})
54 self.assertRaises(TypeError, self.sock.settimeout, 0j)
56 def testRangeCheck(self):
57 # Test range checking by settimeout()
58 self.assertRaises(ValueError, self.sock.settimeout, -1)
59 self.assertRaises(ValueError, self.sock.settimeout, -1L)
60 self.assertRaises(ValueError, self.sock.settimeout, -1.0)
62 def testTimeoutThenBlocking(self):
63 # Test settimeout() followed by setblocking()
64 self.sock.settimeout(10)
65 self.sock.setblocking(1)
66 self.assertEqual(self.sock.gettimeout(), None)
67 self.sock.setblocking(0)
68 self.assertEqual(self.sock.gettimeout(), 0.0)
70 self.sock.settimeout(10)
71 self.sock.setblocking(0)
72 self.assertEqual(self.sock.gettimeout(), 0.0)
73 self.sock.setblocking(1)
74 self.assertEqual(self.sock.gettimeout(), None)
76 def testBlockingThenTimeout(self):
77 # Test setblocking() followed by settimeout()
78 self.sock.setblocking(0)
79 self.sock.settimeout(1)
80 self.assertEqual(self.sock.gettimeout(), 1)
82 self.sock.setblocking(1)
83 self.sock.settimeout(1)
84 self.assertEqual(self.sock.gettimeout(), 1)
87 class TimeoutTestCase(unittest.TestCase):
88 """Test case for socket.socket() timeout functions"""
90 fuzz = 1.0
92 def setUp(self):
93 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
94 self.addr_remote = ('www.google.com', 80)
95 self.addr_local = ('127.0.0.1', 25339)
97 def tearDown(self):
98 self.sock.close()
100 def testConnectTimeout(self):
101 # Test connect() timeout
102 _timeout = 0.001
103 self.sock.settimeout(_timeout)
105 _t1 = time.time()
106 self.failUnlessRaises(socket.error, self.sock.connect,
107 self.addr_remote)
108 _t2 = time.time()
110 _delta = abs(_t1 - _t2)
111 self.assert_(_delta < _timeout + self.fuzz,
112 "timeout (%g) is %g seconds more than expected (%g)"
113 %(_delta, self.fuzz, _timeout))
115 def testRecvTimeout(self):
116 # Test recv() timeout
117 _timeout = 0.02
118 self.sock.connect(self.addr_remote)
119 self.sock.settimeout(_timeout)
121 _t1 = time.time()
122 self.failUnlessRaises(socket.error, self.sock.recv, 1024)
123 _t2 = time.time()
125 _delta = abs(_t1 - _t2)
126 self.assert_(_delta < _timeout + self.fuzz,
127 "timeout (%g) is %g seconds more than expected (%g)"
128 %(_delta, self.fuzz, _timeout))
130 def testAcceptTimeout(self):
131 # Test accept() timeout
132 _timeout = 2
133 self.sock.settimeout(_timeout)
134 self.sock.bind(self.addr_local)
135 self.sock.listen(5)
137 _t1 = time.time()
138 self.failUnlessRaises(socket.error, self.sock.accept)
139 _t2 = time.time()
141 _delta = abs(_t1 - _t2)
142 self.assert_(_delta < _timeout + self.fuzz,
143 "timeout (%g) is %g seconds more than expected (%g)"
144 %(_delta, self.fuzz, _timeout))
146 def testRecvfromTimeout(self):
147 # Test recvfrom() timeout
148 _timeout = 2
149 self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
150 self.sock.settimeout(_timeout)
151 self.sock.bind(self.addr_local)
153 _t1 = time.time()
154 self.failUnlessRaises(socket.error, self.sock.recvfrom, 8192)
155 _t2 = time.time()
157 _delta = abs(_t1 - _t2)
158 self.assert_(_delta < _timeout + self.fuzz,
159 "timeout (%g) is %g seconds more than expected (%g)"
160 %(_delta, self.fuzz, _timeout))
162 def testSend(self):
163 # Test send() timeout
164 # couldn't figure out how to test it
165 pass
167 def testSendto(self):
168 # Test sendto() timeout
169 # couldn't figure out how to test it
170 pass
172 def testSendall(self):
173 # Test sendall() timeout
174 # couldn't figure out how to test it
175 pass
178 def main():
179 suite = unittest.TestSuite()
180 suite.addTest(unittest.makeSuite(CreationTestCase))
181 suite.addTest(unittest.makeSuite(TimeoutTestCase))
182 test_support.run_suite(suite)
184 if __name__ == "__main__":
185 main()