From 3cb2b49f443a31b1bb043d0450e350b95acecc8b Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Tue, 9 Aug 2016 17:20:57 -0700 Subject: [PATCH] Fixing admins not being removed from DpmMockContext We were not calling setActiveAdmin before calling setDeviceOwner or setProfileOwner in these tests. They were passing because the admins were not being properly removed in the first place. The admin is actually removed from the admin list inside onReceive of the receiver passed in sendOrderedBroadcastForUser, which was not overridden to call onReceive in DpmMockContext. Bug: 30726135 Change-Id: I08cab5821228738196b229a8f885f7488aaafa34 --- .../devicepolicy/DevicePolicyManagerTest.java | 32 +++++-------------- .../server/devicepolicy/DpmMockContext.java | 1 + 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 3a2e946e617fb..2d96bff29bd7c 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -27,7 +27,6 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.wifi.WifiInfo; import android.os.Build.VERSION_CODES; -import android.os.Build; import android.os.Bundle; import android.os.Process; import android.os.UserHandle; @@ -42,7 +41,6 @@ import android.util.Pair; import com.android.server.LocalServices; import com.android.server.SystemService; -import org.mockito.ArgumentCaptor; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -62,7 +60,6 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; -import static org.mockito.Mockito.validateMockitoUsage; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -454,8 +451,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { .thenReturn(true); dpm.removeActiveAdmin(admin1); - - assertTrue(dpm.isRemovingAdmin(admin1, DpmMockContext.CALLER_USER_HANDLE)); + assertFalse(dpm.isAdminActiveAsUser(admin1, DpmMockContext.CALLER_USER_HANDLE)); } /** @@ -479,8 +475,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { mContext.binder.callingUid = 1234567; dpms.removeActiveAdmin(admin1, DpmMockContext.CALLER_USER_HANDLE); - - assertTrue(dpm.isRemovingAdmin(admin1, DpmMockContext.CALLER_USER_HANDLE)); + assertFalse(dpm.isAdminActiveAsUser(admin1, DpmMockContext.CALLER_USER_HANDLE)); // TODO DO Still can't be removed in this case. } @@ -510,28 +505,18 @@ public class DevicePolicyManagerTest extends DpmTestBase { mContext.callerPermissions.clear(); dpm.removeActiveAdmin(admin1); - final ArgumentCaptor brCap = - ArgumentCaptor.forClass(BroadcastReceiver.class); - - // Is removing now, but not removed yet. - assertTrue(dpm.isAdminActive(admin1)); - assertTrue(dpm.isRemovingAdmin(admin1, DpmMockContext.CALLER_USER_HANDLE)); - verify(mContext.spiedContext).sendOrderedBroadcastAsUser( MockUtils.checkIntentAction( DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED), MockUtils.checkUserHandle(DpmMockContext.CALLER_USER_HANDLE), isNull(String.class), - brCap.capture(), + any(BroadcastReceiver.class), eq(dpms.mHandler), eq(Activity.RESULT_OK), isNull(String.class), isNull(Bundle.class)); - brCap.getValue().onReceive(mContext, null); - - assertFalse(dpm.isAdminActive(admin1)); - assertFalse(dpm.isRemovingAdmin(admin1, DpmMockContext.CALLER_USER_HANDLE)); + assertFalse(dpm.isAdminActiveAsUser(admin1, DpmMockContext.CALLER_USER_HANDLE)); // Again broadcast from saveSettingsLocked(). verify(mContext.spiedContext, times(2)).sendBroadcastAsUser( @@ -853,9 +838,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { MockUtils.checkUserRestrictions() ); - assertTrue(dpm.isAdminActive(admin1)); - assertTrue(dpm.isRemovingAdmin(admin1, UserHandle.USER_SYSTEM)); - + assertFalse(dpm.isAdminActiveAsUser(admin1, UserHandle.USER_SYSTEM)); // TODO Check other calls. } @@ -945,7 +928,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { // Check assertFalse(dpm.isProfileOwnerApp(admin1.getPackageName())); - assertTrue(dpm.isRemovingAdmin(admin1, DpmMockContext.CALLER_USER_HANDLE)); + assertFalse(dpm.isAdminActiveAsUser(admin1, DpmMockContext.CALLER_USER_HANDLE)); } public void testSetProfileOwner_failures() throws Exception { @@ -1477,7 +1460,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { // Remove PO. dpm.clearProfileOwner(admin1); - + dpm.setActiveAdmin(admin1, false); // Test 4, Caller is DO now. assertTrue(dpm.setDeviceOwner(admin1, null, UserHandle.USER_SYSTEM)); @@ -1526,6 +1509,7 @@ public class DevicePolicyManagerTest extends DpmTestBase { // Remove PO and add DO. dpm.clearProfileOwner(admin1); + dpm.setActiveAdmin(admin1, false); assertTrue(dpm.setDeviceOwner(admin1, null, UserHandle.USER_SYSTEM)); // admin1 is DO. diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java index f6e35f54f7d4b..0783afc0dfd46 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java @@ -527,6 +527,7 @@ public class DpmMockContext extends MockContext { int initialCode, String initialData, Bundle initialExtras) { spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras); + resultReceiver.onReceive(spiedContext, intent); } @Override