1 """Unit tests for socket timeout feature."""
10 class CreationTestCase(unittest
.TestCase
):
11 """Test case for socket.gettimeout() and socket.settimeout()"""
14 self
.sock
= socket
.socket(socket
.AF_INET
, socket
.SOCK_STREAM
)
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"""
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)
100 def testConnectTimeout(self
):
101 "Test connect() timeout"
103 self
.sock
.settimeout(_timeout
)
106 self
.failUnlessRaises(socket
.error
, self
.sock
.connect
,
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"
118 self
.sock
.connect(self
.addr_remote
)
119 self
.sock
.settimeout(_timeout
)
122 self
.failUnlessRaises(socket
.error
, self
.sock
.recv
, 1024)
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"
133 self
.sock
.settimeout(_timeout
)
134 self
.sock
.bind(self
.addr_local
)
138 self
.failUnlessRaises(socket
.error
, self
.sock
.accept
)
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"
149 self
.sock
= socket
.socket(socket
.AF_INET
, socket
.SOCK_DGRAM
)
150 self
.sock
.settimeout(_timeout
)
151 self
.sock
.bind(self
.addr_local
)
154 self
.failUnlessRaises(socket
.error
, self
.sock
.recvfrom
, 8192)
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
))
163 "Test send() timeout"
164 # couldn't figure out how to test it
167 def testSendto(self
):
168 "Test sendto() timeout"
169 # couldn't figure out how to test it
172 def testSendall(self
):
173 "Test sendall() timeout"
174 # couldn't figure out how to test it
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__":