Skip to content

Commit 585efcf

Browse files
committed
add test
1 parent 0389776 commit 585efcf

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

tests/runners/test_stream_utils.py

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import io
2+
import unittest
3+
4+
from clarifai.runners.utils.stream_utils import (SeekableStreamingChunksReader,
5+
StreamingChunksReader)
6+
7+
8+
class TestStreamingChunksReader(unittest.TestCase):
9+
10+
def setUp(self):
11+
self.chunks = [b'hello', b'world', b'12345']
12+
#self.reader = BufferStream(iter(self.chunks), buffer_size=10)
13+
self.reader = StreamingChunksReader(iter(self.chunks))
14+
15+
def test_read(self):
16+
buffer = bytearray(5)
17+
self.assertEqual(self.reader.readinto(buffer), 5)
18+
self.assertEqual(buffer, b'hello')
19+
20+
def test_read_file(self):
21+
self.assertEqual(self.reader.read(5), b'hello')
22+
23+
def test_read_partial_chunk(self):
24+
"""Test reading fewer bytes than a chunk contains, across multiple reads."""
25+
buffer = bytearray(3)
26+
self.assertEqual(self.reader.readinto(buffer), 3)
27+
self.assertEqual(buffer, b'hel')
28+
self.assertEqual(self.reader.readinto(buffer), 2)
29+
self.assertEqual(buffer[:2], b'lo')
30+
self.assertEqual(self.reader.readinto(buffer), 3)
31+
self.assertEqual(buffer, b'wor')
32+
33+
def test_large_chunk(self):
34+
"""Test handling a chunk larger than the buffer size."""
35+
large_chunk = b'a' * 20
36+
reader = StreamingChunksReader(iter([large_chunk]))
37+
buffer = bytearray(10)
38+
self.assertEqual(reader.readinto(buffer), 10)
39+
self.assertEqual(buffer, b'a' * 10)
40+
self.assertEqual(reader.readinto(buffer), 10)
41+
self.assertEqual(buffer, b'a' * 10)
42+
43+
44+
class TestSeekableStreamingChunksReader(TestStreamingChunksReader):
45+
46+
def setUp(self):
47+
self.chunks = [b'hello', b'world', b'12345']
48+
#self.reader = BufferStream(iter(self.chunks), buffer_size=10)
49+
self.reader = SeekableStreamingChunksReader(iter(self.chunks))
50+
51+
def test_interleaved_read_and_seek(self):
52+
"""Test alternating read and seek operations."""
53+
buffer = bytearray(5)
54+
self.reader.readinto(buffer)
55+
self.assertEqual(buffer, b'hello')
56+
buffer[:] = b'xxxxx'
57+
self.reader.seek(0)
58+
self.assertEqual(self.reader.readinto(buffer), 5)
59+
self.assertEqual(buffer, b'hello')
60+
self.reader.seek(7)
61+
n = self.reader.readinto(buffer)
62+
assert 1 <= n <= len(buffer)
63+
self.assertEqual(buffer[:n], b''.join(self.chunks)[7:7 + n])
64+
65+
def test_seek_and_tell(self):
66+
"""Test seeking to a position and confirming it with tell()."""
67+
self.reader.seek(5)
68+
self.assertEqual(self.reader.tell(), 5)
69+
self.reader.seek(-2, io.SEEK_CUR)
70+
self.assertEqual(self.reader.tell(), 3)
71+
72+
def test_seek_out_of_bounds(self):
73+
"""Test seeking to a negative position, which should raise an IOError."""
74+
with self.assertRaises(IOError):
75+
self.reader.seek(-1)
76+
77+
78+
if __name__ == '__main__':
79+
unittest.main()

0 commit comments

Comments
 (0)