76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
# 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.')
|