Skip to content

Commit 92790db

Browse files
authored
Expanded ApiVersions test from api-message branch. (#2728)
1 parent 1e05c1f commit 92790db

2 files changed

Lines changed: 18 additions & 3 deletions

File tree

kafka/protocol/api_versions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def decode(cls, data, header=False, framed=False):
2424
if framed:
2525
nbytes = Int32.decode(data)
2626
if header:
27-
cls.parse_header(data)
27+
cls.parse_header(data) # Note: non-flexible header
2828
err = Int16.decode(data)
2929
data.seek(curr)
3030
if err != 0:

test/protocol/test_api_versions.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
from io import BytesIO
2+
13
import pytest
24

3-
from kafka.protocol.api import Request
5+
from kafka.protocol.api import Request, ResponseHeader
46
from kafka.protocol.api_versions import ApiVersionsRequest, ApiVersionsResponse
57
from kafka.protocol.types import Int32
68
from kafka.version import __version__
@@ -70,4 +72,17 @@ def test_parse(msg, encoded):
7072
else:
7173
msg.with_header(correlation_id=1)
7274
assert msg.encode(header=True, framed=True) == encoded
73-
assert msg.decode(encoded, header=True, framed=True) == msg
75+
data = BytesIO(encoded)
76+
assert msg.decode(data, header=True, framed=True) == msg
77+
assert data.read() == b''
78+
79+
80+
@pytest.mark.parametrize('version', [0, 1, 2, 3, 4])
81+
def test_parse_flexible_error(version):
82+
# An unsupported request version returns v0 response. Make sure this works with all versions!
83+
msg = ApiVersionsResponse[0](error_code=35, api_versions=[(18, 0, 3)])
84+
msg.with_header(correlation_id=1)
85+
encoded = b'\x00\x00\x00\x10\x00\x00\x00\x01\x00#\x00\x00\x00\x01\x00\x12\x00\x00\x00\x03'
86+
data = BytesIO(encoded)
87+
assert ApiVersionsResponse[version].decode(data, header=True, framed=True) == msg
88+
assert data.read() == b''

0 commit comments

Comments
 (0)