• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2020 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5from autotest_lib.client.common_lib import utils
6from autotest_lib.server.hosts import cros_host
7
8AUTHOR = 'ncrews'
9DEPENDENCIES = "servo_state:WORKING"
10NAME = 'policy_DeviceChargingServer.PowerPeakShift'
11TIME = 'LONG'
12TEST_CATEGORY = 'General'
13TEST_CLASS = 'enterprise'
14TEST_TYPE = 'server'
15ATTRIBUTES = "suite:wilco_bve"
16
17DOC = """
18Ensures the DUT's battery level is in a testable range, clears the TPM if
19needed, and then runs the specified client test to verify charging behavior
20is consistent with policies.
21"""
22
23args_dict = utils.args_to_dict(args)
24servo_args = cros_host.CrosHost.get_servo_arguments(args_dict)
25
26client_test = 'policy_DeviceScheduledCharging'
27
28# The lowest |DevicePowerPeakShift.battery_threshold| we can set is 15%. We need
29# to be able to set it to below our current battery level.
30MIN_BATTERY_LEVEL = 16
31
32# Various interesting day_config values of the policy, assuming the time
33# is noon on a Monday.
34BEFORE_START_DAY_CONFIG = {
35    'entries': [{'day': 'MONDAY',
36                 'start_time':{'hour':21, 'minute':0},
37                 'end_time':{'hour':22, 'minute':0},
38                 'charge_start_time':{'hour':23, 'minute':0},
39                }]
40}
41START_THRU_END_DAY_CONFIG = {
42    'entries': [{'day': 'MONDAY',
43                 'start_time':{'hour':1, 'minute':0},
44                 'end_time':{'hour':22, 'minute':0},
45                 'charge_start_time':{'hour':23, 'minute':0},
46                }]
47}
48END_THRU_CHARGE_START_DAY_CONFIG = {
49    'entries': [{'day': 'MONDAY',
50                 'start_time':{'hour':1, 'minute':0},
51                 'end_time':{'hour':2, 'minute':0},
52                 'charge_start_time':{'hour':23, 'minute':0},
53                }]
54}
55AFTER_CHARGE_START_DAY_CONFIG = {
56    'entries': [{'day': 'MONDAY',
57                 'start_time':{'hour':1, 'minute':0},
58                 'end_time':{'hour':2, 'minute':0},
59                 'charge_start_time':{'hour':3, 'minute':0},
60                }]
61}
62
63# A test case consists of the policies, plus the expected power behavior.
64TEST_CASES = [
65    ({'DevicePowerPeakShiftEnabled': False,
66      'DevicePowerPeakShiftBatteryThreshold': 0,
67      'DevicePowerPeakShiftDayConfig':{}},
68     'ON_AC_AND_CHARGING'),
69
70    ({'DevicePowerPeakShiftEnabled': True,
71      'DevicePowerPeakShiftBatteryThreshold': 15,
72      'DevicePowerPeakShiftDayConfig': BEFORE_START_DAY_CONFIG},
73     'ON_AC_AND_CHARGING'),
74    ({'DevicePowerPeakShiftEnabled': True,
75      'DevicePowerPeakShiftBatteryThreshold': 15,
76      'DevicePowerPeakShiftDayConfig': START_THRU_END_DAY_CONFIG},
77     'NOT_ON_AC_AND_NOT_CHARGING'),
78    ({'DevicePowerPeakShiftEnabled': True,
79      'DevicePowerPeakShiftBatteryThreshold': 15,
80      'DevicePowerPeakShiftDayConfig': END_THRU_CHARGE_START_DAY_CONFIG},
81     'ON_AC_AND_NOT_CHARGING'),
82    ({'DevicePowerPeakShiftEnabled': True,
83      'DevicePowerPeakShiftBatteryThreshold': 15,
84      'DevicePowerPeakShiftDayConfig': AFTER_CHARGE_START_DAY_CONFIG},
85     'ON_AC_AND_CHARGING'),
86
87    ({'DevicePowerPeakShiftEnabled': True,
88      'DevicePowerPeakShiftBatteryThreshold': 100,
89      'DevicePowerPeakShiftDayConfig': BEFORE_START_DAY_CONFIG},
90     'ON_AC_AND_CHARGING'),
91    ({'DevicePowerPeakShiftEnabled': True,
92      'DevicePowerPeakShiftBatteryThreshold': 100,
93      'DevicePowerPeakShiftDayConfig': START_THRU_END_DAY_CONFIG},
94     'ON_AC_AND_NOT_CHARGING'),
95    ({'DevicePowerPeakShiftEnabled': True,
96      'DevicePowerPeakShiftBatteryThreshold': 100,
97      'DevicePowerPeakShiftDayConfig': END_THRU_CHARGE_START_DAY_CONFIG},
98     'ON_AC_AND_NOT_CHARGING'),
99    ({'DevicePowerPeakShiftEnabled': True,
100      'DevicePowerPeakShiftBatteryThreshold': 100,
101      'DevicePowerPeakShiftDayConfig': AFTER_CHARGE_START_DAY_CONFIG},
102     'ON_AC_AND_CHARGING'),
103]
104
105# These are used to cleanup the DUT and to prep the DUT before each test case.
106# See the test for more info.
107ON_AC_AND_NOT_CHARGING_POLICIES = {
108    'DevicePowerPeakShiftEnabled': True,
109    'DevicePowerPeakShiftBatteryThreshold': 15,
110    'DevicePowerPeakShiftDayConfig': END_THRU_CHARGE_START_DAY_CONFIG
111}
112ON_AC_AND_CHARGING_POLICIES = {
113    'DevicePowerPeakShiftEnabled': False,
114    'DevicePowerPeakShiftBatteryThreshold': 0,
115    'DevicePowerPeakShiftDayConfig': {}
116}
117PREP_POLICIES = {
118    'ON_AC_AND_CHARGING'         : (ON_AC_AND_NOT_CHARGING_POLICIES,
119                                    'ON_AC_AND_NOT_CHARGING'),
120    'ON_AC_AND_NOT_CHARGING'     : (ON_AC_AND_CHARGING_POLICIES,
121                                    'ON_AC_AND_CHARGING'),
122    'NOT_ON_AC_AND_NOT_CHARGING' : (ON_AC_AND_CHARGING_POLICIES,
123                                    'ON_AC_AND_CHARGING'),
124}
125def run(machine):
126    host = hosts.create_host(machine, servo_args=servo_args)
127    job.run_test('policy_DeviceChargingServer',
128                 host=host,
129                 client_test=client_test,
130                 test_cases=TEST_CASES,
131                 min_battery_level=MIN_BATTERY_LEVEL,
132                 prep_policies=PREP_POLICIES)
133
134parallel_simple(run, machines)
135