diff options
| author | amajorek <devnull@localhost> | 2010-03-29 02:08:52 -0400 |
|---|---|---|
| committer | amajorek <devnull@localhost> | 2010-03-29 02:08:52 -0400 |
| commit | 9987d4df1727928432011c42f1fb440cd459f1bf (patch) | |
| tree | 37aa6a7660fd3f5f66b6325a78046a404423ebd8 | |
| parent | 47f57ee4f223d5feee009cf8b344e1aa45d35e92 (diff) | |
| download | eventlet-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.py | 25 |
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) |
