Loading services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java +137 −10 Original line number Original line Diff line number Diff line Loading @@ -21,11 +21,15 @@ import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentFilter; import android.content.pm.UserInfo; import android.content.pm.UserInfo; import android.app.ActivityManager; import android.os.Bundle; import android.os.Bundle; import android.os.UserHandle; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager; import android.provider.Settings; import android.test.AndroidTestCase; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils; Loading @@ -34,24 +38,39 @@ import java.util.Arrays; import java.util.List; import java.util.List; /** Test {@link UserManager} functionality. */ /** Test {@link UserManager} functionality. */ @MediumTest public class UserManagerTest extends AndroidTestCase { public class UserManagerTest extends AndroidTestCase { private static final int REMOVE_CHECK_INTERVAL = 500; private static final int REMOVE_CHECK_INTERVAL_MILLIS = 500; // 0.5 seconds private static final int REMOVE_TIMEOUT = 60 * 1000; private static final int REMOVE_TIMEOUT_MILLIS = 60 * 1000; // 60 seconds private static final int SWITCH_CHECK_INTERVAL_MILLIS = 2 * 1000; // 2 seconds private static final int SWITCH_USER_TIMEOUT_MILLIS = 40 * 1000; // 40 seconds private final Object mUserRemoveLock = new Object(); private final Object mUserSwitchLock = new Object(); private UserManager mUserManager = null; private UserManager mUserManager = null; private final Object mUserLock = new Object(); private List<Integer> usersToRemove; private List<Integer> usersToRemove; @Override @Override public void setUp() throws Exception { public void setUp() throws Exception { super.setUp(); super.setUp(); mUserManager = UserManager.get(getContext()); mUserManager = UserManager.get(getContext()); IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED); IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED); filter.addAction(Intent.ACTION_USER_SWITCHED); getContext().registerReceiver(new BroadcastReceiver() { getContext().registerReceiver(new BroadcastReceiver() { @Override @Override public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) { synchronized (mUserLock) { switch (intent.getAction()) { mUserLock.notifyAll(); case Intent.ACTION_USER_REMOVED: synchronized (mUserRemoveLock) { mUserRemoveLock.notifyAll(); } break; case Intent.ACTION_USER_SWITCHED: synchronized (mUserSwitchLock) { mUserSwitchLock.notifyAll(); } break; } } } } }, filter); }, filter); Loading Loading @@ -81,10 +100,12 @@ public class UserManagerTest extends AndroidTestCase { } } } } @SmallTest public void testHasSystemUser() throws Exception { public void testHasSystemUser() throws Exception { assertTrue(findUser(UserHandle.USER_SYSTEM)); assertTrue(findUser(UserHandle.USER_SYSTEM)); } } @MediumTest public void testAddUser() throws Exception { public void testAddUser() throws Exception { UserInfo userInfo = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo userInfo = createUser("Guest 1", UserInfo.FLAG_GUEST); assertTrue(userInfo != null); assertTrue(userInfo != null); Loading @@ -105,6 +126,7 @@ public class UserManagerTest extends AndroidTestCase { assertTrue(found); assertTrue(found); } } @MediumTest public void testAdd2Users() throws Exception { public void testAdd2Users() throws Exception { UserInfo user1 = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo user1 = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo user2 = createUser("User 2", UserInfo.FLAG_ADMIN); UserInfo user2 = createUser("User 2", UserInfo.FLAG_ADMIN); Loading @@ -117,6 +139,7 @@ public class UserManagerTest extends AndroidTestCase { assertTrue(findUser(user2.id)); assertTrue(findUser(user2.id)); } } @MediumTest public void testRemoveUser() throws Exception { public void testRemoveUser() throws Exception { UserInfo userInfo = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo userInfo = createUser("Guest 1", UserInfo.FLAG_GUEST); removeUser(userInfo.id); removeUser(userInfo.id); Loading @@ -124,6 +147,7 @@ public class UserManagerTest extends AndroidTestCase { assertFalse(findUser(userInfo.id)); assertFalse(findUser(userInfo.id)); } } @MediumTest public void testAddGuest() throws Exception { public void testAddGuest() throws Exception { UserInfo userInfo1 = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo userInfo1 = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo userInfo2 = createUser("Guest 2", UserInfo.FLAG_GUEST); UserInfo userInfo2 = createUser("Guest 2", UserInfo.FLAG_GUEST); Loading @@ -131,19 +155,54 @@ public class UserManagerTest extends AndroidTestCase { assertNull(userInfo2); assertNull(userInfo2); } } @MediumTest public void testGetProfileParent() throws Exception { final int primaryUserId = mUserManager.getPrimaryUser().id; UserInfo userInfo = createProfileForUser("Profile", UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); assertNotNull(userInfo); UserInfo parentProfileInfo = mUserManager.getProfileParent(userInfo.id); assertNotNull(parentProfileInfo); assertEquals(parentProfileInfo.id, primaryUserId); } // Make sure only one managed profile can be created // Make sure only one managed profile can be created @MediumTest public void testAddManagedProfile() throws Exception { public void testAddManagedProfile() throws Exception { final int primaryUserId = mUserManager.getPrimaryUser().id; final int primaryUserId = mUserManager.getPrimaryUser().id; UserInfo userInfo1 = createProfileForUser("Managed 1", UserInfo userInfo1 = createProfileForUser("Managed 1", UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); UserInfo userInfo2 = createProfileForUser("Managed 2", UserInfo userInfo2 = createProfileForUser("Managed 2", UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); assertNotNull(userInfo1); assertNotNull(userInfo1); assertNull(userInfo2); assertNull(userInfo2); // Verify that current user is not a managed profile // Verify that current user is not a managed profile assertFalse(mUserManager.isManagedProfile()); assertFalse(mUserManager.isManagedProfile()); } } @MediumTest public void testAddRestrictedProfile() throws Exception { UserInfo userInfo = createRestrictedProfile("Profile"); assertNotNull(userInfo); Bundle restrictions = mUserManager.getUserRestrictions(UserHandle.of(userInfo.id)); assertTrue("Restricted profile should have DISALLOW_MODIFY_ACCOUNTS restriction by default", restrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS)); assertTrue("Restricted profile should have DISALLOW_SHARE_LOCATION restriction by default", restrictions.getBoolean(UserManager.DISALLOW_SHARE_LOCATION)); int locationMode = Settings.Secure.getIntForUser(getContext().getContentResolver(), Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_HIGH_ACCURACY, userInfo.id); assertEquals("Restricted profile should have setting LOCATION_MODE set to " + "LOCATION_MODE_OFF by default", locationMode, Settings.Secure.LOCATION_MODE_OFF); } @MediumTest public void testGetUserCreationTime() throws Exception { public void testGetUserCreationTime() throws Exception { final int primaryUserId = mUserManager.getPrimaryUser().id; final int primaryUserId = mUserManager.getPrimaryUser().id; UserInfo profile = createProfileForUser("Managed 1", UserInfo profile = createProfileForUser("Managed 1", Loading Loading @@ -177,7 +236,6 @@ public class UserManagerTest extends AndroidTestCase { } } } } private boolean findUser(int id) { private boolean findUser(int id) { List<UserInfo> list = mUserManager.getUsers(); List<UserInfo> list = mUserManager.getUsers(); Loading @@ -189,6 +247,7 @@ public class UserManagerTest extends AndroidTestCase { return false; return false; } } @MediumTest public void testSerialNumber() { public void testSerialNumber() { UserInfo user1 = createUser("User 1", 0); UserInfo user1 = createUser("User 1", 0); int serialNumber1 = user1.serialNumber; int serialNumber1 = user1.serialNumber; Loading @@ -201,6 +260,7 @@ public class UserManagerTest extends AndroidTestCase { assertEquals(user2.id, mUserManager.getUserHandle(serialNumber2)); assertEquals(user2.id, mUserManager.getUserHandle(serialNumber2)); } } @MediumTest public void testGetSerialNumbersOfUsers() { public void testGetSerialNumbersOfUsers() { UserInfo user1 = createUser("User 1", 0); UserInfo user1 = createUser("User 1", 0); UserInfo user2 = createUser("User 2", 0); UserInfo user2 = createUser("User 2", 0); Loading @@ -212,6 +272,7 @@ public class UserManagerTest extends AndroidTestCase { ArrayUtils.contains(serialNumbersOfUsers, user2.serialNumber)); ArrayUtils.contains(serialNumbersOfUsers, user2.serialNumber)); } } @MediumTest public void testMaxUsers() { public void testMaxUsers() { int N = UserManager.getMaxSupportedUsers(); int N = UserManager.getMaxSupportedUsers(); int count = mUserManager.getUsers().size(); int count = mUserManager.getUsers().size(); Loading @@ -226,6 +287,17 @@ public class UserManagerTest extends AndroidTestCase { assertNull(extra); assertNull(extra); } } @MediumTest public void testGetUserCount() { int count = mUserManager.getUsers().size(); UserInfo user1 = createUser("User 1", 0); assertNotNull(user1); UserInfo user2 = createUser("User 2", 0); assertNotNull(user2); assertEquals(count + 2, mUserManager.getUserCount()); } @MediumTest public void testRestrictions() { public void testRestrictions() { UserInfo testUser = createUser("User 1", 0); UserInfo testUser = createUser("User 1", 0); Loading @@ -241,18 +313,66 @@ public class UserManagerTest extends AndroidTestCase { assertEquals(stored.getBoolean(UserManager.DISALLOW_INSTALL_APPS), true); assertEquals(stored.getBoolean(UserManager.DISALLOW_INSTALL_APPS), true); } } @MediumTest public void testSetDefaultGuestRestrictions() { final Bundle origGuestRestrictions = mUserManager.getDefaultGuestRestrictions(); Bundle restrictions = new Bundle(); restrictions.putBoolean(UserManager.DISALLOW_FUN, true); mUserManager.setDefaultGuestRestrictions(restrictions); try { UserInfo guest = createUser("Guest", UserInfo.FLAG_GUEST); assertNotNull(guest); assertTrue(mUserManager.hasUserRestriction(UserManager.DISALLOW_FUN, guest.getUserHandle())); } finally { mUserManager.setDefaultGuestRestrictions(origGuestRestrictions); } } @LargeTest public void testSwitchUser() { ActivityManager am = getContext().getSystemService(ActivityManager.class); final int startUser = am.getCurrentUser(); UserInfo user = createUser("User", 0); assertNotNull(user); // Switch to the user just created. switchUser(user.id); // Switch back to the starting user. switchUser(startUser); } private void switchUser(int userId) { synchronized (mUserSwitchLock) { ActivityManager am = getContext().getSystemService(ActivityManager.class); am.switchUser(userId); long time = System.currentTimeMillis(); while (am.getCurrentUser() != userId) { try { mUserSwitchLock.wait(SWITCH_CHECK_INTERVAL_MILLIS); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); return; } if (System.currentTimeMillis() - time > SWITCH_USER_TIMEOUT_MILLIS) { fail("Timeout waiting for the user switch to u" + userId); } } } } private void removeUser(int userId) { private void removeUser(int userId) { synchronized (mUserLock) { synchronized (mUserRemoveLock) { mUserManager.removeUser(userId); mUserManager.removeUser(userId); long time = System.currentTimeMillis(); long time = System.currentTimeMillis(); while (mUserManager.getUserInfo(userId) != null) { while (mUserManager.getUserInfo(userId) != null) { try { try { mUserLock.wait(REMOVE_CHECK_INTERVAL); mUserRemoveLock.wait(REMOVE_CHECK_INTERVAL_MILLIS); } catch (InterruptedException ie) { } catch (InterruptedException ie) { Thread.currentThread().interrupt(); Thread.currentThread().interrupt(); return; return; } } if (System.currentTimeMillis() - time > REMOVE_TIMEOUT) { if (System.currentTimeMillis() - time > REMOVE_TIMEOUT_MILLIS) { fail("Timeout waiting for removeUser. userId = " + userId); fail("Timeout waiting for removeUser. userId = " + userId); } } } } Loading @@ -275,4 +395,11 @@ public class UserManagerTest extends AndroidTestCase { return profile; return profile; } } private UserInfo createRestrictedProfile(String name) { UserInfo profile = mUserManager.createRestrictedProfile(name); if (profile != null) { usersToRemove.add(profile.id); } return profile; } } } Loading
services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java +137 −10 Original line number Original line Diff line number Diff line Loading @@ -21,11 +21,15 @@ import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentFilter; import android.content.pm.UserInfo; import android.content.pm.UserInfo; import android.app.ActivityManager; import android.os.Bundle; import android.os.Bundle; import android.os.UserHandle; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager; import android.provider.Settings; import android.test.AndroidTestCase; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils; Loading @@ -34,24 +38,39 @@ import java.util.Arrays; import java.util.List; import java.util.List; /** Test {@link UserManager} functionality. */ /** Test {@link UserManager} functionality. */ @MediumTest public class UserManagerTest extends AndroidTestCase { public class UserManagerTest extends AndroidTestCase { private static final int REMOVE_CHECK_INTERVAL = 500; private static final int REMOVE_CHECK_INTERVAL_MILLIS = 500; // 0.5 seconds private static final int REMOVE_TIMEOUT = 60 * 1000; private static final int REMOVE_TIMEOUT_MILLIS = 60 * 1000; // 60 seconds private static final int SWITCH_CHECK_INTERVAL_MILLIS = 2 * 1000; // 2 seconds private static final int SWITCH_USER_TIMEOUT_MILLIS = 40 * 1000; // 40 seconds private final Object mUserRemoveLock = new Object(); private final Object mUserSwitchLock = new Object(); private UserManager mUserManager = null; private UserManager mUserManager = null; private final Object mUserLock = new Object(); private List<Integer> usersToRemove; private List<Integer> usersToRemove; @Override @Override public void setUp() throws Exception { public void setUp() throws Exception { super.setUp(); super.setUp(); mUserManager = UserManager.get(getContext()); mUserManager = UserManager.get(getContext()); IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED); IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED); filter.addAction(Intent.ACTION_USER_SWITCHED); getContext().registerReceiver(new BroadcastReceiver() { getContext().registerReceiver(new BroadcastReceiver() { @Override @Override public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) { synchronized (mUserLock) { switch (intent.getAction()) { mUserLock.notifyAll(); case Intent.ACTION_USER_REMOVED: synchronized (mUserRemoveLock) { mUserRemoveLock.notifyAll(); } break; case Intent.ACTION_USER_SWITCHED: synchronized (mUserSwitchLock) { mUserSwitchLock.notifyAll(); } break; } } } } }, filter); }, filter); Loading Loading @@ -81,10 +100,12 @@ public class UserManagerTest extends AndroidTestCase { } } } } @SmallTest public void testHasSystemUser() throws Exception { public void testHasSystemUser() throws Exception { assertTrue(findUser(UserHandle.USER_SYSTEM)); assertTrue(findUser(UserHandle.USER_SYSTEM)); } } @MediumTest public void testAddUser() throws Exception { public void testAddUser() throws Exception { UserInfo userInfo = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo userInfo = createUser("Guest 1", UserInfo.FLAG_GUEST); assertTrue(userInfo != null); assertTrue(userInfo != null); Loading @@ -105,6 +126,7 @@ public class UserManagerTest extends AndroidTestCase { assertTrue(found); assertTrue(found); } } @MediumTest public void testAdd2Users() throws Exception { public void testAdd2Users() throws Exception { UserInfo user1 = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo user1 = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo user2 = createUser("User 2", UserInfo.FLAG_ADMIN); UserInfo user2 = createUser("User 2", UserInfo.FLAG_ADMIN); Loading @@ -117,6 +139,7 @@ public class UserManagerTest extends AndroidTestCase { assertTrue(findUser(user2.id)); assertTrue(findUser(user2.id)); } } @MediumTest public void testRemoveUser() throws Exception { public void testRemoveUser() throws Exception { UserInfo userInfo = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo userInfo = createUser("Guest 1", UserInfo.FLAG_GUEST); removeUser(userInfo.id); removeUser(userInfo.id); Loading @@ -124,6 +147,7 @@ public class UserManagerTest extends AndroidTestCase { assertFalse(findUser(userInfo.id)); assertFalse(findUser(userInfo.id)); } } @MediumTest public void testAddGuest() throws Exception { public void testAddGuest() throws Exception { UserInfo userInfo1 = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo userInfo1 = createUser("Guest 1", UserInfo.FLAG_GUEST); UserInfo userInfo2 = createUser("Guest 2", UserInfo.FLAG_GUEST); UserInfo userInfo2 = createUser("Guest 2", UserInfo.FLAG_GUEST); Loading @@ -131,19 +155,54 @@ public class UserManagerTest extends AndroidTestCase { assertNull(userInfo2); assertNull(userInfo2); } } @MediumTest public void testGetProfileParent() throws Exception { final int primaryUserId = mUserManager.getPrimaryUser().id; UserInfo userInfo = createProfileForUser("Profile", UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); assertNotNull(userInfo); UserInfo parentProfileInfo = mUserManager.getProfileParent(userInfo.id); assertNotNull(parentProfileInfo); assertEquals(parentProfileInfo.id, primaryUserId); } // Make sure only one managed profile can be created // Make sure only one managed profile can be created @MediumTest public void testAddManagedProfile() throws Exception { public void testAddManagedProfile() throws Exception { final int primaryUserId = mUserManager.getPrimaryUser().id; final int primaryUserId = mUserManager.getPrimaryUser().id; UserInfo userInfo1 = createProfileForUser("Managed 1", UserInfo userInfo1 = createProfileForUser("Managed 1", UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); UserInfo userInfo2 = createProfileForUser("Managed 2", UserInfo userInfo2 = createProfileForUser("Managed 2", UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); UserInfo.FLAG_MANAGED_PROFILE, primaryUserId); assertNotNull(userInfo1); assertNotNull(userInfo1); assertNull(userInfo2); assertNull(userInfo2); // Verify that current user is not a managed profile // Verify that current user is not a managed profile assertFalse(mUserManager.isManagedProfile()); assertFalse(mUserManager.isManagedProfile()); } } @MediumTest public void testAddRestrictedProfile() throws Exception { UserInfo userInfo = createRestrictedProfile("Profile"); assertNotNull(userInfo); Bundle restrictions = mUserManager.getUserRestrictions(UserHandle.of(userInfo.id)); assertTrue("Restricted profile should have DISALLOW_MODIFY_ACCOUNTS restriction by default", restrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS)); assertTrue("Restricted profile should have DISALLOW_SHARE_LOCATION restriction by default", restrictions.getBoolean(UserManager.DISALLOW_SHARE_LOCATION)); int locationMode = Settings.Secure.getIntForUser(getContext().getContentResolver(), Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_HIGH_ACCURACY, userInfo.id); assertEquals("Restricted profile should have setting LOCATION_MODE set to " + "LOCATION_MODE_OFF by default", locationMode, Settings.Secure.LOCATION_MODE_OFF); } @MediumTest public void testGetUserCreationTime() throws Exception { public void testGetUserCreationTime() throws Exception { final int primaryUserId = mUserManager.getPrimaryUser().id; final int primaryUserId = mUserManager.getPrimaryUser().id; UserInfo profile = createProfileForUser("Managed 1", UserInfo profile = createProfileForUser("Managed 1", Loading Loading @@ -177,7 +236,6 @@ public class UserManagerTest extends AndroidTestCase { } } } } private boolean findUser(int id) { private boolean findUser(int id) { List<UserInfo> list = mUserManager.getUsers(); List<UserInfo> list = mUserManager.getUsers(); Loading @@ -189,6 +247,7 @@ public class UserManagerTest extends AndroidTestCase { return false; return false; } } @MediumTest public void testSerialNumber() { public void testSerialNumber() { UserInfo user1 = createUser("User 1", 0); UserInfo user1 = createUser("User 1", 0); int serialNumber1 = user1.serialNumber; int serialNumber1 = user1.serialNumber; Loading @@ -201,6 +260,7 @@ public class UserManagerTest extends AndroidTestCase { assertEquals(user2.id, mUserManager.getUserHandle(serialNumber2)); assertEquals(user2.id, mUserManager.getUserHandle(serialNumber2)); } } @MediumTest public void testGetSerialNumbersOfUsers() { public void testGetSerialNumbersOfUsers() { UserInfo user1 = createUser("User 1", 0); UserInfo user1 = createUser("User 1", 0); UserInfo user2 = createUser("User 2", 0); UserInfo user2 = createUser("User 2", 0); Loading @@ -212,6 +272,7 @@ public class UserManagerTest extends AndroidTestCase { ArrayUtils.contains(serialNumbersOfUsers, user2.serialNumber)); ArrayUtils.contains(serialNumbersOfUsers, user2.serialNumber)); } } @MediumTest public void testMaxUsers() { public void testMaxUsers() { int N = UserManager.getMaxSupportedUsers(); int N = UserManager.getMaxSupportedUsers(); int count = mUserManager.getUsers().size(); int count = mUserManager.getUsers().size(); Loading @@ -226,6 +287,17 @@ public class UserManagerTest extends AndroidTestCase { assertNull(extra); assertNull(extra); } } @MediumTest public void testGetUserCount() { int count = mUserManager.getUsers().size(); UserInfo user1 = createUser("User 1", 0); assertNotNull(user1); UserInfo user2 = createUser("User 2", 0); assertNotNull(user2); assertEquals(count + 2, mUserManager.getUserCount()); } @MediumTest public void testRestrictions() { public void testRestrictions() { UserInfo testUser = createUser("User 1", 0); UserInfo testUser = createUser("User 1", 0); Loading @@ -241,18 +313,66 @@ public class UserManagerTest extends AndroidTestCase { assertEquals(stored.getBoolean(UserManager.DISALLOW_INSTALL_APPS), true); assertEquals(stored.getBoolean(UserManager.DISALLOW_INSTALL_APPS), true); } } @MediumTest public void testSetDefaultGuestRestrictions() { final Bundle origGuestRestrictions = mUserManager.getDefaultGuestRestrictions(); Bundle restrictions = new Bundle(); restrictions.putBoolean(UserManager.DISALLOW_FUN, true); mUserManager.setDefaultGuestRestrictions(restrictions); try { UserInfo guest = createUser("Guest", UserInfo.FLAG_GUEST); assertNotNull(guest); assertTrue(mUserManager.hasUserRestriction(UserManager.DISALLOW_FUN, guest.getUserHandle())); } finally { mUserManager.setDefaultGuestRestrictions(origGuestRestrictions); } } @LargeTest public void testSwitchUser() { ActivityManager am = getContext().getSystemService(ActivityManager.class); final int startUser = am.getCurrentUser(); UserInfo user = createUser("User", 0); assertNotNull(user); // Switch to the user just created. switchUser(user.id); // Switch back to the starting user. switchUser(startUser); } private void switchUser(int userId) { synchronized (mUserSwitchLock) { ActivityManager am = getContext().getSystemService(ActivityManager.class); am.switchUser(userId); long time = System.currentTimeMillis(); while (am.getCurrentUser() != userId) { try { mUserSwitchLock.wait(SWITCH_CHECK_INTERVAL_MILLIS); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); return; } if (System.currentTimeMillis() - time > SWITCH_USER_TIMEOUT_MILLIS) { fail("Timeout waiting for the user switch to u" + userId); } } } } private void removeUser(int userId) { private void removeUser(int userId) { synchronized (mUserLock) { synchronized (mUserRemoveLock) { mUserManager.removeUser(userId); mUserManager.removeUser(userId); long time = System.currentTimeMillis(); long time = System.currentTimeMillis(); while (mUserManager.getUserInfo(userId) != null) { while (mUserManager.getUserInfo(userId) != null) { try { try { mUserLock.wait(REMOVE_CHECK_INTERVAL); mUserRemoveLock.wait(REMOVE_CHECK_INTERVAL_MILLIS); } catch (InterruptedException ie) { } catch (InterruptedException ie) { Thread.currentThread().interrupt(); Thread.currentThread().interrupt(); return; return; } } if (System.currentTimeMillis() - time > REMOVE_TIMEOUT) { if (System.currentTimeMillis() - time > REMOVE_TIMEOUT_MILLIS) { fail("Timeout waiting for removeUser. userId = " + userId); fail("Timeout waiting for removeUser. userId = " + userId); } } } } Loading @@ -275,4 +395,11 @@ public class UserManagerTest extends AndroidTestCase { return profile; return profile; } } private UserInfo createRestrictedProfile(String name) { UserInfo profile = mUserManager.createRestrictedProfile(name); if (profile != null) { usersToRemove.add(profile.id); } return profile; } } }