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
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user