1 # Copyright 2014 The Chromium OS Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import json 6 import logging 7 8 from autotest_lib.client.bin import test 9 from autotest_lib.client.bin import utils 10 from autotest_lib.client.common_lib import error 11 from autotest_lib.client.common_lib.cros import chrome 12 from autotest_lib.client.common_lib.cros import policy 13 from autotest_lib.client.cros import cryptohome 14 from autotest_lib.client.cros.enterprise import enterprise_fake_dmserver 15 from autotest_lib.client.cros.power import power_status 16 17 18 class enterprise_PowerManagement(test.test): 19 """Verify the power management policy setting.""" 20 version = 1 21 22 def initialize(self, percent_initial_charge_min=10): 23 """ 24 Setup local variables and init the fake DM server 25 26 @param percent_initial_charge_min: Minimum percentage of battery 27 required for the test to run. 28 29 """ 30 # Username and password for the fake dm server can be anything 31 # they are not used to authenticate against GAIA. 32 self.username = 'fake-user (at] managedchrome.com' 33 self.password = 'fakepassword' 34 35 self._power_status = power_status.get_status() 36 if not self._power_status.on_ac(): 37 # Ensure that the battery has some charge. 38 self._power_status.assert_battery_state(percent_initial_charge_min) 39 logging.info("Device power type is %s", self._power_type) 40 41 # Note: FakeDMServer requires policy protos to be installed. 42 policy.install_protobufs(self.autodir, self.job) 43 self.fake_dm_server = enterprise_fake_dmserver.FakeDMServer() 44 self.fake_dm_server.start(self.tmpdir, self.debugdir) 45 46 def cleanup(self): 47 """Close out anything used by this test.""" 48 self.fake_dm_server.stop() 49 50 @property 51 def _power_type(self): 52 """ 53 Returns appropriate power type based on whether DUT is on AC or not. 54 55 @returns string of power type. 56 57 """ 58 if self._power_status.on_ac(): 59 return "AC" 60 61 return "Battery" 62 63 def _setup_lock_policy(self): 64 """Setup policy to lock screen in 10 seconds of idle time.""" 65 self._screen_lock_delay = 10 66 screen_lock_policy = '{ "%s": %d }' % (self._power_type, 67 self._screen_lock_delay * 1000) 68 policy_blob = """{ 69 "google/chromeos/user": { 70 "mandatory": { 71 "ScreenLockDelays": %s 72 } 73 }, 74 "managed_users": [ "*" ], 75 "policy_user": "%s", 76 "current_key_index": 0, 77 "invalidation_source": 16, 78 "invalidation_name": "test_policy" 79 }""" % (json.dumps(screen_lock_policy), self.username) 80 81 self.fake_dm_server.setup_policy(policy_blob) 82 83 def _setup_logout_policy(self): 84 """Setup policy to logout in 10 seconds of idle time.""" 85 self._screen_logout_delay = 10 86 idle_settings_policy = '''{ 87 "%s": { 88 "Delays": { 89 "ScreenDim": 2000, 90 "ScreenOff": 3000, 91 "IdleWarning": 4000, 92 "Idle": %d 93 }, 94 "IdleAction": "Logout" 95 } 96 }''' % (self._power_type, self._screen_logout_delay * 1000) 97 98 policy_blob = """{ 99 "google/chromeos/user": { 100 "mandatory": { 101 "PowerManagementIdleSettings": %s 102 } 103 }, 104 "managed_users": [ "*" ], 105 "policy_user": "%s", 106 "current_key_index": 0, 107 "invalidation_source": 16, 108 "invalidation_name": "test_policy" 109 }""" % (json.dumps(idle_settings_policy), self.username) 110 111 self.fake_dm_server.setup_policy(policy_blob) 112 113 def _create_chrome(self): 114 """ 115 Create an instance of chrome. 116 117 @returns a telemetry browser instance. 118 119 """ 120 extra_browser_args = '--device-management-url=%s ' % ( 121 self.fake_dm_server.server_url) 122 return chrome.Chrome( 123 extra_browser_args=extra_browser_args, 124 autotest_ext=True, 125 disable_gaia_services=False, 126 gaia_login=False, 127 username=self.username, 128 password=self.password, 129 expect_policy_fetch=True) 130 131 def run_once(self): 132 """Run the power management policy tests.""" 133 self._setup_lock_policy() 134 with self._create_chrome() as cr: 135 utils.poll_for_condition( 136 lambda: cr.login_status['isScreenLocked'], 137 exception=error.TestFail('User is not locked'), 138 timeout=self._screen_lock_delay * 2, 139 sleep_interval=1, 140 desc='Expects to find Chrome locked.') 141 142 self._setup_logout_policy() 143 with self._create_chrome() as cr: 144 utils.poll_for_condition( 145 lambda: not cryptohome.is_vault_mounted(user=self.username, 146 allow_fail=True), 147 exception=error.TestFail('User is not logged out'), 148 timeout=self._screen_logout_delay*2, 149 sleep_interval=1, 150 desc='Expects to find user logged out.') 151