diff --git a/examples/storage/nvs/nvs_bootloader/pytest_nvs_bootloader.py b/examples/storage/nvs/nvs_bootloader/pytest_nvs_bootloader.py index bfdba95b2aa..ff9526f2da0 100644 --- a/examples/storage/nvs/nvs_bootloader/pytest_nvs_bootloader.py +++ b/examples/storage/nvs/nvs_bootloader/pytest_nvs_bootloader.py @@ -6,9 +6,14 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic +@pytest.mark.flaky(reruns=2, reruns_delay=5) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') @idf_parametrize('target', ['supported_targets'], indirect=['target']) def test_nvs_bootloader_example(dut: Dut) -> None: + # Full bootloader hook logs must be visible before app output. On some targets (e.g. ESP32-H2) + # the default post-flash boot can finish before the serial capture window aligns; reset once + # so expectations always match output from a captured cold boot. + dut.serial.hard_reset() # Expect to read hooks messages and data from NVS partition dut.expect_exact('Before reading from NVS partition') dut.expect_exact('Result data. Return code: ESP_OK') @@ -23,6 +28,7 @@ def test_nvs_bootloader_example(dut: Dut) -> None: @pytest.mark.nvs_encr_hmac +@pytest.mark.flaky(reruns=2, reruns_delay=5) @pytest.mark.parametrize('config', ['nvs_enc_hmac'], indirect=True) @idf_parametrize('target', ['esp32c3'], indirect=['target']) def test_nvs_bootloader_example_nvs_encr_hmac(dut: Dut) -> None: @@ -30,6 +36,7 @@ def test_nvs_bootloader_example_nvs_encr_hmac(dut: Dut) -> None: @pytest.mark.flash_encryption +@pytest.mark.flaky(reruns=2, reruns_delay=5) @pytest.mark.parametrize('config', ['nvs_enc_flash_enc'], indirect=True) @idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target']) def test_nvs_bootloader_example_flash_enc(dut: Dut) -> None: