# Copyright (c) 2024 Advanced Micro Devices, Inc. # # SPDX-License-Identifier: Apache-2.0 import argparse from unittest.mock import patch, call import pytest from runners.xsdb import XSDBBinaryRunner from conftest import RC_KERNEL_ELF TEST_CASES = [ { "config": None, "bitstream": None, "fsbl": None, "expected_cmd": ["xsdb", "default_cfg_path"], }, { "config": "custom_cfg_path", "bitstream": None, "fsbl": None, "expected_cmd": ["xsdb", "custom_cfg_path"], }, { "config": None, "bitstream": "bitstream_path", "fsbl": None, "expected_cmd": ["xsdb", "default_cfg_path", RC_KERNEL_ELF, "bitstream_path"], }, { "config": None, "bitstream": None, "fsbl": "fsbl_path", "expected_cmd": ["xsdb", "default_cfg_path", RC_KERNEL_ELF, "fsbl_path"], }, { "config": None, "bitstream": "bitstream_path", "fsbl": "fsbl_path", "expected_cmd": ["xsdb", "default_cfg_path", RC_KERNEL_ELF, "bitstream_path", "fsbl_path"], }, ] @pytest.mark.parametrize("tc", TEST_CASES) @patch("runners.xsdb.os.path.exists", return_value=True) @patch("runners.xsdb.XSDBBinaryRunner.check_call") def test_xsdbbinaryrunner_init(check_call, path_exists, tc, runner_config): '''Test actions using a runner created by constructor.''' # Mock the default config path with patch("runners.xsdb.os.path.join", return_value="default_cfg_path"): runner = XSDBBinaryRunner( cfg=runner_config, config=tc["config"], bitstream=tc["bitstream"], fsbl=tc["fsbl"], ) runner.do_run("flash") assert check_call.call_args_list == [call(tc["expected_cmd"])] @pytest.mark.parametrize("tc", TEST_CASES) @patch("runners.xsdb.os.path.exists", return_value=True) @patch("runners.xsdb.XSDBBinaryRunner.check_call") def test_xsdbbinaryrunner_create(check_call, path_exists, tc, runner_config): '''Test actions using a runner created from action line parameters.''' args = [] if tc["config"]: args.extend(["--config", tc["config"]]) if tc["bitstream"]: args.extend(["--bitstream", tc["bitstream"]]) if tc["fsbl"]: args.extend(["--fsbl", tc["fsbl"]]) parser = argparse.ArgumentParser(allow_abbrev=False) XSDBBinaryRunner.add_parser(parser) arg_namespace = parser.parse_args(args) # Mock the default config path with patch("runners.xsdb.os.path.join", return_value="default_cfg_path"): runner = XSDBBinaryRunner.create(runner_config, arg_namespace) runner.do_run("flash") assert check_call.call_args_list == [call(tc["expected_cmd"])]