tests: boot: with_mcumgr: Add swap using offset test

Adds a variation of the test which tests swap using offset mode,
based on the swap using move test

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
This commit is contained in:
Jamie McCrae 2025-01-27 13:59:46 +00:00 committed by Benjamin Cabé
commit 141f7fa427
2 changed files with 37 additions and 16 deletions

View file

@ -32,6 +32,13 @@ def create_signed_image(build_dir: Path, app_build_dir: Path, version: str) -> P
return image_to_test return image_to_test
def get_upgrade_string_to_verify(build_dir: Path) -> str:
sysbuild_config = Path(build_dir) / 'zephyr' / '.config'
if find_in_config(sysbuild_config, 'SB_CONFIG_MCUBOOT_MODE_SWAP_USING_OFFSET'):
return 'Starting swap using offset algorithm'
return 'Starting swap using move algorithm'
def clear_buffer(dut: DeviceAdapter) -> None: def clear_buffer(dut: DeviceAdapter) -> None:
disconnect = False disconnect = False
if not dut.is_device_connected(): if not dut.is_device_connected():
@ -71,9 +78,10 @@ def test_upgrade_with_confirm(dut: DeviceAdapter, shell: Shell, mcumgr: MCUmgr):
dut.connect() dut.connect()
output = dut.readlines_until('Launching primary slot application') output = dut.readlines_until('Launching primary slot application')
upgrade_string_to_verify = get_upgrade_string_to_verify(dut.device_config.build_dir)
match_lines(output, [ match_lines(output, [
'Swap type: test', 'Swap type: test',
'Starting swap using move algorithm' upgrade_string_to_verify
]) ])
logger.info('Verify new APP is booted') logger.info('Verify new APP is booted')
check_with_shell_command(shell, new_version, swap_type='test') check_with_shell_command(shell, new_version, swap_type='test')
@ -87,7 +95,7 @@ def test_upgrade_with_confirm(dut: DeviceAdapter, shell: Shell, mcumgr: MCUmgr):
dut.connect() dut.connect()
output = dut.readlines_until('Launching primary slot application') output = dut.readlines_until('Launching primary slot application')
match_no_lines(output, [ match_no_lines(output, [
'Starting swap using move algorithm' upgrade_string_to_verify
]) ])
logger.info('Verify new APP is still booted') logger.info('Verify new APP is still booted')
check_with_shell_command(shell, new_version) check_with_shell_command(shell, new_version)
@ -126,9 +134,10 @@ def test_upgrade_with_revert(dut: DeviceAdapter, shell: Shell, mcumgr: MCUmgr):
dut.connect() dut.connect()
output = dut.readlines_until('Launching primary slot application') output = dut.readlines_until('Launching primary slot application')
upgrade_string_to_verify = get_upgrade_string_to_verify(dut.device_config.build_dir)
match_lines(output, [ match_lines(output, [
'Swap type: test', 'Swap type: test',
'Starting swap using move algorithm' upgrade_string_to_verify
]) ])
logger.info('Verify new APP is booted') logger.info('Verify new APP is booted')
check_with_shell_command(shell, new_version, swap_type='test') check_with_shell_command(shell, new_version, swap_type='test')
@ -142,7 +151,7 @@ def test_upgrade_with_revert(dut: DeviceAdapter, shell: Shell, mcumgr: MCUmgr):
output = dut.readlines_until('Launching primary slot application') output = dut.readlines_until('Launching primary slot application')
match_lines(output, [ match_lines(output, [
'Swap type: revert', 'Swap type: revert',
'Starting swap using move algorithm' upgrade_string_to_verify
]) ])
logger.info('Verify that MCUboot reverts update') logger.info('Verify that MCUboot reverts update')
check_with_shell_command(shell, origin_version) check_with_shell_command(shell, origin_version)
@ -202,5 +211,6 @@ def test_upgrade_signature(dut: DeviceAdapter, shell: Shell, mcumgr: MCUmgr, key
dut.connect() dut.connect()
output = dut.readlines_until('Launching primary slot application') output = dut.readlines_until('Launching primary slot application')
match_no_lines(output, ['Starting swap using move algorithm']) upgrade_string_to_verify = get_upgrade_string_to_verify(dut.device_config.build_dir)
match_no_lines(output, [upgrade_string_to_verify])
match_lines(output, ['Image in the secondary slot is not valid']) match_lines(output, ['Image in the secondary slot is not valid'])

View file

@ -1,31 +1,32 @@
common: common:
sysbuild: true sysbuild: true
platform_allow: platform_allow:
- nrf52840dk/nrf52840
- nrf5340dk/nrf5340/cpuapp - nrf5340dk/nrf5340/cpuapp
- nrf54l15dk/nrf54l15/cpuapp - nrf54l15dk/nrf54l15/cpuapp
- nrf9160dk/nrf9160 - nrf9160dk/nrf9160
- nucleo_wba55cg - nucleo_wba55cg
integration_platforms:
- nrf52840dk/nrf52840
timeout: 600 timeout: 600
slow: true slow: true
tests:
boot.with_mcumgr.test_upgrade:
tags: tags:
- pytest - pytest
- mcuboot - mcuboot
- mcumgr - mcumgr
tests:
boot.with_mcumgr.test_upgrade:
platform_allow:
- nrf52840dk/nrf52840
integration_platforms:
- nrf52840dk/nrf52840
harness: pytest harness: pytest
harness_config: harness_config:
pytest_root: pytest_root:
- "pytest/test_upgrade.py" - "pytest/test_upgrade.py"
boot.with_mcumgr.test_downgrade_prevention: boot.with_mcumgr.test_downgrade_prevention:
tags: platform_allow:
- pytest - nrf52840dk/nrf52840
- mcuboot integration_platforms:
- mcumgr - nrf52840dk/nrf52840
harness: pytest harness: pytest
harness_config: harness_config:
pytest_root: pytest_root:
@ -34,3 +35,13 @@ tests:
- mcuboot_CONFIG_MCUBOOT_DOWNGRADE_PREVENTION=y - mcuboot_CONFIG_MCUBOOT_DOWNGRADE_PREVENTION=y
extra_configs: extra_configs:
- CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION="1.1.1+1" - CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION="1.1.1+1"
boot.with_mcumgr.test_upgrade.swap_using_offset:
integration_platforms:
- nrf5340dk/nrf5340/cpuapp
harness: pytest
harness_config:
pytest_root:
- "pytest/test_upgrade.py"
extra_args:
- SB_CONFIG_MCUBOOT_MODE_SWAP_USING_OFFSET=y