1# Copyright (c) 2013 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 5import random, time 6 7from autotest_lib.client.bin import test 8from autotest_lib.client.cros import sys_power 9 10 11# Suspend tests need to allow time for the kernel to settle. 12MIN_ALLOWED_SUSPEND_S = 10 13 14 15class power_CheckAfterSuspend(test.test): 16 """Checks capabilities by running tests after suspend/resume cycle. 17 18 This can easily run multiple iterations with the built in Autotest 19 iterations parameter to run_test(): 20 21 test_that -b <board> --iterations=3 ${MACHINE_IP} \ 22 f:client/site_tests/power_CheckAfterSuspend/control 23 """ 24 version = 1 25 26 27 def initialize(self, tests=[], min_suspend_s=2, enable_baseline=False): 28 """ 29 @param tests: list of client tests to run before/after suspend. 30 @param min_suspend_s: suspend durations (in seconds). 31 @param enable_baseline: If True, run one pass of tests before suspend, 32 otherwise only run tests after suspend. 33 """ 34 self._tests = tests 35 self._min_suspend_s = min_suspend_s 36 self._enable_baseline = enable_baseline 37 38 39 def run_once(self): 40 """Run a series of tests supplied by the control file. 41 42 Handles iterations by adding tags with the iteration#. 43 44 Normally runs each test once after each suspend. If enable_baseline 45 is True then run an initial pass through the tests before any suspend. 46 47 The test runs a series 48 """ 49 if self.iteration is not None and self.iteration > 1: 50 test_tag = '%03d' % self.iteration 51 else: 52 test_tag = '' 53 if self._enable_baseline: 54 for t in self._tests: 55 self.job.run_test(t, tag=test_tag+'preSuspend', disable_sysinfo=True) 56 57 time.sleep(random.randint(0, 3)) 58 sys_power.do_suspend(max(self._min_suspend_s, MIN_ALLOWED_SUSPEND_S)) 59 60 for t in self._tests: 61 self.job.run_test(t, tag=test_tag+'postSuspend', disable_sysinfo=True) 62