summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_socket.py
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2008-05-05 21:53:45 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2008-05-05 21:53:45 (GMT)
commit24237ea8a128d145d00397bd79eba06db471bcdb (patch)
tree53599096583a1312a4366bbd3aa14b1b2746dfd9 /Lib/test/test_socket.py
parent98fd03637f35fd92c887e9aa6031d8a8f1d8e6a4 (diff)
downloadcpython-24237ea8a128d145d00397bd79eba06db471bcdb.zip
cpython-24237ea8a128d145d00397bd79eba06db471bcdb.tar.gz
cpython-24237ea8a128d145d00397bd79eba06db471bcdb.tar.bz2
Fix a bug introduced in r62627. see issue2760 and issue2632.
An assertion in readline() would fail as data was already in the internal buffer even though the socket was in unbuffered read mode. That case is now handled. More importantly, read() has been fixed to not over-recv() and leave newly recv()d data in the _fileobject buffer. The max() vs min() issue in read() is now gone. Neither was correct. On bounded reads, always ask recv() for the exact amount of data we still need. Candidate for backporting to release25-maint along with r62627.
Diffstat (limited to 'Lib/test/test_socket.py')
-rw-r--r--Lib/test/test_socket.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index aaea042..48c9346 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -789,6 +789,33 @@ class FileObjectClassTestCase(SocketConnectedTest):
self.cli_file.write(MSG)
self.cli_file.flush()
+ def testReadlineAfterRead(self):
+ a_baloo_is = self.serv_file.read(len("A baloo is"))
+ self.assertEqual("A baloo is", a_baloo_is)
+ _a_bear = self.serv_file.read(len(" a bear"))
+ self.assertEqual(" a bear", _a_bear)
+ line = self.serv_file.readline()
+ self.assertEqual("\n", line)
+ line = self.serv_file.readline()
+ self.assertEqual("A BALOO IS A BEAR.\n", line)
+ line = self.serv_file.readline()
+ self.assertEqual(MSG, line)
+
+ def _testReadlineAfterRead(self):
+ self.cli_file.write("A baloo is a bear\n")
+ self.cli_file.write("A BALOO IS A BEAR.\n")
+ self.cli_file.write(MSG)
+ self.cli_file.flush()
+
+ def testReadlineAfterReadNoNewline(self):
+ end_of_ = self.serv_file.read(len("End Of "))
+ self.assertEqual("End Of ", end_of_)
+ line = self.serv_file.readline()
+ self.assertEqual("Line", line)
+
+ def _testReadlineAfterReadNoNewline(self):
+ self.cli_file.write("End Of Line")
+
def testClosedAttr(self):
self.assert_(not self.serv_file.closed)