[Python-checkins] python/dist/src/Lib/test test_socket.py,1.49,1.50
gvanrossum@users.sourceforge.net
gvanrossum@users.sourceforge.net
Wed, 07 Aug 2002 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)