# Copyright (c) 2013 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. import re from autotest_lib.client.common_lib import error from autotest_lib.server import test class power_ChargeStatus(test.test): """ Test power_supply_info AC and BAT "state" on power OFF and ON. If DUT is connected to RPM(default) - No need to pass any command line args. If DUT is connected to USB powerstrip(via servo), Need to pass cmdlineargs as --args=power_control="servoj10". If DUT is not connected to servo and RPM. i.e to handle manually, Need to pass cmdlineargs as --args=power_control="manual". """ version = 1 def initialize(self, host, cmdline_args): args = {} for arg in cmdline_args: match = re.search("^(\w+)=(.+)", arg) if match: args[match.group(1)] = match.group(2) self.power_control = args.get('power_control', host.POWER_CONTROL_RPM) if self.power_control not in host.POWER_CONTROL_VALID_ARGS: raise error.TestError('Valid values for --args=power_control ' 'are %s. But you entered wrong argument ' 'as "%s".' % (host.POWER_CONTROL_VALID_ARGS, self.power_control)) def run_once(self, host): ac_state = self.get_ac_status(host) bat_state = self.get_bat_status(host) self.test_charge_state(ac_state, bat_state) host.power_off(self.power_control) ac_state = self.get_ac_status(host) bat_state = self.get_bat_status(host) self.test_discharge_state(ac_state, bat_state) host.power_on(self.power_control) def test_charge_state(self, ac_state, bat_state): """Tests when on AC- the Main line is "ON" and "Charging/Charged". @param ac_state Specifies the power_supply_info "Line Power" online value. @param bat_state Specifies the power_supply_info "Battery" charge state value. """ if not (ac_state == "yes" and (bat_state == "Charging" or bat_state == "Fully charged")): raise error.TestFail("AC is not online and BAT state is %s." % bat_state) def test_discharge_state(self, ac_state, bat_state): """Tests when on DC - the Main line is "No" and "Discharging". @param ac_state Specifies the power_supply_info "Line Power" online value. @param bat_state Specifies the power_supply_info "Battery" charge state value. """ if not (ac_state == "no" and bat_state == "Discharging"): raise error.TestFail("Not Discharging, on AC and BAT state is %s." % bat_state) def get_ac_status(self, host): """Get the AC state info from "power_supply_info".""" ac_state_info = host.run( "power_supply_info | egrep 'online'").stdout.strip() return self.split_info(ac_state_info) def get_bat_status(self, host): """ Get the DC state info from "power_supply_info".""" bat_state_info = host.run( "power_supply_info | egrep 'state'").stdout.strip() return self.split_info(bat_state_info) def split_info(self, info_list): """Splits & trims stdout and returns the AC and BAT state Values. @param info_list Specifies the stdout value. """ split_list = info_list.split(":") return split_list[-1].strip()