# 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 = "aluo"
NAME = "firmware_FAFTModeTransitions.all_single"
PURPOSE = "Test FAFT ability to switch between different modes"
CRITERIA = "This test will fail if FAFT can not switch between any two modes."
ATTRIBUTES = "suite:faft_smoke"
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 4

DOC = """
This test checks the following mode transitions:
  - Transition between any two modes (single transition)
"""

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


def run_faftmodetransitions(machine):
    host = hosts.create_host(machine, servo_args=servo_args)

    job.run_test(
            "firmware_FAFTModeTransitions",
            host=host,
            cmdline_args=args,
            disable_sysinfo=True,
            mode_seq=[
                    "normal", "dev", "rec", "normal", "rec", "dev", "normal"
            ])


parallel_simple(run_faftmodetransitions, machines)
