blob: e24158257bfb51714c16459e2b70c671e5b1230c [file] [log] [blame] [edit]
# Copyright 2017 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
import time
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib import utils
from autotest_lib.server import autotest
from autotest_lib.server.cros.faft.firmware_test import FirmwareTest
class firmware_ConsecutiveLidSwitch(FirmwareTest):
"""
Servo based consecutive lid switch test.
This test is intended to be run with many iterations to ensure that closing
DUT lid triggers suspend and opening lid wakes it up.
The iteration should be specified by the parameter -a "faft_iterations=10".
Checking the boot_id ensures DUT won't reboot unexpectedly.
"""
version = 1
def initialize(self, host, cmdline_args):
# Parse arguments from command line
dict_args = utils.args_to_dict(cmdline_args)
self.faft_iterations = int(dict_args.get('faft_iterations', 1))
super(firmware_ConsecutiveLidSwitch, self).initialize(host,
cmdline_args)
self.setup_usbkey(usbkey=False)
def cleanup(self):
# Restore the lid_open switch in case the test failed in the middle.
try:
self.servo.set('lid_open', 'yes')
except Exception as e:
logging.error("Caught exception: %s", str(e))
super(firmware_ConsecutiveLidSwitch, self).cleanup()
def run_once(self, host):
"""Runs a single iteration of the test."""
# Login as a normal user and stay there. Closing lid at the login
# screen may shut the machine down, that also verifies the lid switch
# but take more time. Once logged in, closing lid triggers suspend.
autotest_client = autotest.Autotest(host)
autotest_client.run_test("desktopui_SimpleLogin",
exit_without_logout=True)
original_boot_id = host.get_boot_id()
for i in xrange(self.faft_iterations):
logging.info('======== Running FAFT ITERATION %d/%d ========',
i + 1, self.faft_iterations)
logging.info("Close lid to suspend.")
self.servo.set('lid_open', 'no')
logging.info("Expected going to suspend. Waiting DUT offline...")
self.switcher.wait_for_client_offline()
time.sleep(self.LID_DELAY)
logging.info("Wake DUT by lid switch.")
self.servo.set('lid_open', 'yes')
logging.info("Expected going to resume. Waiting DUT online...")
self.switcher.wait_for_client()
time.sleep(self.LID_DELAY)
boot_id = host.get_boot_id()
if boot_id != original_boot_id:
raise error.TestFail('Different boot_id. Unexpected reboot.')