# Copyright (c) 2016 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 = "kalin"
NAME = "platform_SuspendResumeTiming.USB_PLUGGED"
PURPOSE = "Servo based suspend-resume timing check test"
CRITERIA = "This test will fail if time to suspend or resume is too long."
TIME = "LONG"
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"
ATTRIBUTES = "suite:usb_detect"
DEPENDENCIES = "servo_state:WORKING"

DOC = """
This test measures the time to suspend and resume
for the case of connected USB hub with peripherals
by servo.
"""

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("platform_SuspendResumeTiming", host=host,
                 plug_usb=True, disable_sysinfo=True)

parallel_simple(run, machines)
