# 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.

AUTHOR = "chromeos-moblab@google.com"
NAME = "moblab_SmokeSuite"
PURPOSE = "Test that Moblab can run the smoke suite."
ATTRIBUTES = "suite:moblab"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "moblab"
TEST_TYPE = "server"
MAX_RESULT_SIZE_KB = 5120000

DOC = """
Kicks off the smoke suite on a Moblab host against the DUTs on its subnet
and ensures the suite completes successfully.

To invole this test locally:
  test_that -b stumpy_moblab <remote> moblab_SmokeSuite --args="<ARGLIST>"

where ARGLIST is a whitespace separated list of the following key=value pairs.
Values pertaining to the test case include:

  boto_path=<boto_path>                path to the boto file to be installed on
                                       the Moblab DUT. If not specified, the
                                       boto file in the current home directory
                                       will be installed if it exists.
  image_storage_server=<server_name>   Google Storage Bucket from which to
                                       fetch test images from. If not
                                       specified, the value will be fetched
                                       from global_config.
  service_init_timeout_m=<int>         Timeout (in minutes) to wait for upstart
                                       services to start on the moblab host.
                                       This can take ~5 minutes on a physical
                                       devices and ~10 minutes on a VM.
"""
from autotest_lib.client.bin import sysinfo
from autotest_lib.client.common_lib import utils

MOBLAB_AUTOTEST_FOLDERS = ['/usr/local/autotest/logs']


def run(machine):
    host = hosts.create_host(machine)
    args_dict = utils.args_to_dict(args)

    logging.info('Logs from moblab\'s instance of autotest will be collected '
                 'under the sysinfo/ folder in results.')
    for folder in MOBLAB_AUTOTEST_FOLDERS:
        logging.info('  Will collect %s', folder)
        job.sysinfo.add_logdir(sysinfo.logdir(folder, excludes=()))

    job.run_test('moblab_RunSuite', host=host, suite_name='smoke',
                 moblab_suite_max_retries=1, **args_dict)

parallel_simple(run, machines)
