Add a test for permission check
Creating a VM requries "MANAGE_VIRTUAL_MACHINE" permission.
A new test runs a device test without the permission and checks if it
fails with permission error.
Bug: 218933571
Test: atest MicrodroidHostTestCases#testCreateVmRequiresPermission
Change-Id: I98a4798fe684eaedba291c520398e7a0b326ce42
diff --git a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
index 6dacf23..1e96246 100644
--- a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
+++ b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
@@ -18,12 +18,16 @@
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.result.TestDescription;
+import com.android.tradefed.result.TestResult;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import com.android.tradefed.testtype.junit4.DeviceTestRunOptions;
import com.android.tradefed.util.CommandResult;
import com.android.tradefed.util.CommandStatus;
import com.android.tradefed.util.FileUtil;
@@ -35,6 +39,7 @@
import org.junit.runner.RunWith;
import java.io.File;
+import java.util.Map;
import java.util.Optional;
@RunWith(DeviceJUnit4ClassRunner.class)
@@ -73,6 +78,27 @@
}
@Test
+ public void testCreateVmRequiresPermission() throws Exception {
+ // Revoke the MANAGE_VIRTUAL_MACHINE permission for the test app
+ CommandRunner android = new CommandRunner(getDevice());
+ android.run("pm", "revoke", PACKAGE_NAME, "android.permission.MANAGE_VIRTUAL_MACHINE");
+
+ // Run MicrodroidTests#connectToVmService test, which should fail
+ final DeviceTestRunOptions options = new DeviceTestRunOptions(PACKAGE_NAME)
+ .setTestClassName(PACKAGE_NAME + ".MicrodroidTests")
+ .setTestMethodName("connectToVmService")
+ .setCheckResults(false);
+ assertFalse(runDeviceTests(options));
+
+ Map<TestDescription, TestResult> results = getLastDeviceRunResults().getTestResults();
+ assertThat(results.size(), is(1));
+ TestResult result = results.values().toArray(new TestResult[0])[0];
+ assertTrue("The test should fail with a permission error",
+ result.getStackTrace()
+ .contains("android.permission.MANAGE_VIRTUAL_MACHINE permission"));
+ }
+
+ @Test
public void testMicrodroidBoots() throws Exception {
final String configPath = "assets/vm_config.json"; // path inside the APK
final String cid =