From 4028cb6121ffd1f92463cfc109593b17abe3aa8c Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Mon, 11 Dec 2023 19:24:01 -0800 Subject: [PATCH] FW query timing test: mock get_data function for timeout (#29712) * use a mock function to simulate timeout * Cleanup * Cleanup * clean refs * tolerance can also go down * fix * better name revert refs * use unittest * revert * Revert "use unittest" This reverts commit 7a1d6a6fc72fa129a66590e0e5998c2438ecbe55. * order * local * use a context * revert * stress test it * let's try * it's consistent --------- Co-authored-by: Shane Smiskol --- selfdrive/car/tests/test_fw_fingerprint.py | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/selfdrive/car/tests/test_fw_fingerprint.py b/selfdrive/car/tests/test_fw_fingerprint.py index 5721896787..d4cd6315f2 100755 --- a/selfdrive/car/tests/test_fw_fingerprint.py +++ b/selfdrive/car/tests/test_fw_fingerprint.py @@ -5,6 +5,7 @@ import time import unittest from collections import defaultdict from parameterized import parameterized +from unittest import mock import threading from cereal import car @@ -176,7 +177,7 @@ class TestFwFingerprint(unittest.TestCase): class TestFwFingerprintTiming(unittest.TestCase): N: int = 5 - TOL: float = 0.12 + TOL: float = 0.1 @staticmethod def _run_thread(thread: threading.Thread) -> float: @@ -191,12 +192,19 @@ class TestFwFingerprintTiming(unittest.TestCase): return time.perf_counter() - t def _benchmark_brand(self, brand, num_pandas): - fake_socket = FakeSocket() - brand_time = 0 - for _ in range(self.N): - thread = threading.Thread(target=get_fw_versions, args=(fake_socket, fake_socket, brand), - kwargs=dict(num_pandas=num_pandas)) - brand_time += self._run_thread(thread) + def fake_get_data(_, timeout): + nonlocal fake_timeout_time + fake_timeout_time += timeout + return {} + + with mock.patch("openpilot.selfdrive.car.isotp_parallel_query.IsoTpParallelQuery.get_data", fake_get_data): + fake_socket = FakeSocket() + brand_time = 0 + for _ in range(self.N): + fake_timeout_time = 0 + thread = threading.Thread(target=get_fw_versions, args=(fake_socket, fake_socket, brand), + kwargs=dict(num_pandas=num_pandas)) + brand_time += self._run_thread(thread) + fake_timeout_time return brand_time / self.N @@ -227,7 +235,7 @@ class TestFwFingerprintTiming(unittest.TestCase): @pytest.mark.timeout(60) def test_fw_query_timing(self): - total_ref_time = 6.41 + total_ref_time = 6.58 brand_ref_times = { 1: { 'body': 0.11,