1616
1717package com .android .server .pm ;
1818
19+ import android .content .BroadcastReceiver ;
1920import android .content .Context ;
21+ import android .content .Intent ;
22+ import android .content .IntentFilter ;
2023import android .content .pm .UserInfo ;
2124import android .os .Debug ;
2225import android .os .Environment ;
2326import android .os .UserManager ;
2427import android .test .AndroidTestCase ;
2528
29+ import java .util .ArrayList ;
2630import java .util .List ;
2731
2832/** Test {@link UserManager} functionality. */
2933public class UserManagerTest extends AndroidTestCase {
3034
3135 UserManager mUserManager = null ;
36+ Object mUserLock = new Object ();
3237
3338 @ Override
3439 public void setUp () throws Exception {
3540 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 );
3650 }
3751
3852 public void testHasPrimary () throws Exception {
@@ -54,7 +68,7 @@ public void testAddUser() throws Exception {
5468 }
5569 }
5670 assertTrue (found );
57- mUserManager . removeUser (userInfo .id );
71+ removeUser (userInfo .id );
5872 }
5973
6074 public void testAdd2Users () throws Exception {
@@ -67,14 +81,13 @@ public void testAdd2Users() throws Exception {
6781 assertTrue (findUser (0 ));
6882 assertTrue (findUser (user1 .id ));
6983 assertTrue (findUser (user2 .id ));
70- mUserManager . removeUser (user1 .id );
71- mUserManager . removeUser (user2 .id );
84+ removeUser (user1 .id );
85+ removeUser (user2 .id );
7286 }
7387
7488 public void testRemoveUser () throws Exception {
7589 UserInfo userInfo = mUserManager .createUser ("Guest 1" , UserInfo .FLAG_GUEST );
76-
77- mUserManager .removeUser (userInfo .id );
90+ removeUser (userInfo .id );
7891
7992 assertFalse (findUser (userInfo .id ));
8093 }
@@ -95,12 +108,47 @@ public void testSerialNumber() {
95108 int serialNumber1 = user1 .serialNumber ;
96109 assertEquals (serialNumber1 , mUserManager .getUserSerialNumber (user1 .id ));
97110 assertEquals (user1 .id , mUserManager .getUserHandle (serialNumber1 ));
98- mUserManager . removeUser (user1 .id );
111+ removeUser (user1 .id );
99112 UserInfo user2 = mUserManager .createUser ("User 2" , UserInfo .FLAG_RESTRICTED );
100113 int serialNumber2 = user2 .serialNumber ;
101114 assertFalse (serialNumber1 == serialNumber2 );
102115 assertEquals (serialNumber2 , mUserManager .getUserSerialNumber (user2 .id ));
103116 assertEquals (user2 .id , mUserManager .getUserHandle (serialNumber2 ));
104- mUserManager .removeUser (user2 .id );
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+ }
105153 }
106154}
0 commit comments