blob: 810de775a77eafb9a9dca10c796cf767fa0841f1 [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.bin import utils
from autotest_lib.client.cros import upstart
from autotest_lib.client.cros.enterprise import charging_policy_tests
class policy_DeviceScheduledCharging(charging_policy_tests.ChargingPolicyTest):
"""
Variant of ChargingPolicyTest for schedule-based charging policies. As of
this writing, these features are only present on the Wilco platform.
This variation of ChargingPolicyTest only has to do a bit of warmup and
cleanup before and after each call to run_once(). Users should assume that
the EC thinks the time is |MOCK_TIME|.
"""
version = 1
SYNC_EC_RTC_UPSTART_JOB = 'wilco_sync_ec_rtc'
# Noon on a Monday.
MOCK_TIME = '1/1/01 12:00:00'
def warmup(self):
"""
For the first step in the test we set the EC's RTC to a consistent,
mock time. The EC, or Embedded Controller, is a microcontroller
separate from the main system-on-a-chip. The EC controls charge
scheduling, among other things. Setting the EC's RTC allows us to
use a hardcoded list of schedules as our test cases. We also need to
disable the upstart job that keeps the EC's RTC in sync with the
local time of the DUT.
"""
super(policy_DeviceScheduledCharging, self).warmup()
upstart.stop_job(self.SYNC_EC_RTC_UPSTART_JOB)
utils.set_hwclock(
time=self.MOCK_TIME,
utc=False,
rtc='/dev/rtc1',
noadjfile=True)
def cleanup(self):
"""
Get the DUT back to a clean state after messing with it in warmup().
"""
utils.set_hwclock(
time='system', utc=False, rtc='/dev/rtc1', noadjfile=True)
upstart.restart_job(self.SYNC_EC_RTC_UPSTART_JOB)
super(policy_DeviceScheduledCharging, self).cleanup()