UserManagerTest.java revision e4cf73437a18c1444055f88a1fcc0d146ec23ac5
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2011 The Android Open Source Project 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * See the License for the specific language governing permissions and 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * limitations under the License. 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package com.android.server.pm; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.BroadcastReceiver; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Context; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Intent; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.IntentFilter; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.pm.UserInfo; 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import android.os.Bundle; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import android.os.Debug; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import android.os.Environment; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import android.os.UserManager; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import android.test.AndroidTestCase; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.ArrayList; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.List; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** Test {@link UserManager} functionality. */ 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public class UserManagerTest extends AndroidTestCase { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserManager mUserManager = null; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Object mUserLock = new Object(); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) @Override 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void setUp() throws Exception { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mUserManager = (UserManager) getContext().getSystemService(Context.USER_SERVICE); 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) getContext().registerReceiver(new BroadcastReceiver() { 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) @Override 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public void onReceive(Context context, Intent intent) { 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) synchronized (mUserLock) { 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mUserLock.notifyAll(); 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, filter); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public void testHasPrimary() throws Exception { 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) assertTrue(findUser(0)); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void testAddUser() throws Exception { 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) UserInfo userInfo = mUserManager.createUser("Guest 1", UserInfo.FLAG_GUEST); 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assertTrue(userInfo != null); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) List<UserInfo> list = mUserManager.getUsers(); 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) boolean found = false; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (UserInfo user : list) { 64 if (user.id == userInfo.id && user.name.equals("Guest 1") 65 && user.isGuest() 66 && !user.isAdmin() 67 && !user.isPrimary()) { 68 found = true; 69 } 70 } 71 assertTrue(found); 72 removeUser(userInfo.id); 73 } 74 75 public void testAdd2Users() throws Exception { 76 UserInfo user1 = mUserManager.createUser("Guest 1", UserInfo.FLAG_GUEST); 77 UserInfo user2 = mUserManager.createUser("User 2", UserInfo.FLAG_ADMIN); 78 79 assertTrue(user1 != null); 80 assertTrue(user2 != null); 81 82 assertTrue(findUser(0)); 83 assertTrue(findUser(user1.id)); 84 assertTrue(findUser(user2.id)); 85 removeUser(user1.id); 86 removeUser(user2.id); 87 } 88 89 public void testRemoveUser() throws Exception { 90 UserInfo userInfo = mUserManager.createUser("Guest 1", UserInfo.FLAG_GUEST); 91 removeUser(userInfo.id); 92 93 assertFalse(findUser(userInfo.id)); 94 } 95 96 private boolean findUser(int id) { 97 List<UserInfo> list = mUserManager.getUsers(); 98 99 for (UserInfo user : list) { 100 if (user.id == id) { 101 return true; 102 } 103 } 104 return false; 105 } 106 107 public void testSerialNumber() { 108 UserInfo user1 = mUserManager.createUser("User 1", UserInfo.FLAG_RESTRICTED); 109 int serialNumber1 = user1.serialNumber; 110 assertEquals(serialNumber1, mUserManager.getUserSerialNumber(user1.id)); 111 assertEquals(user1.id, mUserManager.getUserHandle(serialNumber1)); 112 removeUser(user1.id); 113 UserInfo user2 = mUserManager.createUser("User 2", UserInfo.FLAG_RESTRICTED); 114 int serialNumber2 = user2.serialNumber; 115 assertFalse(serialNumber1 == serialNumber2); 116 assertEquals(serialNumber2, mUserManager.getUserSerialNumber(user2.id)); 117 assertEquals(user2.id, mUserManager.getUserHandle(serialNumber2)); 118 removeUser(user2.id); 119 } 120 121 public void testMaxUsers() { 122 int N = UserManager.getMaxSupportedUsers(); 123 int count = mUserManager.getUsers().size(); 124 List<UserInfo> created = new ArrayList<UserInfo>(); 125 // Create as many users as permitted and make sure creation passes 126 while (count < N) { 127 UserInfo ui = mUserManager.createUser("User " + count, 0); 128 assertNotNull(ui); 129 created.add(ui); 130 count++; 131 } 132 // Try to create one more user and make sure it fails 133 UserInfo extra = null; 134 assertNull(extra = mUserManager.createUser("One more", 0)); 135 if (extra != null) { 136 removeUser(extra.id); 137 } 138 while (!created.isEmpty()) { 139 UserInfo user = created.remove(0); 140 removeUser(user.id); 141 } 142 } 143 144 public void testRestrictions() { 145 List<UserInfo> users = mUserManager.getUsers(); 146 if (users.size() > 1) { 147 Bundle restrictions = new Bundle(); 148 restrictions.putBoolean(UserManager.ALLOW_INSTALL_APPS, false); 149 restrictions.putBoolean(UserManager.ALLOW_CONFIG_WIFI, true); 150 mUserManager.setUserRestrictions(restrictions, users.get(1).id); 151 Bundle stored = mUserManager.getUserRestrictions(users.get(1).id); 152 assertEquals(stored.getBoolean(UserManager.ALLOW_CONFIG_WIFI), true); 153 assertEquals(stored.getBoolean(UserManager.ALLOW_UNINSTALL_APPS), true); 154 assertEquals(stored.getBoolean(UserManager.ALLOW_INSTALL_APPS), false); 155 } 156 } 157 158 private void removeUser(int userId) { 159 synchronized (mUserLock) { 160 mUserManager.removeUser(userId); 161 while (mUserManager.getUserInfo(userId) != null) { 162 try { 163 mUserLock.wait(1000); 164 } catch (InterruptedException ie) { 165 } 166 } 167 } 168 } 169 170} 171