From 681b6fdf1f3ed049324403da3f6125b0cf21a2df Mon Sep 17 00:00:00 2001 From: Daisuke Nojiri Date: Fri, 23 Jun 2017 12:42:06 -0700 Subject: 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 Reviewed-on: https://chromium-review.googlesource.com/546579 Reviewed-by: Randall Spangler --- util/run_ects.py | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 util/run_ects.py (limited to 'util/run_ects.py') 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() -- cgit v1.2.1