blob: be6afd428b7072a9d9d468c4432ae81161e27e61 [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.PowerPeakShift'
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'
# The lowest |DevicePowerPeakShift.battery_threshold| we can set is 15%. We need
# to be able to set it to below our current battery level.
MIN_BATTERY_LEVEL = 16
# Various interesting day_config values of the policy, assuming the time
# is noon on a Monday.
BEFORE_START_DAY_CONFIG = {
'entries': [{'day': 'MONDAY',
'start_time':{'hour':21, 'minute':0},
'end_time':{'hour':22, 'minute':0},
'charge_start_time':{'hour':23, 'minute':0},
}]
}
START_THRU_END_DAY_CONFIG = {
'entries': [{'day': 'MONDAY',
'start_time':{'hour':1, 'minute':0},
'end_time':{'hour':22, 'minute':0},
'charge_start_time':{'hour':23, 'minute':0},
}]
}
END_THRU_CHARGE_START_DAY_CONFIG = {
'entries': [{'day': 'MONDAY',
'start_time':{'hour':1, 'minute':0},
'end_time':{'hour':2, 'minute':0},
'charge_start_time':{'hour':23, 'minute':0},
}]
}
AFTER_CHARGE_START_DAY_CONFIG = {
'entries': [{'day': 'MONDAY',
'start_time':{'hour':1, 'minute':0},
'end_time':{'hour':2, 'minute':0},
'charge_start_time':{'hour':3, 'minute':0},
}]
}
# A test case consists of the policies, plus the expected power behavior.
TEST_CASES = [
({'DevicePowerPeakShiftEnabled': False,
'DevicePowerPeakShiftBatteryThreshold': 0,
'DevicePowerPeakShiftDayConfig':{}},
'ON_AC_AND_CHARGING'),
({'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 15,
'DevicePowerPeakShiftDayConfig': BEFORE_START_DAY_CONFIG},
'ON_AC_AND_CHARGING'),
({'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 15,
'DevicePowerPeakShiftDayConfig': START_THRU_END_DAY_CONFIG},
'NOT_ON_AC_AND_NOT_CHARGING'),
({'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 15,
'DevicePowerPeakShiftDayConfig': END_THRU_CHARGE_START_DAY_CONFIG},
'ON_AC_AND_NOT_CHARGING'),
({'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 15,
'DevicePowerPeakShiftDayConfig': AFTER_CHARGE_START_DAY_CONFIG},
'ON_AC_AND_CHARGING'),
({'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 100,
'DevicePowerPeakShiftDayConfig': BEFORE_START_DAY_CONFIG},
'ON_AC_AND_CHARGING'),
({'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 100,
'DevicePowerPeakShiftDayConfig': START_THRU_END_DAY_CONFIG},
'ON_AC_AND_NOT_CHARGING'),
({'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 100,
'DevicePowerPeakShiftDayConfig': END_THRU_CHARGE_START_DAY_CONFIG},
'ON_AC_AND_NOT_CHARGING'),
({'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 100,
'DevicePowerPeakShiftDayConfig': AFTER_CHARGE_START_DAY_CONFIG},
'ON_AC_AND_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_NOT_CHARGING_POLICIES = {
'DevicePowerPeakShiftEnabled': True,
'DevicePowerPeakShiftBatteryThreshold': 15,
'DevicePowerPeakShiftDayConfig': END_THRU_CHARGE_START_DAY_CONFIG
}
ON_AC_AND_CHARGING_POLICIES = {
'DevicePowerPeakShiftEnabled': False,
'DevicePowerPeakShiftBatteryThreshold': 0,
'DevicePowerPeakShiftDayConfig': {}
}
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)