Skip to content

Commit 594f707

Browse files
committed
Test MessageSetBuffer close -- cover double close compression bug
1 parent 1eb7e05 commit 594f707

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

test/test_buffer.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# pylint: skip-file
2+
from __future__ import absolute_import
3+
4+
import io
5+
6+
import pytest
7+
8+
from kafka.producer.buffer import MessageSetBuffer
9+
from kafka.protocol.message import Message, MessageSet
10+
11+
12+
def test_buffer_close():
13+
records = MessageSetBuffer(io.BytesIO(), 100000)
14+
orig_msg = Message(b'foobar')
15+
records.append(1234, orig_msg)
16+
records.close()
17+
18+
msgset = MessageSet.decode(records.buffer())
19+
assert len(msgset) == 1
20+
(offset, size, msg) = msgset[0]
21+
assert offset == 1234
22+
assert msg == orig_msg
23+
24+
# Closing again should work fine
25+
records.close()
26+
27+
msgset = MessageSet.decode(records.buffer())
28+
assert len(msgset) == 1
29+
(offset, size, msg) = msgset[0]
30+
assert offset == 1234
31+
assert msg == orig_msg
32+
33+
34+
@pytest.mark.parametrize('compression', [
35+
'gzip',
36+
'snappy',
37+
pytest.mark.skipif("sys.version_info < (2,7)")('lz4'), # lz4tools does not work on py26
38+
])
39+
def test_compressed_buffer_close(compression):
40+
records = MessageSetBuffer(io.BytesIO(), 100000, compression_type=compression)
41+
orig_msg = Message(b'foobar')
42+
records.append(1234, orig_msg)
43+
records.close()
44+
45+
msgset = MessageSet.decode(records.buffer())
46+
assert len(msgset) == 1
47+
(offset, size, msg) = msgset[0]
48+
assert offset == 0
49+
assert msg.is_compressed()
50+
51+
msgset = msg.decompress()
52+
(offset, size, msg) = msgset[0]
53+
assert not msg.is_compressed()
54+
assert offset == 1234
55+
assert msg == orig_msg
56+
57+
# Closing again should work fine
58+
records.close()
59+
60+
msgset = MessageSet.decode(records.buffer())
61+
assert len(msgset) == 1
62+
(offset, size, msg) = msgset[0]
63+
assert offset == 0
64+
assert msg.is_compressed()
65+
66+
msgset = msg.decompress()
67+
(offset, size, msg) = msgset[0]
68+
assert not msg.is_compressed()
69+
assert offset == 1234
70+
assert msg == orig_msg

0 commit comments

Comments
 (0)