133 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
| # 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)
 |