1 /* 2 * Copyright (C) 2015 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.managedprovisioning.task; 18 19 import android.content.Context; 20 import android.content.pm.UserInfo; 21 import android.os.UserHandle; 22 import android.os.UserManager; 23 import android.test.AndroidTestCase; 24 import android.test.suitebuilder.annotation.SmallTest; 25 26 import org.mockito.Mock; 27 import org.mockito.MockitoAnnotations; 28 29 import java.util.Arrays; 30 import java.util.Collections; 31 32 import static org.mockito.Mockito.any; 33 import static org.mockito.Mockito.anyBoolean; 34 import static org.mockito.Mockito.anyString; 35 import static org.mockito.Mockito.eq; 36 import static org.mockito.Mockito.never; 37 import static org.mockito.Mockito.verify; 38 import static org.mockito.Mockito.verifyZeroInteractions; 39 import static org.mockito.Mockito.when; 40 41 /** 42 * Unit-tests for {@link DisallowAddUserTask}. 43 */ 44 public class DisallowAddUserTaskTest extends AndroidTestCase { 45 @Mock private Context mockContext; 46 @Mock private UserManager mockUserManager; 47 48 // Normal cases. 49 private UserInfo primaryUser = new UserInfo(0, "Primary", 50 UserInfo.FLAG_PRIMARY | UserInfo.FLAG_ADMIN); 51 52 // Split-system-user cases. 53 private UserInfo systemUser = new UserInfo(UserHandle.USER_SYSTEM, "System", 0 /* flags */); 54 private UserInfo meatUser = new UserInfo(10, "Primary", 55 UserInfo.FLAG_PRIMARY | UserInfo.FLAG_ADMIN); 56 57 @Override 58 public void setUp() { 59 // this is necessary for mockito to work 60 System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString()); 61 62 MockitoAnnotations.initMocks(this); 63 64 // Setup sensible default responses. 65 when(mockUserManager.hasUserRestriction(anyString(), any(UserHandle.class))) 66 .thenReturn(false); 67 } 68 69 @SmallTest 70 public void testMaybeDisallowAddUsers_normalSystem() { 71 when(mockUserManager.getUsers()).thenReturn(Collections.singletonList(primaryUser)); 72 73 new DisallowAddUserTask(mockUserManager, primaryUser.id, false /* isSplitSystemUser */) 74 .maybeDisallowAddUsers(); 75 76 verify(mockUserManager).setUserRestriction(UserManager.DISALLOW_ADD_USER, true, 77 primaryUser.getUserHandle()); 78 } 79 80 @SmallTest 81 public void testMaybeDisallowAddUsers_normalSystem_restrictionAlreadySetupForOneUser() { 82 when(mockUserManager.getUsers()).thenReturn(Collections.singletonList(primaryUser)); 83 84 when(mockUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER, 85 primaryUser.getUserHandle())) 86 .thenReturn(true); 87 88 new DisallowAddUserTask(mockUserManager, meatUser.id, false /* isSplitSystemUser */) 89 .maybeDisallowAddUsers(); 90 91 verify(mockUserManager, never()).setUserRestriction(eq(UserManager.DISALLOW_ADD_USER), 92 anyBoolean(), eq(primaryUser.getUserHandle())); 93 } 94 95 @SmallTest 96 public void testMaybeDisallowAddUsers_splitUserSystem_meatUserDeviceOwner() { 97 when(mockUserManager.getUsers()).thenReturn(Arrays.asList(new UserInfo[]{ 98 systemUser, meatUser})); 99 100 new DisallowAddUserTask(mockUserManager, meatUser.id, true /* isSplitSystemUser */) 101 .maybeDisallowAddUsers(); 102 103 verify(mockUserManager).setUserRestriction(UserManager.DISALLOW_ADD_USER, true, 104 systemUser.getUserHandle()); 105 verify(mockUserManager).setUserRestriction(UserManager.DISALLOW_ADD_USER, true, 106 meatUser.getUserHandle()); 107 } 108 109 @SmallTest 110 public void testMaybeDisallowAddUsers_splitUserSystem_systemDeviceOwner() { 111 when(mockUserManager.getUsers()).thenReturn(Collections.singletonList(systemUser)); 112 113 new DisallowAddUserTask(mockUserManager, systemUser.id, true /* isSplitSystemUser */) 114 .maybeDisallowAddUsers(); 115 116 verifyZeroInteractions(mockUserManager); 117 } 118 }