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

Commit 9c0a5dc0 authored by Nate Myren's avatar Nate Myren Committed by Svetoslav Ganov
Browse files

Update Telecom tests due to OS change

Telecom tests mock impl details of platform code. This CL
updates the tests due to internal platform changes.

Revert submission 14693139-bug-158792096-05-20-21-1-master

bug: 189890576

Test: atest com.android.server.telecom.tests.BasicCallTests
Change-Id: Ie01a445297536651ca4b4b1c4b3e356973ec02b6
parent 04c6d26a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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) {
+19 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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;
            }
@@ -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();
        }
@@ -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);
@@ -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(
@@ -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) {
+57 −10
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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)
@@ -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;
@@ -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(),
@@ -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));
    }

@@ -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);
        }
    }
}