• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.car.settings.profiles;
18 
19 import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetAliveUsers;
20 import static android.os.UserManager.USER_TYPE_SYSTEM_HEADLESS;
21 
22 import static com.google.common.truth.Truth.assertThat;
23 
24 import static org.mockito.ArgumentMatchers.any;
25 import static org.mockito.ArgumentMatchers.anyInt;
26 import static org.mockito.Mockito.never;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
29 
30 import android.app.ActivityManager;
31 import android.car.user.CarUserManager;
32 import android.car.user.UserCreationResult;
33 import android.car.user.UserRemovalResult;
34 import android.car.user.UserSwitchResult;
35 import android.car.util.concurrent.AndroidAsyncFuture;
36 import android.car.util.concurrent.AndroidFuture;
37 import android.content.Context;
38 import android.content.pm.UserInfo;
39 import android.content.res.Resources;
40 import android.os.UserHandle;
41 import android.os.UserManager;
42 
43 import com.android.car.settings.testutils.ShadowActivityManager;
44 import com.android.car.settings.testutils.ShadowUserIconProvider;
45 import com.android.car.settings.testutils.ShadowUserManager;
46 
47 import org.junit.After;
48 import org.junit.Before;
49 import org.junit.Test;
50 import org.junit.runner.RunWith;
51 import org.mockito.Mock;
52 import org.mockito.MockitoAnnotations;
53 import org.robolectric.RobolectricTestRunner;
54 import org.robolectric.RuntimeEnvironment;
55 import org.robolectric.annotation.Config;
56 import org.robolectric.shadows.ShadowProcess;
57 
58 @RunWith(RobolectricTestRunner.class)
59 @Config(shadows = {ShadowActivityManager.class, ShadowUserManager.class,
60         ShadowUserIconProvider.class})
61 public class ProfileHelperTest {
62 
63     private static final String DEFAULT_ADMIN_NAME = "default_admin";
64     private static final String DEFAULT_GUEST_NAME = "default_guest";
65 
66     private Context mContext;
67     private ProfileHelper mProfileHelper;
68 
69     @Mock
70     private UserManager mMockUserManager;
71     @Mock
72     private Resources mMockResources;
73     @Mock
74     private CarUserManager mMockCarUserManager;
75 
76     @Before
setUp()77     public void setUp() {
78         MockitoAnnotations.initMocks(this);
79         mContext = RuntimeEnvironment.application;
80         mProfileHelper = new ProfileHelper(mMockUserManager, mMockResources,
81                 DEFAULT_ADMIN_NAME, DEFAULT_GUEST_NAME, mMockCarUserManager);
82 
83         when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS))
84                 .thenReturn(false);
85         when(mMockUserManager.isDemoUser()).thenReturn(false);
86         when(mMockUserManager.isGuestUser()).thenReturn(false);
87 
88         ShadowUserManager.setIsHeadlessSystemUserMode(true);
89         ShadowActivityManager.setCurrentUser(10);
90     }
91 
92     @After
tearDown()93     public void tearDown() {
94         ShadowActivityManager.reset();
95         ShadowUserManager.reset();
96     }
97 
98     @Test
canCurrentProcessModifyAccounts_baseline_returnsTrue()99     public void canCurrentProcessModifyAccounts_baseline_returnsTrue() {
100         assertThat(mProfileHelper.canCurrentProcessModifyAccounts()).isTrue();
101     }
102 
103     @Test
canCurrentProcessModifyAccounts_hasDisallowModifyAccounts_returnsFalse()104     public void canCurrentProcessModifyAccounts_hasDisallowModifyAccounts_returnsFalse() {
105         when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS))
106                 .thenReturn(true);
107         assertThat(mProfileHelper.canCurrentProcessModifyAccounts()).isFalse();
108     }
109 
110     @Test
canCurrentProcessModifyAccounts_isDemoUser_returnsFalse()111     public void canCurrentProcessModifyAccounts_isDemoUser_returnsFalse() {
112         when(mMockUserManager.isDemoUser()).thenReturn(true);
113         assertThat(mProfileHelper.canCurrentProcessModifyAccounts()).isFalse();
114     }
115 
116     @Test
canCurrentProcessModifyAccounts_isGuestUser_returnsFalse()117     public void canCurrentProcessModifyAccounts_isGuestUser_returnsFalse() {
118         when(mMockUserManager.isGuestUser()).thenReturn(true);
119         assertThat(mProfileHelper.canCurrentProcessModifyAccounts()).isFalse();
120     }
121 
122     @Test
testGetAllsers()123     public void testGetAllsers() {
124         // Add system user
125         UserInfo systemUser = createAdminUser(UserHandle.USER_SYSTEM);
126 
127         // Create two admin, and two non-admin users.
128         int fgUserId = ActivityManager.getCurrentUser();
129         UserInfo fgUser = createNonAdminUser(fgUserId);
130         UserInfo user2 = createAdminUser(fgUserId + 1);
131         UserInfo user3 = createNonAdminUser(fgUserId + 2);
132         UserInfo user4 = createAdminUser(fgUserId + 3);
133 
134         mockGetUsers(systemUser, fgUser, user2, user3, user4);
135 
136         // Should return all non-system users
137         assertThat(mProfileHelper.getAllProfiles()).containsExactly(fgUser, user2, user3, user4);
138     }
139 
140     @Test
testGetAllUsers_notHeadless()141     public void testGetAllUsers_notHeadless() {
142         ShadowUserManager.setIsHeadlessSystemUserMode(false);
143 
144         // Add system user
145         UserInfo systemUser = createAdminUser(UserHandle.USER_SYSTEM);
146 
147         // Create two admin, and two non-admin users.
148         int fgUserId = ActivityManager.getCurrentUser();
149         UserInfo fgUser = createNonAdminUser(fgUserId);
150         UserInfo user2 = createAdminUser(fgUserId + 1);
151         UserInfo user3 = createNonAdminUser(fgUserId + 2);
152         UserInfo user4 = createAdminUser(fgUserId + 3);
153 
154         mockGetUsers(systemUser, fgUser, user2, user3, user4);
155 
156         // Should return all users
157         assertThat(mProfileHelper.getAllProfiles())
158                 .containsExactly(systemUser, fgUser, user2, user3, user4);
159     }
160 
161     @Test
testGetAllSwitchableUsers()162     public void testGetAllSwitchableUsers() {
163         // Add system user
164         UserInfo systemUser = createAdminUser(UserHandle.USER_SYSTEM);
165 
166         // Create two non-foreground users.
167         int fgUserId = ActivityManager.getCurrentUser();
168         UserInfo fgUser = createAdminUser(fgUserId);
169         UserInfo user1 = createAdminUser(fgUserId + 1);
170         UserInfo user2 = createAdminUser(fgUserId + 2);
171 
172         mockGetUsers(systemUser, fgUser, user1, user2);
173 
174         // Should return all non-foreground users.
175         assertThat(mProfileHelper.getAllSwitchableProfiles()).containsExactly(user1, user2);
176     }
177 
178     @Test
testGetAllSwitchableUsers_notHeadless()179     public void testGetAllSwitchableUsers_notHeadless() {
180         ShadowUserManager.setIsHeadlessSystemUserMode(false);
181 
182         // Add system user
183         UserInfo systemUser = createAdminUser(UserHandle.USER_SYSTEM);
184 
185         // Create two non-foreground users.
186         int fgUserId = ActivityManager.getCurrentUser();
187         UserInfo fgUser = createAdminUser(fgUserId);
188         UserInfo user1 = createAdminUser(fgUserId + 1);
189         UserInfo user2 = createAdminUser(fgUserId + 2);
190 
191         mockGetUsers(systemUser, fgUser, user1, user2);
192 
193         // Should return all non-foreground users.
194         assertThat(mProfileHelper.getAllSwitchableProfiles()).containsExactly(systemUser, user1,
195                 user2);
196     }
197 
198     @Test
testGetAllPersistentUsers()199     public void testGetAllPersistentUsers() {
200         // Add system user
201         UserInfo systemUser = createAdminUser(UserHandle.USER_SYSTEM);
202 
203         // Create two non-ephemeral users.
204         int fgUserId = ActivityManager.getCurrentUser();
205         UserInfo fgUser = createAdminUser(fgUserId);
206         UserInfo user2 = createAdminUser(fgUserId + 1);
207         // Create two ephemeral users.
208         UserInfo user3 = createEphemeralUser(fgUserId + 2);
209         UserInfo user4 = createEphemeralUser(fgUserId + 3);
210 
211         mockGetUsers(systemUser, fgUser, user2, user3, user4);
212 
213         // Should return all non-ephemeral users.
214         assertThat(mProfileHelper.getAllPersistentProfiles()).containsExactly(fgUser, user2);
215     }
216 
217     @Test
testGetAllPersistentUsers_notHeadless()218     public void testGetAllPersistentUsers_notHeadless() {
219         ShadowUserManager.setIsHeadlessSystemUserMode(false);
220 
221         // Add system user
222         UserInfo systemUser = createAdminUser(UserHandle.USER_SYSTEM);
223 
224         // Create two non-ephemeral users.
225         int fgUserId = ActivityManager.getCurrentUser();
226         UserInfo fgUser = createAdminUser(fgUserId);
227         UserInfo user2 = createAdminUser(fgUserId + 1);
228         // Create two ephemeral users.
229         UserInfo user3 = createEphemeralUser(fgUserId + 2);
230         UserInfo user4 = createEphemeralUser(fgUserId + 3);
231 
232         mockGetUsers(systemUser, fgUser, user2, user3, user4);
233 
234         // Should return all non-ephemeral users.
235         assertThat(mProfileHelper.getAllPersistentProfiles()).containsExactly(systemUser, fgUser,
236                 user2);
237     }
238 
239     @Test
testGetAllAdminUsers()240     public void testGetAllAdminUsers() {
241         // Add system user
242         UserInfo systemUser = createAdminUser(UserHandle.USER_SYSTEM);
243 
244         // Create two admin, and two non-admin users.
245         int fgUserId = ActivityManager.getCurrentUser();
246         UserInfo fgUser = createNonAdminUser(fgUserId);
247         UserInfo user2 = createAdminUser(fgUserId + 1);
248         UserInfo user3 = createNonAdminUser(fgUserId + 2);
249         UserInfo user4 = createAdminUser(fgUserId + 3);
250 
251         mockGetUsers(systemUser, fgUser, user2, user3, user4);
252 
253         // Should return only admin users.
254         assertThat(mProfileHelper.getAllAdminProfiles()).containsExactly(user2, user4);
255     }
256 
257     @Test
testGetAllAdminUsers_notHeadless()258     public void testGetAllAdminUsers_notHeadless() {
259         ShadowUserManager.setIsHeadlessSystemUserMode(false);
260 
261         // Add system user
262         UserInfo systemUser = createAdminUser(UserHandle.USER_SYSTEM);
263 
264         // Create two admin, and two non-admin users.
265         int fgUserId = ActivityManager.getCurrentUser();
266         UserInfo fgUser = createNonAdminUser(fgUserId);
267         UserInfo user2 = createAdminUser(fgUserId + 1);
268         UserInfo user3 = createNonAdminUser(fgUserId + 2);
269         UserInfo user4 = createAdminUser(fgUserId + 3);
270 
271         mockGetUsers(systemUser, fgUser, user2, user3, user4);
272 
273         // Should return only admin users.
274         assertThat(mProfileHelper.getAllAdminProfiles()).containsExactly(systemUser, user2, user4);
275     }
276 
277     @Test
testRemoveUser_isAdminUser_cannotRemoveSystemUser()278     public void testRemoveUser_isAdminUser_cannotRemoveSystemUser() {
279         UserInfo systemUser = new UserInfo(
280                 UserHandle.USER_SYSTEM,
281                 "Driver",
282                 /* iconPath= */ null,
283                 /* flags= */ UserInfo.FLAG_ADMIN | UserInfo.FLAG_SYSTEM,
284                 /* userType= */ USER_TYPE_SYSTEM_HEADLESS);
285 
286         assertThat(mProfileHelper.removeProfile(mContext, systemUser))
287                 .isEqualTo(ProfileHelper.REMOVE_PROFILE_RESULT_FAILED);
288     }
289 
290     @Test
testRemoveUser_isAdmin_canRemoveOtherUsers()291     public void testRemoveUser_isAdmin_canRemoveOtherUsers() {
292         // Create admin user and non-admin user
293         int fgUserId = ActivityManager.getCurrentUser();
294         int nonAdminUserId = fgUserId + 1;
295         UserInfo fgUser = createAdminUser(fgUserId);
296         UserInfo nonAdminUser = createNonAdminUser(nonAdminUserId);
297 
298         mockGetUsers(fgUser, nonAdminUser);
299         mockRemoveUser(nonAdminUserId, UserRemovalResult.STATUS_SUCCESSFUL);
300         // If Admin is removing non-current, non-system user, simply calls removeUser.
301         when(mMockUserManager.isAdminUser()).thenReturn(true);
302 
303         assertThat(mProfileHelper.removeProfile(mContext, nonAdminUser))
304                 .isEqualTo(ProfileHelper.REMOVE_PROFILE_RESULT_SUCCESS);
305         verify(mMockCarUserManager).removeUser(nonAdminUserId);
306     }
307 
308     @Test
testRemoveUser_isNonAdmin_cannotRemoveOtherUsers()309     public void testRemoveUser_isNonAdmin_cannotRemoveOtherUsers() {
310         // Create two non-admin users
311         int fgUserId = ActivityManager.getCurrentUser();
312         UserInfo fgUser = createNonAdminUser(fgUserId);
313         UserInfo user2 = createNonAdminUser(fgUserId + 1);
314         mockGetUsers(fgUser, user2);
315 
316         // Make current user non-admin.
317         when(mMockUserManager.isAdminUser()).thenReturn(false);
318         // Mock so that removeUser always pretends it's successful.
319         mockRemoveUserSuccess();
320 
321         // If Non-Admin is trying to remove someone other than themselves, they should fail.
322         assertThat(mProfileHelper.removeProfile(mContext, user2))
323                 .isEqualTo(ProfileHelper.REMOVE_PROFILE_RESULT_FAILED);
324         verify(mMockCarUserManager, never()).removeUser(user2.id);
325     }
326 
327 
328     @Test
testRemoveUser_removesLastAdminUser_createsAndSwitchesToNewAdminUser()329     public void testRemoveUser_removesLastAdminUser_createsAndSwitchesToNewAdminUser() {
330         // Ensure admin status
331         when(mMockUserManager.isAdminUser()).thenReturn(true);
332 
333         // Create one admin and one non-admin
334         int baseId = 10;
335         UserInfo adminUser = createAdminUser(baseId);
336         UserInfo nonAdminInfo = createNonAdminUser(baseId + 1);
337         mockGetUsers(adminUser, nonAdminInfo);
338         UserInfo newAdminInfo = createAdminUser(baseId + 2);
339         mockRemoveUserSuccess();
340         mockCreateUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN,
341                 UserCreationResult.STATUS_SUCCESSFUL, newAdminInfo);
342         mockSwitchUserSuccess();
343 
344         assertThat(mProfileHelper.removeProfile(mContext, adminUser))
345                 .isEqualTo(ProfileHelper.REMOVE_PROFILE_RESULT_SUCCESS);
346 
347         verify(mMockCarUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
348         verify(mMockCarUserManager).switchUser(newAdminInfo.id);
349         verify(mMockCarUserManager).removeUser(adminUser.id);
350     }
351 
352     @Test
testRemoveUser_removesLastAdminUserFailsCreateNewUser_doesNotRemoveOrSwitchUser()353     public void testRemoveUser_removesLastAdminUserFailsCreateNewUser_doesNotRemoveOrSwitchUser() {
354         // Ensure admin status
355         when(mMockUserManager.isAdminUser()).thenReturn(true);
356 
357         // Create one admin and one non-admin
358         int baseId = 10;
359         UserInfo adminUser = createAdminUser(baseId);
360         UserInfo nonAdminInfo = createNonAdminUser(baseId + 1);
361         mockGetUsers(adminUser, nonAdminInfo);
362 
363         // Fail to create a new user to force a failure case
364         mockCreateUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN,
365                 UserCreationResult.STATUS_ANDROID_FAILURE, null);
366 
367         assertThat(mProfileHelper.removeProfile(mContext, adminUser))
368                 .isEqualTo(ProfileHelper.REMOVE_PROFILE_RESULT_FAILED);
369         verify(mMockCarUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
370         verify(mMockCarUserManager, never()).switchUser(anyInt());
371         verify(mMockCarUserManager, never()).removeUser(adminUser.id);
372     }
373 
374     @Test
testRemoveUser_removeForegroundUser_callsSwitchToGuest()375     public void testRemoveUser_removeForegroundUser_callsSwitchToGuest() {
376         // Create foreground user
377         int baseId = 10;
378         ShadowProcess.setUid(baseId * UserHandle.PER_USER_RANGE); // User 10
379         UserInfo currentUser = createNonAdminUser(baseId);
380         when(mMockUserManager.isAdminUser()).thenReturn(false);
381         mockGetUsers(currentUser);
382 
383         UserInfo guestUser = createGuestUser(baseId + 1);
384         mockRemoveUserSuccess();
385         mockCreateGuest(DEFAULT_GUEST_NAME, UserCreationResult.STATUS_SUCCESSFUL, guestUser);
386         mockSwitchUserSuccess();
387 
388         assertUserRemoved(ProfileHelper.REMOVE_PROFILE_RESULT_SUCCESS, guestUser, currentUser);
389     }
390 
391     @Test
testRemoveUser_removeForegroundUser_switchFails_returnsSetEphemeralResult()392     public void testRemoveUser_removeForegroundUser_switchFails_returnsSetEphemeralResult() {
393         // Create foreground user
394         int baseId = 10;
395         ShadowProcess.setUid(baseId * UserHandle.PER_USER_RANGE); // User 10
396         UserInfo currentUser = createNonAdminUser(baseId);
397         when(mMockUserManager.isAdminUser()).thenReturn(false);
398         mockGetUsers(currentUser);
399 
400         UserInfo guestUser = createGuestUser(baseId + 1);
401         mockRemoveUserSuccess();
402         mockCreateGuest(DEFAULT_GUEST_NAME, UserCreationResult.STATUS_SUCCESSFUL, guestUser);
403         mockSwitchUserFailure();
404 
405         assertUserRemoved(ProfileHelper.REMOVE_PROFILE_RESULT_SWITCH_FAILED, guestUser,
406                 currentUser);
407     }
408 
assertUserRemoved(int expectedResult, UserInfo newUser, UserInfo removedUser)409     private void assertUserRemoved(int expectedResult, UserInfo newUser, UserInfo removedUser) {
410         assertThat(mProfileHelper.removeProfile(mContext, removedUser)).isEqualTo(expectedResult);
411         verify(mMockCarUserManager).createGuest(newUser.name);
412         verify(mMockCarUserManager).switchUser(newUser.id);
413         verify(mMockCarUserManager).removeUser(removedUser.id);
414     }
415 
416     @Test
testGetMaxSupportedRealUsers_isHeadless()417     public void testGetMaxSupportedRealUsers_isHeadless() {
418         ShadowUserManager.setIsHeadlessSystemUserMode(true);
419         ShadowUserManager.setMaxSupportedUsers(7);
420 
421         // Create System user, two managed profiles, and two normal users.
422         UserInfo user0 = createAdminUser(0);
423         UserInfo user1 = createNonAdminUser(10);
424         UserInfo user2 = createManagedProfile(11);
425         UserInfo user3 = createNonAdminUser(13);
426         UserInfo user4 = createManagedProfile(14);
427 
428         mockGetUsers(user0, user1, user2, user3, user4);
429 
430         // Max users - # managed profiles - headless system user.
431         assertThat(mProfileHelper.getMaxSupportedRealProfiles()).isEqualTo(4);
432     }
433 
434     @Test
testGetMaxSupportedRealUsers_isNotHeadless()435     public void testGetMaxSupportedRealUsers_isNotHeadless() {
436         ShadowUserManager.setIsHeadlessSystemUserMode(false);
437         ShadowUserManager.setMaxSupportedUsers(7);
438 
439         // Create System user, two managed profiles, and two normal users.
440         UserInfo user0 = createAdminUser(0);
441         UserInfo user1 = createNonAdminUser(10);
442         UserInfo user2 = createManagedProfile(11);
443         UserInfo user3 = createNonAdminUser(13);
444         UserInfo user4 = createManagedProfile(14);
445 
446         mockGetUsers(user0, user1, user2, user3, user4);
447 
448         // Max users - # managed profiles
449         assertThat(mProfileHelper.getMaxSupportedRealProfiles()).isEqualTo(5);
450     }
451 
452     @Test
testCreateNewOrFindExistingGuest_ifGuestExists_returnsExistingGuest()453     public void testCreateNewOrFindExistingGuest_ifGuestExists_returnsExistingGuest() {
454         // Create two users and a guest user.
455         UserInfo user1 = createAdminUser(10);
456         UserInfo user2 = createNonAdminUser(12);
457         UserInfo guestUser = createGuestUser(13);
458 
459         mockGetUsers(user1, user2, guestUser);
460         mockCreateUserFail();
461 
462         when(mMockUserManager.findCurrentGuestUser()).thenReturn(guestUser);
463 
464         UserInfo guest = mProfileHelper.createNewOrFindExistingGuest(mContext);
465         assertThat(guest).isEqualTo(guestUser);
466     }
467 
468     @Test
testCreateNewOrFindExistingGuest_ifNoGuest_createsNewGuest()469     public void testCreateNewOrFindExistingGuest_ifNoGuest_createsNewGuest() {
470         // Create two users.
471         UserInfo user1 = createAdminUser(10);
472         UserInfo user2 = createNonAdminUser(12);
473 
474         mockGetUsers(user1, user2);
475 
476         // Create a user for the "new guest" user.
477         UserInfo guestInfo = createGuestUser(21);
478 
479         mockCreateGuest(DEFAULT_GUEST_NAME, UserCreationResult.STATUS_SUCCESSFUL, guestInfo);
480 
481         UserInfo guest = mProfileHelper.createNewOrFindExistingGuest(mContext);
482         verify(mMockCarUserManager).createGuest(DEFAULT_GUEST_NAME);
483         assertThat(guest).isEqualTo(guestInfo);
484     }
485 
createAdminUser(int id)486     private UserInfo createAdminUser(int id) {
487         return new UserInfo(id, null, UserInfo.FLAG_ADMIN);
488     }
489 
createNonAdminUser(int id)490     private UserInfo createNonAdminUser(int id) {
491         return new UserInfo(id, null, 0);
492     }
493 
createEphemeralUser(int id)494     private UserInfo createEphemeralUser(int id) {
495         return new UserInfo(id, null, UserInfo.FLAG_EPHEMERAL);
496     }
497 
createManagedProfile(int id)498     private UserInfo createManagedProfile(int id) {
499         return new UserInfo(id, null, UserInfo.FLAG_MANAGED_PROFILE);
500     }
501 
createGuestUser(int id)502     private UserInfo createGuestUser(int id) {
503         return new UserInfo(id, null, UserInfo.FLAG_GUEST);
504     }
505 
mockGetUsers(UserInfo... users)506     private void mockGetUsers(UserInfo... users) {
507         mockUmGetAliveUsers(mMockUserManager, users);
508     }
509 
mockRemoveUser(int userId, int status)510     private void mockRemoveUser(int userId, int status) {
511         when(mMockCarUserManager.removeUser(userId)).thenReturn(new UserRemovalResult(status));
512     }
513 
mockRemoveUserSuccess()514     private void mockRemoveUserSuccess() {
515         when(mMockCarUserManager.removeUser(anyInt()))
516                 .thenReturn(new UserRemovalResult(UserRemovalResult.STATUS_SUCCESSFUL));
517     }
518 
mockCreateUserFail()519     private void mockCreateUserFail() {
520         AndroidFuture<UserCreationResult> future = new AndroidFuture<>();
521         future.complete(new UserCreationResult(UserCreationResult.STATUS_ANDROID_FAILURE,
522                 /* user= */ null));
523         AndroidAsyncFuture<UserCreationResult> asyncFuture = new AndroidAsyncFuture<>(future);
524         when(mMockCarUserManager.createUser(any(), anyInt())).thenReturn(asyncFuture);
525         when(mMockCarUserManager.createGuest(any())).thenReturn(asyncFuture);
526     }
527 
mockCreateUser(String name, int flag, int status, UserInfo userInfo)528     private void mockCreateUser(String name, int flag, int status, UserInfo userInfo) {
529         AndroidFuture<UserCreationResult> future = new AndroidFuture<>();
530         future.complete(new UserCreationResult(status, userInfo.getUserHandle()));
531         when(mMockCarUserManager.createUser(name, flag))
532                 .thenReturn(new AndroidAsyncFuture<>(future));
533     }
534 
mockCreateGuest(String name, int status, UserInfo userInfo)535     private void mockCreateGuest(String name, int status, UserInfo userInfo) {
536         AndroidFuture<UserCreationResult> future = new AndroidFuture<>();
537         future.complete(new UserCreationResult(status, userInfo.getUserHandle()));
538         when(mMockCarUserManager.createGuest(name)).thenReturn(new AndroidAsyncFuture<>(future));
539     }
540 
mockSwitchUserSuccess()541     private void mockSwitchUserSuccess() {
542         AndroidFuture<UserSwitchResult> future = new AndroidFuture<>();
543         future.complete(
544                 new UserSwitchResult(UserSwitchResult.STATUS_SUCCESSFUL, /* errorMessage= */null));
545         when(mMockCarUserManager.switchUser(anyInt())).thenReturn(new AndroidAsyncFuture<>(future));
546     }
547 
mockSwitchUserFailure()548     private void mockSwitchUserFailure() {
549         AndroidFuture<UserSwitchResult> future = new AndroidFuture<>();
550         future.complete(new UserSwitchResult(UserSwitchResult.STATUS_ANDROID_FAILURE,
551                 /* errorMessage= */null));
552         when(mMockCarUserManager.switchUser(anyInt())).thenReturn(new AndroidAsyncFuture<>(future));
553     }
554 }
555