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

Commit ed198b87 authored by Felipe Leme's avatar Felipe Leme
Browse files

Minor improvements on FrameworksMockingServicesTests:

- Abstract common mock expectations.
- Add more logging.
- Use constants.
- Remove redundant MockitoAnnotations.initMocks() call (it was
  already initialized by ExtendedMockitoRule).

Test: atest FrameworksMockingServicesTests:UserManagerServiceMockedTest
Bug: 407838236
Flag: TEST_ONLY

Change-Id: Iec665f326bf28707714aaceaed38cd5240e4855c
parent 5bcd67ee
Loading
Loading
Loading
Loading
+14 −2
Original line number Original line Diff line number Diff line
@@ -53,6 +53,7 @@ import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManager;
import android.annotation.ColorRes;
import android.annotation.ColorRes;
import android.annotation.DrawableRes;
import android.annotation.DrawableRes;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.RequiresPermission;
@@ -196,6 +197,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
import java.util.Collections;
import java.util.Collections;
@@ -350,8 +353,17 @@ public class UserManagerService extends IUserManager.Stub {
    private static final String TRON_DEMO_CREATED = "users_demo_created";
    private static final String TRON_DEMO_CREATED = "users_demo_created";


    // The boot user strategy for HSUM.
    // The boot user strategy for HSUM.
    private static final int BOOT_TO_PREVIOUS_OR_FIRST_SWITCHABLE_USER = 0;
    @VisibleForTesting
    private static final int BOOT_TO_HSU_FOR_PROVISIONED_DEVICE = 1;
    static final int BOOT_TO_PREVIOUS_OR_FIRST_SWITCHABLE_USER = 0;
    @VisibleForTesting
    static final int BOOT_TO_HSU_FOR_PROVISIONED_DEVICE = 1;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef(flag = false, prefix = { "BOOT_TO_" }, value = {
            BOOT_TO_PREVIOUS_OR_FIRST_SWITCHABLE_USER,
            BOOT_TO_HSU_FOR_PROVISIONED_DEVICE})
    @VisibleForTesting
    @interface BootStrategy {}


    private final Context mContext;
    private final Context mContext;
    private final PackageManagerService mPm;
    private final PackageManagerService mPm;
+24 −15
Original line number Original line Diff line number Diff line
@@ -34,6 +34,8 @@ import static android.os.UserManager.USER_TYPE_PROFILE_SUPERVISING;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.server.pm.UserManagerService.BOOT_TO_HSU_FOR_PROVISIONED_DEVICE;
import static com.android.server.pm.UserManagerService.BOOT_TO_PREVIOUS_OR_FIRST_SWITCHABLE_USER;


import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -85,6 +87,7 @@ import com.android.modules.utils.testing.ExtendedMockitoRule;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.am.UserState;
import com.android.server.am.UserState;
import com.android.server.locksettings.LockSettingsInternal;
import com.android.server.locksettings.LockSettingsInternal;
import com.android.server.pm.UserManagerService.BootStrategy;
import com.android.server.pm.UserManagerService.UserData;
import com.android.server.pm.UserManagerService.UserData;
import com.android.server.storage.DeviceStorageMonitorInternal;
import com.android.server.storage.DeviceStorageMonitorInternal;


@@ -96,7 +99,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserException;


@@ -199,7 +201,6 @@ public final class UserManagerServiceMockedTest {
    @Before
    @Before
    @UiThreadTest // Needed to initialize main handler
    @UiThreadTest // Needed to initialize main handler
    public void setFixtures() {
    public void setFixtures() {
        MockitoAnnotations.initMocks(this);
        mSpiedContext = spy(mRealContext);
        mSpiedContext = spy(mRealContext);


        // Disable binder caches in this process.
        // Disable binder caches in this process.
@@ -220,10 +221,9 @@ public final class UserManagerServiceMockedTest {
        // Called when getting boot user. config_hsumBootStrategy is 0 by default.
        // Called when getting boot user. config_hsumBootStrategy is 0 by default.
        mSpyResources = spy(mSpiedContext.getResources());
        mSpyResources = spy(mSpiedContext.getResources());
        when(mSpiedContext.getResources()).thenReturn(mSpyResources);
        when(mSpiedContext.getResources()).thenReturn(mSpyResources);
        doReturn(0)
        mockHsumBootStrategy(BOOT_TO_PREVIOUS_OR_FIRST_SWITCHABLE_USER);
                .when(mSpyResources)

                .getInteger(com.android.internal.R.integer.config_hsumBootStrategy);
        doReturn(mSpyResources).when(Resources::getSystem);
        doReturn(mSpyResources).when(() -> Resources.getSystem());


        // Must construct UserManagerService in the UiThread
        // Must construct UserManagerService in the UiThread
        mTestDir = new File(mRealContext.getDataDir(), "umstest");
        mTestDir = new File(mRealContext.getDataDir(), "umstest");
@@ -942,9 +942,7 @@ public final class UserManagerServiceMockedTest {
        addUser(USER_ID);
        addUser(USER_ID);
        addUser(OTHER_USER_ID);
        addUser(OTHER_USER_ID);
        mockProvisionedDevice(true);
        mockProvisionedDevice(true);
        doReturn(1)
        mockHsumBootStrategy(BOOT_TO_HSU_FOR_PROVISIONED_DEVICE);
                .when(mSpyResources)
                .getInteger(com.android.internal.R.integer.config_hsumBootStrategy);


        assertThat(mUms.getBootUser()).isEqualTo(UserHandle.USER_SYSTEM);
        assertThat(mUms.getBootUser()).isEqualTo(UserHandle.USER_SYSTEM);
    }
    }
@@ -955,9 +953,7 @@ public final class UserManagerServiceMockedTest {
        addUser(USER_ID);
        addUser(USER_ID);
        addUser(OTHER_USER_ID);
        addUser(OTHER_USER_ID);
        mockProvisionedDevice(false);
        mockProvisionedDevice(false);
        doReturn(1)
        mockHsumBootStrategy(BOOT_TO_HSU_FOR_PROVISIONED_DEVICE);
                .when(mSpyResources)
                .getInteger(com.android.internal.R.integer.config_hsumBootStrategy);
        // Even if the headless system user switchable flag is true, the boot user should be the
        // Even if the headless system user switchable flag is true, the boot user should be the
        // first switchable full user.
        // first switchable full user.
        mockCanSwitchToHeadlessSystemUser(true);
        mockCanSwitchToHeadlessSystemUser(true);
@@ -971,9 +967,7 @@ public final class UserManagerServiceMockedTest {
        setSystemUserHeadless(true);
        setSystemUserHeadless(true);
        removeNonSystemUsers();
        removeNonSystemUsers();
        mockProvisionedDevice(false);
        mockProvisionedDevice(false);
        doReturn(1)
        mockHsumBootStrategy(BOOT_TO_HSU_FOR_PROVISIONED_DEVICE);
                .when(mSpyResources)
                .getInteger(com.android.internal.R.integer.config_hsumBootStrategy);


        assertThrows(ServiceSpecificException.class,
        assertThrows(ServiceSpecificException.class,
                () -> mUms.getBootUser());
                () -> mUms.getBootUser());
@@ -1376,11 +1370,26 @@ public final class UserManagerServiceMockedTest {
    }
    }


    private void mockCanSwitchToHeadlessSystemUser(boolean canSwitch) {
    private void mockCanSwitchToHeadlessSystemUser(boolean canSwitch) {
        boolean previousValue = mSpyResources
                .getBoolean(com.android.internal.R.bool.config_canSwitchToHeadlessSystemUser);

        Log.d(TAG, "mockCanSwitchToHeadlessSystemUser(): will return " + canSwitch + " instad of "
                + previousValue);
        doReturn(canSwitch)
        doReturn(canSwitch)
                .when(mSpyResources)
                .when(mSpyResources)
                .getBoolean(com.android.internal.R.bool.config_canSwitchToHeadlessSystemUser);
                .getBoolean(com.android.internal.R.bool.config_canSwitchToHeadlessSystemUser);
    }
    }


    private void mockHsumBootStrategy(@BootStrategy int strategy) {
        int previousValue = mSpyResources
                .getInteger(com.android.internal.R.integer.config_hsumBootStrategy);
        Log.d(TAG,
                "mockHsumBootStrategy(): will return " + strategy + " instead of " + previousValue);
        doReturn(strategy)
                .when(mSpyResources)
                .getInteger(com.android.internal.R.integer.config_hsumBootStrategy);
    }

    private void mockUserIsInCall(boolean isInCall) {
    private void mockUserIsInCall(boolean isInCall) {
        when(mTelecomManager.isInCall()).thenReturn(isInCall);
        when(mTelecomManager.isInCall()).thenReturn(isInCall);
    }
    }