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 |
| 6 import os | 6 import os |
| 7 import sys | 7 import sys |
| 8 | 8 |
| 9 import pyauto_functional # Must come before pyauto (and thus, policy_base). | 9 import pyauto_functional # Must come before pyauto (and thus, policy_base). |
| 10 import policy_base | 10 import policy_base |
| 11 | 11 |
| 12 sys.path.append('/usr/local') # Required to import autotest libs. | 12 sys.path.append('/usr/local') # Required to import autotest libs. |
| 13 from autotest.cros import constants | 13 from autotest.cros import constants |
| 14 from autotest.cros import cryptohome | 14 from autotest.cros import cryptohome |
| 15 | 15 |
| 16 | 16 |
| 17 class ChromeosEphemeral(policy_base.PolicyTestBase): | 17 class ChromeosEphemeral(policy_base.PolicyTestBase): |
| 18 """Tests a policy that makes users ephemeral. | 18 """Tests a policy that makes users ephemeral. |
| 19 | 19 |
| 20 When this policy is enabled, no persistent information in the form of | 20 When this policy is enabled, no persistent information in the form of |
| 21 cryptohome shadow directories or local state prefs should be created for | 21 cryptohome shadow directories or local state prefs should be created for |
| 22 users. Additionally, any persistent information previously accumulated should | 22 users. Additionally, any persistent information previously accumulated should |
| 23 be cleared when a user first logs in after enabling the policy.""" | 23 be cleared when a user first logs in after enabling the policy.""" |
| 24 | 24 |
| 25 _usernames = ('alice@example.com', 'bob@example.com') | |
| 26 | |
| 25 def _SetEphemeralUsersEnabled(self, enabled): | 27 def _SetEphemeralUsersEnabled(self, enabled): |
| 26 """Sets the ephemeral users device policy. | 28 """Sets the ephemeral users device policy. |
| 27 | 29 |
| 28 TODO(bartfab): Ensure Login still works after crosbug.com/20709 is fixed. | |
| 29 The show_user_names policy is set to False to ensure that even if the local | 30 The show_user_names policy is set to False to ensure that even if the local |
| 30 state is not being automatically cleared, the login screen never shows user | 31 state is not being automatically cleared, the login screen never shows user |
| 31 pods. This is required by the Login browser automation call. | 32 pods. This is required by the Login browser automation call. |
| 32 """ | 33 """ |
| 33 self.SetDevicePolicy({'ephemeral_users_enabled': enabled, | 34 self.SetDevicePolicy({'ephemeral_users_enabled': enabled, |
| 34 'show_user_names': False}) | 35 'show_user_names': False}) |
| 35 | 36 |
| 36 def _DoesVaultDirectoryExist(self, user_index): | 37 def _DoesVaultDirectoryExist(self, user_index): |
| 37 user_hash = cryptohome.get_user_hash(self._usernames[user_index]) | 38 user_hash = cryptohome.get_user_hash(self._usernames[user_index]) |
| 38 return os.path.exists(os.path.join(constants.SHADOW_ROOT, user_hash)) | 39 return os.path.exists(os.path.join(constants.SHADOW_ROOT, user_hash)) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 75 user=self._usernames[user_index], | 76 user=self._usernames[user_index], |
| 76 allow_fail=True), | 77 allow_fail=True), |
| 77 msg='Expected vault backed by %s to be mounted.' % | 78 msg='Expected vault backed by %s to be mounted.' % |
| 78 'tmpfs' if ephemeral else 'shadow directory') | 79 'tmpfs' if ephemeral else 'shadow directory') |
| 79 | 80 |
| 80 def _AssertNoVaultMounted(self): | 81 def _AssertNoVaultMounted(self): |
| 81 self.assertFalse(cryptohome.is_vault_mounted(allow_fail=True), | 82 self.assertFalse(cryptohome.is_vault_mounted(allow_fail=True), |
| 82 msg='Did not expect any vault to be mounted.') | 83 msg='Did not expect any vault to be mounted.') |
| 83 | 84 |
| 84 def Login(self, user_index): | 85 def Login(self, user_index): |
| 86 """Convenience method to login to the usr at the given index.""" | |
| 85 self.assertFalse(self.GetLoginInfo()['is_logged_in'], | 87 self.assertFalse(self.GetLoginInfo()['is_logged_in'], |
| 86 msg='Expected to be logged out.') | 88 msg='Expected to be logged out.') |
| 87 policy_base.PolicyTestBase.Login(self, | 89 policy_base.PolicyTestBase.Login(self, |
| 88 self._usernames[user_index], | 90 self._usernames[user_index], |
| 89 'dummy_password') | 91 'dummy_password') |
| 90 self.assertTrue(self.GetLoginInfo()['is_logged_in'], | 92 self.assertTrue(self.GetLoginInfo()['is_logged_in'], |
| 91 msg='Expected to be logged in.') | 93 msg='Expected to be logged in.') |
| 92 | 94 |
| 93 def ExtraChromeFlags(self): | |
| 94 """Sets up Chrome to skip OOBE. | |
| 95 | |
| 96 TODO(bartfab): Ensure OOBE is still skipped when crosbug.com/20709 is fixed. | |
| 97 Disabling automatic clearing of the local state has the curious side effect | |
| 98 of removing a flag that disables OOBE. This method adds back the flag. | |
| 99 """ | |
| 100 flags = policy_base.PolicyTestBase.ExtraChromeFlags(self) | |
| 101 flags.append('--login-screen=login') | |
| 102 return flags | |
| 103 | |
| 104 def setUp(self): | |
| 105 policy_base.PolicyTestBase.setUp(self) | |
| 106 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed. | |
| 107 # Try to disable automatic clearing of the local state. | |
| 108 self.TryToDisableLocalStateAutoClearingOnChromeOS() | |
| 109 self._local_state_auto_clearing = \ | |
| 110 self.IsLocalStateAutoClearingEnabledOnChromeOS() | |
| 111 if not self._local_state_auto_clearing: | |
| 112 # Prevent the inherited Logout() method from cleaning up /home/chronos | |
| 113 # as this also clears the local state. | |
| 114 self.set_clear_profile(False) | |
|
bartfab (slow)
2012/07/27 08:11:22
Is this no longer needed either with the recent ch
Nirnimesh
2012/07/27 08:24:21
Logout() does not clear user profile (/home/chrono
bartfab (slow)
2012/07/27 08:28:39
There is a set_clear_profile()/get_clear_profile()
| |
| 115 | |
| 116 self._usernames = ('alice@example.com', 'bob@example.com') | |
| 117 | |
| 118 def tearDown(self): | |
| 119 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed. | |
| 120 # Try to re-enable automatic clearing of the local state and /home/chronos. | |
| 121 if not self._local_state_auto_clearing: | |
| 122 self.TryToEnableLocalStateAutoClearingOnChromeOS() | |
| 123 self.set_clear_profile(True) | |
| 124 policy_base.PolicyTestBase.tearDown(self) | |
| 125 | |
| 126 def testEnablingBeforeSession(self): | 95 def testEnablingBeforeSession(self): |
| 127 """Checks that a new session can be made ephemeral.""" | 96 """Checks that a new session can be made ephemeral.""" |
| 128 self.PrepareToWaitForLoginFormReload() | 97 self.PrepareToWaitForLoginFormReload() |
| 129 self._SetEphemeralUsersEnabled(True) | 98 self._SetEphemeralUsersEnabled(True) |
| 130 self.WaitForLoginFormReload() | 99 self.WaitForLoginFormReload() |
| 131 | 100 |
| 132 self.Login(user_index=0) | 101 self.Login(user_index=0) |
| 133 self._AssertLocalStatePrefsEmpty() | 102 self._AssertLocalStatePrefsEmpty() |
| 134 self._AssertVaultMounted(user_index=0, ephemeral=True) | 103 self._AssertVaultMounted(user_index=0, ephemeral=True) |
| 135 self.Logout() | 104 self.Logout() |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 156 self._AssertNoVaultMounted() | 125 self._AssertNoVaultMounted() |
| 157 self._AssertVaultDirectoryDoesNotExist(user_index=0) | 126 self._AssertVaultDirectoryDoesNotExist(user_index=0) |
| 158 | 127 |
| 159 def testDisablingDuringSession(self): | 128 def testDisablingDuringSession(self): |
| 160 """Checks that an existing ephemeral session is not made non-ephemeral.""" | 129 """Checks that an existing ephemeral session is not made non-ephemeral.""" |
| 161 self.PrepareToWaitForLoginFormReload() | 130 self.PrepareToWaitForLoginFormReload() |
| 162 self._SetEphemeralUsersEnabled(True) | 131 self._SetEphemeralUsersEnabled(True) |
| 163 self.WaitForLoginFormReload() | 132 self.WaitForLoginFormReload() |
| 164 | 133 |
| 165 self.Login(user_index=0) | 134 self.Login(user_index=0) |
| 166 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed. | |
| 167 if self._local_state_auto_clearing: | |
| 168 self._AssertLocalStatePrefsEmpty() | |
| 169 self._AssertVaultMounted(user_index=0, ephemeral=True) | 135 self._AssertVaultMounted(user_index=0, ephemeral=True) |
| 170 self._SetEphemeralUsersEnabled(False) | 136 self._SetEphemeralUsersEnabled(False) |
| 171 self._AssertVaultMounted(user_index=0, ephemeral=True) | 137 self._AssertVaultMounted(user_index=0, ephemeral=True) |
| 172 self.Logout() | 138 self.Logout() |
| 173 | 139 |
| 174 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed. | 140 self._AssertLocalStatePrefsEmpty() |
| 175 if not self._local_state_auto_clearing: | |
| 176 self._AssertLocalStatePrefsEmpty() | |
| 177 self._AssertNoVaultMounted() | 141 self._AssertNoVaultMounted() |
| 178 self._AssertVaultDirectoryDoesNotExist(user_index=0) | 142 self._AssertVaultDirectoryDoesNotExist(user_index=0) |
| 179 | 143 |
| 180 def testEnablingEphemeralUsersCleansUp(self): | 144 def testEnablingEphemeralUsersCleansUp(self): |
| 181 """Checks that persistent information is cleared.""" | 145 """Checks that persistent information is cleared.""" |
| 182 self.PrepareToWaitForLoginFormReload() | 146 self.PrepareToWaitForLoginFormReload() |
| 183 self._SetEphemeralUsersEnabled(False) | 147 self._SetEphemeralUsersEnabled(False) |
| 184 self.WaitForLoginFormReload() | 148 self.WaitForLoginFormReload() |
| 185 | 149 |
| 186 self.Login(user_index=0) | 150 self.Login(user_index=0) |
| 187 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed. | |
| 188 if self._local_state_auto_clearing: | |
| 189 self._AssertLocalStatePrefsSet(user_indexes=[0]) | |
| 190 self.Logout() | 151 self.Logout() |
| 191 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed. | 152 self._AssertLocalStatePrefsSet(user_indexes=[0]) |
| 192 if not self._local_state_auto_clearing: | |
| 193 self._AssertLocalStatePrefsSet(user_indexes=[0]) | |
| 194 | 153 |
| 195 self.Login(user_index=1) | 154 self.Login(user_index=1) |
| 196 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed. | |
| 197 if self._local_state_auto_clearing: | |
| 198 self._AssertLocalStatePrefsSet(user_indexes=[1]) | |
| 199 self.Logout() | 155 self.Logout() |
| 200 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed. | 156 self._AssertLocalStatePrefsSet(user_indexes=[0, 1]) |
| 201 if not self._local_state_auto_clearing: | |
| 202 self._AssertLocalStatePrefsSet(user_indexes=[0, 1]) | |
| 203 | 157 |
| 204 self._AssertVaultDirectoryExists(user_index=0) | 158 self._AssertVaultDirectoryExists(user_index=0) |
| 205 self._AssertVaultDirectoryExists(user_index=1) | 159 self._AssertVaultDirectoryExists(user_index=1) |
| 206 | 160 |
| 207 self._SetEphemeralUsersEnabled(True) | 161 self._SetEphemeralUsersEnabled(True) |
| 208 | 162 |
| 209 self.Login(user_index=0) | 163 self.Login(user_index=0) |
| 210 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed. | |
| 211 if self._local_state_auto_clearing: | |
| 212 self._AssertLocalStatePrefsEmpty() | |
| 213 self._AssertVaultMounted(user_index=0, ephemeral=True) | 164 self._AssertVaultMounted(user_index=0, ephemeral=True) |
| 214 self.Logout() | 165 self.Logout() |
| 215 | 166 |
| 216 self._AssertVaultDirectoryDoesNotExist(user_index=0) | 167 self._AssertVaultDirectoryDoesNotExist(user_index=0) |
| 217 self._AssertVaultDirectoryDoesNotExist(user_index=1) | 168 self._AssertVaultDirectoryDoesNotExist(user_index=1) |
| 218 | 169 |
| 219 | 170 |
| 220 if __name__ == '__main__': | 171 if __name__ == '__main__': |
| 221 pyauto_functional.Main() | 172 pyauto_functional.Main() |
| OLD | NEW |