import struct import asyncio from unittest.mock import AsyncMock from pm3py.core.protocol import Cmd from pm3py.core.transport import PM3Response from pm3py.core.hw import HWCommands def make_ng_response(cmd: int, status: int, payload: bytes) -> PM3Response: return PM3Response(cmd=cmd, status=status, reason=0, ng=True, data=payload) def make_mock_transport(): transport = AsyncMock() return transport def _make_caps_response(is_rdv4=False): """Build a capabilities response with is_rdv4 flag.""" # version(1) + baudrate(4) + bigbuf_size(4) + 4 bytes of flags flags = bytearray(4) flags[0] = 0x80 # compiled_with_lf if is_rdv4: flags[3] = 0x02 # is_rdv4 at byte 12 bit 1 return make_ng_response(Cmd.CAPABILITIES, 0, struct.pack(" fire-and-forget transport.send_ng_no_response.assert_awaited_once() cmd, payload = transport.send_ng_no_response.call_args.args assert cmd == Cmd.STANDALONE # PACKED {uint8 arg; uint8 mlen; uint8 mode[10]} = 12 bytes assert payload == struct.pack("