summaryrefslogtreecommitdiff
path: root/util/run_ects.py
diff options
context:
space:
mode:
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()