[Python-checkins] python/dist/src/Lib/test test_socket.py,1.49,1.50

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
2002年8月07日 08:46:22 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv29169/test
Modified Files:
	test_socket.py 
Log Message:
"Unbuffered" mode of class _fileobject wasn't actually unbuffered,
and this broke a Zope "pipelining" test which read multiple responses
from the same connection (this attaches a new file object to the
socket for each response). Added a test for this too.
(I want to do some code cleanup too, but I thought I'd first fix
the problem with as little code as possible, and add a unit test
for this case. So that's what this checkin is about.)
Index: test_socket.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_socket.py,v
retrieving revision 1.49
retrieving revision 1.50
diff -C2 -d -r1.49 -r1.50
*** test_socket.py	2 Aug 2002 15:52:30 -0000	1.49
--- test_socket.py	7 Aug 2002 15:46:19 -0000	1.50
***************
*** 503,506 ****
--- 503,508 ----
 class FileObjectClassTestCase(SocketConnectedTest):
 
+ bufsize = -1 # Use default buffer size
+ 
 def __init__(self, methodName='runTest'):
 SocketConnectedTest.__init__(self, methodName=methodName)
***************
*** 508,512 ****
 def setUp(self):
 SocketConnectedTest.setUp(self)
! self.serv_file = socket._fileobject(self.cli_conn, 'rb', 8192)
 
 def tearDown(self):
--- 510,514 ----
 def setUp(self):
 SocketConnectedTest.setUp(self)
! self.serv_file = self.cli_conn.makefile('rb', self.bufsize)
 
 def tearDown(self):
***************
*** 517,521 ****
 def clientSetUp(self):
 SocketConnectedTest.clientSetUp(self)
! self.cli_file = socket._fileobject(self.serv_conn, 'rb', 8192)
 
 def clientTearDown(self):
--- 519,523 ----
 def clientSetUp(self):
 SocketConnectedTest.clientSetUp(self)
! self.cli_file = self.serv_conn.makefile('wb')
 
 def clientTearDown(self):
***************
*** 558,568 ****
 self.cli_file.flush()
 
 def test_main():
 suite = unittest.TestSuite()
! suite.addTest(unittest.makeSuite(GeneralModuleTests))
! suite.addTest(unittest.makeSuite(BasicTCPTest))
! suite.addTest(unittest.makeSuite(BasicUDPTest))
! suite.addTest(unittest.makeSuite(NonBlockingTCPTests))
 suite.addTest(unittest.makeSuite(FileObjectClassTestCase))
 test_support.run_suite(suite)
 
--- 560,597 ----
 self.cli_file.flush()
 
+ class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
+ 
+ """Repeat the tests from FileObjectClassTestCase with bufsize==0.
+ 
+ In this case (and in this case only), it should be possible to
+ create a file object, read a line from it, create another file
+ object, read another line from it, without loss of data in the
+ first file object's buffer. Note that httplib relies on this
+ when reading multiple requests from the same socket."""
+ 
+ bufsize = 0 # Use unbuffered mode
+ 
+ def testUnbufferedReadline(self):
+ """Read a line, create a new file object, read another line with it."""
+ line = self.serv_file.readline() # first line
+ 	self.assertEqual(line, MSG) # first line
+ self.serv_file = self.cli_conn.makefile('rb', 0)
+ line = self.serv_file.readline() # second line
+ 	self.assertEqual(line, MSG) # second line
+ 
+ def _testUnbufferedReadline(self):
+ self.cli_file.write(MSG)
+ self.cli_file.write(MSG)
+ self.cli_file.flush()
+ 
+ 
 def test_main():
 suite = unittest.TestSuite()
! ##suite.addTest(unittest.makeSuite(GeneralModuleTests))
! ##suite.addTest(unittest.makeSuite(BasicTCPTest))
! ##suite.addTest(unittest.makeSuite(BasicUDPTest))
! ##suite.addTest(unittest.makeSuite(NonBlockingTCPTests))
 suite.addTest(unittest.makeSuite(FileObjectClassTestCase))
+ suite.addTest(unittest.makeSuite(UnbufferedFileObjectClassTestCase))
 test_support.run_suite(suite)
 

AltStyle によって変換されたページ (->オリジナル) /