From c1bc8eb3e21106121e589a410fd68d417e6aae16 Mon Sep 17 00:00:00 2001 From: wanckl Date: Wed, 28 Jan 2026 18:58:51 +0800 Subject: [PATCH] fix(driver_twai): test split runner combinations --- .../driver/test_apps/.build-test-rules.yml | 3 -- .../driver/test_apps/legacy_twai/README.md | 4 +-- .../test_apps/legacy_twai/pytest_twai.py | 3 -- .../test_apps/.build-test-rules.yml | 3 -- .../test_apps/test_twai/README.md | 4 +-- .../test_apps/test_twai/pytest_driver_twai.py | 3 -- examples/peripherals/.build-test-rules.yml | 20 ------------ .../cybergear/pytest_cybergear_example.py | 1 - .../twai/twai_network/pytest_twai_network.py | 32 ++++++++----------- .../twai/twai_utils/pytest_twai_utils.py | 11 +------ 10 files changed, 18 insertions(+), 66 deletions(-) diff --git a/components/driver/test_apps/.build-test-rules.yml b/components/driver/test_apps/.build-test-rules.yml index 66c710cafb..45564ab12d 100644 --- a/components/driver/test_apps/.build-test-rules.yml +++ b/components/driver/test_apps/.build-test-rules.yml @@ -18,9 +18,6 @@ components/driver/test_apps/legacy_twai: disable: - if: SOC_TWAI_SUPPORTED != 1 or SOC_TWAI_FD_SUPPORTED == 1 reason: legacy driver doesn't support FD - - if: IDF_TARGET == "esp32p4" - temporary: true - reason: p4 rev3 migration # TODO: IDF-14393 depends_filepatterns: - components/driver/twai/**/* depends_components: diff --git a/components/driver/test_apps/legacy_twai/README.md b/components/driver/test_apps/legacy_twai/README.md index 3717871adf..5edaa3c4ca 100644 --- a/components/driver/test_apps/legacy_twai/README.md +++ b/components/driver/test_apps/legacy_twai/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-H21 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-H21 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | # Enable Socket CAN Device with bitrate 250Kbps diff --git a/components/driver/test_apps/legacy_twai/pytest_twai.py b/components/driver/test_apps/legacy_twai/pytest_twai.py index 40285d65d6..f8d4b70a7a 100644 --- a/components/driver/test_apps/legacy_twai/pytest_twai.py +++ b/components/driver/test_apps/legacy_twai/pytest_twai.py @@ -26,7 +26,6 @@ from pytest_embedded_idf.utils import idf_parametrize @idf_parametrize( 'target', ['esp32', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32s2', 'esp32s3', 'esp32p4'], indirect=['target'] ) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_legacy_twai_self(dut: Dut) -> None: dut.run_all_single_board_cases(group='twai-loop-back') @@ -95,7 +94,6 @@ def fixture_create_socket_can() -> Bus: @idf_parametrize( 'target', ['esp32', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32s2', 'esp32s3', 'esp32p4'], indirect=['target'] ) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_legacy_twai_listen_only(dut: Dut, socket_can: Bus) -> None: esp_reset_and_wait_ready(dut) @@ -126,7 +124,6 @@ def test_legacy_twai_listen_only(dut: Dut, socket_can: Bus) -> None: @idf_parametrize( 'target', ['esp32', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32s2', 'esp32s3', 'esp32p4'], indirect=['target'] ) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_legacy_twai_remote_request(dut: Dut, socket_can: Bus) -> None: esp_reset_and_wait_ready(dut) diff --git a/components/esp_driver_twai/test_apps/.build-test-rules.yml b/components/esp_driver_twai/test_apps/.build-test-rules.yml index 97534348db..a38e7e86f6 100644 --- a/components/esp_driver_twai/test_apps/.build-test-rules.yml +++ b/components/esp_driver_twai/test_apps/.build-test-rules.yml @@ -1,9 +1,6 @@ components/esp_driver_twai/test_apps/test_twai: disable: - if: SOC_TWAI_SUPPORTED != 1 - - if: IDF_TARGET == "esp32p4" - temporary: true - reason: p4 rev3 migration # TODO: IDF-14393 depends_components: - esp_driver_twai - esp_hal_twai diff --git a/components/esp_driver_twai/test_apps/test_twai/README.md b/components/esp_driver_twai/test_apps/test_twai/README.md index d79d63dadf..c3221d0779 100644 --- a/components/esp_driver_twai/test_apps/test_twai/README.md +++ b/components/esp_driver_twai/test_apps/test_twai/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-H21 | ESP32-H4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-H2 | ESP32-H21 | ESP32-H4 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | diff --git a/components/esp_driver_twai/test_apps/test_twai/pytest_driver_twai.py b/components/esp_driver_twai/test_apps/test_twai/pytest_driver_twai.py index 43fe456db7..da8f6a814e 100644 --- a/components/esp_driver_twai/test_apps/test_twai/pytest_driver_twai.py +++ b/components/esp_driver_twai/test_apps/test_twai/pytest_driver_twai.py @@ -18,7 +18,6 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @pytest.mark.parametrize('config', ['release', 'cache_safe'], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_driver_twai_loopbk(dut: Dut) -> None: dut.run_all_single_board_cases(group='twai', reset=True) @@ -78,7 +77,6 @@ def fixture_create_socket_can() -> Bus: @pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') @pytest.mark.parametrize('config', ['release'], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_driver_twai_listen_only(dut: Dut, socket_can: Bus) -> None: esp_reset_and_wait_ready(dut) @@ -101,7 +99,6 @@ def test_driver_twai_listen_only(dut: Dut, socket_can: Bus) -> None: @pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') @pytest.mark.parametrize('config', ['release'], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_driver_twai_remote_request(dut: Dut, socket_can: Bus) -> None: esp_reset_and_wait_ready(dut) diff --git a/examples/peripherals/.build-test-rules.yml b/examples/peripherals/.build-test-rules.yml index d43d0f742c..256eb1d4d8 100644 --- a/examples/peripherals/.build-test-rules.yml +++ b/examples/peripherals/.build-test-rules.yml @@ -713,10 +713,6 @@ examples/peripherals/touch_sensor/touch_sens_sleep: examples/peripherals/twai/cybergear: disable: - if: SOC_TWAI_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET == "esp32p4" - temporary: true - reason: p4 rev3 migration # TODO: IDF-14393 depends_components: - esp_driver_twai - esp_hal_twai @@ -725,10 +721,6 @@ examples/peripherals/twai/cybergear: examples/peripherals/twai/twai_error_recovery: disable: - if: SOC_TWAI_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET == "esp32p4" - temporary: true - reason: p4 rev3 migration # TODO: IDF-14393 depends_components: - esp_driver_twai - esp_hal_twai @@ -737,10 +729,6 @@ examples/peripherals/twai/twai_error_recovery: examples/peripherals/twai/twai_network/twai_listen_only: disable: - if: SOC_TWAI_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET in ["esp32p4", "esp32h2"] - temporary: true - reason: p4 rev3 migration # TODO: IDF-14393 depends_components: - esp_driver_twai - esp_hal_twai @@ -749,10 +737,6 @@ examples/peripherals/twai/twai_network/twai_listen_only: examples/peripherals/twai/twai_network/twai_sender: disable: - if: SOC_TWAI_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET in ["esp32p4", "esp32c5"] - temporary: true - reason: p4 rev3 migration # TODO: IDF-14393 depends_components: - esp_driver_twai - esp_hal_twai @@ -761,10 +745,6 @@ examples/peripherals/twai/twai_network/twai_sender: examples/peripherals/twai/twai_utils: disable: - if: SOC_TWAI_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET == "esp32p4" - temporary: true - reason: p4 rev3 migration # TODO: IDF-14393 depends_components: - esp_driver_twai - esp_hal_twai diff --git a/examples/peripherals/twai/cybergear/pytest_cybergear_example.py b/examples/peripherals/twai/cybergear/pytest_cybergear_example.py index 8b942f952e..c4665ee72c 100644 --- a/examples/peripherals/twai/cybergear/pytest_cybergear_example.py +++ b/examples/peripherals/twai/cybergear/pytest_cybergear_example.py @@ -8,6 +8,5 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_cybergear_example(dut: Dut) -> None: dut.expect_exact('CyberGear console started') diff --git a/examples/peripherals/twai/twai_network/pytest_twai_network.py b/examples/peripherals/twai/twai_network/pytest_twai_network.py index ed4b5b6956..7e337a7cea 100644 --- a/examples/peripherals/twai/twai_network/pytest_twai_network.py +++ b/examples/peripherals/twai/twai_network/pytest_twai_network.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import os.path import subprocess @@ -7,9 +7,6 @@ import pytest from can import Bus from can import Message from pytest_embedded_idf import IdfDut -from pytest_embedded_idf.utils import soc_filtered_targets - -TWAI_SUPPORTED_TARGETS = soc_filtered_targets('SOC_TWAI_SUPPORTED == 1') # Socket CAN fixture @@ -27,17 +24,6 @@ def fixture_create_socket_can() -> Bus: subprocess.run(stop_command, shell=True, capture_output=True, text=True) -# Generate minimal combinations that each target appears in each app -def generate_target_combinations(target_list: list, count: int = 2) -> list: - combinations = [] - num_targets = len(target_list) - for round_num in range(num_targets): - selected_targets = [target_list[(round_num + i) % num_targets] for i in range(count)] - combinations.append('|'.join(selected_targets)) - - return combinations - - @pytest.mark.twai_std @pytest.mark.parametrize('count', [2], indirect=True) @pytest.mark.timeout(120) @@ -49,16 +35,24 @@ def generate_target_combinations(target_list: list, count: int = 2) -> list: f'{os.path.join(os.path.dirname(__file__), "twai_sender")}', target_combo, ) - for target_combo in generate_target_combinations(TWAI_SUPPORTED_TARGETS) + for target_combo in [ # Test each target combination and its reverse + 'esp32|esp32c6', + 'esp32c6|esp32', + 'esp32s2|esp32h2', + 'esp32h2|esp32s2', + 'esp32s3|esp32p4', + 'esp32p4|esp32s3', + 'esp32c3|esp32c5', + 'esp32c5|esp32c3', + ] ], indirect=True, ) -@pytest.mark.temp_skip_ci(targets=['esp32p4,*', '*,esp32p4'], reason='p4 rev3 migration') def test_twai_network_multi(dut: tuple[IdfDut, IdfDut], socket_can: Bus) -> None: """ Test TWAI network communication between two nodes: - - dut[0]: listener (first chip) - uses twai_listen_only - - dut[1]: sender (second chip) - uses twai_sender + - dut[0]: twai_listen_only + - dut[1]: twai_sender """ # Print chip information for debugging diff --git a/examples/peripherals/twai/twai_utils/pytest_twai_utils.py b/examples/peripherals/twai/twai_utils/pytest_twai_utils.py index f29e56db84..8b5288062a 100644 --- a/examples/peripherals/twai/twai_utils/pytest_twai_utils.py +++ b/examples/peripherals/twai/twai_utils/pytest_twai_utils.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 import subprocess @@ -310,7 +310,6 @@ def usb_can() -> CanBusManager: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_twai_utils_basic_operations(twai: TwaiTestHelper) -> None: with twai.session(start_dump=False): # Test basic send operation @@ -329,7 +328,6 @@ def test_twai_utils_basic_operations(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_twai_utils_bitrate_configuration(twai: TwaiTestHelper) -> None: for bitrate in [125000, 250000, 500000, 1000000]: with twai.session(mode='standard', bitrate=bitrate, tx_gpio=DEFAULT_TX_GPIO, rx_gpio=DEFAULT_RX_GPIO): @@ -338,7 +336,6 @@ def test_twai_utils_bitrate_configuration(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_twai_utils_frame_formats(twai: TwaiTestHelper) -> None: with twai.session(): BASIC_FRAMES = [ @@ -369,7 +366,6 @@ def test_twai_utils_frame_formats(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_twai_utils_info_and_recovery(twai: TwaiTestHelper) -> None: with twai.session(): assert twai.info(), 'Info command failed' @@ -390,7 +386,6 @@ def test_twai_utils_info_and_recovery(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_twai_utils_input_validation(twai: TwaiTestHelper) -> None: with twai.session(start_dump=False): INVALID_FRAMES = [ @@ -437,7 +432,6 @@ def test_twai_utils_input_validation(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_twai_utils_gpio_and_basic_send(twai: TwaiTestHelper) -> None: with twai.session(): assert twai.info(), 'GPIO info failed' @@ -465,7 +459,6 @@ def test_twai_utils_gpio_and_basic_send(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_twai_utils_send_various_frames(twai: TwaiTestHelper) -> None: with twai.session(): # Boundary ID tests @@ -499,7 +492,6 @@ def test_twai_utils_fd_frames(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') def test_twai_utils_mask_filters(twai: TwaiTestHelper) -> None: """Test TWAI filtering including automatic extended frame detection.""" MASK_FILTER_GROUPS = [ @@ -604,7 +596,6 @@ def test_twai_utils_range_filters(twai: TwaiTestHelper) -> None: @pytest.mark.twai_std @pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration # TODO: IDF-14393') def test_twai_utils_external_communication(twai: TwaiTestHelper, usb_can: CanBusManager) -> None: test_frames = [ ('123#DEADBEEF', 0x123, bytes.fromhex('DEADBEEF'), False),