blob: 2db9de34637dd4bb2ed8810513a2105fa0ff7ef1 [file] [log] [blame]
# Copyright (c) 2010 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 os, random, subprocess, time
import commands, logging, random, time
from autotest_lib.client.bin import utils, test
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import rtc, sys_power
MIN_SLEEP_INTERVAL = 5
MIN_WORK_INTERVAL = 30
START_FILE = '/tmp/power_state_cycle_begin'
STOP_FILE = '/tmp/power_state_cycle_end'
class platform_SuspendStress(test.test):
version = 1
def initialize(self):
random.seed() # System time is fine.
if os.path.exists(STOP_FILE):
logging.warning('removing existing stop file %s' % STOP_FILE)
os.unlink(STOP_FILE)
def suspend_and_resume(self, seconds=MIN_SLEEP_INTERVAL):
"""Suspends for N seconds."""
sleep_seconds = min(seconds, MIN_SLEEP_INTERVAL)
suspend_time = rtc.get_seconds()
sys_power.do_suspend(sleep_seconds)
logging.debug('and we\'re back... %ds elapsed.',
rtc.get_seconds() - suspend_time)
def power_state_cycle(self, timeout=None):
try:
while not os.path.exists(STOP_FILE):
if timeout and time.mktime(time.localtime()) > timeout:
raise error.TestFail('didn\'t find %s before timeout.' %
STOP_FILE)
self.suspend_and_resume(random.randint(MIN_SLEEP_INTERVAL, 15))
time.sleep(random.randint(MIN_WORK_INTERVAL,
MIN_WORK_INTERVAL+5))
finally:
# Ensure we disable the RTC alarm, leaving the original state
rtc.set_wake_alarm(0)
def run_once(self, auto_start=False, runtime=None):
if auto_start:
open(START_FILE, 'w').close()
utils.poll_for_condition(lambda: os.path.exists(START_FILE),
error.TestFail('startup not triggered.'),
timeout=30, sleep_interval=1)
logging.debug('Found %s, starting power state cycle.' % START_FILE)
if runtime:
runtime = time.mktime(time.localtime()) + runtime
os.unlink(START_FILE)
self.power_state_cycle(runtime)