def test_pipe_read(self): # ensure that 'readline' works properly on GreenPipes when data is not # immediately available (fd is nonblocking, was raising EAGAIN) # also ensures that readline() terminates on '\n' and '\r\n' r, w = os.pipe() r = GreenPipe(r) w = GreenPipe(w, 'w') def writer(): sleep(.1) w.write('line\n') w.flush() w.write('line\r\n') w.flush() gt = spawn(writer) sleep(0) line = r.readline() self.assertEquals(line, 'line\n') line = r.readline() self.assertEquals(line, 'line\r\n') gt.wait()
def test_pipe(self): r, w = os.pipe() rf = GreenPipe(r, 'r') wf = GreenPipe(w, 'w', 0) def sender(f, content): for ch in content: sleep(0.0001) f.write(ch) f.close() one_line = "12345\n" spawn(sender, wf, one_line * 5) for i in xrange(5): line = rf.readline() sleep(0.01) self.assertEquals(line, one_line) self.assertEquals(rf.readline(), '')
def fdopen(fd, *args, **kw): """ fdopen(fd [, mode='r' [, bufsize]]) -> file_object Return an open file object connected to a file descriptor.""" if not isinstance(fd, int): raise TypeError('fd should be int, not %r' % fd) try: return GreenPipe(fd, *args, **kw) except IOError, e: raise OSError(*e.args)
def test_pipe_writes_large_messages(self): r, w = os.pipe() r = GreenPipe(r) w = GreenPipe(w, 'w') large_message = "".join([1024 * chr(i) for i in xrange(65)]) def writer(): w.write(large_message) w.close() gt = 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()
def test_seek_on_buffered_pipe(self): f = GreenPipe(self.tempdir + "/TestFile", 'w+', 1024) self.assertEquals(f.tell(), 0) f.seek(0, 2) self.assertEquals(f.tell(), 0) f.write('1234567890') f.seek(0, 2) self.assertEquals(f.tell(), 10) f.seek(0) value = f.read(1) self.assertEqual(value, '1') self.assertEquals(f.tell(), 1) value = f.read(1) self.assertEqual(value, '2') self.assertEquals(f.tell(), 2) f.seek(0, 1) self.assertEqual(f.readline(), '34567890') f.seek(0) self.assertEqual(f.readline(), '1234567890') f.seek(0, 2) self.assertEqual(f.readline(), '')
def test_truncate(self): f = GreenPipe(self.tempdir + "/TestFile", 'w+', 1024) f.write('1234567890') f.truncate(9) self.assertEquals(f.tell(), 9)