UserManagerTest.java revision 20949a76fee62e89d7dc22858a74469efa14f61d
1/* 2 * Copyright (C) 2011 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 17package com.android.server.pm; 18 19import android.content.BroadcastReceiver; 20import android.content.Context; 21import android.content.Intent; 22import android.content.IntentFilter; 23import android.content.pm.UserInfo; 24import android.os.Bundle; 25import android.os.Debug; 26import android.os.Environment; 27import android.os.UserHandle; 28import android.os.UserManager; 29import android.test.AndroidTestCase; 30 31import java.util.ArrayList; 32import java.util.List; 33 34/** Test {@link UserManager} functionality. */ 35public class UserManagerTest extends AndroidTestCase { 36 37 UserManager mUserManager = null; 38 Object mUserLock = new Object(); 39 40 @Override 41 public void setUp() throws Exception { 42 mUserManager = (UserManager) getContext().getSystemService(Context.USER_SERVICE); 43 IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED); 44 getContext().registerReceiver(new BroadcastReceiver() { 45 @Override 46 public void onReceive(Context context, Intent intent) { 47 synchronized (mUserLock) { 48 mUserLock.notifyAll(); 49 } 50 } 51 }, filter); 52 } 53 54 public void testHasPrimary() throws Exception { 55 assertTrue(findUser(0)); 56 } 57 58 public void testAddUser() throws Exception { 59 UserInfo userInfo = mUserManager.createUser("Guest 1", UserInfo.FLAG_GUEST); 60 assertTrue(userInfo != null); 61 62 List<UserInfo> list = mUserManager.getUsers(); 63 boolean found = false; 64 for (UserInfo user : list) { 65 if (user.id == userInfo.id && user.name.equals("Guest 1") 66 && user.isGuest() 67 && !user.isAdmin() 68 && !user.isPrimary()) { 69 found = true; 70 } 71 } 72 assertTrue(found); 73 removeUser(userInfo.id); 74 } 75 76 public void testAdd2Users() throws Exception { 77 UserInfo user1 = mUserManager.createUser("Guest 1", UserInfo.FLAG_GUEST); 78 UserInfo user2 = mUserManager.createUser("User 2", UserInfo.FLAG_ADMIN); 79 80 assertTrue(user1 != null); 81 assertTrue(user2 != null); 82 83 assertTrue(findUser(0)); 84 assertTrue(findUser(user1.id)); 85 assertTrue(findUser(user2.id)); 86 removeUser(user1.id); 87 removeUser(user2.id); 88 } 89 90 public void testRemoveUser() throws Exception { 91 UserInfo userInfo = mUserManager.createUser("Guest 1", UserInfo.FLAG_GUEST); 92 removeUser(userInfo.id); 93 94 assertFalse(findUser(userInfo.id)); 95 } 96 97 private boolean findUser(int id) { 98 List<UserInfo> list = mUserManager.getUsers(); 99 100 for (UserInfo user : list) { 101 if (user.id == id) { 102 return true; 103 } 104 } 105 return false; 106 } 107 108 public void testSerialNumber() { 109 UserInfo user1 = mUserManager.createUser("User 1", UserInfo.FLAG_RESTRICTED); 110 int serialNumber1 = user1.serialNumber; 111 assertEquals(serialNumber1, mUserManager.getUserSerialNumber(user1.id)); 112 assertEquals(user1.id, mUserManager.getUserHandle(serialNumber1)); 113 removeUser(user1.id); 114 UserInfo user2 = mUserManager.createUser("User 2", UserInfo.FLAG_RESTRICTED); 115 int serialNumber2 = user2.serialNumber; 116 assertFalse(serialNumber1 == serialNumber2); 117 assertEquals(serialNumber2, mUserManager.getUserSerialNumber(user2.id)); 118 assertEquals(user2.id, mUserManager.getUserHandle(serialNumber2)); 119 removeUser(user2.id); 120 } 121 122 public void testMaxUsers() { 123 int N = UserManager.getMaxSupportedUsers(); 124 int count = mUserManager.getUsers().size(); 125 List<UserInfo> created = new ArrayList<UserInfo>(); 126 // Create as many users as permitted and make sure creation passes 127 while (count < N) { 128 UserInfo ui = mUserManager.createUser("User " + count, 0); 129 assertNotNull(ui); 130 created.add(ui); 131 count++; 132 } 133 // Try to create one more user and make sure it fails 134 UserInfo extra = null; 135 assertNull(extra = mUserManager.createUser("One more", 0)); 136 if (extra != null) { 137 removeUser(extra.id); 138 } 139 while (!created.isEmpty()) { 140 UserInfo user = created.remove(0); 141 removeUser(user.id); 142 } 143 } 144 145 public void testRestrictions() { 146 List<UserInfo> users = mUserManager.getUsers(); 147 if (users.size() > 1) { 148 Bundle restrictions = new Bundle(); 149 restrictions.putBoolean(UserManager.ALLOW_INSTALL_APPS, false); 150 restrictions.putBoolean(UserManager.ALLOW_CONFIG_WIFI, true); 151 mUserManager.setUserRestrictions(restrictions, new UserHandle(users.get(1).id)); 152 Bundle stored = mUserManager.getUserRestrictions(new UserHandle(users.get(1).id)); 153 assertEquals(stored.getBoolean(UserManager.ALLOW_CONFIG_WIFI), true); 154 assertEquals(stored.getBoolean(UserManager.ALLOW_UNINSTALL_APPS), true); 155 assertEquals(stored.getBoolean(UserManager.ALLOW_INSTALL_APPS), false); 156 } 157 } 158 159 private void removeUser(int userId) { 160 synchronized (mUserLock) { 161 mUserManager.removeUser(userId); 162 while (mUserManager.getUserInfo(userId) != null) { 163 try { 164 mUserLock.wait(1000); 165 } catch (InterruptedException ie) { 166 } 167 } 168 } 169 } 170 171} 172