# 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.cros.cfm.configurable_test.dsl import *
from autotest_lib.server import utils

AUTHOR = "kerl@google.com, chromeos-meetings@google.com"
NAME = "enterprise_CFM_LowLevelPeripheralTest.atrus_power_cycle_stress"
PURPOSE = "Stresses an Atrus device by repeatedly power cycling its USB port."
CRITERIA = ("Atrus detectable as a USB device after each cycle "
            "and no crash files appear")
ATTRIBUTES = "suite:hotrod"
TIME = "MEDIUM"
TEST_CATEGORY = "Stress"
TEST_TYPE = "server"
DEPENDENCIES="atrus"

DOC = """
Repeatedly power cycle the connected Atrus and verify it appears
as a USB device after each cycle. Verifies that no new crash files
appear.
"""

cfm_test = CfmTest(
    configuration=Configuration(skip_enrollment=True),
    scenario=Scenario(
        AssertUsbDevices([ATRUS]),
        RepeatTimes(10, Scenario(
            # Atruses take a while to boot, often close to 10 seconds.
            # Increase the timeout to 30 to ensure we give it enough time.
            PowerCycleUsbPort([ATRUS], wait_for_change_timeout=30),
            AssertNoNewCrashes()
        ))
    ),
)

def run_test(machine):
    job.run_test("enterprise_CFM_LowLevelPeripheralTest",
                 cfm_test = cfm_test,
                 tag = 'atrus_power_cycle_stress',
                 host = hosts.create_host(machine))


parallel_simple(run_test, machines)
