fix(tests): restore test functionality on legacy

The global layout related changes were wrong for T1 where debuglink
behavior is significantly different; in particular, it is not always
possible to communicate over debuglink.

This change reverts to the old behavior for T1B1 and keeps the new one
only for core-based models.
pull/3686/head
matejcik 3 weeks ago
parent c1faedf872
commit 9177d75038

@ -606,7 +606,7 @@ class DebugLink:
wait_type = DebugWaitType.IMMEDIATE
else:
wait_type = self.input_wait_type
return self.snapshot(wait_type)
return self._snapshot_core(wait_type)
press_yes = _make_input_func(button=messages.DebugButton.YES)
"""Confirm current layout. See `_decision` for more details."""
@ -649,10 +649,14 @@ class DebugLink:
messages.DebugLinkDecision(x=x, y=y, hold_ms=hold_ms), wait
)
def snapshot(
def _snapshot_core(
self, wait_type: DebugWaitType = DebugWaitType.IMMEDIATE
) -> LayoutContent:
"""Save text and image content of the screen to relevant directories."""
# skip the snapshot if we are on T1
if self.model is models.T1B1:
return LayoutContent([])
# take the snapshot
state = self.state(wait_type)
layout = LayoutContent(state.tokens)
@ -660,8 +664,6 @@ class DebugLink:
if state.tokens and self.layout_dirty:
# save it, unless we already did or unless it's empty
self.save_debug_screen(layout.visible_screen())
if state.layout is not None:
self.save_screenshot(state.layout)
self.layout_dirty = False
# return the layout
@ -730,7 +732,16 @@ class DebugLink:
def erase_sd_card(self, format: bool = True) -> messages.Success:
return self._call(messages.DebugLinkEraseSdCard(format=format))
def save_screenshot(self, data: bytes) -> None:
def snapshot_legacy(self) -> None:
"""Snapshot the current state of the device."""
if self.model is not models.T1B1:
return
state = self.state()
if state.layout is not None:
self._save_screenshot_t1(state.layout)
def _save_screenshot_t1(self, data: bytes) -> None:
if self.t1_screenshot_directory is None:
return
@ -796,7 +807,7 @@ class DebugUI:
] = None
def button_request(self, br: messages.ButtonRequest) -> None:
self.debuglink.snapshot()
self.debuglink.snapshot_legacy()
if self.input_flow is None:
if br.code == messages.ButtonRequestType.PinEntry:
@ -817,7 +828,7 @@ class DebugUI:
self.input_flow = self.INPUT_FLOW_DONE
def get_pin(self, code: Optional["PinMatrixRequestType"] = None) -> str:
self.debuglink.snapshot()
self.debuglink.snapshot_legacy()
if self.pins is None:
raise RuntimeError("PIN requested but no sequence was configured")
@ -828,7 +839,7 @@ class DebugUI:
raise AssertionError("PIN sequence ended prematurely")
def get_passphrase(self, available_on_device: bool) -> str:
self.debuglink.snapshot()
self.debuglink.snapshot_legacy()
return self.passphrase
@ -1224,6 +1235,29 @@ class TrezorClientDebugLink(TrezorClient):
output.append(textwrap.indent(protobuf.format_message(act), " "))
raise AssertionError("\n".join(output))
def sync_responses(self) -> None:
"""Synchronize Trezor device receiving with caller.
When a failed test does not read out the response, the next caller will write
a request, but read the previous response -- while the device had already sent
and placed into queue the new response.
This function will call `Ping` and read responses until it locates a `Success`
with the expected text. This means that we are reading up-to-date responses.
"""
import secrets
# Start by canceling whatever is on screen. This will work to cancel T1 PIN
# prompt, which is in TINY mode and does not respond to `Ping`.
# go to super() to avoid message filtering
super()._raw_write(messages.Cancel())
message = "SYNC" + secrets.token_hex(8)
super()._raw_write(messages.Ping(message=message))
resp = None
while resp != messages.Success(message=message):
resp = super()._raw_read()
def mnemonic_callback(self, _) -> str:
word, pos = self.debug.read_recovery_word()
if word:

