Merge "Move isUserSwitcherEnabled tests to mocked UserManagerServiceTest."
This commit is contained in:
committed by
Android (Google) Code Review
commit
a7ab744c73
@@ -15,12 +15,18 @@
|
||||
*/
|
||||
package com.android.server.pm;
|
||||
|
||||
import static android.os.UserManager.DISALLOW_USER_SWITCH;
|
||||
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.common.truth.Truth.assertWithMessage;
|
||||
|
||||
import static org.junit.Assert.assertThrows;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.any;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -30,6 +36,7 @@ import android.app.ActivityManagerInternal;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.os.storage.StorageManager;
|
||||
@@ -88,6 +95,7 @@ public final class UserManagerServiceTest {
|
||||
public final ExtendedMockitoRule mExtendedMockitoRule = new ExtendedMockitoRule.Builder(this)
|
||||
.spyStatic(UserManager.class)
|
||||
.spyStatic(LocalServices.class)
|
||||
.spyStatic(SystemProperties.class)
|
||||
.mockStatic(Settings.Global.class)
|
||||
.build();
|
||||
|
||||
@@ -402,6 +410,115 @@ public final class UserManagerServiceTest {
|
||||
.isEqualTo(USER_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnMultiUserSettings() throws Exception {
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
mockUserSwitcherEnabled(false);
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
|
||||
|
||||
mockUserSwitcherEnabled(true);
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnMaxSupportedUsers() throws Exception {
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
mockMaxSupportedUsers(/* maxUsers= */ 1);
|
||||
assertThat(UserManager.supportsMultipleUsers()).isFalse();
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
|
||||
|
||||
mockMaxSupportedUsers(/* maxUsers= */ 8);
|
||||
assertThat(UserManager.supportsMultipleUsers()).isTrue();
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabled() throws Exception {
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
mockMaxSupportedUsers(/* maxUsers= */ 8);
|
||||
assertThat(mUms.isUserSwitcherEnabled(true, USER_ID)).isTrue();
|
||||
|
||||
mockUserSwitcherEnabled(false);
|
||||
assertThat(mUms.isUserSwitcherEnabled(true, USER_ID)).isFalse();
|
||||
|
||||
mockUserSwitcherEnabled(true);
|
||||
assertThat(mUms.isUserSwitcherEnabled(false, USER_ID)).isTrue();
|
||||
|
||||
mUms.setUserRestriction(DISALLOW_USER_SWITCH, true, USER_ID);
|
||||
assertThat(mUms.isUserSwitcherEnabled(false, USER_ID)).isFalse();
|
||||
|
||||
mUms.setUserRestriction(DISALLOW_USER_SWITCH, false, USER_ID);
|
||||
mockMaxSupportedUsers(1);
|
||||
assertThat(mUms.isUserSwitcherEnabled(true, USER_ID)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnShowMultiuserUI() throws Exception {
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
mockShowMultiuserUI(/* show= */ false);
|
||||
assertThat(UserManager.supportsMultipleUsers()).isFalse();
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
|
||||
|
||||
mockShowMultiuserUI(/* show= */ true);
|
||||
assertThat(UserManager.supportsMultipleUsers()).isTrue();
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnUserRestrictions() throws Exception {
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
mUms.setUserRestriction(DISALLOW_USER_SWITCH, true, USER_ID);
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
|
||||
|
||||
mUms.setUserRestriction(DISALLOW_USER_SWITCH, false, USER_ID);
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnDemoMode() throws Exception {
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
mockDeviceDemoMode(/* enabled= */ true);
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
|
||||
|
||||
mockDeviceDemoMode(/* enabled= */ false);
|
||||
assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
|
||||
}
|
||||
|
||||
private void resetUserSwitcherEnabled() {
|
||||
mUms.putUserInfo(new UserInfo(USER_ID, "Test User", 0));
|
||||
mUms.setUserRestriction(DISALLOW_USER_SWITCH, false, USER_ID);
|
||||
mockUserSwitcherEnabled(/* enabled= */ true);
|
||||
mockDeviceDemoMode(/* enabled= */ false);
|
||||
mockMaxSupportedUsers(/* maxUsers= */ 8);
|
||||
mockShowMultiuserUI(/* show= */ true);
|
||||
}
|
||||
|
||||
private void mockUserSwitcherEnabled(boolean enabled) {
|
||||
doReturn(enabled ? 1 : 0).when(() -> Settings.Global.getInt(
|
||||
any(), eq(android.provider.Settings.Global.USER_SWITCHER_ENABLED), anyInt()));
|
||||
}
|
||||
|
||||
private void mockDeviceDemoMode(boolean enabled) {
|
||||
doReturn(enabled ? 1 : 0).when(() -> Settings.Global.getInt(
|
||||
any(), eq(android.provider.Settings.Global.DEVICE_DEMO_MODE), anyInt()));
|
||||
}
|
||||
|
||||
private void mockMaxSupportedUsers(int maxUsers) {
|
||||
doReturn(maxUsers).when(() ->
|
||||
SystemProperties.getInt(eq("fw.max_users"), anyInt()));
|
||||
}
|
||||
|
||||
private void mockShowMultiuserUI(boolean show) {
|
||||
doReturn(show).when(() ->
|
||||
SystemProperties.getBoolean(eq("fw.show_multiuserui"), anyBoolean()));
|
||||
}
|
||||
|
||||
private void mockCurrentUser(@UserIdInt int userId) {
|
||||
mockGetLocalService(ActivityManagerInternal.class, mActivityManagerInternal);
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ package com.android.server.pm;
|
||||
import static android.os.UserManager.DISALLOW_USER_SWITCH;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.common.truth.Truth.assertWithMessage;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.app.PropertyInvalidatedCache;
|
||||
@@ -29,7 +28,6 @@ import android.os.Bundle;
|
||||
import android.os.FileUtils;
|
||||
import android.os.Looper;
|
||||
import android.os.Parcelable;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.platform.test.annotations.Postsubmit;
|
||||
@@ -72,10 +70,6 @@ public class UserManagerServiceTest {
|
||||
|
||||
LocalServices.removeServiceForTest(UserManagerInternal.class);
|
||||
mUserManagerService = new UserManagerService(InstrumentationRegistry.getContext());
|
||||
// Put the current user to mUsers. UMS can't find userlist.xml, and fallbackToSingleUserLP.
|
||||
mUserManagerService.putUserInfo(
|
||||
new UserInfo(ActivityManager.getCurrentUser(), "Current User", 0));
|
||||
|
||||
restrictionsFile = new File(mContext.getCacheDir(), "restrictions.xml");
|
||||
restrictionsFile.delete();
|
||||
}
|
||||
@@ -198,129 +192,8 @@ public class UserManagerServiceTest {
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnMultiUserSettings() throws Exception {
|
||||
int userId = ActivityManager.getCurrentUser();
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
setUserSwitch(false);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
|
||||
|
||||
setUserSwitch(true);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnMaxSupportedUsers() throws Exception {
|
||||
int userId = ActivityManager.getCurrentUser();
|
||||
setMaxSupportedUsers(1);
|
||||
|
||||
assertThat(UserManager.supportsMultipleUsers()).isFalse();
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
|
||||
|
||||
setMaxSupportedUsers(8);
|
||||
|
||||
assertThat(UserManager.supportsMultipleUsers()).isTrue();
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabled() throws Exception {
|
||||
int userId = ActivityManager.getCurrentUser();
|
||||
setMaxSupportedUsers(8);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isTrue();
|
||||
|
||||
setUserSwitch(false);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isFalse();
|
||||
|
||||
setUserSwitch(true);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(false, userId)).isTrue();
|
||||
|
||||
mUserManagerService.setUserRestriction(UserManager.DISALLOW_ADD_USER, true, userId);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(false, userId)).isFalse();
|
||||
|
||||
mUserManagerService.setUserRestriction(UserManager.DISALLOW_ADD_USER, false, userId);
|
||||
setMaxSupportedUsers(1);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnShowMultiuserUI() throws Exception {
|
||||
int userId = ActivityManager.getCurrentUser();
|
||||
setShowMultiuserUI(false);
|
||||
|
||||
assertThat(UserManager.supportsMultipleUsers()).isFalse();
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
|
||||
|
||||
setShowMultiuserUI(true);
|
||||
|
||||
assertThat(UserManager.supportsMultipleUsers()).isTrue();
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnUserRestrictions() throws Exception {
|
||||
int userId = ActivityManager.getCurrentUser();
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
mUserManagerService.setUserRestriction(DISALLOW_USER_SWITCH, true, userId);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
|
||||
|
||||
mUserManagerService.setUserRestriction(DISALLOW_USER_SWITCH, false, userId);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertIsUserSwitcherEnabledOnDemoMode() throws Exception {
|
||||
int userId = ActivityManager.getCurrentUser();
|
||||
resetUserSwitcherEnabled();
|
||||
|
||||
setDeviceDemoMode(true);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
|
||||
|
||||
setDeviceDemoMode(false);
|
||||
assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
|
||||
}
|
||||
|
||||
private void resetUserSwitcherEnabled() throws Exception {
|
||||
int userId = ActivityManager.getCurrentUser();
|
||||
setUserSwitch(true);
|
||||
setShowMultiuserUI(true);
|
||||
setDeviceDemoMode(false);
|
||||
setMaxSupportedUsers(8);
|
||||
mUserManagerService.setUserRestriction(DISALLOW_USER_SWITCH, false, userId);
|
||||
}
|
||||
|
||||
private void setUserSwitch(boolean enabled) {
|
||||
android.provider.Settings.Global.putInt(mContext.getContentResolver(),
|
||||
android.provider.Settings.Global.USER_SWITCHER_ENABLED, enabled ? 1 : 0);
|
||||
}
|
||||
|
||||
private void setDeviceDemoMode(boolean enabled) {
|
||||
android.provider.Settings.Global.putInt(mContext.getContentResolver(),
|
||||
android.provider.Settings.Global.DEVICE_DEMO_MODE, enabled ? 1 : 0);
|
||||
}
|
||||
|
||||
|
||||
private static String runShellCommand(String cmd) throws Exception {
|
||||
return UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
|
||||
.executeShellCommand(cmd);
|
||||
}
|
||||
|
||||
private static String setSystemProperty(String name, String value) throws Exception {
|
||||
final String oldValue = runShellCommand("getprop " + name);
|
||||
assertWithMessage("can not set system property")
|
||||
.that(runShellCommand("setprop " + name + " " + value)).isEqualTo("");
|
||||
assertWithMessage("failed to set system property")
|
||||
.that(SystemProperties.get(name)).isEqualTo(value);
|
||||
return oldValue;
|
||||
}
|
||||
|
||||
private static void setMaxSupportedUsers(int max) throws Exception {
|
||||
setSystemProperty("fw.max_users", String.valueOf(max));
|
||||
}
|
||||
|
||||
public static void setShowMultiuserUI(boolean show) throws Exception {
|
||||
setSystemProperty("fw.show_multiuserui", String.valueOf(show));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user