From abdde67bfe43f669dcfe64bc45af888aa3fad8d1 Mon Sep 17 00:00:00 2001 From: Vladimir Komsiyski Date: Fri, 11 Oct 2024 10:14:35 +0200 Subject: Unit test checking that a VD owner can't interact with an unowned VD Test: presubmit Bug: 371938922 Flag: EXEMPT test only Change-Id: I28a00822f6e22bd58c67920596de75af25464ef8 --- .../virtual/VirtualDeviceManagerServiceTest.java | 63 +++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java index 8a1bb009f2bb..e3868089b21f 100644 --- a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceManagerServiceTest.java @@ -116,7 +116,6 @@ import android.virtualdevice.cts.common.VirtualDeviceRule; import androidx.test.platform.app.InstrumentationRegistry; -import com.android.compatibility.common.util.SystemUtil; import com.android.internal.app.BlockedAppStreamingActivity; import com.android.internal.os.BackgroundThread; import com.android.server.LocalServices; @@ -558,6 +557,68 @@ public class VirtualDeviceManagerServiceTest { assertThat(gwpc.canShowTasksInHostDeviceRecents()).isTrue(); } + @Test + public void deviceOwner_cannotMessWithAnotherDeviceTheyDoNotOwn() { + VirtualDeviceImpl unownedDevice = + createVirtualDevice(VIRTUAL_DEVICE_ID_2, DEVICE_OWNER_UID_2); + + // The arguments don't matter, the owner uid check is always the first statement. + assertThrows(SecurityException.class, () -> unownedDevice.goToSleep()); + assertThrows(SecurityException.class, () -> unownedDevice.wakeUp()); + + assertThrows(SecurityException.class, + () -> unownedDevice.launchPendingIntent(0, null, null)); + assertThrows(SecurityException.class, + () -> unownedDevice.registerIntentInterceptor(null, null)); + assertThrows(SecurityException.class, + () -> unownedDevice.unregisterIntentInterceptor(null)); + + assertThrows(SecurityException.class, + () -> unownedDevice.addActivityPolicyExemption(null)); + assertThrows(SecurityException.class, + () -> unownedDevice.removeActivityPolicyExemption(null)); + assertThrows(SecurityException.class, () -> unownedDevice.setDevicePolicy(0, 0)); + assertThrows(SecurityException.class, + () -> unownedDevice.setDevicePolicyForDisplay(0, 0, 0)); + assertThrows(SecurityException.class, () -> unownedDevice.setDisplayImePolicy(0, 0)); + + assertThrows(SecurityException.class, () -> unownedDevice.registerVirtualCamera(null)); + assertThrows(SecurityException.class, () -> unownedDevice.unregisterVirtualCamera(null)); + + assertThrows(SecurityException.class, + () -> unownedDevice.onAudioSessionStarting(0, null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.onAudioSessionEnded()); + + assertThrows(SecurityException.class, () -> unownedDevice.createVirtualDisplay(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.createVirtualDpad(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.createVirtualMouse(null, null)); + assertThrows(SecurityException.class, + () -> unownedDevice.createVirtualTouchscreen(null, null)); + assertThrows(SecurityException.class, + () -> unownedDevice.createVirtualNavigationTouchpad(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.createVirtualStylus(null, null)); + assertThrows(SecurityException.class, + () -> unownedDevice.createVirtualRotaryEncoder(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.unregisterInputDevice(null)); + + assertThrows(SecurityException.class, () -> unownedDevice.sendDpadKeyEvent(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.sendKeyEvent(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.sendButtonEvent(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.sendTouchEvent(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.sendRelativeEvent(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.sendScrollEvent(null, null)); + assertThrows(SecurityException.class, + () -> unownedDevice.sendStylusMotionEvent(null, null)); + assertThrows(SecurityException.class, + () -> unownedDevice.sendStylusButtonEvent(null, null)); + assertThrows(SecurityException.class, + () -> unownedDevice.sendRotaryEncoderScrollEvent(null, null)); + assertThrows(SecurityException.class, () -> unownedDevice.setShowPointerIcon(true)); + + assertThrows(SecurityException.class, () -> unownedDevice.getVirtualSensorList()); + assertThrows(SecurityException.class, () -> unownedDevice.sendSensorEvent(null, null)); + } + @Test public void getDeviceOwnerUid_oneDevice_returnsCorrectId() { int ownerUid = mLocalService.getDeviceOwnerUid(mDeviceImpl.getDeviceId()); -- cgit v1.2.3-59-g8ed1b