# Copyright (c) 2013 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

AUTHOR = "abrestic, tbroch"
NAME = "power_USBHotplugInSuspend"
PURPOSE = "Tests USB hot-plugging during suspend."
CRITERIA = "Fails if hotplug of a USB device during suspend is not detected."
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "power"
TEST_TYPE = "server"
DEPENDENCIES = "servo"

DOC = """
This tests both hotplug insertion and removal of a USB device while the DUT
is suspended.  The DUT is suspended using the client test power_KernelSuspend.
Servo is then used to power on/off the USB key.  After the client resumes, it
should detect the change.
"""

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

def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("power_USBHotplugInSuspend", host=host)

parallel_simple(run, machines)
