# Copyright 2017 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Run all eCTS tests and publish results.""" import argparse import logging import os import subprocess import sys # List of tests to run. TESTS = ['meta', 'gpio', 'hook', 'i2c', 'interrupt', 'mutex', 'task', 'timer'] class CtsRunner(object): """Class running eCTS tests.""" def __init__(self, ec_dir, dryrun): self.ec_dir = ec_dir self.cts_py = [] if dryrun: self.cts_py += ['echo'] self.cts_py += [os.path.join(ec_dir, 'cts/cts.py')] def run_cmd(self, cmd): try: rc = subprocess.call(cmd) if rc != 0: return False except OSError: return False return True def run_test(self, test): cmd = self.cts_py + ['-m', test] self.run_cmd(cmd) def run(self, tests): for test in tests: logging.info('Running', test, 'test.') self.run_test(test) def sync(self): logging.info('Syncing tree...') os.chdir(self.ec_dir) cmd = ['repo', 'sync', '.'] return self.run_cmd(cmd) def upload(self): logging.info('Uploading results...') def main(): if not os.path.exists('/etc/cros_chroot_version'): logging.error('This script has to run inside chroot.') sys.exit(-1) ec_dir = os.path.realpath(os.path.dirname(__file__) + '/..') parser = argparse.ArgumentParser(description='Run eCTS and report results.') parser.add_argument('-d', '--dryrun', action='store_true', help='Echo commands to be executed without running them.') parser.add_argument('-s', '--sync', action='store_true', help='Sync tree before running tests.') parser.add_argument('-u', '--upload', action='store_true', help='Upload test results.') args = parser.parse_args() runner = CtsRunner(ec_dir, args.dryrun) if args.sync: if not runner.sync(): logging.error('Failed to sync.') sys.exit(-1) runner.run(TESTS) if args.upload: runner.upload() if __name__ == '__main__': main()