summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yasin Kilicdere <tyk@google.com> 2023-07-04 15:33:09 +0100
committer Yasin Kilicdere <tyk@google.com> 2023-07-04 17:47:10 +0100
commit815d11a99e62498224fe6a52f5b968409c0c108a (patch)
treebed3d2d4e926e6036aefbac0eb700467f807e592
parentf0568174d94330ff753f94e20a06b653a91bc53c (diff)
Move isUserSwitcherEnabled tests to mocked UserManagerServiceTest.
In servicestests.UserManagerServiceTest, isUserSwitcherEnabled tests are trying to set some system properties, but it is failing with "SELinux permission check failed" error. This CL moves these test methods to mockingservicestests.UserManagerServiceTest and mock some of those dependencies, and properly test UMS.isUserSwitcherEnabled method without failures. Bug: 264667464 Bug: 264667776 Bug: 264666926 Test: atest UserManagerServiceTest Change-Id: I7a5c2becfbab023bdbb2d5f5b3a1415a28225be2
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java117
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java127
2 files changed, 117 insertions, 127 deletions
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
index 60c15fe635ff..0664ab8f5519 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
@@ -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);
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
index d94f10dfa7ea..8fc670472685 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
@@ -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));
- }
}