104 lines
3.7 KiB
Python
104 lines
3.7 KiB
Python
|
import unittest2
|
||
|
|
||
|
|
||
|
class Test_BufferedStream(unittest2.TestCase):
|
||
|
|
||
|
def _getTargetClass(self):
|
||
|
from gcloud.streaming.buffered_stream import BufferedStream
|
||
|
return BufferedStream
|
||
|
|
||
|
def _makeOne(self, *args, **kw):
|
||
|
return self._getTargetClass()(*args, **kw)
|
||
|
|
||
|
def test_ctor_start_zero_longer_than_buffer(self):
|
||
|
from io import BytesIO
|
||
|
CONTENT = b'CONTENT GOES HERE'
|
||
|
START = 0
|
||
|
BUFSIZE = 4
|
||
|
stream = BytesIO(CONTENT)
|
||
|
bufstream = self._makeOne(stream, START, BUFSIZE)
|
||
|
self.assertTrue(bufstream._stream is stream)
|
||
|
self.assertEqual(bufstream._start_pos, START)
|
||
|
self.assertEqual(bufstream._buffer_pos, 0)
|
||
|
self.assertEqual(bufstream._buffered_data, CONTENT[:BUFSIZE])
|
||
|
self.assertEqual(len(bufstream), BUFSIZE)
|
||
|
self.assertFalse(bufstream.stream_exhausted)
|
||
|
self.assertEqual(bufstream.stream_end_position, BUFSIZE)
|
||
|
|
||
|
def test_ctor_start_nonzero_shorter_than_buffer(self):
|
||
|
from io import BytesIO
|
||
|
CONTENT = b'CONTENT GOES HERE'
|
||
|
START = 8
|
||
|
BUFSIZE = 10
|
||
|
stream = BytesIO(CONTENT)
|
||
|
stream.read(START) # already consumed
|
||
|
bufstream = self._makeOne(stream, START, BUFSIZE)
|
||
|
self.assertTrue(bufstream._stream is stream)
|
||
|
self.assertEqual(bufstream._start_pos, START)
|
||
|
self.assertEqual(bufstream._buffer_pos, 0)
|
||
|
self.assertEqual(bufstream._buffered_data, CONTENT[START:])
|
||
|
self.assertEqual(len(bufstream), len(CONTENT) - START)
|
||
|
self.assertTrue(bufstream.stream_exhausted)
|
||
|
self.assertEqual(bufstream.stream_end_position, len(CONTENT))
|
||
|
|
||
|
def test__bytes_remaining_start_zero_longer_than_buffer(self):
|
||
|
from io import BytesIO
|
||
|
CONTENT = b'CONTENT GOES HERE'
|
||
|
START = 0
|
||
|
BUFSIZE = 4
|
||
|
stream = BytesIO(CONTENT)
|
||
|
bufstream = self._makeOne(stream, START, BUFSIZE)
|
||
|
self.assertEqual(bufstream._bytes_remaining, BUFSIZE)
|
||
|
|
||
|
def test__bytes_remaining_start_zero_shorter_than_buffer(self):
|
||
|
from io import BytesIO
|
||
|
CONTENT = b'CONTENT GOES HERE'
|
||
|
START = 8
|
||
|
BUFSIZE = 10
|
||
|
stream = BytesIO(CONTENT)
|
||
|
stream.read(START) # already consumed
|
||
|
bufstream = self._makeOne(stream, START, BUFSIZE)
|
||
|
self.assertEqual(bufstream._bytes_remaining, len(CONTENT) - START)
|
||
|
|
||
|
def test_read_w_none(self):
|
||
|
from io import BytesIO
|
||
|
CONTENT = b'CONTENT GOES HERE'
|
||
|
START = 0
|
||
|
BUFSIZE = 4
|
||
|
stream = BytesIO(CONTENT)
|
||
|
bufstream = self._makeOne(stream, START, BUFSIZE)
|
||
|
with self.assertRaises(ValueError):
|
||
|
bufstream.read(None)
|
||
|
|
||
|
def test_read_w_negative_size(self):
|
||
|
from io import BytesIO
|
||
|
CONTENT = b'CONTENT GOES HERE'
|
||
|
START = 0
|
||
|
BUFSIZE = 4
|
||
|
stream = BytesIO(CONTENT)
|
||
|
bufstream = self._makeOne(stream, START, BUFSIZE)
|
||
|
with self.assertRaises(ValueError):
|
||
|
bufstream.read(-2)
|
||
|
|
||
|
def test_read_from_start(self):
|
||
|
from io import BytesIO
|
||
|
CONTENT = b'CONTENT GOES HERE'
|
||
|
START = 0
|
||
|
BUFSIZE = 4
|
||
|
stream = BytesIO(CONTENT)
|
||
|
bufstream = self._makeOne(stream, START, BUFSIZE)
|
||
|
self.assertEqual(bufstream.read(4), CONTENT[:4])
|
||
|
|
||
|
def test_read_exhausted(self):
|
||
|
from io import BytesIO
|
||
|
CONTENT = b'CONTENT GOES HERE'
|
||
|
START = len(CONTENT)
|
||
|
BUFSIZE = 10
|
||
|
stream = BytesIO(CONTENT)
|
||
|
stream.read(START) # already consumed
|
||
|
bufstream = self._makeOne(stream, START, BUFSIZE)
|
||
|
self.assertTrue(bufstream.stream_exhausted)
|
||
|
self.assertEqual(bufstream.stream_end_position, len(CONTENT))
|
||
|
self.assertEqual(bufstream._bytes_remaining, 0)
|
||
|
self.assertEqual(bufstream.read(10), b'')
|