diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2017-06-23 12:42:06 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-06-28 21:50:50 -0700 |
commit | 681b6fdf1f3ed049324403da3f6125b0cf21a2df (patch) | |
tree | 7946c5d1fe98345282c02f998c9d804404a7e196 /util/run_ects.py | |
parent | 7771c52368e03bb63fd49eb303b3152b557b897b (diff) | |
download | chrome-ec-681b6fdf1f3ed049324403da3f6125b0cf21a2df.tar.gz |
eCTS: Rewrite run_ects.sh in Python
Since the script is expected to upload results and probably send
alerts by e-mail, it's better to be written in Python so that we
can utilize chromite library. It will no longer run outside chroot
because of imports from chromite.lib.
BUG=chromium:735546
BRANCH=none
TEST=Run run_ects.py and verify all tests pass.
Change-Id: I6c79b061cdaef4d30305cf531f37b6734d18b7d9
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/546579
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'util/run_ects.py')
-rw-r--r-- | util/run_ects.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/util/run_ects.py b/util/run_ects.py new file mode 100644 index 0000000000..981d23aa50 --- /dev/null +++ b/util/run_ects.py @@ -0,0 +1,92 @@ +# 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', '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() |