# Copyright 2019 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 = "mruthven"
NAME = "firmware_Cr50Open.ccd_open_unrestricted"
PURPOSE = "Verify cr50 open"
ATTRIBUTES = "suite:faft_cr50_prepvt"
TIME = "SHORT"
TEST_TYPE = "server"
DEPENDENCIES = "servo_state:WORKING"

DOC = """
Verify the console can be opened by pressing the power button after the device
has been put into dev mode. Make sure cr50 can't be opened when the device isn't
in dev mode.

This test must be run with servo instead of CCD, because we need to be able to
fake power button presses.

This test is applicable when ccd open is unrestricted.
TODO(crbug.com/1014572) Drop separate control files for ccd open state.
"""

if 'args_dict' not in locals():
    args_dict = {}

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

def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    iterations = int(args_dict.get("iterations", 1))
    ccd_open_restricted = args_dict.get("ccd_open_restricted", "false").lower()
    ccd_open_restricted = ccd_open_restricted != "false"

    job.run_test("firmware_Cr50Open", host=host, cmdline_args=args,
                 ccd_open_restricted=ccd_open_restricted,
                 full_args=args_dict, iterations=iterations)

parallel_simple(run, machines)