| # Copyright 2018 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.client.common_lib.cros.cfm.usb import usb_device_spec |
| 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_PeripheralQualification.power_cycle" |
| PURPOSE = "Stresses a peripheral device by repeatedly power cycling its USB port." |
| CRITERIA = ("The device detectable as a USB device after each cycle " |
| "and no crash files appear") |
| TIME = "MEDIUM" |
| TEST_CATEGORY = "Stress" |
| TEST_TYPE = "server" |
| |
| DOC = """ |
| Repeatedly power cycle the connected device and verify it appears |
| as a USB device after each cycle. Verifies that no new crash files |
| appear. |
| |
| The test requires a vid_pid argument (e.g. 18d1:8001) that determines which |
| device to power cycle. This enables testing custom devices from Moblab or from |
| a local workstation. |
| |
| In Moblab, add vid_pid=<vid:pid> under Advanced Options -> Args. |
| |
| Locally, add arguments with --args when running test_that. Example: |
| test_that --autotest_dir ~/trunk/src/third_party/autotest/files/ \ |
| --board=guado --args 'servo_host= vid_pid=18d1:8001' \ |
| chromeos6-row22-rack13-host7 enterprise_CFM_PeripheralQualification.power_cycle |
| """ |
| |
| args_dict = utils.args_to_dict(args) |
| vid,pid = args_dict['vid_pid'].split(':') |
| # The product is only informational, set it to whatever. |
| product = args_dict.get('product', 'customProduct') |
| # Interfaces are only needed when verifying them, set them to empty in this case. |
| interfaces = [] |
| device = usb_device_spec.UsbDeviceSpec(vid, pid, product, interfaces) |
| repeat = int(args_dict.get('repeat', 10)) |
| |
| cfm_test = CfmTest( |
| configuration=Configuration(skip_enrollment=True), |
| scenario=Scenario( |
| AssertUsbDevices([device]), |
| RepeatTimes(repeat, Scenario( |
| PowerCycleUsbPort([device]), |
| AssertNoNewCrashes() |
| )) |
| ), |
| ) |
| |
| def run_test(machine): |
| job.run_test("enterprise_CFM_PeripheralQualification", |
| cfm_test = cfm_test, |
| tag = 'power_cycle', |
| host = hosts.create_host(machine)) |
| |
| parallel_simple(run_test, machines) |