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