2023-01-03 23:39:50 +01:00
|
|
|
import asyncio
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
2023-01-06 05:24:10 +01:00
|
|
|
from aioesphomeapi._frame_helper import APIPlaintextFrameHelper, Packet
|
2023-01-03 23:39:50 +01:00
|
|
|
from aioesphomeapi.util import varuint_to_bytes
|
|
|
|
|
|
|
|
PREAMBLE = b"\x00"
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
|
|
@pytest.mark.parametrize(
|
|
|
|
"in_bytes, pkt_data, pkt_type",
|
|
|
|
[
|
|
|
|
(PREAMBLE + varuint_to_bytes(0) + varuint_to_bytes(1), b"", 1),
|
|
|
|
(
|
|
|
|
PREAMBLE + varuint_to_bytes(192) + varuint_to_bytes(1) + (b"\x42" * 192),
|
|
|
|
(b"\x42" * 192),
|
|
|
|
1,
|
|
|
|
),
|
|
|
|
(
|
|
|
|
PREAMBLE + varuint_to_bytes(192) + varuint_to_bytes(100) + (b"\x42" * 192),
|
|
|
|
(b"\x42" * 192),
|
|
|
|
100,
|
|
|
|
),
|
|
|
|
(
|
|
|
|
PREAMBLE + varuint_to_bytes(4) + varuint_to_bytes(100) + (b"\x42" * 4),
|
|
|
|
(b"\x42" * 4),
|
|
|
|
100,
|
|
|
|
),
|
|
|
|
(
|
|
|
|
PREAMBLE
|
|
|
|
+ varuint_to_bytes(8192)
|
|
|
|
+ varuint_to_bytes(8192)
|
|
|
|
+ (b"\x42" * 8192),
|
|
|
|
(b"\x42" * 8192),
|
|
|
|
8192,
|
|
|
|
),
|
|
|
|
(
|
|
|
|
PREAMBLE + varuint_to_bytes(256) + varuint_to_bytes(256) + (b"\x42" * 256),
|
|
|
|
(b"\x42" * 256),
|
|
|
|
256,
|
|
|
|
),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
async def test_plaintext_frame_helper(in_bytes, pkt_data, pkt_type):
|
|
|
|
for _ in range(5):
|
2023-01-06 05:24:10 +01:00
|
|
|
packets = []
|
|
|
|
|
|
|
|
def _packet(pkt: Packet):
|
|
|
|
packets.append(pkt)
|
|
|
|
|
|
|
|
def _on_error(exc: Exception):
|
|
|
|
raise exc
|
2023-01-03 23:39:50 +01:00
|
|
|
|
2023-01-06 05:24:10 +01:00
|
|
|
helper = APIPlaintextFrameHelper(on_pkt=_packet, on_error=_on_error)
|
2023-01-03 23:39:50 +01:00
|
|
|
|
2023-01-06 05:24:10 +01:00
|
|
|
helper.data_received(in_bytes)
|
2023-01-03 23:39:50 +01:00
|
|
|
|
2023-01-06 05:24:10 +01:00
|
|
|
pkt = packets.pop()
|
2023-01-03 23:39:50 +01:00
|
|
|
|
|
|
|
assert pkt.type == pkt_type
|
|
|
|
assert pkt.data == pkt_data
|