# Copyright (c) 2012 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 logging from autotest_lib.client.bin import utils from autotest_lib.client.common_lib import error from autotest_lib.client.common_lib.cros import arc, chrome from autotest_lib.client.cros import upstart class power_UiResume(arc.ArcTest): """ Suspend the system while simulating user behavior. If ARC is present, open ARC before suspending. If ARC is not present, log into Chrome before suspending. To suspend, call autotest power_Resume. This reduces duplicate code, while cover all 3 cases: with ARC, with Chrome but without ARC, and without Chrome. """ version = 3 def initialize(self, no_arc=False): """ Entry point. Initialize ARC if it is enabled on the DUT, otherwise log in Chrome browser. """ self._enable_arc = utils.is_arc_available() and not no_arc if self._enable_arc: super(power_UiResume, self).initialize() else: self._chrome = chrome.Chrome() def run_once(self, max_devs_returned=10, seconds=0, ignore_kernel_warns=False): """ Run client side autotest power_Resume, to reduce duplicate code. """ service = 'powerd' err = 0 pid_start = upstart.get_pid(service) if not pid_start: upstart.restart_job(service) pid_start = upstart.get_pid(service) if not pid_start: logging.error('%s is not running at start of test', service) err += 1 self.job.run_test( 'power_Resume', max_devs_returned=max_devs_returned, seconds=seconds, ignore_kernel_warns=ignore_kernel_warns, measure_arc=self._enable_arc) pid_end = upstart.get_pid('powerd') if not pid_end: logging.error('%s is not running at end of test', service) err += 1 if pid_start and pid_end and pid_start != pid_end: logging.error('%s respawned during test', service) err += 1 if err: raise error.TestFail('Test failed. See errors for details.') def cleanup(self): """ Clean up ARC if it is enabled on the DUT, otherwise close the Chrome browser. """ if self._enable_arc: super(power_UiResume, self).cleanup() else: self._chrome.close()