[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)