Detect VM failure on benchmark app

Bug: 266851373
Test: atest MicrodroidBenchmarkApp
Test: make microdroid_manager crash, and then atest
      MicrodroidBenchmarkApp
Test: make microdroid_manager report onError, and then atest
      MicrodroidBenchmarkApp

Change-Id: I1108e0a6c178c8aaf2f35984ad4b1d3e99a36b6e
diff --git a/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java b/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java
index db1d021..e225a59 100644
--- a/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java
+++ b/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java
@@ -20,6 +20,7 @@
 
 import android.os.RemoteException;
 import android.system.virtualmachine.VirtualMachine;
+import android.system.virtualmachine.VirtualMachineException;
 import android.util.Log;
 
 import com.android.microdroid.test.device.MicrodroidDeviceTestBase.VmEventListener;
@@ -32,6 +33,8 @@
 class BenchmarkVmListener extends VmEventListener {
     private static final String TAG = "BenchmarkVm";
 
+    private boolean mPayloadReady;
+
     interface InnerListener {
         /** This is invoked when both the payload and {@link IBenchmarkService} are ready. */
         void onPayloadReady(VirtualMachine vm, IBenchmarkService benchmarkService)
@@ -46,6 +49,7 @@
 
     @Override
     public final void onPayloadReady(VirtualMachine vm) {
+        mPayloadReady = true;
         try {
             IBenchmarkService benchmarkService =
                     IBenchmarkService.Stub.asInterface(
@@ -60,7 +64,20 @@
         forceStop(vm);
     }
 
+    @Override
+    public void onError(VirtualMachine vm, int errorCode, String message) {
+        throw new RuntimeException("Error while benchmark (" + errorCode + "): " + message);
+    }
+
     static BenchmarkVmListener create(InnerListener listener) {
         return new BenchmarkVmListener(listener);
     }
+
+    @Override
+    public void runToFinish(String logTag, VirtualMachine vm)
+            throws VirtualMachineException, InterruptedException {
+        mPayloadReady = false;
+        super.runToFinish(logTag, vm);
+        assertThat(mPayloadReady).isTrue();
+    }
 }