123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- # Copyright (c) 2020 Synopsys
- #
- # SPDX-License-Identifier: Apache-2.0
- import argparse
- from os import path
- from unittest.mock import patch
- from unittest.mock import call
- import pytest
- from runners.mdb import MdbNsimBinaryRunner, MdbHwBinaryRunner
- from conftest import RC_KERNEL_ELF, RC_BOARD_DIR
- TEST_DRIVER_CMD = 'mdb'
- TEST_NSIM_ARGS='test_nsim.args'
- TEST_TARGET = 'test-target'
- TEST_BOARD_NSIM_ARGS = '@' + path.join(RC_BOARD_DIR, 'support', TEST_NSIM_ARGS)
- # mdb-nsim
- TEST_NSIM_FLASH_CASES = [
- {
- 'i': ['--cores=1', '--nsim=' + TEST_NSIM_ARGS],
- 'o': [TEST_DRIVER_CMD, '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '-nsim', TEST_BOARD_NSIM_ARGS,
- '-run', '-cl', RC_KERNEL_ELF]
- }]
- TEST_NSIM_DEBUG_CASES = [
- {
- 'i': ['--cores=1', '--nsim=' + TEST_NSIM_ARGS],
- 'o': [TEST_DRIVER_CMD, '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '-nsim', TEST_BOARD_NSIM_ARGS,
- '-OKN', RC_KERNEL_ELF
- ]
- }]
- TEST_NSIM_MULTICORE_CASES = [['--cores=2', '--nsim=' + TEST_NSIM_ARGS]]
- TEST_NSIM_CORE1 = [TEST_DRIVER_CMD, '-pset=1', '-psetname=core0', '',
- '-nooptions', '-nogoifmain', '-toggle=include_local_symbols=1',
- '-nsim', TEST_BOARD_NSIM_ARGS, RC_KERNEL_ELF]
- TEST_NSIM_CORE2 = [TEST_DRIVER_CMD, '-pset=2', '-psetname=core1',
- '-prop=download=2', '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '-nsim', TEST_BOARD_NSIM_ARGS, RC_KERNEL_ELF]
- TEST_NSIM_CORES_LAUNCH = [TEST_DRIVER_CMD, '-multifiles=core1,core0',
- '-run', '-cl']
- # mdb-hw
- TEST_HW_FLASH_CASES = [
- {
- 'i': ['--jtag=digilent', '--cores=1'],
- 'o': [TEST_DRIVER_CMD, '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '-digilent', '',
- '-run', '-cmd=-nowaitq run', '-cmd=quit', '-cl', RC_KERNEL_ELF]
- }, {
- 'i': ['--jtag=digilent', '--cores=1', '--dig-device=test'],
- 'o': [TEST_DRIVER_CMD, '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '-digilent', '-prop=dig_device=test',
- '-run', '-cmd=-nowaitq run', '-cmd=quit', '-cl', RC_KERNEL_ELF]
- }, {
- 'i': ['--jtag=test_debug', '--cores=1'],
- 'o': [TEST_DRIVER_CMD, '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '',
- '-run', '-cmd=-nowaitq run', '-cmd=quit', '-cl', RC_KERNEL_ELF]
- }]
- TEST_HW_DEBUG_CASES = [
- {
- 'i': ['--jtag=digilent', '--cores=1'],
- 'o': [TEST_DRIVER_CMD, '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '-digilent', '',
- '-OKN', RC_KERNEL_ELF]
- }, {
- 'i': ['--jtag=digilent', '--cores=1', '--dig-device=test'],
- 'o': [TEST_DRIVER_CMD, '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '-digilent', '-prop=dig_device=test',
- '-OKN', RC_KERNEL_ELF]
- }, {
- 'i': ['--jtag=test_debug', '--cores=1'],
- 'o': [TEST_DRIVER_CMD, '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '',
- '-OKN', RC_KERNEL_ELF]
- }]
- TEST_HW_MULTICORE_CASES = [['--jtag=digilent', '--cores=2']]
- TEST_HW_CORE1 = [TEST_DRIVER_CMD, '-pset=1', '-psetname=core0', '',
- '-nooptions', '-nogoifmain', '-toggle=include_local_symbols=1',
- '-digilent', '', RC_KERNEL_ELF]
- TEST_HW_CORE2 = [TEST_DRIVER_CMD, '-pset=2', '-psetname=core1',
- '-prop=download=2', '-nooptions', '-nogoifmain',
- '-toggle=include_local_symbols=1',
- '-digilent', '', RC_KERNEL_ELF]
- TEST_HW_CORES_LAUNCH = [TEST_DRIVER_CMD, '-multifiles=core1,core0', '-run',
- '-cmd=-nowaitq run', '-cmd=quit', '-cl']
- #
- # Fixtures
- #
- def mdb(runner_config, tmpdir, mdb_runner):
- '''MdbBinaryRunner from constructor kwargs or command line parameters'''
- # This factory takes either a dict of kwargs to pass to the
- # constructor, or a list of command-line arguments to parse and
- # use with the create() method.
- def _factory(args):
- # Ensure kernel binaries exist (as empty files, so commands
- # which use them must be patched out).
- tmpdir.ensure(RC_KERNEL_ELF)
- tmpdir.chdir()
- if isinstance(args, dict):
- return mdb_runner(runner_config, TEST_TARGET, **args)
- elif isinstance(args, list):
- parser = argparse.ArgumentParser()
- mdb_runner.add_parser(parser)
- arg_namespace = parser.parse_args(args)
- return mdb_runner.create(runner_config, arg_namespace)
- return _factory
- @pytest.fixture
- def mdb_nsim(runner_config, tmpdir):
- return mdb(runner_config, tmpdir, MdbNsimBinaryRunner)
- @pytest.fixture
- def mdb_hw(runner_config, tmpdir):
- return mdb(runner_config, tmpdir, MdbHwBinaryRunner)
- #
- # Helpers
- #
- def require_patch(program):
- assert program == TEST_DRIVER_CMD
- #
- # Test cases for runners created by constructor.
- #
- # mdb-nsim test cases
- @pytest.mark.parametrize('test_case', TEST_NSIM_FLASH_CASES)
- @patch('runners.mdb.get_cld_pid', return_value=(False, -1))
- @patch('time.sleep', return_value=None)
- @patch('runners.mdb.MdbNsimBinaryRunner.popen_ignore_int')
- @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
- def test_flash_nsim(require, cc, t, gcp, test_case, mdb_nsim):
- mdb_nsim(test_case['i']).run('flash')
- assert require.called
- cc.assert_called_once_with(test_case['o'])
- @pytest.mark.parametrize('test_case', TEST_NSIM_DEBUG_CASES)
- @patch('runners.mdb.get_cld_pid', return_value=(False, -1))
- @patch('time.sleep', return_value=None)
- @patch('runners.mdb.MdbNsimBinaryRunner.popen_ignore_int')
- @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
- def test_debug_nsim(require, pii, t, gcp, test_case, mdb_nsim):
- mdb_nsim(test_case['i']).run('debug')
- assert require.called
- pii.assert_called_once_with(test_case['o'])
- @pytest.mark.parametrize('test_case', TEST_NSIM_MULTICORE_CASES)
- @patch('runners.mdb.get_cld_pid', return_value=(False, -1))
- @patch('time.sleep', return_value=None)
- @patch('runners.mdb.MdbNsimBinaryRunner.check_call')
- @patch('runners.mdb.MdbNsimBinaryRunner.popen_ignore_int')
- @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
- def test_multicores_nsim(require, pii, cc, t, gcp, test_case, mdb_nsim):
- mdb_nsim(test_case).run('flash')
- assert require.called
- cc_calls = [call(TEST_NSIM_CORE1), call(TEST_NSIM_CORE2)]
- cc.assert_has_calls(cc_calls)
- pii.assert_called_once_with(TEST_NSIM_CORES_LAUNCH)
- # mdb-hw test cases
- @pytest.mark.parametrize('test_case', TEST_HW_FLASH_CASES)
- @patch('runners.mdb.get_cld_pid', return_value=(False, -1))
- @patch('time.sleep', return_value=None)
- @patch('runners.mdb.MdbHwBinaryRunner.popen_ignore_int')
- @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
- def test_flash_hw(require, cc, t, gcp, test_case, mdb_hw):
- mdb_hw(test_case['i']).run('flash')
- assert require.called
- cc.assert_called_once_with(test_case['o'])
- @pytest.mark.parametrize('test_case', TEST_HW_DEBUG_CASES)
- @patch('runners.mdb.get_cld_pid', return_value=(False, -1))
- @patch('time.sleep', return_value=None)
- @patch('runners.mdb.MdbHwBinaryRunner.popen_ignore_int')
- @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
- def test_debug_hw(require, pii, t, gcp, test_case, mdb_hw):
- mdb_hw(test_case['i']).run('debug')
- assert require.called
- pii.assert_called_once_with(test_case['o'])
- @pytest.mark.parametrize('test_case', TEST_HW_MULTICORE_CASES)
- @patch('runners.mdb.get_cld_pid', return_value=(False, -1))
- @patch('time.sleep', return_value=None)
- @patch('runners.mdb.MdbHwBinaryRunner.check_call')
- @patch('runners.mdb.MdbHwBinaryRunner.popen_ignore_int')
- @patch('runners.core.ZephyrBinaryRunner.require', side_effect=require_patch)
- def test_multicores_hw(require, pii, cc, t, gcp, test_case, mdb_hw):
- mdb_hw(test_case).run('flash')
- assert require.called
- cc_calls = [call(TEST_HW_CORE1), call(TEST_HW_CORE2)]
- cc.assert_has_calls(cc_calls)
- pii.assert_called_once_with(TEST_HW_CORES_LAUNCH)
|