1*9c5db199SXin Li# Copyright 2019 The Chromium OS Authors. All rights reserved. 2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 3*9c5db199SXin Li# found in the LICENSE file. 4*9c5db199SXin Li 5*9c5db199SXin Li"""Power utils for server tests.""" 6*9c5db199SXin Li 7*9c5db199SXin Lifrom autotest_lib.server import autotest 8*9c5db199SXin Lifrom autotest_lib.server.cros.power import servo_charger 9*9c5db199SXin Li 10*9c5db199SXin Lidef put_host_battery_in_range(host, min_level, max_level, timeout): 11*9c5db199SXin Li """ 12*9c5db199SXin Li Charges or drains the host's battery to the specified range within the 13*9c5db199SXin Li timeout. This uses a servo v4 and either the power_BatteryCharge or the 14*9c5db199SXin Li power_BatteryDrain client test. 15*9c5db199SXin Li 16*9c5db199SXin Li @param host: DUT to use 17*9c5db199SXin Li @param min_level: battery percentage 18*9c5db199SXin Li @param max_level: battery percentage 19*9c5db199SXin Li @param timeout: in seconds 20*9c5db199SXin Li 21*9c5db199SXin Li @throws: A TestFail error if getting the current battery level, setting the 22*9c5db199SXin Li servo's charge state, or running either of the client tests fails. 23*9c5db199SXin Li """ 24*9c5db199SXin Li current_level = host.get_battery_display_percentage() 25*9c5db199SXin Li if current_level >= min_level and current_level <= max_level: 26*9c5db199SXin Li return 27*9c5db199SXin Li 28*9c5db199SXin Li autotest_client = autotest.Autotest(host) 29*9c5db199SXin Li charge_manager = servo_charger.ServoV4ChargeManager(host, host.servo) 30*9c5db199SXin Li if current_level < min_level: 31*9c5db199SXin Li charge_manager.start_charging() 32*9c5db199SXin Li autotest_client.run_test('power_BatteryCharge', 33*9c5db199SXin Li max_run_time=timeout, 34*9c5db199SXin Li percent_target_charge=min_level, 35*9c5db199SXin Li use_design_charge_capacity=False) 36*9c5db199SXin Li if current_level > max_level: 37*9c5db199SXin Li charge_manager.stop_charging() 38*9c5db199SXin Li autotest_client.run_test('power_BatteryDrain', 39*9c5db199SXin Li drain_to_percent=max_level, 40*9c5db199SXin Li drain_timeout=timeout) 41