Esempio n. 1
0
    def test_never_return_more_than_asked_for(self):
        """read should never return more bytes than it is asked for."""
        stream = io.BytesIO(b"0" * io.DEFAULT_BUFFER_SIZE * 2)
        reader = smart_open.S3ReadStreamInner(stream)

        logger.debug("reader: %r", reader)

        logger.debug("performing partial read")
        ret = reader.read(io.DEFAULT_BUFFER_SIZE // 2)
        self.assertEquals(len(ret), io.DEFAULT_BUFFER_SIZE // 2)

        #
        # Currently, the reader's buffer is half-full wrt DEFAULT_BUFFER_SIZE.
        # Force it to read more bytes from the stream, causing it to contain
        # 1.5 * DEFAULT_BUFFER_SIZE bytes, and reaching EOF.  The bug is that
        # once it reaches EOF, it always returns the buffer contents, ignoring
        # how many bytes it was originally asked for.
        #
        ret = reader.read(io.DEFAULT_BUFFER_SIZE)
        self.assertEquals(len(ret), io.DEFAULT_BUFFER_SIZE)

        #
        # Consume the rest of the file.
        #
        self.assertEquals(len(reader.read()), io.DEFAULT_BUFFER_SIZE // 2)
Esempio n. 2
0
 def test_buffer_flushed_after_eof(self):
     """The buffer should be empty after we've requested to read until
     EOF."""
     stream = io.BytesIO(b"0" * io.DEFAULT_BUFFER_SIZE * 2)
     reader = smart_open.S3ReadStreamInner(stream)
     self.assertEquals(len(reader.read(io.DEFAULT_BUFFER_SIZE)),
                       io.DEFAULT_BUFFER_SIZE)
     self.assertEquals(len(reader.read()), io.DEFAULT_BUFFER_SIZE)
     self.assertEquals(len(reader.unused_buffer), 0)
     self.assertEquals(len(reader.read()), 0)