# Copyright (c) 2020 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 = "Intel"
NAME = "firmware_RecoveryStress.rec"
PURPOSE = "Servo based recovery stress test"
CRITERIA = "This test will fail if DUT failed to boot into USB OS"
DEPENDENCIES = "servo_state:WORKING, servo_usb_state:NORMAL"
TIME = "SHORT"
TEST_CATEGORY = "Stress"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
PY_VERSION = 3

DOC = """
This test checks the following FAFT hardware requirement:
  - Recovery boot with USB stick using power_state:rec
  - USB stick is plugged into Servo board, not DUT
"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run_recoverystress(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_RecoveryStress", host=host, cmdline_args=args,
                 disable_sysinfo=True, reboot_iterations=15, mode="rec")

parallel_simple(run_recoverystress, machines)