@ -61,8 +61,8 @@ def test_busy_state(client: Client):
assert client.features.unlocked is True
@pytest.mark.flaky(max_runs=5)
def test_busy_expiry(client: Client):
@pytest.mark.skip_t1b1
def test_busy_expiry_core(client: Client):
WAIT_TIME_MS = 1500
TOLERANCE = 1000
@ -85,3 +85,27 @@ def test_busy_expiry(client: Client):
# Also needs to come back to Homescreen (for UI tests).
client.refresh_features()
_assert_busy(client, False)
@pytest.mark.flaky(max_runs=5)
def test_busy_expiry_legacy(client: Client):
if client.model is not models.T1B1:
# TODO better skip markers
pytest.skip("Test only for T1B1")
_assert_busy(client, False)
# Show the busy dialog.
device.set_busy(client, expiry_ms=1500)
_assert_busy(client, True)
# Hasn't expired yet.
time.sleep(0.1)
_assert_busy(client, True)
# Wait for it to expire. Add some tolerance to account for CI/hardware slowness.
time.sleep(4.0)
# Check that the device is no longer busy.
# Also needs to come back to Homescreen (for UI tests).
client.refresh_features()
_assert_busy(client, False)

@ -648,7 +648,7 @@
"T1_en_test_bip32_speed.py::test_cache": "55f043b3e286b778a02baea8f7c3547208849e2e18f90837bd9374a4a14c5c0b",
"T1_en_test_bip32_speed.py::test_private_ckd": "55f043b3e286b778a02baea8f7c3547208849e2e18f90837bd9374a4a14c5c0b",
"T1_en_test_bip32_speed.py::test_public_ckd": "55f043b3e286b778a02baea8f7c3547208849e2e18f90837bd9374a4a14c5c0b",
"T1_en_test_busy_state.py::test_busy_expiry": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1_en_test_busy_state.py::test_busy_expiry_legacy": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"T1_en_test_busy_state.py::test_busy_state": "fe7e762884268cf79e211eeb7c7ed7f85b8364e8bac27bd6790fc300f9a1429c",
"T1_en_test_cancel.py::test_cancel_message_via_cancel[message0]": "de7fc40b2f35e82fa486f1b97ee3e34a96d0a67412537e8a0fddacc0b0b1649d",
"T1_en_test_cancel.py::test_cancel_message_via_cancel[message1]": "af93b5d0a8ae6b297391a43ff3f6382d0bea1109f4f411f5b306e2e7ced6e814",
@ -2227,7 +2227,7 @@
"T3T1_cs_test_basic.py::test_device_id_same": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d",
"T3T1_cs_test_basic.py::test_features": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d",
"T3T1_cs_test_basic.py::test_ping": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d",
"T3T1_cs_test_busy_state.py::test_busy_expiry": "5807370e36255f64722c9b70002daad3b718387eaa41102561ec6a0dcbeed20a",
"T3T1_cs_test_busy_state.py::test_busy_expiry_core": "5807370e36255f64722c9b70002daad3b718387eaa41102561ec6a0dcbeed20a",
"T3T1_cs_test_busy_state.py::test_busy_state": "5aa79b7b40ea267c0abb4c1783ce2d74233b3a8dcd35e53b37ad25d8fe109469",
"T3T1_cs_test_cancel.py::test_cancel_message_via_cancel[message0]": "fea263b87f3b5ccbbc7ac43de02f28a3927cc13116505a76b71047427d3b80d3",
"T3T1_cs_test_cancel.py::test_cancel_message_via_cancel[message1]": "2e607dedaaff54ba045743b6cf77f83eb81608d7e5ab22c3aaadbc13bfba9cb1",
@ -3638,7 +3638,7 @@
"T3T1_de_test_basic.py::test_device_id_same": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390",
"T3T1_de_test_basic.py::test_features": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390",
"T3T1_de_test_basic.py::test_ping": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390",
"T3T1_de_test_busy_state.py::test_busy_expiry": "d00c19e4be337da53afb665aa2c38784a51a91989ba65bb77aaadc8605994395",
"T3T1_de_test_busy_state.py::test_busy_expiry_core": "d00c19e4be337da53afb665aa2c38784a51a91989ba65bb77aaadc8605994395",
"T3T1_de_test_busy_state.py::test_busy_state": "f1630a5a7905c765a606cfb13aa12ae7f5a4bea2e426c0cb8eff0f988d7833bf",
"T3T1_de_test_cancel.py::test_cancel_message_via_cancel[message0]": "06b0b04c345ac39dbc1c07e3aab30d378443248e27761469e2d4c28d0fa359d9",
"T3T1_de_test_cancel.py::test_cancel_message_via_cancel[message1]": "0f74eaf21eeb33f4926152e82f47d0c9bc62e5e6002aecb6da2f3ebd126b1f31",
@ -5049,7 +5049,7 @@
"T3T1_en_test_basic.py::test_device_id_same": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3",
"T3T1_en_test_basic.py::test_features": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3",
"T3T1_en_test_basic.py::test_ping": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3",
"T3T1_en_test_busy_state.py::test_busy_expiry": "6509e7c943f2d09e3a5a7c69faee74c75b321ed1614d881d1ebdb57693c7f69a",
"T3T1_en_test_busy_state.py::test_busy_expiry_core": "6509e7c943f2d09e3a5a7c69faee74c75b321ed1614d881d1ebdb57693c7f69a",
"T3T1_en_test_busy_state.py::test_busy_state": "2521dbe0350a160f2e3b95512d785fb60ffd2f5db98dea9fe917d5c824623df6",
"T3T1_en_test_cancel.py::test_cancel_message_via_cancel[message0]": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739",
"T3T1_en_test_cancel.py::test_cancel_message_via_cancel[message1]": "3ed24b99952d25fcf0d9bd6d307c576862fe870ddb98288fa89b227f0e192073",
@ -6460,7 +6460,7 @@
"T3T1_es_test_basic.py::test_device_id_same": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab",
"T3T1_es_test_basic.py::test_features": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab",
"T3T1_es_test_basic.py::test_ping": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab",
"T3T1_es_test_busy_state.py::test_busy_expiry": "da280d408675fbdbaddefe467ce32f0fbd64726f8935dc5d49b9d2fe969f7585",
"T3T1_es_test_busy_state.py::test_busy_expiry_core": "da280d408675fbdbaddefe467ce32f0fbd64726f8935dc5d49b9d2fe969f7585",
"T3T1_es_test_busy_state.py::test_busy_state": "0c62c74559497e860b2b20a2bc1ca173bd1a861c2d96c3cb3631a10655bd55a8",
"T3T1_es_test_cancel.py::test_cancel_message_via_cancel[message0]": "1d98be5dd1e52fe5da379d1c72d6bc9065228b1d66939ee5bd2eda2fe857b679",
"T3T1_es_test_cancel.py::test_cancel_message_via_cancel[message1]": "61caffa741cf81f709e6df2818a5ace7411fef1765e14aec7dd99b13f7d1322f",
@ -7871,7 +7871,7 @@
"T3T1_fr_test_basic.py::test_device_id_same": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94",
"T3T1_fr_test_basic.py::test_features": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94",
"T3T1_fr_test_basic.py::test_ping": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94",
"T3T1_fr_test_busy_state.py::test_busy_expiry": "0b142663642a8981e8fb85cf0eda771d72c9d2206cd224d170b588f32da4d8cd",
"T3T1_fr_test_busy_state.py::test_busy_expiry_core": "0b142663642a8981e8fb85cf0eda771d72c9d2206cd224d170b588f32da4d8cd",
"T3T1_fr_test_busy_state.py::test_busy_state": "563885e8f60dfe6e266ddfff8e0adbae1bec7d16c2e6bee864b640274f485fad",
"T3T1_fr_test_cancel.py::test_cancel_message_via_cancel[message0]": "e2146f6ece95111d17b01b0f2e0bf720c845242c7b0791ce5c8af5e9ca63249e",
"T3T1_fr_test_cancel.py::test_cancel_message_via_cancel[message1]": "722d1df17cd5650880e8a634038c1f582229258661a26ee307a9a8d8737dc178",
@ -9474,7 +9474,7 @@
"TR_cs_test_basic.py::test_device_id_same": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
"TR_cs_test_basic.py::test_features": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
"TR_cs_test_basic.py::test_ping": "9693b9b07c3ff5108d3d30096ff1ce9988f22465fb85eac2ab68f6ef62ddc995",
"TR_cs_test_busy_state.py::test_busy_expiry": "3ada1eb6b81ca1cba6132b590848152d4f95741a58e0175443a634043b6b95b4",
"TR_cs_test_busy_state.py::test_busy_expiry_core": "3ada1eb6b81ca1cba6132b590848152d4f95741a58e0175443a634043b6b95b4",
"TR_cs_test_busy_state.py::test_busy_state": "81bd8c995f8285cbf7e5d2d2195fee1c8f88407377f7f97f2695f4cb066112b8",
"TR_cs_test_cancel.py::test_cancel_message_via_cancel[message0]": "b2d105102f6fb8e5fa8c3604b14801acba3d1c7ada22864953555f7ed2892f0c",
"TR_cs_test_cancel.py::test_cancel_message_via_cancel[message1]": "f7d03979547d086681cd006d6fa2015afd0819f3dea983587b734d79a8942757",
@ -10847,7 +10847,7 @@
"TR_de_test_basic.py::test_device_id_same": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
"TR_de_test_basic.py::test_features": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
"TR_de_test_basic.py::test_ping": "9bdb526d0b64a91e862ec4ba7ced36adf20382a193c8f0c5788a70564aeac23a",
"TR_de_test_busy_state.py::test_busy_expiry": "f060bd0cb42bced5d02923279994ebadb2d6bfdac236f2bf62fb204b1f6f67c7",
"TR_de_test_busy_state.py::test_busy_expiry_core": "f060bd0cb42bced5d02923279994ebadb2d6bfdac236f2bf62fb204b1f6f67c7",
"TR_de_test_busy_state.py::test_busy_state": "9e61e8b66dfe59eed520d6a216cf7309fe464a1c184ff0a8faa165bf434514c1",
"TR_de_test_cancel.py::test_cancel_message_via_cancel[message0]": "c5d2fa0882792a553ba2b2ee2a1f4cca2a5e00d30b1b3dec4c95ce2717b38690",
"TR_de_test_cancel.py::test_cancel_message_via_cancel[message1]": "9863194d3b2a0984312ab1e943fa53e1c5904f1abd7589f80efa6cb534a592d2",
@ -12220,7 +12220,7 @@
"TR_en_test_basic.py::test_device_id_same": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
"TR_en_test_basic.py::test_features": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
"TR_en_test_basic.py::test_ping": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
"TR_en_test_busy_state.py::test_busy_expiry": "0cff54da20c3c70d5b5de75a45fc265b29683fe322ad498f947656118691eeca",
"TR_en_test_busy_state.py::test_busy_expiry_core": "0cff54da20c3c70d5b5de75a45fc265b29683fe322ad498f947656118691eeca",
"TR_en_test_busy_state.py::test_busy_state": "32a4b260c4ef5881e071fc04dd5b1aeac4489792191879930a3293c99a1c7cf6",
"TR_en_test_cancel.py::test_cancel_message_via_cancel[message0]": "4ffbed72e7ed7fbab85f830952200adf7758af81b658b56de4672344120456a6",
"TR_en_test_cancel.py::test_cancel_message_via_cancel[message1]": "67bcd312e8f0fc9739b12700419844370f78c643450942768a355bb97e5fe4ec",
@ -13593,7 +13593,7 @@
"TR_es_test_basic.py::test_device_id_same": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
"TR_es_test_basic.py::test_features": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
"TR_es_test_basic.py::test_ping": "5e88affdb4b3898af738bfabb224b94e674c0d5b8bd6ea4f73a601c972f5858c",
"TR_es_test_busy_state.py::test_busy_expiry": "c550a9bbdc796a989d6e46a699b8e138c1b87aef7761dbad49ce4977bff27f26",
"TR_es_test_busy_state.py::test_busy_expiry_core": "c550a9bbdc796a989d6e46a699b8e138c1b87aef7761dbad49ce4977bff27f26",
"TR_es_test_busy_state.py::test_busy_state": "b0e34cf92702c911d513eb2277edf9426d6a4138d32ac21f2af24d9c3791bc74",
"TR_es_test_cancel.py::test_cancel_message_via_cancel[message0]": "816ff08f20890dff7e1475ef0c34f23705c8020a8432b7751e46001015ef2bf2",
"TR_es_test_cancel.py::test_cancel_message_via_cancel[message1]": "c2eca4793ad12e18f623de2d33c006ba58fa0018733b0a86b877493b6d569432",
@ -14966,7 +14966,7 @@
"TR_fr_test_basic.py::test_device_id_same": "3bbca7f9b0cc44dd18b1fb71d34dec0542b8ac69e022cf4cd1f2792a41b4fb20",
"TR_fr_test_basic.py::test_features": "3bbca7f9b0cc44dd18b1fb71d34dec0542b8ac69e022cf4cd1f2792a41b4fb20",
"TR_fr_test_basic.py::test_ping": "3bbca7f9b0cc44dd18b1fb71d34dec0542b8ac69e022cf4cd1f2792a41b4fb20",
"TR_fr_test_busy_state.py::test_busy_expiry": "3c4520b8aadefa089195d16d37ebc6f834963a65fa4df8eeef3fb981d7c78615",
"TR_fr_test_busy_state.py::test_busy_expiry_core": "3c4520b8aadefa089195d16d37ebc6f834963a65fa4df8eeef3fb981d7c78615",
"TR_fr_test_busy_state.py::test_busy_state": "ce6644870a4f3789f5b4826291a432390f4716db3c22df87ff772b2c0463c5a8",
"TR_fr_test_cancel.py::test_cancel_message_via_cancel[message0]": "8b57a6aeec4cd6699e8e58d1789366801c279aaeb35fb852098266773b8392d7",
"TR_fr_test_cancel.py::test_cancel_message_via_cancel[message1]": "6cf87ca1cac84a641e4498d88b98b2d7f9af4050a4cbc7d4daf9da824cac6caa",
@ -16646,7 +16646,7 @@
"TT_cs_test_basic.py::test_device_id_same": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d",
"TT_cs_test_basic.py::test_features": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d",
"TT_cs_test_basic.py::test_ping": "1b0c0ad21a8089c6441d577f0d15ccea46d9b2d7f77b8eb50c3d952dc0d7114d",
"TT_cs_test_busy_state.py::test_busy_expiry": "5807370e36255f64722c9b70002daad3b718387eaa41102561ec6a0dcbeed20a",
"TT_cs_test_busy_state.py::test_busy_expiry_core": "5807370e36255f64722c9b70002daad3b718387eaa41102561ec6a0dcbeed20a",
"TT_cs_test_busy_state.py::test_busy_state": "7c205de09a75561f3f348353acb44ee75bba08174bd93296d5bbaf49fe78283a",
"TT_cs_test_cancel.py::test_cancel_message_via_cancel[message0]": "fea263b87f3b5ccbbc7ac43de02f28a3927cc13116505a76b71047427d3b80d3",
"TT_cs_test_cancel.py::test_cancel_message_via_cancel[message1]": "2e607dedaaff54ba045743b6cf77f83eb81608d7e5ab22c3aaadbc13bfba9cb1",
@ -18099,7 +18099,7 @@
"TT_de_test_basic.py::test_device_id_same": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390",
"TT_de_test_basic.py::test_features": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390",
"TT_de_test_basic.py::test_ping": "4ed24353a7aa99e894d4ed3cb45be13f54a94577289f3919be62add4c6c36390",
"TT_de_test_busy_state.py::test_busy_expiry": "d00c19e4be337da53afb665aa2c38784a51a91989ba65bb77aaadc8605994395",
"TT_de_test_busy_state.py::test_busy_expiry_core": "d00c19e4be337da53afb665aa2c38784a51a91989ba65bb77aaadc8605994395",
"TT_de_test_busy_state.py::test_busy_state": "a9b1c1730c697ecceb462c2717e1c3364f4f2b5fe99e4c19c0dd52409da76ea9",
"TT_de_test_cancel.py::test_cancel_message_via_cancel[message0]": "06b0b04c345ac39dbc1c07e3aab30d378443248e27761469e2d4c28d0fa359d9",
"TT_de_test_cancel.py::test_cancel_message_via_cancel[message1]": "0f74eaf21eeb33f4926152e82f47d0c9bc62e5e6002aecb6da2f3ebd126b1f31",
@ -19552,7 +19552,7 @@
"TT_en_test_basic.py::test_device_id_same": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3",
"TT_en_test_basic.py::test_features": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3",
"TT_en_test_basic.py::test_ping": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3",
"TT_en_test_busy_state.py::test_busy_expiry": "6509e7c943f2d09e3a5a7c69faee74c75b321ed1614d881d1ebdb57693c7f69a",
"TT_en_test_busy_state.py::test_busy_expiry_core": "6509e7c943f2d09e3a5a7c69faee74c75b321ed1614d881d1ebdb57693c7f69a",
"TT_en_test_busy_state.py::test_busy_state": "cb4f7dfd4ed0146bf84bf43497d7b72ba8b1d2daa9699b84ae788d579fd1e8f0",
"TT_en_test_cancel.py::test_cancel_message_via_cancel[message0]": "d702b0f90581cf17e0f77b4d318324a002deec42c2c5cb8860d51f6cb50f5739",
"TT_en_test_cancel.py::test_cancel_message_via_cancel[message1]": "3ed24b99952d25fcf0d9bd6d307c576862fe870ddb98288fa89b227f0e192073",
@ -21023,7 +21023,7 @@
"TT_es_test_basic.py::test_device_id_same": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab",
"TT_es_test_basic.py::test_features": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab",
"TT_es_test_basic.py::test_ping": "3d2d3c815bfd09c3235e3749e66769dc375f49f9cc92f13f4a7b7df38e6bcfab",
"TT_es_test_busy_state.py::test_busy_expiry": "da280d408675fbdbaddefe467ce32f0fbd64726f8935dc5d49b9d2fe969f7585",
"TT_es_test_busy_state.py::test_busy_expiry_core": "da280d408675fbdbaddefe467ce32f0fbd64726f8935dc5d49b9d2fe969f7585",
"TT_es_test_busy_state.py::test_busy_state": "ed25ea1cba88e78fce2ff28e83a0988f85cfdb708fda5ffa24f2362d4acd5925",
"TT_es_test_cancel.py::test_cancel_message_via_cancel[message0]": "1d98be5dd1e52fe5da379d1c72d6bc9065228b1d66939ee5bd2eda2fe857b679",
"TT_es_test_cancel.py::test_cancel_message_via_cancel[message1]": "61caffa741cf81f709e6df2818a5ace7411fef1765e14aec7dd99b13f7d1322f",
@ -22476,7 +22476,7 @@
"TT_fr_test_basic.py::test_device_id_same": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94",
"TT_fr_test_basic.py::test_features": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94",
"TT_fr_test_basic.py::test_ping": "5c03427cb7e315cb2f1e036c2edb2cc7c527ac80783c331fda0749bf306bcd94",
"TT_fr_test_busy_state.py::test_busy_expiry": "0b142663642a8981e8fb85cf0eda771d72c9d2206cd224d170b588f32da4d8cd",
"TT_fr_test_busy_state.py::test_busy_expiry_core": "0b142663642a8981e8fb85cf0eda771d72c9d2206cd224d170b588f32da4d8cd",
"TT_fr_test_busy_state.py::test_busy_state": "89b66a8c8a331bfb0a1be406bc23f48fba01366da19d9442d0dee04785fb3dd2",
"TT_fr_test_cancel.py::test_cancel_message_via_cancel[message0]": "e2146f6ece95111d17b01b0f2e0bf720c845242c7b0791ce5c8af5e9ca63249e",
"TT_fr_test_cancel.py::test_cancel_message_via_cancel[message1]": "722d1df17cd5650880e8a634038c1f582229258661a26ee307a9a8d8737dc178",

Loading…
Cancel
Save