Add guest binder services to device-side tests
Now MicrodroidTests will try to connect to the test service, and check
system property values for various tests. Redundant lines in
MicrodroidTestCase are also removed.
Bug: 203483081
Test: atest MicrodroidTests MicrodroidHostTestCases
Change-Id: Ia9345e0c6da857c9c4950e74b70dc2818d105f2c
diff --git a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
index 69638d8..6aa7566 100644
--- a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
+++ b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
@@ -97,15 +97,6 @@
final String label = "u:object_r:system_file:s0";
assertThat(runOnMicrodroid("ls", "-Z", testLib), is(label + " " + testLib));
- // Check if the command in vm_config.json was executed by examining the side effect of the
- // command
- assertThat(runOnMicrodroid("getprop", "debug.microdroid.app.run"), is("true"));
- assertThat(runOnMicrodroid("getprop", "debug.microdroid.app.sublib.run"), is("true"));
-
- // Check that keystore was found by the payload. Wait until the property is set.
- tryRunOnMicrodroid("watch -e \"getprop debug.microdroid.test.keystore | grep '^$'\"");
- assertThat(runOnMicrodroid("getprop", "debug.microdroid.test.keystore"), is("PASS"));
-
// Check that no denials have happened so far
assertThat(runOnMicrodroid("logcat -d -e 'avc:[[:space:]]{1,2}denied'"), is(""));
diff --git a/tests/testapk/Android.bp b/tests/testapk/Android.bp
index 32c47dd..541e93f 100644
--- a/tests/testapk/Android.bp
+++ b/tests/testapk/Android.bp
@@ -9,6 +9,7 @@
static_libs: [
"androidx.test.runner",
"androidx.test.ext.junit",
+ "com.android.microdroid.testservice-java",
],
libs: ["android.system.virtualmachine"],
jni_libs: ["MicrodroidTestNativeLib"],
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 b03a915..4736f19 100644
--- a/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
+++ b/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
@@ -17,8 +17,10 @@
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.junit.Assume.assumeNoException;
import static org.junit.Assume.assumeThat;
@@ -26,6 +28,7 @@
import android.content.Context;
import android.os.Build;
+import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.system.virtualmachine.VirtualMachine;
import android.system.virtualmachine.VirtualMachineCallback;
@@ -36,6 +39,8 @@
import androidx.test.core.app.ApplicationProvider;
+import com.android.microdroid.testservice.ITestService;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -49,6 +54,7 @@
import java.nio.file.Files;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
@RunWith(JUnit4.class)
@@ -132,7 +138,7 @@
private static final int MIN_MEM_X86_64 = 196;
@Test
- public void startAndStop() throws VirtualMachineException, InterruptedException {
+ public void connectToVmService() throws VirtualMachineException, InterruptedException {
VirtualMachineConfig.Builder builder =
new VirtualMachineConfig.Builder(mInner.mContext, "assets/vm_config.json");
if (Build.SUPPORTED_ABIS.length > 0) {
@@ -154,18 +160,46 @@
private boolean mPayloadReadyCalled = false;
private boolean mPayloadStartedCalled = false;
- @Override
- public void onPayloadStarted(VirtualMachine vm, ParcelFileDescriptor stream) {
- mPayloadStartedCalled = true;
+ private void testVMService(Future<IBinder> service) {
+ try {
+ IBinder binder = service.get();
+
+ ITestService testService = ITestService.Stub.asInterface(binder);
+ assertEquals(
+ testService.addInteger(123, 456),
+ 123 + 456);
+ assertEquals(
+ testService.readProperty("debug.microdroid.app.run"),
+ "true");
+ assertEquals(
+ testService.readProperty("debug.microdroid.app.sublib.run"),
+ "true");
+ assertEquals(
+ testService.readProperty("debug.microdroid.test.keystore"),
+ "PASS");
+ } catch (Exception e) {
+ fail("Exception while testing service: " + e.toString());
+ }
}
@Override
public void onPayloadReady(VirtualMachine vm) {
mPayloadReadyCalled = true;
+ try {
+ testVMService(vm.connectToVsockServer(ITestService.SERVICE_PORT));
+ } catch (Exception e) {
+ fail("Exception while connecting to service: " + e.toString());
+ }
+
forceStop(vm);
}
@Override
+ public void onPayloadStarted(VirtualMachine vm, ParcelFileDescriptor stream) {
+ mPayloadStartedCalled = true;
+ }
+
+ @Override
public void onDied(VirtualMachine vm, @DeathReason int reason) {
assertTrue(mPayloadReadyCalled);
assertTrue(mPayloadStartedCalled);