# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# TODO(b/322045594) Remove this file when the test is no longer in any
# PVS plan

from autotest_lib.server import utils

AUTHOR = "philipchen"
NAME = "firmware_ECChargingState"
METADATA = {
        "contacts": ["chromeos-faft@google.com", "philipchen@chromium.org"],
        "bug_component": "b:792402", # ChromeOS > Platform > Enablement > Firmware > FAFT
        "criteria": "Servo based EC charging state test",
}
TIME = "SHORT"
TEST_TYPE = "server"
JOB_RETRIES = 0
DEPENDENCIES = "ec:cros, servo_state:WORKING"

DOC = """
This test checks if the power_supply_info command reports the correct charging
state in different scenarios.
"""

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

def run_ecchargingstate(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_ECChargingState", host=host, cmdline_args=args,
                 disable_sysinfo=True)

parallel_simple(run_ecchargingstate, machines)
