# 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_Cr50CheckCap.faft_cr50_tot"
PURPOSE = "Verify cr50 ccd capabilities."
ATTRIBUTES = "suite:faft_cr50_tot"
TIME = "SHORT"
TEST_TYPE = "server"
DEPENDENCIES = "servo_state:WORKING"

DOC = """Verify cr50 ccd capabilities.

Check the cr50 ccd capabilities. Make sure the default values are ok and the
settings work as expected.

This test is applicable when ccd open is unrestricted and using ToT cr50 module.
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)

# crbug.com/1014572: Inject test args.
args_dict['tot_test_run'] = 'true'

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_Cr50CheckCap", host=host, cmdline_args=args,
                 ccd_open_restricted=ccd_open_restricted,
                 full_args=args_dict, iterations=iterations)

parallel_simple(run, machines)