|
| 1 | +import io |
| 2 | +import struct |
| 3 | + |
| 4 | +import pytest |
| 5 | + |
| 6 | +from kafka.protocol.types import UnsignedVarInt32, VarInt32, VarInt64 |
| 7 | + |
| 8 | + |
| 9 | +@pytest.mark.parametrize(('value','expected_encoded'), [ |
| 10 | + (0, [0x00]), |
| 11 | + (-1, [0xFF, 0xFF, 0xFF, 0xFF, 0x0F]), |
| 12 | + (1, [0x01]), |
| 13 | + (63, [0x3F]), |
| 14 | + (-64, [0xC0, 0xFF, 0xFF, 0xFF, 0x0F]), |
| 15 | + (64, [0x40]), |
| 16 | + (8191, [0xFF, 0x3F]), |
| 17 | + (-8192, [0x80, 0xC0, 0xFF, 0xFF, 0x0F]), |
| 18 | + (8192, [0x80, 0x40]), |
| 19 | + (-8193, [0xFF, 0xBF, 0xFF, 0xFF, 0x0F]), |
| 20 | + (1048575, [0xFF, 0xFF, 0x3F]), |
| 21 | + (1048576, [0x80, 0x80, 0x40]), |
| 22 | + (2147483647, [0xFF, 0xFF, 0xFF, 0xFF, 0x07]), |
| 23 | + (-2147483648, [0x80, 0x80, 0x80, 0x80, 0x08]), |
| 24 | +]) |
| 25 | +def test_unsigned_varint_serde(value, expected_encoded): |
| 26 | + value &= 0xffffffff |
| 27 | + encoded = UnsignedVarInt32.encode(value) |
| 28 | + assert encoded == b''.join(struct.pack('>B', x) for x in expected_encoded) |
| 29 | + assert value == UnsignedVarInt32.decode(io.BytesIO(encoded)) |
| 30 | + |
| 31 | + |
| 32 | +@pytest.mark.parametrize(('value','expected_encoded'), [ |
| 33 | + (0, [0x00]), |
| 34 | + (-1, [0x01]), |
| 35 | + (1, [0x02]), |
| 36 | + (63, [0x7E]), |
| 37 | + (-64, [0x7F]), |
| 38 | + (64, [0x80, 0x01]), |
| 39 | + (-65, [0x81, 0x01]), |
| 40 | + (8191, [0xFE, 0x7F]), |
| 41 | + (-8192, [0xFF, 0x7F]), |
| 42 | + (8192, [0x80, 0x80, 0x01]), |
| 43 | + (-8193, [0x81, 0x80, 0x01]), |
| 44 | + (1048575, [0xFE, 0xFF, 0x7F]), |
| 45 | + (-1048576, [0xFF, 0xFF, 0x7F]), |
| 46 | + (1048576, [0x80, 0x80, 0x80, 0x01]), |
| 47 | + (-1048577, [0x81, 0x80, 0x80, 0x01]), |
| 48 | + (134217727, [0xFE, 0xFF, 0xFF, 0x7F]), |
| 49 | + (-134217728, [0xFF, 0xFF, 0xFF, 0x7F]), |
| 50 | + (134217728, [0x80, 0x80, 0x80, 0x80, 0x01]), |
| 51 | + (-134217729, [0x81, 0x80, 0x80, 0x80, 0x01]), |
| 52 | + (2147483647, [0xFE, 0xFF, 0xFF, 0xFF, 0x0F]), |
| 53 | + (-2147483648, [0xFF, 0xFF, 0xFF, 0xFF, 0x0F]), |
| 54 | +]) |
| 55 | +def test_signed_varint_serde(value, expected_encoded): |
| 56 | + encoded = VarInt32.encode(value) |
| 57 | + assert encoded == b''.join(struct.pack('>B', x) for x in expected_encoded) |
| 58 | + assert value == VarInt32.decode(io.BytesIO(encoded)) |
| 59 | + |
| 60 | + |
| 61 | +@pytest.mark.parametrize(('value','expected_encoded'), [ |
| 62 | + (0, [0x00]), |
| 63 | + (-1, [0x01]), |
| 64 | + (1, [0x02]), |
| 65 | + (63, [0x7E]), |
| 66 | + (-64, [0x7F]), |
| 67 | + (64, [0x80, 0x01]), |
| 68 | + (-65, [0x81, 0x01]), |
| 69 | + (8191, [0xFE, 0x7F]), |
| 70 | + (-8192, [0xFF, 0x7F]), |
| 71 | + (8192, [0x80, 0x80, 0x01]), |
| 72 | + (-8193, [0x81, 0x80, 0x01]), |
| 73 | + (1048575, [0xFE, 0xFF, 0x7F]), |
| 74 | + (-1048576, [0xFF, 0xFF, 0x7F]), |
| 75 | + (1048576, [0x80, 0x80, 0x80, 0x01]), |
| 76 | + (-1048577, [0x81, 0x80, 0x80, 0x01]), |
| 77 | + (134217727, [0xFE, 0xFF, 0xFF, 0x7F]), |
| 78 | + (-134217728, [0xFF, 0xFF, 0xFF, 0x7F]), |
| 79 | + (134217728, [0x80, 0x80, 0x80, 0x80, 0x01]), |
| 80 | + (-134217729, [0x81, 0x80, 0x80, 0x80, 0x01]), |
| 81 | + (2147483647, [0xFE, 0xFF, 0xFF, 0xFF, 0x0F]), |
| 82 | + (-2147483648, [0xFF, 0xFF, 0xFF, 0xFF, 0x0F]), |
| 83 | + (17179869183, [0xFE, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 84 | + (-17179869184, [0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 85 | + (17179869184, [0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 86 | + (-17179869185, [0x81, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 87 | + (2199023255551, [0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 88 | + (-2199023255552, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 89 | + (2199023255552, [0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 90 | + (-2199023255553, [0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 91 | + (281474976710655, [0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 92 | + (-281474976710656, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 93 | + (281474976710656, [0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 94 | + (-281474976710657, [0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 1]), |
| 95 | + (36028797018963967, [0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 96 | + (-36028797018963968, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 97 | + (36028797018963968, [0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 98 | + (-36028797018963969, [0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 99 | + (4611686018427387903, [0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 100 | + (-4611686018427387904, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F]), |
| 101 | + (4611686018427387904, [0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 102 | + (-4611686018427387905, [0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01]), |
| 103 | + (9223372036854775807, [0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01]), |
| 104 | + (-9223372036854775808, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01]), |
| 105 | +]) |
| 106 | +def test_signed_varlong_serde(value, expected_encoded): |
| 107 | + encoded = VarInt64.encode(value) |
| 108 | + assert encoded == b''.join(struct.pack('>B', x) for x in expected_encoded) |
| 109 | + assert value == VarInt64.decode(io.BytesIO(encoded)) |
0 commit comments