# Copyright 2017 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 = "dsunkara@chromium.org"
NAME = "platform_CFM_USBPeripheralStress.hotplug_stress_mimo"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"
ATTRIBUTES = "suite:bluestreak"
DEPENDENCIES = "mimo"


DOC = """
This test logs in the device in consumer mode and then starts stress testing
the hotplugging and unplugging of USB peripherals. With each hotplug / unplug,
the test verifies if peripheral is enumerated on USB port without issues.
The test fails if
- Cannot perform desktopui_SimpleLogin.
- Peripheral is not found on the DUT.
- Peripheral hotplugged is not found.
"""

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine, servo_args=None)
    repeat = int(args_dict.get("repeat", 10))
    default_actions = str("login, hotplug")
    action_sequence = str(args_dict.get("action_sequence", default_actions))
    peripheral_dict = {'SIS HID-Touch Controller': ('266e', '0110'),
                       'MIMO VUE HD': ('17e9','016b')}
    job.run_test('platform_CFM_USBPeripheralStress', host=host, repeat = repeat,
            client_autotest='desktopui_SimpleLogin', crash_check=True,
            action_sequence=action_sequence, peripheral_dict=peripheral_dict,
            tag='hotplug_stress_mimo')


parallel_simple(run, machines)
