summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoramajorek <devnull@localhost>2010-03-29 02:08:52 -0400
committeramajorek <devnull@localhost>2010-03-29 02:08:52 -0400
commit9987d4df1727928432011c42f1fb440cd459f1bf (patch)
tree37aa6a7660fd3f5f66b6325a78046a404423ebd8
parent47f57ee4f223d5feee009cf8b344e1aa45d35e92 (diff)
downloadeventlet-9987d4df1727928432011c42f1fb440cd459f1bf.tar.gz
Added testcase showing broken behavior of GreenPipe object.
write larger PIPE_BUF size 4K or 64K on newer systems will be retried in full instead of continued. I see no way to fix it while using file.write - it does not return written size. os.write does.
-rw-r--r--tests/greenio_test.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/greenio_test.py b/tests/greenio_test.py
index 05e839c..9ab3e89 100644
--- a/tests/greenio_test.py
+++ b/tests/greenio_test.py
@@ -483,6 +483,31 @@ class TestGreenIo(LimitedTestCase):
gt.wait()
+ def test_pipe_writes_large_messages(self):
+ r, w = os.pipe()
+
+ r = os.fdopen(r)
+ w = os.fdopen(w, 'w', 0)
+
+ r = greenio.GreenPipe(r)
+ w = greenio.GreenPipe(w)
+
+ large_message = "".join([1024*chr(i) for i in xrange(65)])
+ def writer():
+ w.write(large_message)
+ w.close()
+
+ gt = eventlet.spawn(writer)
+
+ for i in xrange(65):
+ buf = r.read(1024)
+ expected = 1024*chr(i)
+ self.assertEquals(buf, expected,
+ "expected=%r..%r, found=%r..%r iter=%d"
+ % (expected[:4], expected[-4:], buf[:4], buf[-4:], i))
+ gt.wait()
+
+
@skip_with_pyevent
def test_raised_multiple_readers(self):
debug.hub_prevent_multiple_readers(True)