# Copyright (c) 2014 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. import logging import os from autotest_lib.client.common_lib import error from autotest_lib.server.cros import moblab_test from autotest_lib.server.hosts import moblab_host FAILURE_FOLDERS = ['/usr/local/autotest/results', '/usr/local/autotest/logs'] class moblab_RunSuite(moblab_test.MoblabTest): """ Moblab run suite test. Ensures that a Moblab can run a suite from start to finish by kicking off a suite which will have the Moblab stage an image, provision its DUTs and run the tests. """ version = 1 def run_once(self, host, suite_name, moblab_suite_max_retries): """Runs a suite on a Moblab Host against its test DUTS. @param host: Moblab Host that will run the suite. @param suite_name: Name of the suite to run. @param moblab_suite_max_retries: The maximum number of test retries allowed within the suite launched on moblab. @raises AutoservRunError if the suite does not complete successfully. """ try: # Fetch the board of the DUT's assigned to this Moblab. There should # only be one type. board = host.afe.get_hosts()[0].platform except IndexError: raise error.TestFail('All hosts for this MobLab are down. Please ' 'request the lab admins to take a look.') # TODO (crbug.com/399132) sbasi - Replace repair version with actual # stable_version for the given board. stable_version_map = host.afe.get_stable_version_map( host.afe.CROS_IMAGE_TYPE) build = stable_version_map.get_image_name(board) logging.debug('Running suite: %s.', suite_name) try: result = host.run_as_moblab( "%s/site_utils/run_suite.py --pool='' " "--board=%s --build=%s --suite_name=%s --retry=True " "--max_retries=%d" % (moblab_host.AUTOTEST_INSTALL_DIR, board, build, suite_name, moblab_suite_max_retries), timeout=10800) except error.AutoservRunError as e: # Collect the results and logs from the moblab device. moblab_logs_dir = os.path.join(self.resultsdir, 'moblab_logs') for folder in FAILURE_FOLDERS: try: host.get_file(folder, moblab_logs_dir) except error.AutoservRunError as e2: logging.error(e2) pass raise e logging.debug('Suite Run Output:\n%s', result.stdout)