blob: 8b1710d9425c5266fb13beb956f58c9892514258 [file] [log] [blame]
# Copyright 2020 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 utils
from autotest_lib.server.hosts import cros_host
AUTHOR = 'ncrews'
DEPENDENCIES = "servo_state:WORKING"
NAME = 'policy_DeviceChargingServer.AdvancedBatteryChargeMode'
TIME = 'LONG'
TEST_CATEGORY = 'General'
TEST_CLASS = 'enterprise'
TEST_TYPE = 'server'
ATTRIBUTES = "suite:wilco_bve"
DOC = """
Ensures the DUT's battery level is in a testable range, clears the TPM if
needed, and then runs the specified client test to verify charging behavior
is consistent with policies.
"""
args_dict = utils.args_to_dict(args)
servo_args = cros_host.CrosHost.get_servo_arguments(args_dict)
client_test = 'policy_DeviceScheduledCharging'
# When AdvancedBatteryChargeMode is enabled, and the time is outside of the work
# period, the battery should not charge above 90%. Therefore we need to be above
# 90% so we can test this.
MIN_BATTERY_LEVEL = 91
# Various interesting day_config values of the policy, assuming the time
# is noon on a Monday.
BEFORE_START_DAY_CONFIG = {
'entries': [{'day': 'MONDAY',
'charge_start_time':{'hour':22, 'minute':0},
'charge_end_time':{'hour':23, 'minute':0},
}]
}
START_THRU_END_DAY_CONFIG = {
'entries': [{'day': 'MONDAY',
'charge_start_time':{'hour':1, 'minute':0},
'charge_end_time':{'hour':23, 'minute':0},
}]
}
AFTER_END_DAY_CONFIG = {
'entries': [{'day': 'MONDAY',
'charge_start_time':{'hour':1, 'minute':0},
'charge_end_time':{'hour':2, 'minute':0},
}]
}
# A test case consists of the policies, plus the expected power behavior.
TEST_CASES = [
({'DeviceAdvancedBatteryChargeModeEnabled': False,
'DeviceAdvancedBatteryChargeModeDayConfig': BEFORE_START_DAY_CONFIG},
'ON_AC_AND_CHARGING'),
({'DeviceAdvancedBatteryChargeModeEnabled': False,
'DeviceAdvancedBatteryChargeModeDayConfig': START_THRU_END_DAY_CONFIG},
'ON_AC_AND_CHARGING'),
({'DeviceAdvancedBatteryChargeModeEnabled': False,
'DeviceAdvancedBatteryChargeModeDayConfig': AFTER_END_DAY_CONFIG},
'ON_AC_AND_CHARGING'),
({'DeviceAdvancedBatteryChargeModeEnabled': True,
'DeviceAdvancedBatteryChargeModeDayConfig': BEFORE_START_DAY_CONFIG},
'ON_AC_AND_NOT_CHARGING'),
({'DeviceAdvancedBatteryChargeModeEnabled': True,
'DeviceAdvancedBatteryChargeModeDayConfig': START_THRU_END_DAY_CONFIG},
'ON_AC_AND_CHARGING'),
({'DeviceAdvancedBatteryChargeModeEnabled': True,
'DeviceAdvancedBatteryChargeModeDayConfig': AFTER_END_DAY_CONFIG},
'ON_AC_AND_NOT_CHARGING'),
]
# These are used to cleanup the DUT and to prep the DUT before each test case.
# See the test for more info.
ON_AC_AND_CHARGING_POLICIES = {
'DeviceAdvancedBatteryChargeModeEnabled': False,
'DeviceAdvancedBatteryChargeModeDayConfig': BEFORE_START_DAY_CONFIG
}
ON_AC_AND_NOT_CHARGING_POLICIES = {
'DeviceAdvancedBatteryChargeModeEnabled': True,
'DeviceAdvancedBatteryChargeModeDayConfig': BEFORE_START_DAY_CONFIG
}
PREP_POLICIES = {
'ON_AC_AND_CHARGING' : (ON_AC_AND_NOT_CHARGING_POLICIES,
'ON_AC_AND_NOT_CHARGING'),
'ON_AC_AND_NOT_CHARGING' : (ON_AC_AND_CHARGING_POLICIES,
'ON_AC_AND_CHARGING'),
'NOT_ON_AC_AND_NOT_CHARGING' : (ON_AC_AND_CHARGING_POLICIES,
'ON_AC_AND_CHARGING'),
}
def run(machine):
host = hosts.create_host(machine, servo_args=servo_args)
job.run_test('policy_DeviceChargingServer',
host=host,
client_test=client_test,
test_cases=TEST_CASES,
min_battery_level=MIN_BATTERY_LEVEL,
prep_policies=PREP_POLICIES)
parallel_simple(run, machines)