#!/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()