| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2012 The Chromium 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 pyauto_functional # Must come before pyauto (and thus, policy_base). | |
| 6 import policy_base | |
| 7 | |
| 8 | |
| 9 class ChromeosDevicePolicy(policy_base.PolicyTestBase): | |
| 10 """Tests various ChromeOS device policies.""" | |
| 11 | |
| 12 # Cache user credentials for easy lookup. | |
| 13 private_info = policy_base.PolicyTestBase.GetPrivateInfo() | |
| 14 credentials = (private_info['prod_enterprise_test_user'], | |
| 15 private_info['prod_enterprise_executive_user'], | |
| 16 private_info['prod_enterprise_sales_user']) | |
| 17 _usernames = [credential['username'] for credential in credentials] | |
| 18 _passwords = [credential['password'] for credential in credentials] | |
| 19 | |
| 20 def LoginAsGuest(self): | |
| 21 self.assertFalse(self.GetLoginInfo()['is_logged_in'], | |
| 22 msg='Expected to be logged out.') | |
| 23 policy_base.PolicyTestBase.LoginAsGuest(self) | |
| 24 self.assertTrue(self.GetLoginInfo()['is_logged_in'], | |
| 25 msg='Expected to be logged in.') | |
| 26 | |
| 27 def _Login(self, user_index, expect_success): | |
| 28 self.assertFalse(self.GetLoginInfo()['is_logged_in'], | |
| 29 msg='Expected to be logged out.') | |
| 30 policy_base.PolicyTestBase.Login(self, | |
| 31 self._usernames[user_index], | |
| 32 self._passwords[user_index]) | |
| 33 if expect_success: | |
| 34 self.assertTrue(self.GetLoginInfo()['is_logged_in'], | |
| 35 msg='Expected to be logged in.') | |
| 36 else: | |
| 37 self.assertFalse(self.GetLoginInfo()['is_logged_in'], | |
| 38 msg='Expected to not be logged in.') | |
| 39 | |
| 40 def _CheckGuestModeAvailableInLoginWindow(self): | |
| 41 return self.ExecuteJavascriptInOOBEWebUI( | |
| 42 """window.domAutomationController.send( | |
| 43 !document.getElementById('guestSignin').hidden); | |
| 44 """) | |
| 45 | |
| 46 def _CheckGuestModeAvailableInAccountPicker(self): | |
| 47 return self.ExecuteJavascriptInOOBEWebUI( | |
| 48 """window.domAutomationController.send( | |
| 49 !!document.getElementById('pod-row').getPodWithUsername_('')); | |
| 50 """) | |
| 51 | |
| 52 def _CheckPodVisible(self, username): | |
| 53 javascript = """ | |
| 54 var pod = document.getElementById('pod-row').getPodWithUsername_('%s'); | |
| 55 window.domAutomationController.send(!!pod && !pod.hidden); | |
| 56 """ | |
| 57 return self.ExecuteJavascriptInOOBEWebUI(javascript % username) | |
| 58 | |
| 59 def _WaitForPodVisibility(self, username, visible): | |
| 60 self.assertTrue( | |
| 61 self.WaitUntil(function=lambda: self._CheckPodVisible(username), | |
| 62 expect_retval=visible), | |
| 63 msg='Expected pod for user %s to %s be visible.' % | |
| 64 (username, '' if visible else 'not')) | |
| 65 | |
| 66 def testGuestModeEnabled(self): | |
| 67 """Checks that guest mode login can be enabled/disabled.""" | |
| 68 self.SetDevicePolicy({'guest_mode_enabled': True}) | |
| 69 self.assertTrue(self._CheckGuestModeAvailableInLoginWindow(), | |
| 70 msg='Expected guest mode to be available.') | |
| 71 self.LoginAsGuest() | |
| 72 self.Logout() | |
| 73 | |
| 74 self.SetDevicePolicy({'guest_mode_enabled': False}) | |
| 75 self.assertFalse(self._CheckGuestModeAvailableInLoginWindow(), | |
| 76 msg='Expected guest mode to not be available.') | |
| 77 | |
| 78 # Log in as a regular so that the pod row contains at least one pod and the | |
| 79 # account picker is shown. | |
| 80 self._Login(user_index=0, expect_success=True) | |
| 81 self.Logout() | |
| 82 | |
| 83 self.SetDevicePolicy({'guest_mode_enabled': True}) | |
| 84 self.assertTrue(self._CheckGuestModeAvailableInAccountPicker(), | |
| 85 msg='Expected guest mode to be available.') | |
| 86 self.LoginAsGuest() | |
| 87 self.Logout() | |
| 88 | |
| 89 self.SetDevicePolicy({'guest_mode_enabled': False}) | |
| 90 self.assertFalse(self._CheckGuestModeAvailableInAccountPicker(), | |
| 91 msg='Expected guest mode to not be available.') | |
| 92 | |
| 93 def testShowUserNamesOnSignin(self): | |
| 94 """Checks that the account picker can be enabled/disabled.""" | |
| 95 # Log in as a regular user so that the pod row contains at least one pod and | |
| 96 # the account picker can be shown. | |
| 97 self._Login(user_index=0, expect_success=True) | |
| 98 self.Logout() | |
| 99 | |
| 100 self.SetDevicePolicy({'show_user_names': False}) | |
| 101 self._WaitForLoginScreenId('gaia-signin') | |
| 102 | |
| 103 self.SetDevicePolicy({'show_user_names': True}) | |
| 104 self._WaitForLoginScreenId('account-picker') | |
| 105 | |
| 106 def testUserWhitelistAndAllowNewUsers(self): | |
| 107 """Checks that login can be (dis)allowed by whitelist and allow-new-users. | |
| 108 | |
| 109 The test verifies that these two interrelated policies behave as documented | |
| 110 in the chrome/browser/policy/proto/chrome_device_policy.proto file. Cases | |
| 111 for which the current behavior is marked as "broken" are intentionally | |
| 112 ommitted since the broken behavior should be fixed rather than protected by | |
| 113 tests. | |
| 114 """ | |
| 115 # No whitelist | |
| 116 self.SetDevicePolicy({'allow_new_users': True}) | |
| 117 self._Login(user_index=0, expect_success=True) | |
| 118 self.Logout() | |
| 119 | |
| 120 # Empty whitelist | |
| 121 self.SetDevicePolicy({'user_whitelist': []}) | |
| 122 self._Login(user_index=0, expect_success=True) | |
| 123 self.Logout() | |
| 124 | |
| 125 self.SetDevicePolicy({'allow_new_users': True, | |
| 126 'user_whitelist': []}) | |
| 127 self._Login(user_index=0, expect_success=True) | |
| 128 self.Logout() | |
| 129 | |
| 130 # Populated whitelist | |
| 131 self.SetDevicePolicy({'user_whitelist': [self._usernames[0]]}) | |
| 132 self._Login(user_index=0, expect_success=True) | |
| 133 self.Logout() | |
| 134 self._Login(user_index=1, expect_success=False) | |
| 135 | |
| 136 self.SetDevicePolicy({'allow_new_users': True, | |
| 137 'user_whitelist': [self._usernames[0]]}) | |
| 138 self._Login(user_index=0, expect_success=True) | |
| 139 self.Logout() | |
| 140 self._Login(user_index=1, expect_success=True) | |
| 141 self.Logout() | |
| 142 | |
| 143 # New users not allowed, populated whitelist | |
| 144 self.SetDevicePolicy({'allow_new_users': False, | |
| 145 'user_whitelist': [self._usernames[0]]}) | |
| 146 self._Login(user_index=0, expect_success=True) | |
| 147 self.Logout() | |
| 148 self._Login(user_index=1, expect_success=False) | |
| 149 | |
| 150 def testUserWhitelistInAccountPicker(self): | |
| 151 """Checks that setting a whitelist removes non-whitelisted user pods.""" | |
| 152 # Disable the account picker so that the login form is shown and the Login() | |
| 153 # automation call can be used. | |
| 154 self.PrepareToWaitForLoginFormReload() | |
| 155 self.SetDevicePolicy({'show_user_names': False}) | |
| 156 self.WaitForLoginFormReload() | |
| 157 | |
| 158 # Log in to populate the list of existing users. | |
| 159 self._Login(user_index=0, expect_success=True) | |
| 160 self.Logout() | |
| 161 self._Login(user_index=1, expect_success=True) | |
| 162 self.Logout() | |
| 163 | |
| 164 # Enable the account picker. | |
| 165 self.SetDevicePolicy({'show_user_names': True}) | |
| 166 self._WaitForLoginScreenId('account-picker') | |
| 167 | |
| 168 # Check pod visibility with and without a whitelist. | |
| 169 self._WaitForPodVisibility(username=self._usernames[0], visible=True) | |
| 170 self._WaitForPodVisibility(username=self._usernames[1], visible=True) | |
| 171 | |
| 172 self.SetDevicePolicy({'show_user_names': True, | |
| 173 'user_whitelist': [self._usernames[1]]}) | |
| 174 self._WaitForPodVisibility(username=self._usernames[0], visible=False) | |
| 175 self._WaitForPodVisibility(username=self._usernames[1], visible=True) | |
| 176 | |
| 177 self.SetDevicePolicy({'show_user_names': True}) | |
| 178 self._WaitForPodVisibility(username=self._usernames[0], visible=True) | |
| 179 self._WaitForPodVisibility(username=self._usernames[1], visible=True) | |
| 180 | |
| 181 _timezones = ['America/Barbados', 'Europe/Helsinki'] | |
| 182 | |
| 183 def testTimezoneSettingWithoutPolicy(self): | |
| 184 """Without timezone policy, timezone changes by user are persistent.""" | |
| 185 self.SetDevicePolicy(refresh=False) | |
| 186 | |
| 187 for timezone in self._timezones: | |
| 188 self._Login(user_index=1, expect_success=True) | |
| 189 self.SetTimezone(timezone) | |
| 190 self.assertEqual(timezone, self.GetTimeInfo()['timezone']) | |
| 191 | |
| 192 self.Logout() | |
| 193 self.assertEqual(timezone, self.GetTimeInfo()['timezone']) | |
| 194 | |
| 195 | |
| 196 def testTimezoneSettingWithPolicy(self): | |
| 197 """With timezone policy, timezone changes by user are reset on logout.""" | |
| 198 self.SetDevicePolicy({'timezone': self._timezones[0]}, refresh=True) | |
| 199 | |
| 200 # Timezones are set on startup, i.e. everytime when loading the login | |
| 201 # screen. Something like a browser restart may work, too. | |
| 202 self._Login(user_index=1, expect_success=True) | |
| 203 self.Logout() | |
| 204 | |
| 205 self.assertEqual(self._timezones[0], self.GetTimeInfo()['timezone']) | |
| 206 | |
| 207 self._Login(user_index=1, expect_success=True) | |
| 208 self.SetTimezone(self._timezones[1]) | |
| 209 self.assertEqual(self._timezones[1], self.GetTimeInfo()['timezone']) | |
| 210 | |
| 211 self.Logout() | |
| 212 self.assertEqual(self._timezones[0], self.GetTimeInfo()['timezone']) | |
| 213 | |
| 214 | |
| 215 if __name__ == '__main__': | |
| 216 pyauto_functional.Main() | |
| OLD | NEW |