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

# Description
# Use Servo v4 to charge the DUT to 70% battery capacity.
# DUT is connected to Servo v4 via USB type-C, and Servo v4 is connected to AC
# power.

# Sample usage:
# test_that <ip address of DUT> power_BatteryChargeControl.charge70 \
# --args 'servo_host=localhost servo_port=9999'

NAME = "power_BatteryChargeControl.charge70"
METADATA = {
    "contacts": ["chromeos-platform-power@google.com"],
    "bug_component": "b:1361410",
    "criteria": "",
    "hw_agnostic": False
}
TEST_TYPE = "server"
DEPENDENCIES = "servo_state:WORKING"

from autotest_lib.server import utils

args_dict = 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)
    job.run_test("power_BatteryChargeControl",
                 tag=NAME.split('.')[1],
                 host=host,
                 percent_charge_to_add=None,
                 percent_target_charge=70)

parallel_simple(run, machines)
