power_BatteryDrain: Use percent_display_charge()
Changes logic to use percent_display_charge() instead of
percent_current_charge() for battery percentage calculations. This is
important since this test is used in the context of device policies
which are written using display battery percentage calculation.
BUG=b:139201701, b:138940522, b:143173004
TEST=test_that -b sarien \
--args='drain_to_percent=90 drain_timeout=300' $DUT power_BatteryDrain
Change-Id: I5f7ca1a6f4aaffea17807133fe37bd08b75340f9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/1968748
Reviewed-by: Derek Beckett <dbeckett@chromium.org>
Reviewed-by: Oleh Lamzin <lamzin@google.com>
Tested-by: Daniel Campello <campello@chromium.org>
Commit-Queue: Daniel Campello <campello@chromium.org>
diff --git a/client/cros/power/power_status.py b/client/cros/power/power_status.py
index 1f221e9..ef8ae36 100644
--- a/client/cros/power/power_status.py
+++ b/client/cros/power/power_status.py
@@ -538,6 +538,13 @@
self.battery.charge_full_design
+ def percent_display_charge(self):
+ """Returns current display charge in percent.
+ """
+ keyvals = parse_power_supply_info()
+ return float(keyvals['Battery']['display percentage'])
+
+
def assert_battery_state(self, percent_initial_charge_min):
"""Check initial power configuration state is battery.
@@ -562,7 +569,7 @@
def assert_battery_in_range(self, min_level, max_level):
"""Raise a error.TestFail if the battery level is not in range."""
- current_percent = self.percent_current_charge()
+ current_percent = self.percent_display_charge()
if not (min_level <= current_percent <= max_level):
raise error.TestFail('battery must be in range [{}, {}]'.format(
min_level, max_level))
diff --git a/client/site_tests/power_BatteryDrain/power_BatteryDrain.py b/client/site_tests/power_BatteryDrain/power_BatteryDrain.py
index aeb3e66..09e3f6a 100644
--- a/client/site_tests/power_BatteryDrain/power_BatteryDrain.py
+++ b/client/site_tests/power_BatteryDrain/power_BatteryDrain.py
@@ -85,7 +85,7 @@
status = power_status.get_status()
if status.on_ac():
raise ac_error
- return status.percent_current_charge() <= drain_to_percent
+ return status.percent_display_charge() <= drain_to_percent
err = error.TestFail(
"Battery did not drain to {} percent in {} seconds".format(
diff --git a/server/cros/power/utils.py b/server/cros/power/utils.py
index 253c8a8..c9179e8 100644
--- a/server/cros/power/utils.py
+++ b/server/cros/power/utils.py
@@ -21,7 +21,7 @@
@throws: A TestFail error if getting the current battery level, setting the
servo's charge state, or running either of the client tests fails.
"""
- current_level = host.get_battery_percentage()
+ current_level = host.get_battery_display_percentage()
if current_level >= min_level and current_level <= max_level:
return
diff --git a/server/hosts/cros_host.py b/server/hosts/cros_host.py
index 343465b..13a9cd8 100644
--- a/server/hosts/cros_host.py
+++ b/server/hosts/cros_host.py
@@ -852,6 +852,20 @@
return None
+ def get_battery_display_percentage(self):
+ """Get the battery display percentage.
+
+ @return: The display percentage of battery level, value range from
+ 0-100. Return None if the battery info cannot be retrieved.
+ """
+ try:
+ info = self.get_power_supply_info()
+ logging.info(info)
+ return float(info['Battery']['display percentage'])
+ except (KeyError, ValueError, error.AutoservRunError):
+ return None
+
+
def is_ac_connected(self):
"""Check if the dut has power adapter connected and charging.