# 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."
SUITE = "moblab_quick"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "moblab"
TEST_TYPE = "server"
# moblab_RunSuite requires .boto file from drone. Disable SSP for this test as
# it has dependency on lab infrastructure.
REQUIRE_SSP = False

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.common_lib import utils

def run(machine):
    host = hosts.create_host(machine)
    args_dict = utils.args_to_dict(args)
    job.run_test('moblab_RunSuite', host=host, suite_name='dummy_server',
                 **args_dict)

parallel_simple(run, machines)
