# Copyright 2011 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 = "ChromeOS Team"
NAME = "firmware_ECCharging"
METADATA = {
        "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
        "bug_component": "b:792402", # ChromeOS > Platform > Enablement > Firmware > FAFT
        "criteria": "Servo based EC charging control test",
}
TIME = "SHORT"
TEST_TYPE = "server"
JOB_RETRIES = 0
DEPENDENCIES = "ec:cros, servo_state:WORKING"

DOC = """
This test checks:
  - Charger target voltage should be less than 105% of battery desired voltage.
  - Charger target current should be less than 105% of battery desired current.
  - Charger actual voltage should be less than 105% of charger target voltage.
  - Charger actual current should be less than 105% of charger target current.
"""

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

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

parallel_simple(run_eccharging, machines)
