Loading tests/src/com/android/server/telecom/tests/BasicCallTests.java +3 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ import com.google.common.base.Predicate; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; Loading Loading @@ -473,6 +474,7 @@ public class BasicCallTests extends TelecomSystemTest { @LargeTest @Test @FlakyTest @Ignore("b/189904580") public void testIncomingCallFromBlockedNumberIsRejected() throws Exception { String phoneNumber = "650-555-1212"; blockNumber(phoneNumber); Loading @@ -492,6 +494,7 @@ public class BasicCallTests extends TelecomSystemTest { waitForHandlerAction(mConnectionServiceFixtureA.mConnectionServiceDelegate.getHandler(), TEST_TIMEOUT); assertEquals(1, mCallerInfoAsyncQueryFactoryFixture.mRequests.size()); for (CallerInfoAsyncQueryFactoryFixture.Request request : mCallerInfoAsyncQueryFactoryFixture.mRequests) { Loading tests/src/com/android/server/telecom/tests/ComponentContextFixture.java +19 −4 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.app.StatusBarManager; import android.app.UiModeManager; import android.app.role.RoleManager; import android.content.AttributionSource; import android.content.AttributionSourceState; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; Loading Loading @@ -61,6 +62,7 @@ import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.os.VibratorManager; import android.permission.PermissionCheckerManager; import android.telecom.CallAudioState; import android.telecom.ConnectionService; import android.telecom.Log; Loading @@ -84,7 +86,9 @@ import java.util.Locale; import java.util.Map; import java.util.concurrent.Executor; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.matches; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; Loading Loading @@ -215,6 +219,8 @@ public class ComponentContextFixture implements TestFixture<Context> { return mUiModeManager; case Context.VIBRATOR_MANAGER_SERVICE: return mVibratorManager; case Context.PERMISSION_CHECKER_SERVICE: return mPermissionCheckerManager; default: return null; } Loading @@ -240,6 +246,8 @@ public class ComponentContextFixture implements TestFixture<Context> { return Context.UI_MODE_SERVICE; } else if (svcClass == VibratorManager.class) { return Context.VIBRATOR_MANAGER_SERVICE; } else if (svcClass == PermissionCheckerManager.class) { return Context.PERMISSION_CHECKER_SERVICE; } throw new UnsupportedOperationException(); } Loading Loading @@ -516,6 +524,8 @@ public class ComponentContextFixture implements TestFixture<Context> { mock(TelephonyRegistryManager.class); private final VibratorManager mVibratorManager = mock(VibratorManager.class); private final UiModeManager mUiModeManager = mock(UiModeManager.class); private final PermissionCheckerManager mPermissionCheckerManager = mock(PermissionCheckerManager.class); private final PermissionInfo mPermissionInfo = mock(PermissionInfo.class); private TelecomManager mTelecomManager = mock(TelecomManager.class); Loading Loading @@ -570,9 +580,10 @@ public class ComponentContextFixture implements TestFixture<Context> { }).when(mPackageManager).queryBroadcastReceiversAsUser((Intent) any(), anyInt(), anyInt()); // By default, tests use non-ui apps instead of 3rd party companion apps. when(mPackageManager.checkPermission( matches(Manifest.permission.CALL_COMPANION_APP), anyString())) .thenReturn(PackageManager.PERMISSION_DENIED); when(mPermissionCheckerManager.checkPermission( matches(Manifest.permission.CALL_COMPANION_APP), any(AttributionSourceState.class), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PermissionCheckerManager.PERMISSION_HARD_DENIED); try { when(mPackageManager.getPermissionInfo(anyString(), anyInt())).thenReturn( Loading Loading @@ -649,11 +660,15 @@ public class ComponentContextFixture implements TestFixture<Context> { serviceInfo.name = componentName.getClassName(); mServiceInfoByComponentName.put(componentName, serviceInfo); // Used in InCallController to check permissions for CONTROL_INCALL_EXPERIENCE // Used in InCallController to check permissions for CONTROL_INCALL_fvEXPERIENCE when(mPackageManager.getPackagesForUid(eq(uid))).thenReturn(new String[] { componentName.getPackageName() }); when(mPackageManager.checkPermission(eq(Manifest.permission.CONTROL_INCALL_EXPERIENCE), eq(componentName.getPackageName()))).thenReturn(PackageManager.PERMISSION_GRANTED); when(mPermissionCheckerManager.checkPermission( eq(Manifest.permission.CONTROL_INCALL_EXPERIENCE), any(AttributionSourceState.class), anyString(), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())).thenReturn(PackageManager.PERMISSION_GRANTED); } public void addIntentReceiver(String action, ComponentName name) { Loading tests/src/com/android/server/telecom/tests/InCallControllerTests.java +57 −10 Original line number Diff line number Diff line Loading @@ -25,7 +25,9 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.matches; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; Loading @@ -42,11 +44,14 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppOpsManager; import android.app.Notification; import android.app.NotificationManager; import android.app.UiModeManager; import android.content.AttributionSource; import android.content.AttributionSourceState; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; Loading @@ -66,6 +71,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Process; import android.os.UserHandle; import android.permission.PermissionCheckerManager; import android.telecom.CallAudioState; import android.telecom.InCallService; import android.telecom.ParcelableCall; Loading Loading @@ -101,6 +107,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.MockitoSession; Loading @@ -111,6 +118,7 @@ import org.mockito.stubbing.Answer; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.concurrent.CompletableFuture; @RunWith(JUnit4.class) Loading @@ -120,6 +128,7 @@ public class InCallControllerTests extends TelecomTestCase { @Mock BluetoothHeadsetProxy mMockBluetoothHeadset; @Mock SystemStateHelper mMockSystemStateHelper; @Mock PackageManager mMockPackageManager; @Mock PermissionCheckerManager mMockPermissionCheckerManager; @Mock Call mMockCall; @Mock Resources mMockResources; @Mock AppOpsManager mMockAppOpsManager; Loading Loading @@ -185,6 +194,8 @@ public class InCallControllerTests extends TelecomTestCase { when(mMockCallsManager.getRoleManagerAdapter()).thenReturn(mMockRoleManagerAdapter); when(mMockContext.getSystemService(eq(Context.NOTIFICATION_SERVICE))) .thenReturn(mNotificationManager); when(mMockContext.getSystemService(eq(PermissionCheckerManager.class))) .thenReturn(mMockPermissionCheckerManager); when(mMockPackageManager.getPermissionInfo(anyString(), anyInt())).thenReturn( mMockPermissionInfo); when(mMockContext.getAttributionSource()).thenReturn(new AttributionSource(Process.myUid(), Loading Loading @@ -219,21 +230,37 @@ public class InCallControllerTests extends TelecomTestCase { } return null; }).when(mMockPackageManager).getPackagesForUid(anyInt()); when(mMockPackageManager.checkPermission( when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(COMPANION_PKG))).thenReturn(PackageManager.PERMISSION_DENIED); when(mMockPackageManager.checkPermission( matchesAttributionSourcePackage(COMPANION_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_DENIED); when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(CAR_PKG))).thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPackageManager.checkPermission( matchesAttributionSourcePackage(CAR_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(CAR2_PKG))).thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPackageManager.checkPermission( matchesAttributionSourcePackage(CAR2_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(NONUI_PKG))).thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPackageManager.checkPermission( matchesAttributionSourcePackage(NONUI_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(APPOP_NONUI_PKG))).thenReturn(PackageManager.PERMISSION_DENIED); matchesAttributionSourcePackage(APPOP_NONUI_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_DENIED); when(mMockCallsManager.getAudioState()).thenReturn(new CallAudioState(false, 0, 0)); } Loading Loading @@ -1489,4 +1516,24 @@ public class InCallControllerTests extends TelecomTestCase { ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED); } private static AttributionSourceState matchesAttributionSourcePackage( @Nullable String packageName) { return argThat(new PackageNameArgumentMatcher(packageName)); } private static class PackageNameArgumentMatcher implements ArgumentMatcher<AttributionSourceState> { @Nullable private final String mPackgeName; PackageNameArgumentMatcher(@Nullable String packageName) { mPackgeName = packageName; } @Override public boolean matches(@NonNull AttributionSourceState attributionSource) { return Objects.equals(mPackgeName, attributionSource.packageName); } } } Loading
tests/src/com/android/server/telecom/tests/BasicCallTests.java +3 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ import com.google.common.base.Predicate; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; Loading Loading @@ -473,6 +474,7 @@ public class BasicCallTests extends TelecomSystemTest { @LargeTest @Test @FlakyTest @Ignore("b/189904580") public void testIncomingCallFromBlockedNumberIsRejected() throws Exception { String phoneNumber = "650-555-1212"; blockNumber(phoneNumber); Loading @@ -492,6 +494,7 @@ public class BasicCallTests extends TelecomSystemTest { waitForHandlerAction(mConnectionServiceFixtureA.mConnectionServiceDelegate.getHandler(), TEST_TIMEOUT); assertEquals(1, mCallerInfoAsyncQueryFactoryFixture.mRequests.size()); for (CallerInfoAsyncQueryFactoryFixture.Request request : mCallerInfoAsyncQueryFactoryFixture.mRequests) { Loading
tests/src/com/android/server/telecom/tests/ComponentContextFixture.java +19 −4 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.app.StatusBarManager; import android.app.UiModeManager; import android.app.role.RoleManager; import android.content.AttributionSource; import android.content.AttributionSourceState; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; Loading Loading @@ -61,6 +62,7 @@ import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.os.VibratorManager; import android.permission.PermissionCheckerManager; import android.telecom.CallAudioState; import android.telecom.ConnectionService; import android.telecom.Log; Loading @@ -84,7 +86,9 @@ import java.util.Locale; import java.util.Map; import java.util.concurrent.Executor; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.matches; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; Loading Loading @@ -215,6 +219,8 @@ public class ComponentContextFixture implements TestFixture<Context> { return mUiModeManager; case Context.VIBRATOR_MANAGER_SERVICE: return mVibratorManager; case Context.PERMISSION_CHECKER_SERVICE: return mPermissionCheckerManager; default: return null; } Loading @@ -240,6 +246,8 @@ public class ComponentContextFixture implements TestFixture<Context> { return Context.UI_MODE_SERVICE; } else if (svcClass == VibratorManager.class) { return Context.VIBRATOR_MANAGER_SERVICE; } else if (svcClass == PermissionCheckerManager.class) { return Context.PERMISSION_CHECKER_SERVICE; } throw new UnsupportedOperationException(); } Loading Loading @@ -516,6 +524,8 @@ public class ComponentContextFixture implements TestFixture<Context> { mock(TelephonyRegistryManager.class); private final VibratorManager mVibratorManager = mock(VibratorManager.class); private final UiModeManager mUiModeManager = mock(UiModeManager.class); private final PermissionCheckerManager mPermissionCheckerManager = mock(PermissionCheckerManager.class); private final PermissionInfo mPermissionInfo = mock(PermissionInfo.class); private TelecomManager mTelecomManager = mock(TelecomManager.class); Loading Loading @@ -570,9 +580,10 @@ public class ComponentContextFixture implements TestFixture<Context> { }).when(mPackageManager).queryBroadcastReceiversAsUser((Intent) any(), anyInt(), anyInt()); // By default, tests use non-ui apps instead of 3rd party companion apps. when(mPackageManager.checkPermission( matches(Manifest.permission.CALL_COMPANION_APP), anyString())) .thenReturn(PackageManager.PERMISSION_DENIED); when(mPermissionCheckerManager.checkPermission( matches(Manifest.permission.CALL_COMPANION_APP), any(AttributionSourceState.class), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PermissionCheckerManager.PERMISSION_HARD_DENIED); try { when(mPackageManager.getPermissionInfo(anyString(), anyInt())).thenReturn( Loading Loading @@ -649,11 +660,15 @@ public class ComponentContextFixture implements TestFixture<Context> { serviceInfo.name = componentName.getClassName(); mServiceInfoByComponentName.put(componentName, serviceInfo); // Used in InCallController to check permissions for CONTROL_INCALL_EXPERIENCE // Used in InCallController to check permissions for CONTROL_INCALL_fvEXPERIENCE when(mPackageManager.getPackagesForUid(eq(uid))).thenReturn(new String[] { componentName.getPackageName() }); when(mPackageManager.checkPermission(eq(Manifest.permission.CONTROL_INCALL_EXPERIENCE), eq(componentName.getPackageName()))).thenReturn(PackageManager.PERMISSION_GRANTED); when(mPermissionCheckerManager.checkPermission( eq(Manifest.permission.CONTROL_INCALL_EXPERIENCE), any(AttributionSourceState.class), anyString(), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())).thenReturn(PackageManager.PERMISSION_GRANTED); } public void addIntentReceiver(String action, ComponentName name) { Loading
tests/src/com/android/server/telecom/tests/InCallControllerTests.java +57 −10 Original line number Diff line number Diff line Loading @@ -25,7 +25,9 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.matches; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; Loading @@ -42,11 +44,14 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppOpsManager; import android.app.Notification; import android.app.NotificationManager; import android.app.UiModeManager; import android.content.AttributionSource; import android.content.AttributionSourceState; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; Loading @@ -66,6 +71,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Process; import android.os.UserHandle; import android.permission.PermissionCheckerManager; import android.telecom.CallAudioState; import android.telecom.InCallService; import android.telecom.ParcelableCall; Loading Loading @@ -101,6 +107,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.MockitoSession; Loading @@ -111,6 +118,7 @@ import org.mockito.stubbing.Answer; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.concurrent.CompletableFuture; @RunWith(JUnit4.class) Loading @@ -120,6 +128,7 @@ public class InCallControllerTests extends TelecomTestCase { @Mock BluetoothHeadsetProxy mMockBluetoothHeadset; @Mock SystemStateHelper mMockSystemStateHelper; @Mock PackageManager mMockPackageManager; @Mock PermissionCheckerManager mMockPermissionCheckerManager; @Mock Call mMockCall; @Mock Resources mMockResources; @Mock AppOpsManager mMockAppOpsManager; Loading Loading @@ -185,6 +194,8 @@ public class InCallControllerTests extends TelecomTestCase { when(mMockCallsManager.getRoleManagerAdapter()).thenReturn(mMockRoleManagerAdapter); when(mMockContext.getSystemService(eq(Context.NOTIFICATION_SERVICE))) .thenReturn(mNotificationManager); when(mMockContext.getSystemService(eq(PermissionCheckerManager.class))) .thenReturn(mMockPermissionCheckerManager); when(mMockPackageManager.getPermissionInfo(anyString(), anyInt())).thenReturn( mMockPermissionInfo); when(mMockContext.getAttributionSource()).thenReturn(new AttributionSource(Process.myUid(), Loading Loading @@ -219,21 +230,37 @@ public class InCallControllerTests extends TelecomTestCase { } return null; }).when(mMockPackageManager).getPackagesForUid(anyInt()); when(mMockPackageManager.checkPermission( when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(COMPANION_PKG))).thenReturn(PackageManager.PERMISSION_DENIED); when(mMockPackageManager.checkPermission( matchesAttributionSourcePackage(COMPANION_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_DENIED); when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(CAR_PKG))).thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPackageManager.checkPermission( matchesAttributionSourcePackage(CAR_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(CAR2_PKG))).thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPackageManager.checkPermission( matchesAttributionSourcePackage(CAR2_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(NONUI_PKG))).thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPackageManager.checkPermission( matchesAttributionSourcePackage(NONUI_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_GRANTED); when(mMockPermissionCheckerManager.checkPermission( matches(Manifest.permission.CONTROL_INCALL_EXPERIENCE), matches(APPOP_NONUI_PKG))).thenReturn(PackageManager.PERMISSION_DENIED); matchesAttributionSourcePackage(APPOP_NONUI_PKG), nullable(String.class), anyBoolean(), anyBoolean(), anyBoolean(), anyInt())) .thenReturn(PackageManager.PERMISSION_DENIED); when(mMockCallsManager.getAudioState()).thenReturn(new CallAudioState(false, 0, 0)); } Loading Loading @@ -1489,4 +1516,24 @@ public class InCallControllerTests extends TelecomTestCase { ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED); } private static AttributionSourceState matchesAttributionSourcePackage( @Nullable String packageName) { return argThat(new PackageNameArgumentMatcher(packageName)); } private static class PackageNameArgumentMatcher implements ArgumentMatcher<AttributionSourceState> { @Nullable private final String mPackgeName; PackageNameArgumentMatcher(@Nullable String packageName) { mPackgeName = packageName; } @Override public boolean matches(@NonNull AttributionSourceState attributionSource) { return Objects.equals(mPackgeName, attributionSource.packageName); } } }