Start VirtualizationService on demand.

Bug: 183582651
Test: atest VirtualizationTestCases
Change-Id: If6cec89206492cf9818a586d9439ebdb62f27342
diff --git a/apex/virtualizationservice.rc b/apex/virtualizationservice.rc
index 6e0b045..7e71105 100644
--- a/apex/virtualizationservice.rc
+++ b/apex/virtualizationservice.rc
@@ -16,4 +16,6 @@
     class main
     user virtualizationservice
     group virtualizationservice
+    interface aidl android.system.virtualizationservice
     disabled
+    oneshot
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
index a8fdf19..1b9315a 100644
--- a/tests/AndroidTest.xml
+++ b/tests/AndroidTest.xml
@@ -38,17 +38,6 @@
         <option name="push-file" key="virt_test_initramfs.img" value="/data/local/tmp/virt-test/initramfs" />
     </target_preparer>
 
-    <!-- Root currently needed to run CrosVM.
-         TODO: Give sufficient permissions to the adb shell user (b/171240450). -->
-    <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
-
-    <!-- Run VirtualizationService for the duration of the test.
-         TODO: Run VirtualizationService as a system service. -->
-    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
-        <option name="throw-if-cmd-fail" value="true" />
-        <option name="run-command" value="start virtualizationservice" />
-    </target_preparer>
-
     <test class="com.android.tradefed.testtype.GTest" >
         <option name="native-test-device-path" value="/data/local/tmp/virt-test" />
         <option name="module-name" value="VirtualizationTestCases" />
diff --git a/tests/common.cc b/tests/common.cc
index fbda6c6..a9f0807 100644
--- a/tests/common.cc
+++ b/tests/common.cc
@@ -19,10 +19,9 @@
 namespace virt {
 
 void VirtualizationTest::SetUp() {
-    status_t err =
-            getService<IVirtualizationService>(String16("android.system.virtualizationservice"),
-                                               &mVirtualizationService);
-    ASSERT_EQ(err, 0);
+    mVirtualizationService = waitForService<IVirtualizationService>(
+            String16("android.system.virtualizationservice"));
+    ASSERT_NE(mVirtualizationService, nullptr);
 }
 
 } // namespace virt
diff --git a/vm/src/main.rs b/vm/src/main.rs
index 84f7d18..bdb574c 100644
--- a/vm/src/main.rs
+++ b/vm/src/main.rs
@@ -19,7 +19,7 @@
 mod sync;
 
 use android_system_virtualizationservice::aidl::android::system::virtualizationservice::IVirtualizationService::IVirtualizationService;
-use android_system_virtualizationservice::binder::{get_interface, ProcessState, Strong};
+use android_system_virtualizationservice::binder::{wait_for_interface, ProcessState, Strong};
 use anyhow::{Context, Error};
 use run::command_run;
 use std::path::PathBuf;
@@ -58,7 +58,7 @@
     // We need to start the thread pool for Binder to work properly, especially link_to_death.
     ProcessState::start_thread_pool();
 
-    let service = get_interface(VIRTUALIZATION_SERVICE_BINDER_SERVICE_IDENTIFIER)
+    let service = wait_for_interface(VIRTUALIZATION_SERVICE_BINDER_SERVICE_IDENTIFIER)
         .context("Failed to find VirtualizationService")?;
 
     match opt {