summaryrefslogtreecommitdiff
path: root/Lib/test/test_timeout.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2002-06-06 21:08:16 +0000
committerGuido van Rossum <guido@python.org>2002-06-06 21:08:16 +0000
commit67f7a388496aec53896a0a5109edf9026bbe5d5b (patch)
treeafa4d86d404b77167e7da09152db2a3562b729a2 /Lib/test/test_timeout.py
parentc9a55776c88619d1b79d47d4734af0f2c423c045 (diff)
downloadcpython-git-67f7a388496aec53896a0a5109edf9026bbe5d5b.tar.gz
SF patch 555085 (timeout socket implementation) by Michael Gilfix.
I've made considerable changes to Michael's code, specifically to use the select() system call directly and to store the timeout as a C double instead of a Python object; internally, -1.0 (or anything negative) represents the None from the API. I'm not 100% sure that all corner cases are covered correctly, so please keep an eye on this. Next I'm going to try it Windows before Tim complains. No way is this a bugfix candidate. :-)
Diffstat (limited to 'Lib/test/test_timeout.py')
-rw-r--r--Lib/test/test_timeout.py136
1 files changed, 136 insertions, 0 deletions
diff --git a/Lib/test/test_timeout.py b/Lib/test/test_timeout.py
new file mode 100644
index 0000000000..c71efa78ac
--- /dev/null
+++ b/Lib/test/test_timeout.py
@@ -0,0 +1,136 @@
+#!/home/bernie/src/python23/dist/src/python
+
+import unittest
+
+import time
+import socket
+
+class creationTestCase(unittest.TestCase):
+ """Test Case for socket.gettimeout() and socket.settimeout()"""
+ def setUp(self):
+ self.__s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+ def tearDown(self):
+ self.__s.close()
+
+ def testObjectCreation(self):
+ "Test Socket creation"
+ self.assertEqual(self.__s.gettimeout(), None,
+ "Timeout socket not default to disable (None)")
+
+ def testFloatReturnValue(self):
+ "Test return value of getter/setter"
+ self.__s.settimeout(7.345)
+ self.assertEqual(self.__s.gettimeout(), 7.345,
+ "settimeout() and gettimeout() return different result")
+
+ self.__s.settimeout(3)
+ self.assertEqual(self.__s.gettimeout(), 3,
+ "settimeout() and gettimeout() return different result")
+
+ def testReturnType(self):
+ "Test return type of getter/setter"
+ self.__s.settimeout(1)
+ self.assertEqual(type(self.__s.gettimeout()), type(1.0),
+ "return type of gettimeout() is not FloatType")
+
+ self.__s.settimeout(3.9)
+ self.assertEqual(type(self.__s.gettimeout()), type(1.0),
+ "return type of gettimeout() is not FloatType")
+
+
+class timeoutTestCase(unittest.TestCase):
+ """Test Case for socket.socket() timeout functions"""
+ def setUp(self):
+ self.__s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.__addr_remote = ('www.google.com', 80)
+ self.__addr_local = ('127.0.0.1', 25339)
+
+ def tearDown(self):
+ self.__s.close()
+
+ def testConnectTimeout(self):
+ "Test connect() timeout"
+ _timeout = 0.02
+ self.__s.settimeout(_timeout)
+
+ _t1 = time.time()
+ self.failUnlessRaises(socket.error, self.__s.connect,
+ self.__addr_remote)
+ _t2 = time.time()
+
+ _delta = abs(_t1 - _t2)
+ self.assert_(_delta < _timeout + 0.5,
+ "timeout (%f) is 0.5 seconds more than required (%f)"
+ %(_delta, _timeout))
+
+ def testRecvTimeout(self):
+ "Test recv() timeout"
+ _timeout = 0.02
+ self.__s.connect(self.__addr_remote)
+ self.__s.settimeout(_timeout)
+
+ _t1 = time.time()
+ self.failUnlessRaises(socket.error, self.__s.recv, 1024)
+ _t2 = time.time()
+
+ _delta = abs(_t1 - _t2)
+ self.assert_(_delta < _timeout + 0.5,
+ "timeout (%f) is 0.5 seconds more than required (%f)"
+ %(_delta, _timeout))
+
+ def testAcceptTimeout(self):
+ "Test accept() timeout()"
+ _timeout = 2
+ self.__s.settimeout(_timeout)
+ self.__s.bind(self.__addr_local)
+ self.__s.listen(5)
+
+ _t1 = time.time()
+ self.failUnlessRaises(socket.error, self.__s.accept)
+ _t2 = time.time()
+
+ _delta = abs(_t1 - _t2)
+ self.assert_(_delta < _timeout + 0.5,
+ "timeout (%f) is 0.5 seconds more than required (%f)"
+ %(_delta, _timeout))
+
+ def testRecvfromTimeout(self):
+ "Test recvfrom() timeout()"
+ _timeout = 2
+ self.__s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ self.__s.settimeout(_timeout)
+ self.__s.bind(self.__addr_local)
+
+ _t1 = time.time()
+ self.failUnlessRaises(socket.error, self.__s.recvfrom, 8192)
+ _t2 = time.time()
+
+ _delta = abs(_t1 - _t2)
+ self.assert_(_delta < _timeout + 0.5,
+ "timeout (%f) is 0.5 seconds more than required (%f)"
+ %(_delta, _timeout))
+
+ def testSend(self):
+ "Test send() timeout"
+ # couldn't figure out how to test it
+ pass
+
+ def testSendto(self):
+ "Test sendto() timeout"
+ # couldn't figure out how to test it
+ pass
+
+ def testSendall(self):
+ "Test sendall() timeout"
+ # couldn't figure out how to test it
+ pass
+
+
+def suite():
+ suite = unittest.TestSuite()
+
+ return suite
+
+if __name__ == "__main__":
+ unittest.main()