Changeset c68beb8 in rtems-tools


Ignore:
Timestamp:
Nov 3, 2017, 6:57:37 AM (18 months ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
42e39d2
Parents:
7e85878
git-author:
Chris Johns <chrisj@…> (11/03/17 06:57:37)
git-committer:
Chris Johns <chrisj@…> (11/03/17 06:59:53)
Message:

tester: Add the rtems-run command.

Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • rtemstoolkit/host.py

    r7e85878 rc68beb8  
    9898    return platform.overrides()
    9999
     100def label(mode = 'all'):
     101    import platform
     102    if mode == 'system':
     103        return platform.system()
     104    compact = platform.platform(aliased = True)
     105    if mode == 'compact':
     106        return compact
     107    extended = ' '.join(platform.uname())
     108    if mode == 'extended':
     109        return extended
     110    if mode == 'all':
     111        return '%s (%s)' % (compact, extended)
     112    raise error.general('invalid platform mode: %s' % (mode))
     113
    100114if __name__ == '__main__':
    101115    import pprint
     116    pprint.pprint(platform())
    102117    _load()
    103118    print('Name      : %s' % (name))
  • tester/rt/config.py

    r7e85878 rc68beb8  
    4040import threading
    4141
     42from rtemstoolkit import configuration
    4243from rtemstoolkit import config
    4344from rtemstoolkit import error
     
    6061                   '%console']
    6162
    62     def __init__(self, index, total, report, name, opts, _directives = _directives):
     63    def __init__(self, index, total, report, name, opts,
     64                 console_prefix = '] ', _directives = _directives):
    6365        super(file, self).__init__(name, opts, directives = _directives)
    6466        self.lock = threading.Lock()
    65         self.realtime_trace = self.debug_trace('output')
     67        self.realtime_trace = self.exe_trace('output')
     68        self.console_trace = self.exe_trace('console')
     69        self.console_prefix = console_prefix
    6670        self.process = None
    6771        self.console = None
     
    183187
    184188    def _capture_console(self, text):
    185         text = [('=>', l) for l in text.replace(chr(13), '').splitlines()]
     189        text = [('=> ', l) for l in text.replace(chr(13), '').splitlines()]
    186190        if self.output is not None:
    187             self._realtime_trace(text)
     191            if self.console_trace:
     192                self._realtime_trace(text)
    188193            self.output += text
    189194
     
    193198        if len(data) == 0:
    194199            raise error.general(self._name_line_msg('no console configuration provided'))
    195         console_trace = trace = self.debug_trace('console')
     200        console_trace = trace = self.exe_trace('console')
    196201        if not self.opts.dry_run():
    197202            if data[0] == 'stdio':
     
    234239            raise error.general('invalid %gdb arguments')
    235240        self.process = gdb.gdb(bsp_arch, bsp,
    236                                trace = self.debug_trace('gdb'),
    237                                mi_trace = self.debug_trace('gdb-mi'))
     241                               trace = self.exe_trace('gdb'),
     242                               mi_trace = self.exe_trace('gdb-mi'))
    238243        script = self.expand('%%{%s}' % data[2])
    239244        if script:
     
    261266        if not self.opts.dry_run():
    262267            self.process = tftp.tftp(bsp_arch, bsp,
    263                                      trace = self.debug_trace('tftp'))
     268                                     trace = self.exe_trace('tftp'))
    264269            if not self.in_error:
    265270                if self.console:
     
    297302                    bsp = self.expand('%{bsp}')
    298303                    fexe = self._target_exe_filter(exe)
    299                     self.report.start(index, total, exe, fexe, bsp_arch, bsp)
     304                    if self.report is not None:
     305                        self.report.start(index, total, exe, fexe, bsp_arch, bsp)
    300306                    if self.index == 1:
    301307                        self._target_command('on', bsp_arch, bsp, exe, fexe)
     
    316322                self._target_command('posttest', bsp_arch, bsp, exe, fexe)
    317323                try:
    318                     status = self.report.end(exe, self.output)
    319                     self._capture_console('test result: %s' % (status))
     324                    status = ''
     325                    if self.report is not None:
     326                        status = self.report.end(exe, self.output)
     327                        self._capture_console('test result: %s' % (status))
    320328                    if status == 'timeout':
    321                         if self.index == self.total:
    322                             self._target_command('off', bsp_arch, bsp, exe, fexe)
    323                         else:
     329                        if self.index != self.total:
    324330                            self._target_command('reset', bsp_arch, bsp, exe, fexe)
    325331                    self.process = None
     
    330336
    331337    def _realtime_trace(self, text):
    332         if self.realtime_trace:
    333             for l in text:
    334                 print(' '.join(l))
     338        for l in text:
     339            print(''.join(l))
    335340
    336341    def run(self):
     
    361366            if self.target_reset_regx.match(text):
    362367                self.capture_console('target reset condition detected')
    363                 reset_target = True
     368                self._target_command('reset')
    364369        if self.kill_on_end:
    365370            if not ok_to_kill and '*** END OF TEST ' in text:
     
    367372                if self.test_label is not None:
    368373                    ok_to_kill = '*** END OF TEST %s ***' % (self.test_label) in text
    369         text = [(']', l) for l in text.replace(chr(13), '').splitlines()]
     374        text = [(self.console_prefix, l) for l in text.replace(chr(13), '').splitlines()]
    370375        self._lock()
    371376        if self.output is not None:
    372             self._realtime_trace(text)
     377            if self.realtime_trace:
     378                self._realtime_trace(text)
    373379            self.output += text
    374380        if reset_target:
     
    386392        self._unlock()
    387393
    388     def debug_trace(self, flag):
    389         dt = self.macros['debug_trace']
     394    def exe_trace(self, flag):
     395        dt = self.macros['exe_trace']
    390396        if dt:
    391397            if flag in dt.split(','):
     
    399405            except:
    400406                pass
     407
     408def load(bsp, opts):
     409    mandatory = ['bsp', 'arch', 'tester']
     410    cfg = configuration.configuration()
     411    path_ = opts.defaults.expand('%%{_configdir}/bsps/%s.ini' % (bsp))
     412    ini_name = path.basename(path_)
     413    for p in path.dirname(path_).split(':'):
     414        if path.exists(path.join(p, ini_name)):
     415            cfg.load(path.join(p, ini_name))
     416            if not cfg.has_section(bsp):
     417                raise error.general('bsp section not found in ini: [%s]' % (bsp))
     418            item_names = cfg.get_item_names(bsp, err = False)
     419            for m in mandatory:
     420                if m not in item_names:
     421                    raise error.general('mandatory item not found in bsp section: %s' % (m))
     422            opts.defaults.set_write_map(bsp, add = True)
     423            for i in cfg.get_items(bsp, flatten = False):
     424                opts.defaults[i[0]] = i[1]
     425            if not opts.defaults.set_read_map(bsp):
     426                raise error.general('cannot set BSP read map: %s' % (bsp))
     427            # Get a copy of the required fields we need
     428            requires = cfg.comma_list(bsp, 'requires', err = False)
     429            del cfg
     430            user_config = opts.find_arg('--user-config')
     431            if user_config is not None:
     432                user_config = path.expanduser(user_config[1])
     433                if not path.exists(user_config):
     434                    raise error.general('cannot find user configuration file: %s' % (user_config))
     435            else:
     436                if 'HOME' in os.environ:
     437                    user_config = path.join(os.environ['HOME'], '.rtemstesterrc')
     438            if user_config:
     439                if path.exists(user_config):
     440                    cfg = configuration.configuration()
     441                    cfg.load(user_config)
     442                    if cfg.has_section(bsp):
     443                        for i in cfg.get_items(bsp, flatten = False):
     444                            opts.defaults[i[0]] = i[1]
     445            # Check for the required values.
     446            for r in requires:
     447                if opts.defaults.get(r) is None:
     448                    raise error.general('user value missing, BSP %s requires \'%s\': missing: %s' % \
     449                                        (bsp, ', '.join(requires), r))
     450            return opts.defaults['bsp']
     451    raise error.general('cannot find bsp configuration file: %s.ini' % (bsp))
  • tester/rt/test.py

    r7e85878 rc68beb8  
    4242from rtemstoolkit import configuration
    4343from rtemstoolkit import error
     44from rtemstoolkit import host
    4445from rtemstoolkit import log
    4546from rtemstoolkit import path
     
    198199                    print('}} ', t.name)
    199200    return reporting
    200 
    201 def load_configuration(bsp, opts):
    202     mandatory = ['bsp', 'arch', 'tester']
    203     cfg = configuration.configuration()
    204     path_ = opts.defaults.expand('%%{_configdir}/bsps/%s.ini' % (bsp))
    205     ini_name = path.basename(path_)
    206     for p in path.dirname(path_).split(':'):
    207         if path.exists(path.join(p, ini_name)):
    208             cfg.load(path.join(p, ini_name))
    209             if not cfg.has_section(bsp):
    210                 raise error.general('bsp section not found in ini: [%s]' % (bsp))
    211             item_names = cfg.get_item_names(bsp, err = False)
    212             for m in mandatory:
    213                 if m not in item_names:
    214                     raise error.general('mandatory item not found in bsp section: %s' % (m))
    215             opts.defaults.set_write_map(bsp, add = True)
    216             for i in cfg.get_items(bsp, flatten = False):
    217                 opts.defaults[i[0]] = i[1]
    218             if not opts.defaults.set_read_map(bsp):
    219                 raise error.general('cannot set BSP read map: %s' % (bsp))
    220             # Get a copy of the required fields we need
    221             requires = cfg.comma_list(bsp, 'requires', err = False)
    222             del cfg
    223             user_config = opts.find_arg('--user-config')
    224             if user_config is not None:
    225                 user_config = path.expanduser(user_config[1])
    226                 if not path.exists(user_config):
    227                     raise error.general('cannot find user configuration file: %s' % (user_config))
    228             else:
    229                 if 'HOME' in os.environ:
    230                     user_config = path.join(os.environ['HOME'], '.rtemstesterrc')
    231             if user_config:
    232                 if path.exists(user_config):
    233                     cfg = configuration.configuration()
    234                     cfg.load(user_config)
    235                     if cfg.has_section(bsp):
    236                         for i in cfg.get_items(bsp, flatten = False):
    237                             opts.defaults[i[0]] = i[1]
    238                         # Check for the required values.
    239                         for r in requires:
    240                             if opts.defaults.get(r) is None:
    241                                 raise error.general('user value missing, BSP %s requires: %s' % \
    242                                                     (bsp, ', '.join(requires)))
    243             return opts.defaults['bsp']
    244     raise error.general('cannot find bsp configuration file: %s.ini' % (bsp))
    245201
    246202def _job_trace(tst, msg, total, exe, active, reporting):
     
    307263            exe_filter = default_exefilter
    308264        opts.log_info()
     265        log.output('Host: ' + host.label(mode = 'all'))
    309266        debug_trace = opts.find_arg('--debug-trace')
    310267        if debug_trace:
     
    315272        else:
    316273            debug_trace = ''
    317         opts.defaults['debug_trace'] = debug_trace
     274        opts.defaults['exe_trace'] = debug_trace
    318275        job_trace = 'jobs' in debug_trace.split(',')
    319276        rtems_tools = opts.find_arg('--rtems-tools')
     
    327284        if bsp is None or len(bsp) != 2:
    328285            raise error.general('RTEMS BSP not provided or an invalid option')
    329         bsp = load_configuration(bsp[1], opts)
     286        bsp = coinfig.load(bsp[1], opts)
    330287        bsp_config = opts.defaults.expand(opts.defaults['tester'])
    331288        report_mode = opts.find_arg('--report-mode')
     
    395352            subject = '[rtems-test] %s: %s' % (str(start_time).split('.')[0], bsp)
    396353            body = [total_time, average_time,
     354                    '', 'Host', '====', host.label(mode = 'all'),
    397355                    '', 'Summary', '=======', '',
    398356                    reports.score_card(), '',
  • tester/wscript

    r7e85878 rc68beb8  
    6060                  'rt/options.py',
    6161                  'rt/report.py',
     62                  'rt/run.py',
    6263                  'rt/stty.py',
    6364                  'rt/telnet.py',
     
    8485        install_path = '${PREFIX}/share/rtems/tester')
    8586    bld.install_files('${PREFIX}/bin',
    86                       ['rtems-test',
     87                      ['rtems-run',
     88                       'rtems-test',
    8789                       'rtems-bsp-builder'],
    8890                      chmod = 0o755)
Note: See TracChangeset for help on using the changeset viewer.