# Copyright (c) 2011 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 = "Chrome OS Team"
NAME = "firmware_ECCharging"
PURPOSE = "Servo based EC charging control test"
CRITERIA = "This test will fail if EC charging control misbehalved."
ATTRIBUTES = "suite:faft, suite:faft_ec, suite:faft_ec_au_1, suite:faft_ec_au_2, suite:faft_ec_au_3, suite:faft_ec3po, suite:faft_ec_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
DEPENDENCIES = "ec:cros"
JOB_RETRIES = 4

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)
