93 lines
2.2 KiB
Python
93 lines
2.2 KiB
Python
# 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()
|