Commit 6abe7cdf authored by Yusuke Sato's avatar Yusuke Sato Committed by Commit Bot

arcvm: Support demo mode

When it is enabled, the CL mounts the squashfs image as /dev/vdd.

BUG=b:143780893
TEST=manually place the image file in /run/imageloader as Omaha side
 is not ready yet, manually modify the UpgradeParams, then start ARCVM
 and run 'mount /dev/block/vdd /odm' in android-sh.

Change-Id: I7744ad8d3d2d79b5a2efa21384fa8ea256c0df23
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2016290
Commit-Queue: Yusuke Sato <yusukes@chromium.org>
Auto-Submit: Yusuke Sato <yusukes@chromium.org>
Reviewed-by: default avatarHidehiko Abe <hidehiko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735000}
parent fe332db6
......@@ -155,7 +155,6 @@ std::vector<std::string> GenerateKernelCmdline(
}
}
// TODO(yusukes): Handle |demo_session_apps_path| in |upgrade_params|.
// TODO(yusukes): Handle |is_managed_account| in |upgrade_params|.
return result;
}
......@@ -164,6 +163,7 @@ vm_tools::concierge::StartArcVmRequest CreateStartArcVmRequest(
const std::string& user_id_hash,
uint32_t cpus,
const base::FilePath& data_disk_path,
const base::FilePath& demo_session_apps_path,
const FileSystemStatus& file_system_status,
std::vector<std::string> kernel_cmdline) {
vm_tools::concierge::StartArcVmRequest request;
......@@ -207,10 +207,18 @@ vm_tools::concierge::StartArcVmRequest CreateStartArcVmRequest(
// Add /vendor as /dev/vdc.
disk_image = request.add_disks();
disk_image->set_path(file_system_status.vendor_image_path().value());
disk_image->set_image_type(vm_tools::concierge::DISK_IMAGE_AUTO);
disk_image->set_writable(false);
disk_image->set_do_mount(true);
// Add /run/imageloader/.../android_demo_apps.squash as /dev/vdd if needed.
// TODO(b/144542975): Do this on upgrade instead.
if (!demo_session_apps_path.empty()) {
disk_image = request.add_disks();
disk_image->set_path(demo_session_apps_path.value());
disk_image->set_image_type(vm_tools::concierge::DISK_IMAGE_AUTO);
disk_image->set_writable(false);
disk_image->set_do_mount(true);
}
// Add Android fstab.
request.set_fstab(file_system_status.fstab_path().value());
......@@ -494,9 +502,9 @@ class ArcVmClientAdapter : public ArcClientAdapter,
start_params_, params, file_system_status, *is_dev_mode_,
is_host_on_vm_, version_info::GetChannelString(channel_),
serial_number_);
auto start_request =
CreateStartArcVmRequest(user_id_hash_, cpus, data_disk_path,
file_system_status, std::move(kernel_cmdline));
auto start_request = CreateStartArcVmRequest(
user_id_hash_, cpus, data_disk_path, params.demo_session_apps_path,
file_system_status, std::move(kernel_cmdline));
GetConciergeClient()->StartArcVm(
start_request,
......
......@@ -592,6 +592,38 @@ TEST_F(ArcVmClientAdapterTest, StartUpgradeArc_VariousParams2) {
EXPECT_FALSE(arc_instance_stopped_called());
}
// Try to start and upgrade the instance with demo mode enabled.
TEST_F(ArcVmClientAdapterTest, StartUpgradeArc_DemoMode) {
constexpr char kDemoImage[] =
"/run/imageloader/demo-mode-resources/0.0.1.7/android_demo_apps.squash";
StartParams start_params(GetPopulatedStartParams());
SetValidUserInfo();
StartMiniArcWithParams(std::move(start_params));
UpgradeParams params(GetPopulatedUpgradeParams());
// Enable demo mode.
params.is_demo_session = true;
params.demo_session_apps_path = base::FilePath(kDemoImage);
UpgradeArcWithParams(true, std::move(params));
EXPECT_TRUE(GetStartConciergeCalled());
EXPECT_TRUE(GetTestConciergeClient()->start_arc_vm_called());
EXPECT_FALSE(arc_instance_stopped_called());
// Verify the request.
auto request = GetTestConciergeClient()->start_arc_vm_request();
// Make sure disks have the squashfs image.
EXPECT_TRUE(([&kDemoImage, &request]() {
for (const auto& disk : request.disks()) {
if (disk.path() == kDemoImage)
return true;
}
return false;
}()));
EXPECT_TRUE(base::Contains(request.params(), "androidboot.arc_demo_mode=1"));
}
// Tests that StartArcVm() is called with valid parameters.
TEST_F(ArcVmClientAdapterTest, UpgradeArc_StartArcVmParams) {
SetValidUserInfo();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment