# Copyright (c) 2012 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 = "Chrome OS Team"
NAME = "platform_ExternalUSBStress"
PURPOSE = "Servo based USB stress test"
CRITERIA = "This test will fail if the device fails to detect USB changes."
TIME = "LONG"
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"

DOC = """
This test uses servo to simulate USB connect/removal events
"""

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)

    suspends = int(args_dict.get('suspends', 1000))
    network_debug = bool(args_dict.get('network_debug', True))

    job.run_test("platform_ExternalUSBStress", host=host, disable_sysinfo=True,
                 client_autotest='desktopui_SimpleLogin', suspends=suspends,
                 network_debug=network_debug)

parallel_simple(run, machines)
