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

Commit 4eefc315 authored by Pavel Grafov's avatar Pavel Grafov
Browse files

Fix DPMS unit tests.

Currently these tests fail because of an attempt to register the same
service more than once in a static map, which leads to an exception.
Make DevicePolicyManagerTestable unregister them before constructing
DPMS, so that it doesn't have to be done in every test.

Bug: 228842216
Test: atest com.android.server.devicepolicy
Change-Id: I43d10193779edf7909d77863f13ecdccfa383473
parent 118e6bac
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.admin.DevicePolicyManagerLiteInternal;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -50,7 +48,6 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;

import com.android.frameworks.servicestests.R;
import com.android.server.LocalServices;
import com.android.server.SystemService;

import org.junit.Before;
@@ -164,9 +161,6 @@ public class DevicePolicyManagerServiceMigrationTest extends DpmTestBase {

        final long ident = mContext.binder.clearCallingIdentity();
        try {
            LocalServices.removeServiceForTest(DevicePolicyManagerLiteInternal.class);
            LocalServices.removeServiceForTest(DevicePolicyManagerInternal.class);

            dpms = new DevicePolicyManagerServiceTestable(getServices(), mContext);

            dpms.systemReady(SystemService.PHASE_LOCK_SETTINGS_READY);
@@ -278,9 +272,6 @@ public class DevicePolicyManagerServiceMigrationTest extends DpmTestBase {

        final long ident = mContext.binder.clearCallingIdentity();
        try {
            LocalServices.removeServiceForTest(DevicePolicyManagerLiteInternal.class);
            LocalServices.removeServiceForTest(DevicePolicyManagerInternal.class);

            dpms = new DevicePolicyManagerServiceTestable(getServices(), mContext);

            dpms.systemReady(SystemService.PHASE_LOCK_SETTINGS_READY);
@@ -347,9 +338,6 @@ public class DevicePolicyManagerServiceMigrationTest extends DpmTestBase {
        // (Need clearCallingIdentity() to pass permission checks.)
        final long ident = mContext.binder.clearCallingIdentity();
        try {
            LocalServices.removeServiceForTest(DevicePolicyManagerLiteInternal.class);
            LocalServices.removeServiceForTest(DevicePolicyManagerInternal.class);

            dpms = new DevicePolicyManagerServiceTestable(getServices(), mContext);

            dpms.systemReady(SystemService.PHASE_LOCK_SETTINGS_READY);
@@ -508,9 +496,6 @@ public class DevicePolicyManagerServiceMigrationTest extends DpmTestBase {
        DevicePolicyManagerServiceTestable dpms;
        final long ident = mContext.binder.clearCallingIdentity();
        try {
            LocalServices.removeServiceForTest(DevicePolicyManagerLiteInternal.class);
            LocalServices.removeServiceForTest(DevicePolicyManagerInternal.class);

            dpms = new DevicePolicyManagerServiceTestable(getServices(), mContext);

            dpms.systemReady(SystemService.PHASE_LOCK_SETTINGS_READY);
+15 −1
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.app.IActivityManager;
import android.app.IActivityTaskManager;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.admin.DevicePolicyManagerLiteInternal;
import android.app.backup.IBackupManager;
import android.app.usage.UsageStatsManagerInternal;
import android.content.Context;
@@ -49,6 +51,7 @@ import androidx.annotation.NonNull;
import com.android.internal.util.FunctionalUtils.ThrowingRunnable;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockSettingsInternal;
import com.android.server.LocalServices;
import com.android.server.PersistentDataBlockManagerInternal;
import com.android.server.net.NetworkPolicyManagerInternal;
import com.android.server.pm.UserManagerInternal;
@@ -99,11 +102,22 @@ public class DevicePolicyManagerServiceTestable extends DevicePolicyManagerServi
    }

    private DevicePolicyManagerServiceTestable(MockInjector injector) {
        super(injector);
        super(unregisterLocalServices(injector));
        mMockInjector = injector;
        this.context = injector.context;
    }

    /**
     * Unregisters local services to avoid IllegalStateException when DPMS ctor re-registers them.
     * This is made into a static method to circumvent the requirement to call super() first.
     * Returns its parameter as is.
     */
    private static MockInjector unregisterLocalServices(MockInjector injector) {
        LocalServices.removeServiceForTest(DevicePolicyManagerLiteInternal.class);
        LocalServices.removeServiceForTest(DevicePolicyManagerInternal.class);
        return injector;
    }

    public void notifyChangeToContentObserver(Uri uri, int userHandle) {
        ContentObserver co = mMockInjector.mContentObservers.get(new Pair<>(uri, userHandle));
        if (co != null) {
+0 −4
Original line number Diff line number Diff line
@@ -328,8 +328,6 @@ public class DevicePolicyManagerTest extends DpmTestBase {
    private void initializeDpms() {
        // Need clearCallingIdentity() to pass permission checks.
        final long ident = mContext.binder.clearCallingIdentity();
        LocalServices.removeServiceForTest(DevicePolicyManagerLiteInternal.class);
        LocalServices.removeServiceForTest(DevicePolicyManagerInternal.class);

        dpms = new DevicePolicyManagerServiceTestable(getServices(), mContext);
        dpms.systemReady(SystemService.PHASE_LOCK_SETTINGS_READY);
@@ -417,8 +415,6 @@ public class DevicePolicyManagerTest extends DpmTestBase {
        when(getServices().packageManager.hasSystemFeature(eq(PackageManager.FEATURE_DEVICE_ADMIN)))
                .thenReturn(false);

        LocalServices.removeServiceForTest(DevicePolicyManagerInternal.class);
        LocalServices.removeServiceForTest(DevicePolicyManagerLiteInternal.class);
        new DevicePolicyManagerServiceTestable(getServices(), mContext);

        // If the device has no DPMS feature, it shouldn't register the local service.
+0 −4
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import static org.mockito.Mockito.verify;

import android.app.admin.ConnectEvent;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.admin.DnsEvent;
import android.app.admin.NetworkEvent;
import android.content.Intent;
@@ -40,8 +39,6 @@ import android.os.UserHandle;
import android.os.test.TestLooper;
import android.test.suitebuilder.annotation.SmallTest;

import com.android.server.LocalServices;

import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@@ -66,7 +63,6 @@ public class NetworkEventTest extends DpmTestBase {
                android.Manifest.permission.MANAGE_DEVICE_ADMINS);
        doNothing().when(mSpiedDpmMockContext).sendBroadcastAsUser(any(Intent.class),
                any(UserHandle.class));
        LocalServices.removeServiceForTest(DevicePolicyManagerInternal.class);
        mDpmTestable = new DevicePolicyManagerServiceTestable(getServices(), mSpiedDpmMockContext);
        setUpPackageManagerForAdmin(admin1, DpmMockContext.CALLER_UID);
        mDpmTestable.setActiveAdmin(admin1, true, DpmMockContext.CALLER_USER_HANDLE);