summaryrefslogtreecommitdiffstats
path: root/tester/rt/test.py
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-10-24 21:35:21 +1100
committerChris Johns <chrisj@rtems.org>2017-10-24 22:21:35 +1100
commitbf58911519afb7ce2117dedadf3d76da436b2361 (patch)
treeaac7608d8153bc72e60164bd2183b8e625dc8730 /tester/rt/test.py
parenttester: Add an executable file name filter. (diff)
downloadrtems-tools-bf58911519afb7ce2117dedadf3d76da436b2361.tar.bz2
tester: Refactor to use INI format files for BSP configurations.
- Add support for user condfigurations files with the --user-config. - Add support for a $HOME/.rtemstesterrc for a user configuration. Closes #3204.
Diffstat (limited to '')
-rw-r--r--tester/rt/test.py67
1 files changed, 53 insertions, 14 deletions
diff --git a/tester/rt/test.py b/tester/rt/test.py
index bfc0f5f..575c2a1 100644
--- a/tester/rt/test.py
+++ b/tester/rt/test.py
@@ -39,6 +39,7 @@ import sys
import threading
import time
+from rtemstoolkit import configuration
from rtemstoolkit import error
from rtemstoolkit import log
from rtemstoolkit import path
@@ -95,8 +96,7 @@ class test(object):
self.opts.defaults['test_index'] = str(index)
self.opts.defaults['test_total'] = str(total)
self.opts.defaults['bsp'] = bsp
- self.opts.defaults['bsp_arch'] = '%%{%s_arch}' % (bsp)
- self.opts.defaults['bsp_opts'] = '%%{%s_opts}' % (bsp)
+ self.opts.defaults['bsp_arch'] = '%{arch}'
if not path.isfile(executable):
raise error.general('cannot find executable: %s' % (executable))
self.opts.defaults['test_executable'] = executable
@@ -198,6 +198,52 @@ def report_finished(reports, report_mode, reporting, finished, job_trace):
print('}} ', t.name)
return reporting
+def load_configuration(bsp, opts):
+ mandatory = ['tester', 'arch']
+ cfg = configuration.configuration()
+ path_ = opts.defaults.expand('%%{_configdir}/bsps/%s.ini' % (bsp))
+ ini_name = path.basename(path_)
+ for p in path.dirname(path_).split(':'):
+ if path.exists(path.join(p, ini_name)):
+ cfg.load(path.join(p, ini_name))
+ if not cfg.has_section(bsp):
+ raise error.general('bsp section not found in ini: [%s]' % (bsp))
+ item_names = cfg.get_item_names(bsp, err = False)
+ for m in mandatory:
+ if m not in item_names:
+ raise error.general('mandatory item not found in bsp section: %s' % (m))
+ opts.defaults.set_write_map(bsp, add = True)
+ for i in cfg.get_items(bsp, flatten = False):
+ opts.defaults[i[0]] = i[1]
+ opts.defaults['bsp'] = bsp
+ if not opts.defaults.set_read_map(bsp):
+ raise error.general('cannot set BSP read map: %s' % (bsp))
+ # Get a copy of the required fields we need
+ requires = cfg.comma_list(bsp, 'requires', err = False)
+ del cfg
+ user_config = opts.find_arg('--user-config')
+ if user_config is not None:
+ user_config = path.expanduser(user_config[1])
+ if not path.exists(user_config):
+ raise error.general('cannot find user configuration file: %s' % (user_config))
+ else:
+ if 'HOME' in os.environ:
+ user_config = path.join(os.environ['HOME'], '.rtemstesterrc')
+ if user_config:
+ if path.exists(user_config):
+ cfg = configuration.configuration()
+ cfg.load(user_config)
+ if cfg.has_section(bsp):
+ for i in cfg.get_items(bsp, flatten = False):
+ opts.defaults[i[0]] = i[1]
+ # Check for the required values.
+ for r in requires:
+ if opts.defaults.get(r) is None:
+ raise error.general('user value missing, BSP %s requires: %s' % \
+ (bsp, ', '.join(requires)))
+ return
+ raise error.general('cannot find bsp configuration file: %s.ini' % (bsp))
+
def _job_trace(tst, msg, total, exe, active, reporting):
s = ''
for a in active:
@@ -228,6 +274,7 @@ def run(command_path = None):
try:
optargs = { '--rtems-tools': 'The path to the RTEMS tools',
'--rtems-bsp': 'The RTEMS BSP to run the test on',
+ '--user-config': 'Path to your local user configuration INI file',
'--report-mode': 'Reporting modes, failures (default),all,none',
'--list-bsps': 'List the supported BSPs',
'--debug-trace': 'Debug trace based on specific flags',
@@ -271,18 +318,10 @@ def run(command_path = None):
rtems_tools = '%{_prefix}'
bsp = opts.find_arg('--rtems-bsp')
if bsp is None or len(bsp) != 2:
- raise error.general('RTEMS BSP not provided or invalid option')
- opts.defaults.load('%%{_configdir}/bsps/%s.mc' % (bsp[1]))
- bsp = opts.defaults.get('%{bsp}')
- if not bsp:
- raise error.general('BSP definition (%{bsp}) not found in the global map')
- bsp = bsp[2]
- if not opts.defaults.set_read_map(bsp):
- raise error.general('no BSP map found')
- bsp_script = opts.defaults.get(bsp)
- if not bsp_script:
- raise error.general('BSP script not found: %s' % (bsp))
- bsp_config = opts.defaults.expand(opts.defaults[bsp])
+ raise error.general('RTEMS BSP not provided or an invalid option')
+ bsp = bsp[1]
+ load_configuration(bsp, opts)
+ bsp_config = opts.defaults.expand(opts.defaults['tester'])
report_mode = opts.find_arg('--report-mode')
if report_mode:
if report_mode[1] != 'failures' and \