Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: chrome/test/functional/chromeos_ephemeral.py

Issue 9960074: Add a test for the "ephemeral_users_enabled" device policy (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix reversed logic in debug output. Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/test/functional/PYAUTO_TESTS ('k') | chrome/test/pyautolib/chromeos/suid_actions.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright (c) 2012 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 logging
6 import os
7 import sys
8
9 import pyauto_functional # Must come before pyauto (and thus, policy_base).
10 import policy_base
11
12 sys.path.append('/usr/local') # Required to import autotest libs.
13 from autotest.cros import constants
14 from autotest.cros import cryptohome
15
16
17 class ChromeosEphemeral(policy_base.PolicyTestBase):
18 """Tests a policy that makes all users except the owner ephemeral.
19
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
22 users. Additionally, any persistent information previously accumulated should
23 be cleared when a user first logs in after enabling the policy."""
24
25 def _SetDevicePolicyAndOwner(self, ephemeral_users_enabled, owner_index):
26 """Sets device policy and owner.
27
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 state is not being automatically cleared, the login screen never shows user
31 pods. This is required by the Login browser automation call.
32 """
33 self.SetDevicePolicy(
34 device_policy={'ephemeral_users_enabled': ephemeral_users_enabled,
35 'show_user_names': False},
36 owner=self._usernames[owner_index])
37
38 def _DoesVaultDirectoryExist(self, user_index):
39 user_hash = cryptohome.get_user_hash(self._usernames[user_index])
40 return os.path.exists(os.path.join('/home/.shadow', user_hash))
Nirnimesh 2012/04/12 18:58:41 use constants.SHADOW_ROOT?
bartfab (slow) 2012/04/13 07:54:29 Done.
41
42 def _AssertLocalStatePrefsSet(self, user_indexes):
43 expected = sorted([self._usernames[index] for index in user_indexes])
44 # The OAuthTokenStatus pref is populated asynchronously. Checking whether it
45 # is set would lead to an ugly race.
46 for pref in ['LoggedInUsers', 'UserImages', 'UserDisplayEmail', ]:
47 actual = sorted(self.GetLocalStatePrefsInfo().Prefs(pref))
48 self.assertEqual(actual, expected,
49 msg='Expected to find prefs in local state for users.')
50
51 def _AssertLocalStatePrefsEmpty(self):
52 for pref in ['LoggedInUsers',
53 'UserImages',
54 'UserDisplayEmail',
55 'OAuthTokenStatus']:
56 self.assertFalse(self.GetLocalStatePrefsInfo().Prefs(pref),
57 msg='Expected to not find prefs in local state for any user.')
58
59 def _AssertVaultDirectoryExists(self, user_index):
60 self.assertTrue(self._DoesVaultDirectoryExist(user_index=user_index),
61 msg='Expected vault shadow directory to exist.')
62
63 def _AssertVaultDirectoryDoesNotExist(self, user_index):
64 self.assertFalse(self._DoesVaultDirectoryExist(user_index=user_index),
65 msg='Expected vault shadow directory to not exist.')
66
67 def _AssertVaultMounted(self, user_index, ephemeral):
68 if ephemeral:
69 device_regex = constants.CRYPTOHOME_DEV_REGEX_REGULAR_USER_EPHEMERAL
70 fs_regex = constants.CRYPTOHOME_FS_REGEX_TMPFS
71 else:
72 device_regex = constants.CRYPTOHOME_DEV_REGEX_REGULAR_USER_SHADOW
73 fs_regex = constants.CRYPTOHOME_FS_REGEX_ANY
74 self.assertTrue(
75 cryptohome.is_vault_mounted(device_regex=device_regex,
76 fs_regex=fs_regex,
77 user=self._usernames[user_index],
78 allow_fail=True),
79 msg='Expected vault backed by %s to be mounted.' %
80 'tmpfs' if ephemeral else 'shadow directory')
81
82 def _AssertNoVaultMounted(self):
83 self.assertFalse(cryptohome.is_vault_mounted(allow_fail=True),
84 msg='Did not expect any vault to be mounted.')
85
86 def Login(self, user_index):
87 self.assertFalse(self.GetLoginInfo()['is_logged_in'],
88 msg='Expected to be logged out.')
89 policy_base.PolicyTestBase.Login(self,
90 self._usernames[user_index],
91 self._passwords[user_index])
92 self.assertTrue(self.GetLoginInfo()['is_logged_in'],
93 msg='Expected to be logged in.')
94
95 def ExtraChromeFlags(self):
96 """Sets up Chrome to skip OOBE.
97
98 TODO(bartfab): Ensure OOBE is still skipped when crosbug.com/20709 is fixed.
99 Disabling automatic clearing of the local state has the curious side effect
100 of removing a flag that disables OOBE. This method adds back the flag.
101 """
102 flags = policy_base.PolicyTestBase.ExtraChromeFlags(self)
103 flags.append('--login-screen=login')
104 return flags
105
106 def setUp(self):
107 policy_base.PolicyTestBase.setUp(self)
108 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed.
109 # Try to disable automatic clearing of the local state.
110 self.TryToDisableLocalStateAutoClearingOnChromeOS()
111 self._local_state_auto_clearing = \
112 self.IsLocalStateAutoClearingEnabledOnChromeOS()
113 if not self._local_state_auto_clearing:
114 # Prevent the inherited Logout() method from cleaning up /home/chronos
115 # as this also clears the local state.
116 self.set_clear_profile(False)
117
118 credentials = (self.GetPrivateInfo()['prod_enterprise_test_user'],
119 self.GetPrivateInfo()['prod_enterprise_executive_user'],
120 self.GetPrivateInfo()['prod_enterprise_sales_user'])
121 self._usernames = [credential['username'] for credential in credentials]
122 self._passwords = [credential['password'] for credential in credentials]
123
124 def tearDown(self):
125 # TODO(bartfab): Remove this after crosbug.com/20709 is fixed.
126 # Try to re-enable automatic clearing of the local state and /home/chronos.
127 if not self._local_state_auto_clearing:
128 self.TryToEnableLocalStateAutoClearingOnChromeOS()
129 self.set_clear_profile(True)
130 policy_base.PolicyTestBase.tearDown(self)
131
132 def testLoginAsOwnerIsNotEphemeral(self):
133 """Checks that the owner does not become ephemeral."""
134 self._SetDevicePolicyAndOwner(ephemeral_users_enabled=True, owner_index=0)
135
136 self.Login(user_index=0)
137 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed.
138 if self._local_state_auto_clearing:
139 self._AssertLocalStatePrefsSet(user_indexes=[0])
140 self._AssertVaultDirectoryExists(user_index=0)
141 self._AssertVaultMounted(user_index=0, ephemeral=False)
142 self.Logout()
143 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed.
144 if not self._local_state_auto_clearing:
145 self._AssertLocalStatePrefsSet(user_indexes=[0])
146 self._AssertVaultDirectoryExists(user_index=0)
147 self._AssertNoVaultMounted()
148
149 def testLoginAsNonOwnerIsEphemeral(self):
150 """Checks that a non-owner user does become ephemeral."""
151 self._SetDevicePolicyAndOwner(ephemeral_users_enabled=True, owner_index=0)
152
153 self.Login(user_index=1)
154 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed.
155 if self._local_state_auto_clearing:
156 self._AssertLocalStatePrefsEmpty()
157 self._AssertVaultDirectoryDoesNotExist(user_index=1)
158 self._AssertVaultMounted(user_index=1, ephemeral=True)
159 self.Logout()
160 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed.
161 if not self._local_state_auto_clearing:
162 self._AssertLocalStatePrefsEmpty()
163
164 self._AssertVaultDirectoryDoesNotExist(user_index=1)
165 self._AssertNoVaultMounted()
166
167 def testEnablingEphemeralUsersCleansUp(self):
168 """Checks that persistent information is cleared."""
169 self._SetDevicePolicyAndOwner(ephemeral_users_enabled=False, owner_index=0)
170
171 self.Login(user_index=0)
172 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed.
173 if self._local_state_auto_clearing:
174 self._AssertLocalStatePrefsSet(user_indexes=[0])
175 self.Logout()
176 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed.
177 if not self._local_state_auto_clearing:
178 self._AssertLocalStatePrefsSet(user_indexes=[0])
179
180 self.Login(user_index=1)
181 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed.
182 if self._local_state_auto_clearing:
183 self._AssertLocalStatePrefsSet(user_indexes=[1])
184 self.Logout()
185 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed.
186 if not self._local_state_auto_clearing:
187 self._AssertLocalStatePrefsSet(user_indexes=[0, 1])
188
189 self.Login(user_index=2)
190 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed.
191 if self._local_state_auto_clearing:
192 self._AssertLocalStatePrefsSet(user_indexes=[2])
193 self.Logout()
194 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed.
195 if not self._local_state_auto_clearing:
196 self._AssertLocalStatePrefsSet(user_indexes=[0, 1, 2])
197
198 self._AssertVaultDirectoryExists(user_index=0)
199 self._AssertVaultDirectoryExists(user_index=1)
200 self._AssertVaultDirectoryExists(user_index=2)
201
202 self._SetDevicePolicyAndOwner(ephemeral_users_enabled=True, owner_index=0)
203
204 self.Login(user_index=1)
205 # TODO(bartfab): Remove this when crosbug.com/20709 is fixed.
206 if self._local_state_auto_clearing:
207 self._AssertLocalStatePrefsEmpty()
208 self._AssertVaultMounted(user_index=1, ephemeral=True)
209 self.Logout()
210
211 # TODO(bartfab): Make this unconditional when crosbug.com/20709 is fixed.
212 if not self._local_state_auto_clearing:
213 self._AssertLocalStatePrefsSet(user_indexes=[0])
214
215 self._AssertVaultDirectoryExists(user_index=0)
216 self._AssertVaultDirectoryDoesNotExist(user_index=1)
217 self._AssertVaultDirectoryDoesNotExist(user_index=2)
218
219
220 if __name__ == '__main__':
221 pyauto_functional.Main()
OLDNEW
« no previous file with comments | « chrome/test/functional/PYAUTO_TESTS ('k') | chrome/test/pyautolib/chromeos/suid_actions.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698