Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7ab744c authored by Yasin Kilicdere's avatar Yasin Kilicdere Committed by Android (Google) Code Review
Browse files

Merge "Move isUserSwitcherEnabled tests to mocked UserManagerServiceTest."

parents 47f51a70 815d11a9
Loading
Loading
Loading
Loading
+117 −0
Original line number Diff line number Diff line
@@ -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);

+0 −127
Original line number Diff line number Diff line
@@ -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));
    }
}