summaryrefslogtreecommitdiff
path: root/util/run_ects.py
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2017-06-23 12:42:06 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-06-28 21:50:50 -0700
commit681b6fdf1f3ed049324403da3f6125b0cf21a2df (patch)
tree7946c5d1fe98345282c02f998c9d804404a7e196 /util/run_ects.py
parent7771c52368e03bb63fd49eb303b3152b557b897b (diff)
downloadchrome-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.py92
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()