blob: 044e8ac39b2650bfdd3d0a7045eabdc8521d4df6 [file] [log] [blame]
# Copyright (c) 2013 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.
import random, time
from autotest_lib.client.bin import test
from autotest_lib.client.cros import sys_power
# Suspend tests need to allow time for the kernel to settle.
MIN_ALLOWED_SUSPEND_S = 10
class power_CheckAfterSuspend(test.test):
"""Checks capabilities by running tests after suspend/resume cycle.
This can easily run multiple iterations with the built in Autotest
iterations parameter to run_test():
./run_remote_tests.sh --board=<board> -a "iterations=3" --remote=w.x.y.z \
client/site_tests/power_CheckAfterSuspend/control
"""
version = 1
def initialize(self, tests=[], min_suspend_s=2, enable_baseline=False):
"""
@param tests: list of client tests to run before/after suspend.
@param min_suspend_s: suspend durations (in seconds).
@param enable_baseline: If True, run one pass of tests before suspend,
otherwise only run tests after suspend.
"""
self._tests = tests
self._min_suspend_s = min_suspend_s
self._enable_baseline = enable_baseline
def run_once(self):
"""Run a series of tests supplied by the control file.
Handles iterations by adding tags with the iteration#.
Normally runs each test once after each suspend. If enable_baseline
is True then run an initial pass through the tests before any suspend.
The test runs a series
"""
if self.iteration is not None and self.iteration > 1:
test_tag = '%03d' % self.iteration
else:
test_tag = ''
if self._enable_baseline:
for t in self._tests:
self.job.run_test(t, tag=test_tag+'preSuspend')
time.sleep(random.randint(0, 3))
sys_power.do_suspend(max(self._min_suspend_s, MIN_ALLOWED_SUSPEND_S))
for t in self._tests:
self.job.run_test(t, tag=test_tag+'postSuspend')