Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import logging | 5 import logging |
|
bartfab (slow)
2012/07/30 08:59:45
Nit: "logging" is no longer needed by this file
| |
| 6 | 6 |
| 7 import pyauto_functional # Must come before pyauto (and thus, policy_base). | 7 import pyauto_functional # Must come before pyauto (and thus, policy_base). |
| 8 import policy_base | 8 import policy_base |
| 9 | 9 |
| 10 | 10 |
| 11 class ChromeosDevicePolicy(policy_base.PolicyTestBase): | 11 class ChromeosDevicePolicy(policy_base.PolicyTestBase): |
| 12 """Tests various ChromeOS device policies.""" | 12 """Tests various ChromeOS device policies.""" |
| 13 | 13 |
| 14 # Cache user credentials for easy lookup. The first user will become the | |
| 15 # owner. | |
|
bartfab (slow)
2012/07/30 08:59:45
Nit: This comment is actually no longer true. Now
| |
| 16 private_info = policy_base.PolicyTestBase.GetPrivateInfo() | |
| 17 credentials = (private_info['prod_enterprise_test_user'], | |
| 18 private_info['prod_enterprise_executive_user'], | |
| 19 private_info['prod_enterprise_sales_user']) | |
| 20 _usernames = [credential['username'] for credential in credentials] | |
| 21 _passwords = [credential['password'] for credential in credentials] | |
| 22 | |
| 14 def LoginAsGuest(self): | 23 def LoginAsGuest(self): |
| 15 self.assertFalse(self.GetLoginInfo()['is_logged_in'], | 24 self.assertFalse(self.GetLoginInfo()['is_logged_in'], |
| 16 msg='Expected to be logged out.') | 25 msg='Expected to be logged out.') |
| 17 policy_base.PolicyTestBase.LoginAsGuest(self) | 26 policy_base.PolicyTestBase.LoginAsGuest(self) |
| 18 self.assertTrue(self.GetLoginInfo()['is_logged_in'], | 27 self.assertTrue(self.GetLoginInfo()['is_logged_in'], |
| 19 msg='Expected to be logged in.') | 28 msg='Expected to be logged in.') |
| 20 | 29 |
| 21 def Login(self, user_index, expect_success): | 30 def Login(self, user_index, expect_success): |
| 22 self.assertFalse(self.GetLoginInfo()['is_logged_in'], | 31 self.assertFalse(self.GetLoginInfo()['is_logged_in'], |
| 23 msg='Expected to be logged out.') | 32 msg='Expected to be logged out.') |
| 24 policy_base.PolicyTestBase.Login(self, | 33 policy_base.PolicyTestBase.Login(self, |
| 25 self._usernames[user_index], | 34 self._usernames[user_index], |
| 26 self._passwords[user_index]) | 35 self._passwords[user_index]) |
| 27 if expect_success: | 36 if expect_success: |
| 28 self.assertTrue(self.GetLoginInfo()['is_logged_in'], | 37 self.assertTrue(self.GetLoginInfo()['is_logged_in'], |
| 29 msg='Expected to be logged in.') | 38 msg='Expected to be logged in.') |
| 30 else: | 39 else: |
| 31 self.assertFalse(self.GetLoginInfo()['is_logged_in'], | 40 self.assertFalse(self.GetLoginInfo()['is_logged_in'], |
| 32 msg='Expected to not be logged in.') | 41 msg='Expected to not be logged in.') |
| 33 | 42 |
| 34 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed. | |
| 35 def TryToDisableLocalStateAutoClearing(self): | |
| 36 # Try to disable automatic clearing of the local state. | |
| 37 self.TryToDisableLocalStateAutoClearingOnChromeOS() | |
| 38 self._local_state_auto_clearing = \ | |
| 39 self.IsLocalStateAutoClearingEnabledOnChromeOS() | |
| 40 if not self._local_state_auto_clearing: | |
| 41 # Prevent the inherited Logout() method from cleaning up /home/chronos | |
| 42 # as this also clears the local state. | |
| 43 self.set_clear_profile(False) | |
| 44 | |
| 45 def ExtraChromeFlags(self): | |
| 46 """Sets up Chrome to skip OOBE. | |
| 47 | |
| 48 TODO(bartfab): Ensure OOBE is still skipped when crosbug.com/20709 is fixed. | |
| 49 Disabling automatic clearing of the local state has the curious side effect | |
| 50 of removing a flag that disables OOBE. This method adds back the flag. | |
| 51 """ | |
| 52 flags = policy_base.PolicyTestBase.ExtraChromeFlags(self) | |
| 53 flags.append('--login-screen=login') | |
| 54 return flags | |
| 55 | |
| 56 def setUp(self): | |
| 57 policy_base.PolicyTestBase.setUp(self) | |
| 58 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed. | |
| 59 self._local_state_auto_clearing = \ | |
| 60 self.IsLocalStateAutoClearingEnabledOnChromeOS() | |
| 61 | |
| 62 # Cache user credentials for easy lookup. The first user will become the | |
| 63 # owner. | |
| 64 credentials = (self.GetPrivateInfo()['prod_enterprise_test_user'], | |
| 65 self.GetPrivateInfo()['prod_enterprise_executive_user'], | |
| 66 self.GetPrivateInfo()['prod_enterprise_sales_user']) | |
| 67 self._usernames = [credential['username'] for credential in credentials] | |
| 68 self._passwords = [credential['password'] for credential in credentials] | |
| 69 | |
| 70 def tearDown(self): | |
| 71 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed. | |
| 72 # Try to re-enable automatic clearing of the local state and /home/chronos. | |
| 73 if not self._local_state_auto_clearing: | |
| 74 self.TryToEnableLocalStateAutoClearingOnChromeOS() | |
| 75 self.set_clear_profile(True) | |
| 76 policy_base.PolicyTestBase.tearDown(self) | |
| 77 | |
| 78 def _CheckGuestModeAvailableInLoginWindow(self): | 43 def _CheckGuestModeAvailableInLoginWindow(self): |
| 79 return self.ExecuteJavascriptInOOBEWebUI( | 44 return self.ExecuteJavascriptInOOBEWebUI( |
| 80 """window.domAutomationController.send( | 45 """window.domAutomationController.send( |
| 81 !document.getElementById('guestSignin').hidden); | 46 !document.getElementById('guestSignin').hidden); |
| 82 """) | 47 """) |
| 83 | 48 |
| 84 def _CheckGuestModeAvailableInAccountPicker(self): | 49 def _CheckGuestModeAvailableInAccountPicker(self): |
| 85 return self.ExecuteJavascriptInOOBEWebUI( | 50 return self.ExecuteJavascriptInOOBEWebUI( |
| 86 """window.domAutomationController.send( | 51 """window.domAutomationController.send( |
| 87 !!document.getElementById('pod-row').getPodWithUsername_('')); | 52 !!document.getElementById('pod-row').getPodWithUsername_('')); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 106 self.SetDevicePolicy({'guest_mode_enabled': True}) | 71 self.SetDevicePolicy({'guest_mode_enabled': True}) |
| 107 self.assertTrue(self._CheckGuestModeAvailableInLoginWindow(), | 72 self.assertTrue(self._CheckGuestModeAvailableInLoginWindow(), |
| 108 msg='Expected guest mode to be available.') | 73 msg='Expected guest mode to be available.') |
| 109 self.LoginAsGuest() | 74 self.LoginAsGuest() |
| 110 self.Logout() | 75 self.Logout() |
| 111 | 76 |
| 112 self.SetDevicePolicy({'guest_mode_enabled': False}) | 77 self.SetDevicePolicy({'guest_mode_enabled': False}) |
| 113 self.assertFalse(self._CheckGuestModeAvailableInLoginWindow(), | 78 self.assertFalse(self._CheckGuestModeAvailableInLoginWindow(), |
| 114 msg='Expected guest mode to not be available.') | 79 msg='Expected guest mode to not be available.') |
| 115 | 80 |
| 116 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed. | |
| 117 self.TryToDisableLocalStateAutoClearing() | |
| 118 if self._local_state_auto_clearing: | |
| 119 logging.warn("""Unable to disable local state clearing. Skipping remainder | |
| 120 of test.""") | |
| 121 return | |
| 122 | |
| 123 # Log in as a regular so that the pod row contains at least one pod and the | 81 # Log in as a regular so that the pod row contains at least one pod and the |
| 124 # account picker is shown. | 82 # account picker is shown. |
| 125 self.Login(user_index=0, expect_success=True) | 83 self.Login(user_index=0, expect_success=True) |
| 126 self.Logout() | 84 self.Logout() |
| 127 | 85 |
| 128 self.SetDevicePolicy({'guest_mode_enabled': True}) | 86 self.SetDevicePolicy({'guest_mode_enabled': True}) |
| 129 self.assertTrue(self._CheckGuestModeAvailableInAccountPicker(), | 87 self.assertTrue(self._CheckGuestModeAvailableInAccountPicker(), |
| 130 msg='Expected guest mode to be available.') | 88 msg='Expected guest mode to be available.') |
| 131 self.LoginAsGuest() | 89 self.LoginAsGuest() |
| 132 self.Logout() | 90 self.Logout() |
| 133 | 91 |
| 134 self.SetDevicePolicy({'guest_mode_enabled': False}) | 92 self.SetDevicePolicy({'guest_mode_enabled': False}) |
| 135 self.assertFalse(self._CheckGuestModeAvailableInAccountPicker(), | 93 self.assertFalse(self._CheckGuestModeAvailableInAccountPicker(), |
| 136 msg='Expected guest mode to not be available.') | 94 msg='Expected guest mode to not be available.') |
| 137 | 95 |
| 138 def testShowUserNamesOnSignin(self): | 96 def testShowUserNamesOnSignin(self): |
| 139 """Checks that the account picker can be enabled/disabled.""" | 97 """Checks that the account picker can be enabled/disabled.""" |
| 140 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed. | |
| 141 self.TryToDisableLocalStateAutoClearing() | |
| 142 if self._local_state_auto_clearing: | |
| 143 logging.warn('Unable to disable local state clearing. Skipping test.') | |
| 144 return | |
| 145 | |
| 146 # Log in as a regular user so that the pod row contains at least one pod and | 98 # Log in as a regular user so that the pod row contains at least one pod and |
| 147 # the account picker can be shown. | 99 # the account picker can be shown. |
| 148 self.Login(user_index=0, expect_success=True) | 100 self.Login(user_index=0, expect_success=True) |
| 149 self.Logout() | 101 self.Logout() |
| 150 | 102 |
| 151 self.SetDevicePolicy({'show_user_names': False}) | 103 self.SetDevicePolicy({'show_user_names': False}) |
| 152 self._WaitForLoginScreenId('gaia-signin') | 104 self._WaitForLoginScreenId('gaia-signin') |
| 153 | 105 |
| 154 self.SetDevicePolicy({'show_user_names': True}) | 106 self.SetDevicePolicy({'show_user_names': True}) |
| 155 self._WaitForLoginScreenId('account-picker') | 107 self._WaitForLoginScreenId('account-picker') |
| 156 | 108 |
| 157 def testUserWhitelistAndAllowNewUsers(self): | 109 def testUserWhitelistAndAllowNewUsers(self): |
| 158 """Checks that login can be (dis)allowed by whitelist and allow-new-users. | 110 """Checks that login can be (dis)allowed by whitelist and allow-new-users. |
| 159 | 111 |
| 160 The test verifies that these two interrelated policies behave as documented | 112 The test verifies that these two interrelated policies behave as documented |
| 161 in the chrome/browser/policy/proto/chrome_device_policy.proto file. Cases | 113 in the chrome/browser/policy/proto/chrome_device_policy.proto file. Cases |
| 162 for which the current behavior is marked as "broken" are intentionally | 114 for which the current behavior is marked as "broken" are intentionally |
| 163 ommitted since the broken behavior should be fixed rather than protected by | 115 ommitted since the broken behavior should be fixed rather than protected by |
| 164 tests. | 116 tests. |
| 165 """ | 117 """ |
| 118 # TODO(nirnimesh): Remove show_user_names policy below when | |
| 119 # Login() automation can reliably handle relogin scenario. | |
| 120 # crbug.com/139166 | |
| 121 | |
| 166 # No whitelist | 122 # No whitelist |
| 167 self.SetDevicePolicy({'allow_new_users': True}) | 123 self.SetDevicePolicy({'allow_new_users': True, |
| 124 'show_user_names': False}) | |
| 168 self.Login(user_index=0, expect_success=True) | 125 self.Login(user_index=0, expect_success=True) |
| 169 self.Logout() | 126 self.Logout() |
| 170 | 127 |
| 171 # Empty whitelist | 128 # Empty whitelist |
| 172 self.SetDevicePolicy({'user_whitelist': []}) | 129 self.SetDevicePolicy({'user_whitelist': []}) |
| 173 self.Login(user_index=0, expect_success=True) | 130 self.Login(user_index=0, expect_success=True) |
| 174 self.Logout() | 131 self.Logout() |
| 175 | 132 |
| 176 self.SetDevicePolicy({'allow_new_users': True, | 133 self.SetDevicePolicy({'allow_new_users': True, |
| 177 'user_whitelist': []}) | 134 'user_whitelist': [], |
| 135 'show_user_names': False}) | |
| 178 self.Login(user_index=0, expect_success=True) | 136 self.Login(user_index=0, expect_success=True) |
| 179 self.Logout() | 137 self.Logout() |
| 180 | 138 |
| 181 # Populated whitelist | 139 # Populated whitelist |
| 182 self.SetDevicePolicy({'user_whitelist': [self._usernames[0]]}) | 140 self.SetDevicePolicy({'user_whitelist': [self._usernames[0]], |
| 141 'show_user_names': False}) | |
| 183 self.Login(user_index=0, expect_success=True) | 142 self.Login(user_index=0, expect_success=True) |
| 184 self.Logout() | 143 self.Logout() |
| 185 self.Login(user_index=1, expect_success=False) | 144 self.Login(user_index=1, expect_success=False) |
| 186 | 145 |
| 187 self.SetDevicePolicy({'allow_new_users': True, | 146 self.SetDevicePolicy({'allow_new_users': True, |
| 188 'user_whitelist': [self._usernames[0]]}) | 147 'user_whitelist': [self._usernames[0]], |
| 148 'show_user_names': False}) | |
| 189 self.Login(user_index=0, expect_success=True) | 149 self.Login(user_index=0, expect_success=True) |
| 190 self.Logout() | 150 self.Logout() |
| 191 self.Login(user_index=1, expect_success=True) | 151 self.Login(user_index=1, expect_success=True) |
| 192 self.Logout() | 152 self.Logout() |
| 193 | 153 |
| 194 # New users not allowed, populated whitelist | 154 # New users not allowed, populated whitelist |
| 195 self.SetDevicePolicy({'allow_new_users': False, | 155 self.SetDevicePolicy({'allow_new_users': False, |
| 196 'user_whitelist': [self._usernames[0]]}) | 156 'user_whitelist': [self._usernames[0]], |
| 157 'show_user_names': False}) | |
| 197 self.Login(user_index=0, expect_success=True) | 158 self.Login(user_index=0, expect_success=True) |
| 198 self.Logout() | 159 self.Logout() |
| 199 self.Login(user_index=1, expect_success=False) | 160 self.Login(user_index=1, expect_success=False) |
| 200 | 161 |
| 201 def testUserWhitelistInAccountPicker(self): | 162 def testUserWhitelistInAccountPicker(self): |
| 202 """Checks that setting a whitelist removes non-whitelisted user pods.""" | 163 """Checks that setting a whitelist removes non-whitelisted user pods.""" |
| 203 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed. | |
| 204 self.TryToDisableLocalStateAutoClearing() | |
| 205 if self._local_state_auto_clearing: | |
| 206 logging.warn('Unable to disable local state clearing. Skipping test.') | |
| 207 return | |
| 208 | |
| 209 # Disable the account picker so that the login form is shown and the Login() | 164 # Disable the account picker so that the login form is shown and the Login() |
| 210 # automation call can be used. | 165 # automation call can be used. |
| 211 self.PrepareToWaitForLoginFormReload() | 166 self.PrepareToWaitForLoginFormReload() |
| 212 self.SetDevicePolicy({'show_user_names': False}) | 167 self.SetDevicePolicy({'show_user_names': False}) |
| 213 self.WaitForLoginFormReload() | 168 self.WaitForLoginFormReload() |
| 214 | 169 |
| 215 # Log in to populate the list of existing users. | 170 # Log in to populate the list of existing users. |
| 216 self.Login(user_index=0, expect_success=True) | 171 self.Login(user_index=0, expect_success=True) |
| 217 self.Logout() | 172 self.Logout() |
| 218 self.Login(user_index=1, expect_success=True) | 173 self.Login(user_index=1, expect_success=True) |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 231 self._WaitForPodVisibility(username=self._usernames[0], visible=False) | 186 self._WaitForPodVisibility(username=self._usernames[0], visible=False) |
| 232 self._WaitForPodVisibility(username=self._usernames[1], visible=True) | 187 self._WaitForPodVisibility(username=self._usernames[1], visible=True) |
| 233 | 188 |
| 234 self.SetDevicePolicy({'show_user_names': True}) | 189 self.SetDevicePolicy({'show_user_names': True}) |
| 235 self._WaitForPodVisibility(username=self._usernames[0], visible=True) | 190 self._WaitForPodVisibility(username=self._usernames[0], visible=True) |
| 236 self._WaitForPodVisibility(username=self._usernames[1], visible=True) | 191 self._WaitForPodVisibility(username=self._usernames[1], visible=True) |
| 237 | 192 |
| 238 | 193 |
| 239 if __name__ == '__main__': | 194 if __name__ == '__main__': |
| 240 pyauto_functional.Main() | 195 pyauto_functional.Main() |
| OLD | NEW |