Merge changes I76e5ebd8,I8e47acb1
* changes:
authfs: Add MerkleLeaves for integrity bookkeeping
authfs: Replace a trait bound const w/ a simple const
diff --git a/authfs/aidl/Android.bp b/authfs/aidl/Android.bp
index 8cb9dcf..7f3c968 100644
--- a/authfs/aidl/Android.bp
+++ b/authfs/aidl/Android.bp
@@ -1,3 +1,7 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
aidl_interface {
name: "authfs_aidl_interface",
unstable: true,
diff --git a/authfs/fd_server/Android.bp b/authfs/fd_server/Android.bp
index 1099fd9..f12f01f 100644
--- a/authfs/fd_server/Android.bp
+++ b/authfs/fd_server/Android.bp
@@ -1,3 +1,7 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
rust_binary {
name: "fd_server",
srcs: ["src/main.rs"],
diff --git a/microdroid/Android.bp b/microdroid/Android.bp
index d0c6675..7bb1d4a 100644
--- a/microdroid/Android.bp
+++ b/microdroid/Android.bp
@@ -46,6 +46,7 @@
deps: [
"init_second_stage",
"microdroid_init_rc",
+ "ueventd.rc",
"libbinder",
"libstdc++",
"logcat",
diff --git a/microdroid/README.md b/microdroid/README.md
index fef5997..e6cbec8 100644
--- a/microdroid/README.md
+++ b/microdroid/README.md
@@ -53,7 +53,24 @@
```
$ adb shell 'HOME=/data/local/tmp; /apex/com.android.virt/bin/assemble_cvd < /dev/null'
-$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/crosvm run --disable-sandbox --bios=bootloader --serial=type=stdout --disk=cuttlefish_runtime/composite.img'
+$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/crosvm run --cid=5 --disable-sandbox --bios=bootloader --serial=type=stdout --disk=cuttlefish_runtime/composite.img'
```
-At this moment, this doesn't boot to the shell, but to the second-stage init.
+The CID in `--cid` parameter can be anything greater than 2 (`VMADDR_CID_HOST`).
+
+## ADB
+
+```
+$ adb forward tcp:8000 vsock:5:5555
+$ adb connect localhost:8000
+```
+
+`5` in `vsock:5` should match with the CID number that was given to `crosvm`.
+`5555` must be the value. `8000` however can be any port in the development
+machine.
+
+Done. Now you can log into microdroid. Have fun!
+
+```
+$ adb -s localhost:8000 shell
+```
diff --git a/microdroid/init.rc b/microdroid/init.rc
index 9500f7c..2c32b28 100644
--- a/microdroid/init.rc
+++ b/microdroid/init.rc
@@ -13,6 +13,9 @@
# Cgroups are mounted right before early-init using list from /etc/cgroups.json
on early-init
start ueventd
+ setprop ro.apex.updatable true
+ setprop ro.debuggable 1
+ setprop ro.adb.secure 0
# Generate ld.config.txt
exec -- /system/bin/bootstrap/linkerconfig --target /linkerconfig
diff --git a/microdroid/uboot-env.txt b/microdroid/uboot-env.txt
index cdd2c19..d845086 100644
--- a/microdroid/uboot-env.txt
+++ b/microdroid/uboot-env.txt
@@ -1,12 +1,10 @@
# Static u-boot environment variables for microdroid. See b/180481192
# Boot the device following the Android boot procedure
-bootcmd=boot_android virtio -
+bootcmd=boot_android virtio 0#misc
# Kernel commandlines
-bootargs=rdinit=/bin/init_vendor panic=-1 androidboot.first_stage_console=1 androidboot.hardware=microdroid androidboot.boot_devices=10000.pci
+bootargs=rdinit=/bin/init_vendor panic=-1 androidboot.first_stage_console=1 androidboot.hardware=microdroid androidboot.boot_devices=10000.pci androidboot.selinux=permissive
-# 0:2 is the misc partition
-bootdevice=0:2
bootdelay=0
fdtaddr=0x80000000
diff --git a/tests/Android.bp b/tests/Android.bp
new file mode 100644
index 0000000..1b747fe
--- /dev/null
+++ b/tests/Android.bp
@@ -0,0 +1,95 @@
+// Copyright (C) 2020 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+kernel_version = "5.10"
+
+kernel_stem = "kernel_prebuilts-" + kernel_version
+kernel_modules_stem = "virt_device_prebuilts_kernel_modules-" + kernel_version
+
+cc_test {
+ name: "VirtualizationTestCases",
+ test_suites: ["device-tests"],
+ srcs: [
+ "common.cc",
+ "vsock_test.cc",
+ ],
+ local_include_dirs: ["include"],
+ data: [
+ ":virt_test_kernel",
+ ":virt_test_initramfs",
+ "vsock_config.json",
+ ],
+ static_libs: [
+ // The existence of the library in the system partition is not guaranteed.
+ // Let's have our own copy of it.
+ "android.system.virtmanager-cpp",
+ ],
+ shared_libs: [
+ "libbase",
+ "libbinder",
+ "liblog",
+ "libutils",
+ ],
+}
+
+cc_defaults {
+ name: "virt_test_guest_binary",
+ static_libs: [
+ "libbase",
+ "liblog",
+ ],
+ static_executable: true,
+ installable: false,
+}
+
+cc_binary {
+ name: "virt_test_vsock_guest",
+ srcs: ["vsock_guest.cc"],
+ stem: "vsock_client",
+ defaults: ["virt_test_guest_binary"],
+}
+
+prebuilt_etc {
+ name: "virt_test_kernel",
+ src: "nofile",
+ arch: {
+ arm64: {
+ src: ":" + kernel_stem + "-arm64",
+ },
+ x86_64: {
+ src: ":" + kernel_stem + "-x86_64",
+ },
+ },
+}
+
+android_filesystem {
+ name: "virt_test_initramfs",
+ arch: {
+ arm64: {
+ deps: [kernel_modules_stem + "-arm64"],
+ },
+ x86_64: {
+ deps: [kernel_modules_stem + "-x86_64"],
+ },
+ },
+ deps: [
+ "virt_test_guest_init",
+ "virt_test_vsock_guest",
+ ],
+ type: "cpio",
+}
diff --git a/tests/hostside/AndroidTest.xml b/tests/AndroidTest.xml
similarity index 60%
rename from tests/hostside/AndroidTest.xml
rename to tests/AndroidTest.xml
index 0995881..1f42bff 100644
--- a/tests/hostside/AndroidTest.xml
+++ b/tests/AndroidTest.xml
@@ -14,7 +14,7 @@
limitations under the License.
-->
-<configuration description="Config for Virtualization host tests">
+<configuration description="Config for Virtualization tests">
<!-- Basic checks that the device has all the prerequisites. -->
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
@@ -33,18 +33,27 @@
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="abort-on-push-failure" value="true" />
- <option name="push-file" key="vm_config.json" value="/data/local/tmp/virt-test/vm_config.json" />
- <option name="push-file" key="virt_hostside_tests_kernel" value="/data/local/tmp/virt-test/kernel" />
- <option name="push-file" key="virt_hostside_tests_initramfs.img" value="/data/local/tmp/virt-test/initramfs" />
- <option name="push-file" key="vsock_server" value="/data/local/tmp/virt-test/vsock_server" />
+ <option name="push-file" key="VirtualizationTestCases" value="/data/local/tmp/virt-test/VirtualizationTestCases" />
+ <option name="push-file" key="virt_test_kernel" value="/data/local/tmp/virt-test/kernel" />
+ <option name="push-file" key="virt_test_initramfs.img" value="/data/local/tmp/virt-test/initramfs" />
+ <option name="push-file" key="vsock_config.json" value="/data/local/tmp/virt-test/vsock_config.json" />
</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"/>
- <test class="com.android.compatibility.common.tradefed.testtype.JarHostTest" >
- <option name="jar" value="VirtualizationHostTestCases.jar" />
- <option name="runtime-hint" value="2m" />
+ <!-- Run Virt Manager for the duration of the test.
+ TODO: Run Virt Manager as a system service. -->
+ <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
+ <option name="throw-if-cmd-fail" value="true" />
+ <option name="run-bg-command" value="/apex/com.android.virt/bin/virtmanager" />
+ </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" />
+ <!-- test-timeout unit is ms, value = 2 minutes -->
+ <option name="native-test-timeout" value="120000" />
</test>
</configuration>
diff --git a/tests/common.cc b/tests/common.cc
new file mode 100644
index 0000000..10c98b6
--- /dev/null
+++ b/tests/common.cc
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "virt/VirtualizationTest.h"
+
+namespace virt {
+
+void VirtualizationTest::SetUp() {
+ status_t err = getService<IVirtManager>(String16("android.system.virtmanager"), &mVirtManager);
+ ASSERT_EQ(err, 0);
+}
+
+} // namespace virt
diff --git a/tests/hostside/Android.bp b/tests/hostside/Android.bp
deleted file mode 100644
index 7946080..0000000
--- a/tests/hostside/Android.bp
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (C) 2020 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package {
- default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-kernel_version = "5.10"
-
-kernel_stem = "kernel_prebuilts-" + kernel_version
-kernel_modules_stem = "virt_device_prebuilts_kernel_modules-" + kernel_version
-
-// JAR containing all virtualization host-side tests.
-java_test_host {
- name: "VirtualizationHostTestCases",
- srcs: ["java/**/*.java"],
- test_suites: ["device-tests"],
- libs: ["tradefed"],
- data: [
- ":virt_hostside_tests_kernel",
- ":virt_hostside_tests_initramfs",
- ":virt_hostside_tests_vm_config",
- ],
- required: [
- "virt_hostside_tests_vsock_server",
- ],
-}
-
-prebuilt_etc {
- name: "virt_hostside_tests_kernel",
- src: "nofile",
- arch: {
- arm64: {
- src: ":" + kernel_stem + "-arm64",
- },
- x86_64: {
- src: ":" + kernel_stem + "-x86_64",
- },
- },
-}
-
-// Copy config files to output directory so that AndroidTest.xml can copy them to the device.
-filegroup {
- name: "virt_hostside_tests_vm_config",
- srcs: ["vm_config.json"],
-}
-
-android_filesystem {
- name: "virt_hostside_tests_initramfs",
- arch: {
- arm64: {
- deps: [kernel_modules_stem + "-arm64"],
- },
- x86_64: {
- deps: [kernel_modules_stem + "-x86_64"],
- },
- },
- deps: [
- "virt_hostside_tests_guest_init",
- "virt_hostside_tests_vsock_client",
- ],
- type: "cpio",
-}
diff --git a/tests/hostside/java/android/virt/test/VirtTestCase.java b/tests/hostside/java/android/virt/test/VirtTestCase.java
deleted file mode 100644
index 5c030a8..0000000
--- a/tests/hostside/java/android/virt/test/VirtTestCase.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.virt.test;
-
-import static org.junit.Assert.*;
-
-import com.android.tradefed.testtype.DeviceTestCase;
-
-import org.junit.Before;
-
-import java.util.ArrayList;
-
-public abstract class VirtTestCase extends DeviceTestCase {
-
- private static final String DEVICE_DIR = "/data/local/tmp/virt-test";
-
- @Before
- public void setUp() throws Exception {
- getDevice().waitForDeviceAvailable();
- }
-
- protected String getDevicePathForTestBinary(String targetName) throws Exception {
- String path = String.format("%s/%s", DEVICE_DIR, targetName);
- if (!getDevice().doesFileExist(path)) {
- throw new IllegalArgumentException(String.format(
- "Binary for target %s not found on device at \"%s\"", targetName, path));
- }
- return path;
- }
-
- protected static String createCommand(String prog, Object... args) {
- ArrayList<String> strings = new ArrayList<>();
- strings.add(prog);
- for (Object arg : args) {
- strings.add(arg.toString());
- }
- for (String str : strings) {
- if (str.indexOf(' ') != -1) {
- throw new IllegalArgumentException("TODO: implement quotes around arguments");
- } else if (str.indexOf('\'') != -1) {
- throw new IllegalArgumentException("TODO: implement escaping arguments");
- }
- }
- return String.join(" ", strings);
- }
-
-}
diff --git a/tests/hostside/java/android/virt/test/VsockTest.java b/tests/hostside/java/android/virt/test/VsockTest.java
deleted file mode 100644
index 9de4f2e..0000000
--- a/tests/hostside/java/android/virt/test/VsockTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.virt.test;
-
-import com.android.tradefed.log.LogUtil.CLog;
-import com.android.tradefed.util.CommandResult;
-
-import org.junit.Test;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-public class VsockTest extends VirtTestCase {
- private static final long TIMEOUT = 2L;
- private static final TimeUnit TIMEOUT_UNIT = TimeUnit.MINUTES;
- private static final int RETRIES = 0;
-
- private static final Integer GUEST_PORT = 45678;
- private static final String TEST_MESSAGE = "HelloWorld";
-
- private static final String SERVER_TARGET = "vsock_server";
- private static final String VIRT_MANAGER_COMMAND = "/apex/com.android.virt/bin/virtmanager";
-
- @Test
- public void testVsockServer() throws Exception {
- ExecutorService executor = Executors.newFixedThreadPool(2);
-
- final String serverPath = getDevicePathForTestBinary(SERVER_TARGET);
- final String vmConfigPath = getDevicePathForTestBinary("vm_config.json");
- final String serverCmd = createCommand(serverPath, GUEST_PORT, vmConfigPath);
-
- // Start Virt Manager. This will eventually be a system service, but for now we run it
- // manually.
- Future<?> virtManagerTask = executor.submit(() -> {
- CommandResult res = getDevice().executeShellV2Command(
- VIRT_MANAGER_COMMAND, TIMEOUT, TIMEOUT_UNIT, RETRIES);
- CLog.d(res.getStdout());
- return null;
- });
-
- // Start server in Android that listens for vsock connections.
- // It will receive a message from a client in the guest VM.
- Future<?> serverTask = executor.submit(() -> {
- CommandResult res = getDevice().executeShellV2Command(
- serverCmd, TIMEOUT, TIMEOUT_UNIT, RETRIES);
- assertEquals(TEST_MESSAGE, res.getStdout().trim());
- return null;
- });
-
- // Wait for the server to finish processing the message.
- serverTask.get(TIMEOUT, TIMEOUT_UNIT);
- }
-}
diff --git a/tests/hostside/native/vsock/Android.bp b/tests/hostside/native/vsock/Android.bp
deleted file mode 100644
index 5151d62..0000000
--- a/tests/hostside/native/vsock/Android.bp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2020 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package {
- default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-cc_test {
- name: "virt_hostside_tests_vsock_server",
- srcs: ["server.cc"],
- static_libs: [
- // The existence of the library in the system partition is not guaranteed.
- // Let's have our own copy of it.
- "android.system.virtmanager-cpp",
- ],
- shared_libs: [
- "libbase",
- "libbinder",
- "liblog",
- "libutils",
- ],
- test_suites: ["device-tests"],
- stem: "vsock_server",
-}
-
-cc_binary {
- name: "virt_hostside_tests_vsock_client",
- srcs: ["client.cc"],
- static_libs: [
- "libbase",
- "liblog",
- ],
- static_executable: true,
- installable: false,
- stem: "vsock_client",
-}
diff --git a/tests/hostside/native/vsock/server.cc b/tests/hostside/native/vsock/server.cc
deleted file mode 100644
index 1a1aa37..0000000
--- a/tests/hostside/native/vsock/server.cc
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/socket.h>
-#include <unistd.h>
-
-// Needs to be included after sys/socket.h
-#include <linux/vm_sockets.h>
-
-#include <iostream>
-
-#include "android-base/file.h"
-#include "android-base/logging.h"
-#include "android-base/parseint.h"
-#include "android-base/unique_fd.h"
-#include "android/system/virtmanager/IVirtManager.h"
-#include "android/system/virtmanager/IVirtualMachine.h"
-#include "binder/IServiceManager.h"
-
-using namespace android;
-using namespace android::base;
-using namespace android::system::virtmanager;
-
-int main(int argc, const char *argv[]) {
- unsigned int port;
- if (argc != 3 || !ParseUint(argv[1], &port)) {
- LOG(ERROR) << "Usage: " << argv[0] << " <port> <vm_config.json>";
- return EXIT_FAILURE;
- }
- String16 vm_config(argv[2]);
-
- unique_fd server_fd(TEMP_FAILURE_RETRY(socket(AF_VSOCK, SOCK_STREAM, 0)));
- if (server_fd < 0) {
- PLOG(ERROR) << "socket";
- return EXIT_FAILURE;
- }
-
- struct sockaddr_vm server_sa = (struct sockaddr_vm){
- .svm_family = AF_VSOCK,
- .svm_port = port,
- .svm_cid = VMADDR_CID_ANY,
- };
-
- int ret = TEMP_FAILURE_RETRY(bind(server_fd, (struct sockaddr *)&server_sa, sizeof(server_sa)));
- if (ret != 0) {
- PLOG(ERROR) << "bind";
- return EXIT_FAILURE;
- }
-
- LOG(INFO) << "Listening on port " << port << "...";
- ret = TEMP_FAILURE_RETRY(listen(server_fd, 1));
- if (ret != 0) {
- PLOG(ERROR) << "listen";
- return EXIT_FAILURE;
- }
-
- LOG(INFO) << "Getting Virt Manager";
- sp<IVirtManager> virt_manager;
- status_t err = getService<IVirtManager>(String16("android.system.virtmanager"), &virt_manager);
- if (err != 0) {
- LOG(ERROR) << "Error getting Virt Manager from Service Manager: " << err;
- return EXIT_FAILURE;
- }
- sp<IVirtualMachine> vm;
- binder::Status status = virt_manager->startVm(vm_config, &vm);
- if (!status.isOk()) {
- LOG(ERROR) << "Error starting VM: " << status;
- return EXIT_FAILURE;
- }
- int32_t cid;
- status = vm->getCid(&cid);
- if (!status.isOk()) {
- LOG(ERROR) << "Error getting CID: " << status;
- return EXIT_FAILURE;
- }
- LOG(INFO) << "VM starting with CID " << cid;
-
- LOG(INFO) << "Accepting connection...";
- struct sockaddr_vm client_sa;
- socklen_t client_sa_len = sizeof(client_sa);
- unique_fd client_fd(
- TEMP_FAILURE_RETRY(accept(server_fd, (struct sockaddr *)&client_sa, &client_sa_len)));
- if (client_fd < 0) {
- PLOG(ERROR) << "accept";
- return EXIT_FAILURE;
- }
- LOG(INFO) << "Connection from CID " << client_sa.svm_cid << " on port " << client_sa.svm_port;
-
- LOG(INFO) << "Reading message from the client...";
- std::string msg;
- if (!ReadFdToString(client_fd, &msg)) {
- PLOG(ERROR) << "ReadFdToString";
- return EXIT_FAILURE;
- }
-
- // Print the received message to stdout.
- std::cout << msg << std::endl;
-
- LOG(INFO) << "Exiting...";
- return EXIT_SUCCESS;
-}
diff --git a/tests/hostside/nofile b/tests/hostside/nofile
deleted file mode 100644
index eb4638a..0000000
--- a/tests/hostside/nofile
+++ /dev/null
@@ -1,2 +0,0 @@
-// This file is used as src of virt_hostside_tests_kernel module for the architectures
-// other than arm64 and x86_64
diff --git a/tests/include/virt/VirtualizationTest.h b/tests/include/virt/VirtualizationTest.h
new file mode 100644
index 0000000..a996f11
--- /dev/null
+++ b/tests/include/virt/VirtualizationTest.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "android/system/virtmanager/IVirtManager.h"
+#include "android/system/virtmanager/IVirtualMachine.h"
+#include "binder/IServiceManager.h"
+#include "gtest/gtest.h"
+
+using namespace android;
+using namespace android::system::virtmanager;
+
+namespace virt {
+
+class VirtualizationTest : public ::testing::Test {
+protected:
+ void SetUp() override;
+
+ sp<IVirtManager> mVirtManager;
+};
+
+} // namespace virt
diff --git a/tests/hostside/native/init/Android.bp b/tests/init/Android.bp
similarity index 94%
rename from tests/hostside/native/init/Android.bp
rename to tests/init/Android.bp
index f2c179b..1643acd 100644
--- a/tests/hostside/native/init/Android.bp
+++ b/tests/init/Android.bp
@@ -17,7 +17,7 @@
}
cc_binary {
- name: "virt_hostside_tests_guest_init",
+ name: "virt_test_guest_init",
srcs: ["main.cc"],
static_executable: true,
installable: false,
diff --git a/tests/hostside/native/init/main.cc b/tests/init/main.cc
similarity index 100%
rename from tests/hostside/native/init/main.cc
rename to tests/init/main.cc
diff --git a/tests/nofile b/tests/nofile
new file mode 100644
index 0000000..9e4b854
--- /dev/null
+++ b/tests/nofile
@@ -0,0 +1,2 @@
+// This file is used as src of virt_test_kernel module for the architectures
+// other than arm64 and x86_64
diff --git a/tests/hostside/vm_config.json b/tests/vsock_config.json
similarity index 100%
rename from tests/hostside/vm_config.json
rename to tests/vsock_config.json
diff --git a/tests/hostside/native/vsock/client.cc b/tests/vsock_guest.cc
similarity index 100%
rename from tests/hostside/native/vsock/client.cc
rename to tests/vsock_guest.cc
diff --git a/tests/vsock_test.cc b/tests/vsock_test.cc
new file mode 100644
index 0000000..74e984f
--- /dev/null
+++ b/tests/vsock_test.cc
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/socket.h>
+#include <unistd.h>
+
+// Needs to be included after sys/socket.h
+#include <linux/vm_sockets.h>
+
+#include <iostream>
+
+#include "android-base/file.h"
+#include "android-base/logging.h"
+#include "android-base/parseint.h"
+#include "android-base/unique_fd.h"
+
+#include "virt/VirtualizationTest.h"
+
+using namespace android::base;
+
+namespace virt {
+
+static constexpr int kGuestPort = 45678;
+static constexpr const char kVmConfigPath[] = "/data/local/tmp/virt-test/vsock_config.json";
+static constexpr const char kTestMessage[] = "HelloWorld";
+
+TEST_F(VirtualizationTest, TestVsock) {
+ binder::Status status;
+
+ unique_fd server_fd(TEMP_FAILURE_RETRY(socket(AF_VSOCK, SOCK_STREAM, 0)));
+ ASSERT_GE(server_fd, 0) << strerror(errno);
+
+ struct sockaddr_vm server_sa = (struct sockaddr_vm){
+ .svm_family = AF_VSOCK,
+ .svm_port = kGuestPort,
+ .svm_cid = VMADDR_CID_ANY,
+ };
+
+ int ret = TEMP_FAILURE_RETRY(bind(server_fd, (struct sockaddr *)&server_sa, sizeof(server_sa)));
+ ASSERT_EQ(ret, 0) << strerror(errno);
+
+ LOG(INFO) << "Listening on port " << kGuestPort << "...";
+ ret = TEMP_FAILURE_RETRY(listen(server_fd, 1));
+ ASSERT_EQ(ret, 0) << strerror(errno);
+
+ sp<IVirtualMachine> vm;
+ status = mVirtManager->startVm(String16(kVmConfigPath), &vm);
+ ASSERT_TRUE(status.isOk()) << "Error starting VM: " << status;
+
+ int32_t cid;
+ status = vm->getCid(&cid);
+ ASSERT_TRUE(status.isOk()) << "Error getting CID: " << status;
+ LOG(INFO) << "VM starting with CID " << cid;
+
+ LOG(INFO) << "Accepting connection...";
+ struct sockaddr_vm client_sa;
+ socklen_t client_sa_len = sizeof(client_sa);
+ unique_fd client_fd(
+ TEMP_FAILURE_RETRY(accept(server_fd, (struct sockaddr *)&client_sa, &client_sa_len)));
+ ASSERT_GE(client_fd, 0) << strerror(errno);
+ LOG(INFO) << "Connection from CID " << client_sa.svm_cid << " on port " << client_sa.svm_port;
+
+ LOG(INFO) << "Reading message from the client...";
+ std::string msg;
+ ASSERT_TRUE(ReadFdToString(client_fd, &msg));
+
+ LOG(INFO) << "Received message: " << msg;
+ ASSERT_EQ(msg, kTestMessage);
+}
+
+} // namespace virt