# Copyright (c) 2015 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_DummyServerSuite"
PURPOSE = "Test that Moblab can run the Dummy Server suite."
ATTRIBUTES = "suite:moblab_quick"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "moblab"
TEST_TYPE = "server"

DOC = """
Kicks off the Dummy Server 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_DummyServerSuite
  --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.
"""
from autotest_lib.client.bin import sysinfo
from autotest_lib.client.common_lib import utils

MOBLAB_AUTOTEST_FOLDERS = ['/usr/local/autotest/results',
                           '/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='dummy_server',
                 moblab_suite_max_retries=1, **args_dict)

parallel_simple(run, machines)
