You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.6 KiB
133 lines
4.6 KiB
# Copyright 2016 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.cros.enterprise import enterprise_policy_base
|
|
from autotest_lib.client.cros.power import power_status
|
|
|
|
|
|
class policy_ChromeOsLockOnIdleSuspend(
|
|
enterprise_policy_base.EnterprisePolicyTest):
|
|
"""
|
|
Test effect of ChromeOsLockOnIdleSuspend policy on Chrome OS behavior.
|
|
|
|
This test verifies the behaviour and appearance of the 'Require password
|
|
to wake from sleep' check box setting in the Security: Idle Settings
|
|
section of the chrome://settings page for all valid values of the user
|
|
policy ChromeOsLockOnIdleSuspend: True, False, and Not set. The
|
|
corresponding test cases are: True_Lock, False_Unlock, NotSet_Unlock.
|
|
|
|
Note: True_Lock case is not run as part of the regression suite due to
|
|
bug crbug.com/666430. See control.true_lock for details.
|
|
|
|
"""
|
|
version = 1
|
|
|
|
POLICY_NAME = 'ChromeOsLockOnIdleSuspend'
|
|
TEST_CASES = {
|
|
'True_Lock': True,
|
|
'False_Unlock': False,
|
|
'NotSet_Unlock': None
|
|
}
|
|
IDLE_ACTION_DELAY = 5
|
|
POWER_MANAGEMENT_IDLE_SETTINGS = {
|
|
'AC': {
|
|
'Delays': {
|
|
'ScreenDim': 2000,
|
|
'ScreenOff': 3000,
|
|
'IdleWarning': 4000,
|
|
'Idle': (IDLE_ACTION_DELAY * 1000)
|
|
},
|
|
'IdleAction': 'Suspend'
|
|
},
|
|
'Battery': {
|
|
'Delays': {
|
|
'ScreenDim': 2000,
|
|
'ScreenOff': 3000,
|
|
'IdleWarning': 4000,
|
|
'Idle': (IDLE_ACTION_DELAY * 1000)
|
|
},
|
|
'IdleAction': 'Suspend'
|
|
}
|
|
}
|
|
PERCENT_CHARGE_MIN = 10
|
|
STARTUP_URLS = ['chrome://policy', 'chrome://settings']
|
|
SUPPORTING_POLICIES = {
|
|
'AllowScreenLock': True,
|
|
'LidCloseAction': 0,
|
|
'PowerManagementIdleSettings': POWER_MANAGEMENT_IDLE_SETTINGS,
|
|
'RestoreOnStartup': 4,
|
|
'RestoreOnStartupURLs': STARTUP_URLS
|
|
}
|
|
|
|
|
|
def initialize(self, **kwargs):
|
|
"""Set up local variables and ensure sufficient battery charge."""
|
|
self._power_status = power_status.get_status()
|
|
if not self._power_status.on_ac():
|
|
# Ensure that the battery has sufficient minimum charge.
|
|
self._power_status.assert_battery_state(self.PERCENT_CHARGE_MIN)
|
|
|
|
logging.info('Device power type is "%s"', self._power_type)
|
|
super(policy_ChromeOsLockOnIdleSuspend, self).initialize(**kwargs)
|
|
|
|
|
|
@property
|
|
def _power_type(self):
|
|
"""Return type of power used by DUT: AC or Battery."""
|
|
return 'AC' if self._power_status.on_ac() else 'Battery'
|
|
|
|
|
|
def _is_screen_locked(self):
|
|
"""Return true if login status indicates that screen is locked."""
|
|
def _get_screen_locked():
|
|
"""Return isScreenLocked property, if defined."""
|
|
login_status = self.cr.login_status
|
|
if (isinstance(login_status, dict) and
|
|
'isScreenLocked' in login_status):
|
|
return self.cr.login_status['isScreenLocked']
|
|
else:
|
|
logging.debug('login_status: %s', login_status)
|
|
return None
|
|
|
|
return utils.wait_for_value(_get_screen_locked, expected_value=True,
|
|
timeout_sec=self.IDLE_ACTION_DELAY)
|
|
|
|
|
|
def _test_require_password_to_wake(self, policy_value):
|
|
"""
|
|
Verify CrOS enforces ChromeOsLockOnIdleSuspend policy value.
|
|
|
|
@param policy_value: policy value for this case.
|
|
@raises: TestFail if behavior is incorrect.
|
|
|
|
"""
|
|
screen_is_locked = self._is_screen_locked()
|
|
if screen_is_locked is None:
|
|
raise error.TestError('Could not determine screen state!')
|
|
|
|
# Screen shall be locked if the policy is True, else unlocked.
|
|
if policy_value:
|
|
if not screen_is_locked:
|
|
raise error.TestFail('Screen should be locked.')
|
|
else:
|
|
if screen_is_locked:
|
|
raise error.TestFail('Screen should be unlocked.')
|
|
|
|
|
|
def run_once(self, case):
|
|
"""
|
|
Setup and run the test configured for the specified test case.
|
|
|
|
@param case: Name of the test case to run.
|
|
|
|
"""
|
|
case_value = self.TEST_CASES[case]
|
|
self.SUPPORTING_POLICIES[self.POLICY_NAME] = case_value
|
|
self.setup_case(user_policies=self.SUPPORTING_POLICIES)
|
|
self._test_require_password_to_wake(case_value)
|