# Copyright (c) 2018 Foundries.io # Copyright (c) 2019 Nordic Semiconductor ASA. # # SPDX-License-Identifier: Apache-2.0 import argparse import platform from unittest.mock import patch, call import pytest from runners.dediprog import DediProgBinaryRunner from conftest import RC_KERNEL_BIN DPCMD_EXE = 'dpcmd.exe' if platform.system() == 'Windows' else 'dpcmd' EXPECTED_COMMAND = { (RC_KERNEL_BIN, None): [DPCMD_EXE, '--auto', RC_KERNEL_BIN, '-x', 'ff', '--silent', '--verify'], (RC_KERNEL_BIN, '0'): [DPCMD_EXE, '--auto', RC_KERNEL_BIN, '--vcc', '0', '-x', 'ff', '--silent', '--verify'], (RC_KERNEL_BIN, '1'): [DPCMD_EXE, '--auto', RC_KERNEL_BIN, '--vcc', '1', '-x', 'ff', '--silent', '--verify'], } def require_patch(program): assert program in [DPCMD_EXE] def id_fn(tc): return 'spi_image={},vcc={}'.format(*tc) @pytest.mark.parametrize('tc', [ (RC_KERNEL_BIN, None), (RC_KERNEL_BIN, '0'), (RC_KERNEL_BIN, '1'), ], ids=id_fn) @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch) @patch('runners.core.ZephyrBinaryRunner.check_call') def test_dediprog_init(cc, req, tc, runner_config): '''Test commands using a runner created by constructor.''' spi_image, vcc = tc runner = DediProgBinaryRunner(runner_config, spi_image=spi_image, vcc=vcc, retries=0) runner.run('flash') assert cc.call_args_list == [call(EXPECTED_COMMAND[tc])] @pytest.mark.parametrize('tc', [ (RC_KERNEL_BIN, None), (RC_KERNEL_BIN, '0'), (RC_KERNEL_BIN, '1'), ], ids=id_fn) @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch) @patch('runners.core.ZephyrBinaryRunner.check_call') def test_dediprog_create(cc, req, tc, runner_config): '''Test commands using a runner created from command line parameters.''' spi_image, vcc = tc args = ['--spi-image', spi_image, '--retries', '0'] if vcc: args.extend(['--vcc', vcc]) parser = argparse.ArgumentParser(allow_abbrev=False) DediProgBinaryRunner.add_parser(parser) arg_namespace = parser.parse_args(args) runner = DediProgBinaryRunner.create(runner_config, arg_namespace) runner.run('flash') assert cc.call_args_list == [call(EXPECTED_COMMAND[tc])]