def test_pipe_stream(self): block_sizes = list(4**i for i in range(0, 12)) data_blocks = list(os.urandom(size) for size in block_sizes) expected = b''.join(data_blocks) buffer_sizes = [100001, 512 * 1024, 1024 * 1024] for buffer_size in buffer_sizes: parent_conn, child_conn = multiprocessing.Pipe() stream = filesystemio.PipeStream(child_conn) child_thread = threading.Thread( target=self._read_and_verify, args=(stream, expected, buffer_size)) child_thread.start() for data in data_blocks: parent_conn.send_bytes(data) parent_conn.close() child_thread.join()
def test_pipe_stream(self): block_sizes = list(4**i for i in range(0, 12)) data_blocks = list(os.urandom(size) for size in block_sizes) expected = b''.join(data_blocks) buffer_sizes = [100001, 512 * 1024, 1024 * 1024] for buffer_size in buffer_sizes: for target in [self._read_and_verify, self._read_and_seek]: _LOGGER.info('buffer_size=%s, target=%s' % (buffer_size, target)) parent_conn, child_conn = multiprocessing.Pipe() stream = filesystemio.PipeStream(child_conn) success = [False] child_thread = threading.Thread( target=target, args=(stream, expected, buffer_size, success)) child_thread.start() for data in data_blocks: parent_conn.send_bytes(data) parent_conn.close() child_thread.join() self.assertTrue(success[0], 'error in test thread')
def test_pipe_stream_rewind_buffer(self): buffer_size = 512 data = os.urandom(buffer_size) parent_conn, child_conn = multiprocessing.Pipe() parent_conn.send_bytes(data) parent_conn.close() stream = filesystemio.PipeStream(child_conn) # Regular read. read_data = stream.read(buffer_size) self.assertEqual(data, read_data) # Rewind buffer_size bytes. stream.seek(0) read_data = stream.read(buffer_size) self.assertEqual(data, read_data) # Read 0 bytes. Rewind buffer still points to offset 0. read_data = stream.read(buffer_size) self.assertFalse(read_data) stream.seek(0) read_data = stream.read(buffer_size) self.assertEqual(data, read_data)