Make MicrodroidTestApp.GTS portable
Bug: 394221791
Test: run the test on android 14 device
Change-Id: Ie969bfdc4a1ed18b648caba590069e9a16f0f78f
diff --git a/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java b/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
index 94f7ced..6524ea3 100644
--- a/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
+++ b/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
@@ -58,9 +58,10 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.util.Arrays;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.OptionalLong;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
@@ -73,13 +74,21 @@
private final String MAX_PERFORMANCE_TASK_PROFILE = "CPUSET_SP_TOP_APP";
protected static final String KERNEL_VERSION = SystemProperties.get("ro.kernel.version");
+
+ private static final List<String> getSupportedOSes() {
+ List<String> ret = new ArrayList<>();
+ ret.add("microdroid");
+ if (Build.VERSION.SDK_INT >= 35) {
+ ret.add("microdroid_gki-android15-6.6");
+ }
+ if (Build.VERSION.SDK_INT >= 36) {
+ ret.add("microdroid_16k");
+ }
+ return ret;
+ }
+
protected static final Set<String> SUPPORTED_OSES =
- Collections.unmodifiableSet(
- new HashSet<>(
- Arrays.asList(
- "microdroid",
- "microdroid_16k",
- "microdroid_gki-android15-6.6")));
+ Collections.unmodifiableSet(new HashSet<>(getSupportedOSes()));
private static final long ONE_MEBI = 1024 * 1024;
private static final long MIN_MEM_ARM64 = 170 * ONE_MEBI;
@@ -155,10 +164,12 @@
}
public VirtualMachineConfig.Builder newVmConfigBuilderWithPayloadConfig(String configPath) {
- return new VirtualMachineConfig.Builder(mCtx)
- .setProtectedVm(mProtectedVm)
- .setOs(os())
- .setPayloadConfigPath(configPath);
+ VirtualMachineConfig.Builder builder = new VirtualMachineConfig.Builder(mCtx);
+ builder.setProtectedVm(mProtectedVm).setPayloadConfigPath(configPath);
+ if (Build.VERSION.SDK_INT >= 35) {
+ builder.setOs(os());
+ }
+ return builder;
}
public VirtualMachineConfig.Builder newVmConfigBuilderWithPayloadBinary(String binaryPath) {
@@ -288,15 +299,18 @@
}
protected boolean isUpdatableVmSupported() throws VirtualMachineException {
- return getVirtualMachineManager().isUpdatableVmSupported();
+ // Pre-36 OS doesn't have VirtualMachineManager#isUpdatableVmSupported.
+ if (Build.VERSION.SDK_INT >= 35) {
+ return getVirtualMachineManager().isUpdatableVmSupported();
+ }
+ return false;
}
protected void ensureVmAttestationSupported() throws Exception {
// The first vendor API level is checked because VM attestation requires the VM DICE chain
// to be ROM-rooted.
int firstVendorApiLevel = getFirstVendorApiLevel();
- boolean isRemoteAttestationSupported =
- getVirtualMachineManager().isRemoteAttestationSupported();
+ boolean isRemoteAttestationSupported = isRemoteAttestationSupported();
if (firstVendorApiLevel >= 202504) {
assertWithMessage(
"First vendor API '"
@@ -309,6 +323,14 @@
}
}
+ protected boolean isRemoteAttestationSupported() throws VirtualMachineException {
+ // Pre-36 OS doesn't have VirtualMachineManager#isRemoteAttestionSupported
+ if (Build.VERSION.SDK_INT >= 35) {
+ return getVirtualMachineManager().isRemoteAttestationSupported();
+ }
+ return false;
+ }
+
public abstract static class VmEventListener implements VirtualMachineCallback {
private ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
private OptionalLong mVcpuStartedNanoTime = OptionalLong.empty();
diff --git a/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java b/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
index b492684..e37804a 100644
--- a/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
+++ b/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
@@ -257,7 +257,7 @@
assumeProtectedVM();
assume().withMessage(
"This test does not apply to a device that supports Remote Attestation")
- .that(getVirtualMachineManager().isRemoteAttestationSupported())
+ .that(isRemoteAttestationSupported())
.isFalse();
VirtualMachineConfig config =
newVmConfigBuilderWithPayloadBinary(VM_ATTESTATION_PAYLOAD_PATH)
@@ -285,7 +285,7 @@
// pVM remote attestation is only supported on protected VMs.
assumeProtectedVM();
assume().withMessage("Test needs Remote Attestation support")
- .that(getVirtualMachineManager().isRemoteAttestationSupported())
+ .that(isRemoteAttestationSupported())
.isTrue();
File vendorDiskImage = new File("/vendor/etc/avf/microdroid/microdroid_vendor.img");
assumeTrue("Microdroid vendor image doesn't exist, skip", vendorDiskImage.exists());