blob: e8aaabe8fe1b38e7ad2cdb997e2a32a178a4c1f4 [file] [log] [blame]
# Copyright (c) 2023 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
import pytest
import textwrap
from unittest import mock
from twister_harness.helpers.mcumgr import MCUmgr, MCUmgrException
@pytest.fixture(name='mcumgr')
def fixture_mcumgr() -> MCUmgr:
return MCUmgr.create_for_serial('SERIAL_PORT')
@mock.patch('twister_harness.helpers.mcumgr.MCUmgr.run_command', return_value='')
def test_if_mcumgr_fixture_generate_proper_command(
patched_run_command: mock.Mock, mcumgr: MCUmgr
) -> None:
mcumgr.reset_device()
patched_run_command.assert_called_with('reset')
mcumgr.get_image_list()
patched_run_command.assert_called_with('image list')
mcumgr.image_upload('/path/to/image', timeout=100)
patched_run_command.assert_called_with('-t 100 image upload /path/to/image')
mcumgr.image_upload('/path/to/image', slot=2, timeout=100)
patched_run_command.assert_called_with('-t 100 image upload /path/to/image -e -n 2')
mcumgr.image_test(hash='ABCD')
patched_run_command.assert_called_with('image test ABCD')
mcumgr.image_confirm(hash='ABCD')
patched_run_command.assert_called_with('image confirm ABCD')
def test_if_mcumgr_fixture_raises_exception_when_no_hash_to_test(mcumgr: MCUmgr) -> None:
cmd_output = textwrap.dedent("""
Images:
image=0 slot=0
version: 0.0.0
bootable: true
flags: active confirmed
hash: 1234
Split status: N/A (0)
""")
mcumgr.run_command = mock.Mock(return_value=cmd_output)
with pytest.raises(MCUmgrException):
mcumgr.image_test()
def test_if_mcumgr_fixture_parse_image_list(mcumgr: MCUmgr) -> None:
cmd_output = textwrap.dedent("""
Images:
image=0 slot=0
version: 0.0.0
bootable: true
flags: active confirmed
hash: 0000
image=0 slot=1
version: 1.1.1
bootable: true
flags:
hash: 1111
Split status: N/A (0)
""")
mcumgr.run_command = mock.Mock(return_value=cmd_output)
image_list = mcumgr.get_image_list()
assert image_list[0].image == 0
assert image_list[0].slot == 0
assert image_list[0].version == '0.0.0'
assert image_list[0].flags == 'active confirmed'
assert image_list[0].hash == '0000'
assert image_list[1].image == 0
assert image_list[1].slot == 1
assert image_list[1].version == '1.1.1'
assert image_list[1].flags == ''
assert image_list[1].hash == '1111'
# take second hash to test
mcumgr.image_test()
mcumgr.run_command.assert_called_with('image test 1111')
# take first hash to confirm
mcumgr.image_confirm()
mcumgr.run_command.assert_called_with('image confirm 1111')