# 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.dev_u"
PURPOSE = "Test FAFT ability to switch from dev to another mode and back"
CRITERIA = "This test will fail if FAFT can not switch from dev and back again."
# TODO(https://crbug.com/1052549): Add to faft_framework suite.
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
JOB_RETRIES = 4

DOC = """
This test checks the following mode transitions:
  - Transition from dev to normal and back.
  - Transition from dev to rec and back.
"""

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=["dev", "normal", "dev", "rec", "dev"])


parallel_simple(run_faftmodetransitions, machines)
