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

Commit 901d619f authored by Vladimir Komsiyski's avatar Vladimir Komsiyski Committed by Android (Google) Code Review
Browse files

Merge "Fix the VirtualDeviceManagerServiceTest tests."

parents ea257b66 6a82288a
Loading
Loading
Loading
Loading
+61 −42
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@ import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.argThat;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -97,8 +96,9 @@ import android.view.DisplayInfo;
import android.view.KeyEvent;
import android.view.WindowManager;

import androidx.test.InstrumentationRegistry;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.compatibility.common.util.AdoptShellPermissionsRule;
import com.android.internal.app.BlockedAppStreamingActivity;
import com.android.server.LocalServices;
import com.android.server.input.InputManagerInternal;
@@ -107,6 +107,7 @@ import com.android.server.sensors.SensorManagerInternal;
import com.google.android.collect.Sets;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -195,6 +196,11 @@ public class VirtualDeviceManagerServiceTest {
                    .build();
    private static final String TEST_SITE = "http://test";

    @Rule
    public AdoptShellPermissionsRule mAdoptShellPermissionsRule = new AdoptShellPermissionsRule(
            InstrumentationRegistry.getInstrumentation().getUiAutomation(),
            Manifest.permission.CREATE_VIRTUAL_DEVICE);

    private Context mContext;
    private InputManagerMockHelper mInputManagerMockHelper;
    private VirtualDeviceImpl mDeviceImpl;
@@ -304,10 +310,9 @@ public class VirtualDeviceManagerServiceTest {
        LocalServices.removeServiceForTest(DisplayManagerInternal.class);
        LocalServices.addService(DisplayManagerInternal.class, mDisplayManagerInternalMock);

        mContext = Mockito.spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
        mContext = Mockito.spy(new ContextWrapper(
                InstrumentationRegistry.getInstrumentation().getTargetContext()));
        doReturn(mContext).when(mContext).createContextAsUser(eq(Process.myUserHandle()), anyInt());
        doNothing().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)).thenReturn(
                mDevicePolicyManagerMock);

@@ -844,53 +849,52 @@ public class VirtualDeviceManagerServiceTest {
    @Test
    public void createVirtualDpad_noPermission_failsSecurityException() {
        mDeviceImpl.mVirtualDisplayIds.add(DISPLAY_ID_1);
        doCallRealMethod().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        try (DropShellPermissionsTemporarily drop = new DropShellPermissionsTemporarily()) {
            assertThrows(SecurityException.class,
                    () -> mDeviceImpl.createVirtualDpad(DPAD_CONFIG, BINDER));
        }
    }

    @Test
    public void createVirtualKeyboard_noPermission_failsSecurityException() {
        mDeviceImpl.mVirtualDisplayIds.add(DISPLAY_ID_1);
        doCallRealMethod().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        try (DropShellPermissionsTemporarily drop = new DropShellPermissionsTemporarily()) {
            assertThrows(SecurityException.class,
                    () -> mDeviceImpl.createVirtualKeyboard(KEYBOARD_CONFIG, BINDER));
        }
    }

    @Test
    public void createVirtualMouse_noPermission_failsSecurityException() {
        mDeviceImpl.mVirtualDisplayIds.add(DISPLAY_ID_1);
        doCallRealMethod().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        try (DropShellPermissionsTemporarily drop = new DropShellPermissionsTemporarily()) {
            assertThrows(SecurityException.class,
                    () -> mDeviceImpl.createVirtualMouse(MOUSE_CONFIG, BINDER));
        }
    }

    @Test
    public void createVirtualTouchscreen_noPermission_failsSecurityException() {
        mDeviceImpl.mVirtualDisplayIds.add(DISPLAY_ID_1);
        doCallRealMethod().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        try (DropShellPermissionsTemporarily drop = new DropShellPermissionsTemporarily()) {
            assertThrows(SecurityException.class,
                    () -> mDeviceImpl.createVirtualTouchscreen(TOUCHSCREEN_CONFIG, BINDER));
        }
    }

    @Test
    public void createVirtualNavigationTouchpad_noPermission_failsSecurityException() {
        mDeviceImpl.mVirtualDisplayIds.add(DISPLAY_ID_1);
        doCallRealMethod().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        try (DropShellPermissionsTemporarily drop = new DropShellPermissionsTemporarily()) {
            assertThrows(SecurityException.class,
                    () -> mDeviceImpl.createVirtualNavigationTouchpad(NAVIGATION_TOUCHPAD_CONFIG,
                            BINDER));
        }
    }

    @Test
    public void createVirtualSensor_noPermission_failsSecurityException() {
        doCallRealMethod().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        try (DropShellPermissionsTemporarily drop = new DropShellPermissionsTemporarily()) {
            assertThrows(
                    SecurityException.class,
                    () -> mDeviceImpl.createVirtualSensor(
@@ -898,23 +902,24 @@ public class VirtualDeviceManagerServiceTest {
                            new VirtualSensorConfig.Builder(
                                    Sensor.TYPE_ACCELEROMETER, DEVICE_NAME).build()));
        }
    }

    @Test
    public void onAudioSessionStarting_noPermission_failsSecurityException() {
        mDeviceImpl.mVirtualDisplayIds.add(DISPLAY_ID_1);
        doCallRealMethod().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        try (DropShellPermissionsTemporarily drop = new DropShellPermissionsTemporarily()) {
            assertThrows(SecurityException.class,
                    () -> mDeviceImpl.onAudioSessionStarting(
                            DISPLAY_ID_1, mRoutingCallback, mConfigChangedCallback));
        }
    }

    @Test
    public void onAudioSessionEnded_noPermission_failsSecurityException() {
        doCallRealMethod().when(mContext).enforceCallingOrSelfPermission(
                eq(Manifest.permission.CREATE_VIRTUAL_DEVICE), anyString());
        try (DropShellPermissionsTemporarily drop = new DropShellPermissionsTemporarily()) {
            assertThrows(SecurityException.class, () -> mDeviceImpl.onAudioSessionEnded());
        }
    }

    @Test
    public void createVirtualDpad_hasDisplay_obtainFileDescriptor() {
@@ -1593,4 +1598,18 @@ public class VirtualDeviceManagerServiceTest {
        mVdms.addVirtualDevice(virtualDeviceImpl);
        return virtualDeviceImpl;
    }

    /** Helper class to drop permissions temporarily and restore them at the end of a test. */
    static final class DropShellPermissionsTemporarily implements AutoCloseable {
        DropShellPermissionsTemporarily() {
            InstrumentationRegistry.getInstrumentation().getUiAutomation()
                    .dropShellPermissionIdentity();
        }

        @Override
        public void close() {
            InstrumentationRegistry.getInstrumentation().getUiAutomation()
                    .adoptShellPermissionIdentity();
        }
    }
}