# 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.ccd_open_unrestricted"
PURPOSE = "Verify cr50 ccd capabilities."
ATTRIBUTES = "suite:faft_cr50_prepvt"
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.
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_Cr50CheckCap", host=host, cmdline_args=args,
                 ccd_open_restricted=ccd_open_restricted,
                 full_args=args_dict, iterations=iterations)

parallel_simple(run, machines)