# 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(): test_that -b <board> --iterations=3 ${MACHINE_IP} \ f: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', disable_sysinfo=True) 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', disable_sysinfo=True)