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

from autotest_lib.server import utils

NAME = "infra_ServoDiagnosis"
AUTHOR = "Chrome OS Team"
TIME = "LONG"
TEST_CATEGORY = "Stress"
TEST_CLASS = "platform"
TEST_TYPE = "server"

# N.B.  We deliberately do not say DEPENDENCIES = "servo"; a key
# requirement of this test is that we detect and repair a missing
# servo label.


DOC = """
Test and diagnose the status of a servo attached to a given host.
"""

# We'd like to do the following, so that this test can be run
# from a desktop, but the code below will cause the test not
# to run if the servo is down, which prevents diagnosis.

# args_dict = utils.args_to_dict(args)
# servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run(machine):
    host = hosts.create_host(machine, try_lab_servo=True)
    job.run_test("infra_ServoDiagnosis", host=host)

parallel_simple(run, machines)
