You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
3.3 KiB
73 lines
3.3 KiB
# Copyright 2019 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.client.common_lib import error
|
|
from autotest_lib.client.cros.enterprise import enterprise_policy_base
|
|
from autotest_lib.client.cros.power import power_status
|
|
|
|
|
|
class ChargingPolicyTest(enterprise_policy_base.EnterprisePolicyTest):
|
|
"""
|
|
A Client test that verifies that AC usage and battery charging is consistent
|
|
with policy settings. As of this writing, these features are only present on
|
|
the Wilco platform.
|
|
"""
|
|
# The Wilco EC updates it's charging behavior every 60 seconds,
|
|
# so give ourselves 120 seconds to notice a change in behavior.
|
|
POLICY_CHANGE_TIMEOUT = 120
|
|
|
|
def run_once(self, test_cases, min_battery_level, prep_policies):
|
|
"""
|
|
Test a collection of cases.
|
|
|
|
@param test_cases: Collection of (policies, expected_behavior) pairs,
|
|
where expected_behavior is one of values accepted by
|
|
power_status.poll_for_charging_behavior().
|
|
@param min_battery_level: For the policy to affect the behavior
|
|
correctly, the battery level may need to be
|
|
above a certain percentage.
|
|
@param prep_policies: To test that policies P1 cause behavior B1, we
|
|
need to start in a state P2 where behavior B2 is
|
|
not B1, so we can notice the change to B1.
|
|
prep_policies is a dict that maps B1 => (P2, B2),
|
|
so that we can look up how to prep for testing
|
|
P1.
|
|
"""
|
|
self.setup_case(enroll=True)
|
|
|
|
failures = []
|
|
for policies, expected_behavior in test_cases:
|
|
setup_policies, prep_behavior = prep_policies[expected_behavior]
|
|
err = self._test_policies(setup_policies, prep_behavior,
|
|
min_battery_level)
|
|
if err is not None:
|
|
failures.append(err)
|
|
|
|
# Now that we are set up, test the actual test case.
|
|
err = self._test_policies(policies, expected_behavior,
|
|
min_battery_level)
|
|
if err is not None:
|
|
failures.append(err)
|
|
if failures:
|
|
raise error.TestFail('Failed the following cases: {}'.format(
|
|
str(failures)))
|
|
|
|
def _test_policies(self, policies, expected_behavior, min_battery_level):
|
|
self.update_policies(device_policies=policies)
|
|
try:
|
|
self._assert_battery_is_testable(min_battery_level)
|
|
power_status.poll_for_charging_behavior(expected_behavior,
|
|
self.POLICY_CHANGE_TIMEOUT)
|
|
except BaseException as e:
|
|
msg = ('Expected to be {} using policies {}. Got this instead: {}'.
|
|
format(expected_behavior, policies, str(e)))
|
|
return msg
|
|
return None
|
|
|
|
def _assert_battery_is_testable(self, min_battery_level):
|
|
status = power_status.get_status()
|
|
if status.battery_full():
|
|
raise error.TestError('The battery is full, but should not be')
|
|
status.assert_battery_in_range(min_battery_level, 100)
|