Commit 6d67f881 authored by Fergus Dall's avatar Fergus Dall Committed by Commit Bot

Start setting StartVmRequest.vm

This is currently ignored by concierge when starting termina, but
since termina can now be installed in multiple different locations we
need concierge to start taking the value that chrome sets.

Bug: 953544
Change-Id: I51b1ea50a5ae056d6af6baa0743a3cb0c8f8f5e5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2329126
Commit-Queue: Fergus Dall <sidereal@google.com>
Reviewed-by: default avatarNicholas Verne <nverne@chromium.org>
Reviewed-by: default avatarDavid Munro <davidmunro@google.com>
Cr-Commit-Position: refs/heads/master@{#795346}
parent bf4855f6
...@@ -1200,6 +1200,11 @@ void CrostiniManager::StartTerminaVm(std::string name, ...@@ -1200,6 +1200,11 @@ void CrostiniManager::StartTerminaVm(std::string name,
} }
vm_tools::concierge::StartVmRequest request; vm_tools::concierge::StartVmRequest request;
base::FilePath base_path = termina_installer_.GetInstallLocation();
request.mutable_vm()->set_kernel(
base_path.Append(kCrostiniKernel).AsUTF8Unsafe());
request.mutable_vm()->set_rootfs(
base_path.Append(kCrostiniRootfs).AsUTF8Unsafe());
request.set_name(std::move(name)); request.set_name(std::move(name));
request.set_start_termina(true); request.set_start_termina(true);
request.set_owner_id(owner_id_); request.set_owner_id(owner_id_);
...@@ -1214,11 +1219,24 @@ void CrostiniManager::StartTerminaVm(std::string name, ...@@ -1214,11 +1219,24 @@ void CrostiniManager::StartTerminaVm(std::string name,
DCHECK_LT(0, cpus); DCHECK_LT(0, cpus);
request.set_cpus(cpus); request.set_cpus(cpus);
vm_tools::concierge::DiskImage* disk_image = request.add_disks(); // The stateful disk must be added first because concierge treats it
disk_image->set_path(std::move(disk_path_string)); // specially.
disk_image->set_image_type(vm_tools::concierge::DISK_IMAGE_AUTO); {
disk_image->set_writable(true); vm_tools::concierge::DiskImage* disk_image = request.add_disks();
disk_image->set_do_mount(false); disk_image->set_path(std::move(disk_path_string));
disk_image->set_image_type(vm_tools::concierge::DISK_IMAGE_AUTO);
disk_image->set_writable(true);
disk_image->set_do_mount(false);
}
{
vm_tools::concierge::DiskImage* disk_image = request.add_disks();
disk_image->set_path(base_path.Append(kCrostiniToolfs).AsUTF8Unsafe());
disk_image->set_mount_point(kCrostiniToolfsMountPath);
disk_image->set_fstype(kCrostiniToolfsType);
disk_image->set_writable(false);
disk_image->set_do_mount(true);
}
GetConciergeClient()->StartTerminaVm( GetConciergeClient()->StartTerminaVm(
request, base::BindOnce(&CrostiniManager::OnStartTerminaVm, request, base::BindOnce(&CrostiniManager::OnStartTerminaVm,
......
...@@ -161,6 +161,15 @@ class CrostiniManagerTest : public testing::Test { ...@@ -161,6 +161,15 @@ class CrostiniManagerTest : public testing::Test {
std::move(closure).Run(); std::move(closure).Run();
} }
void EnsureTerminaInstalled() {
base::RunLoop run_loop;
crostini_manager()->InstallTermina(
base::BindOnce([](base::OnceClosure callback,
CrostiniResult) { std::move(callback).Run(); },
run_loop.QuitClosure()));
run_loop.Run();
}
CrostiniManagerTest() CrostiniManagerTest()
: task_environment_(content::BrowserTaskEnvironment::REAL_IO_THREAD), : task_environment_(content::BrowserTaskEnvironment::REAL_IO_THREAD),
local_state_(std::make_unique<ScopedTestingLocalState>( local_state_(std::make_unique<ScopedTestingLocalState>(
...@@ -433,6 +442,7 @@ TEST_F(CrostiniManagerTest, StartTerminaVmMountError) { ...@@ -433,6 +442,7 @@ TEST_F(CrostiniManagerTest, StartTerminaVmMountError) {
response.set_mount_result(vm_tools::concierge::StartVmResponse::FAILURE); response.set_mount_result(vm_tools::concierge::StartVmResponse::FAILURE);
fake_concierge_client_->set_start_vm_response(response); fake_concierge_client_->set_start_vm_response(response);
EnsureTerminaInstalled();
crostini_manager()->StartTerminaVm( crostini_manager()->StartTerminaVm(
kVmName, disk_path, 0, kVmName, disk_path, 0,
base::BindOnce(&ExpectFailure, run_loop()->QuitClosure())); base::BindOnce(&ExpectFailure, run_loop()->QuitClosure()));
...@@ -452,6 +462,7 @@ TEST_F(CrostiniManagerTest, StartTerminaVmMountErrorThenSuccess) { ...@@ -452,6 +462,7 @@ TEST_F(CrostiniManagerTest, StartTerminaVmMountErrorThenSuccess) {
vm_tools::concierge::StartVmResponse::PARTIAL_DATA_LOSS); vm_tools::concierge::StartVmResponse::PARTIAL_DATA_LOSS);
fake_concierge_client_->set_start_vm_response(response); fake_concierge_client_->set_start_vm_response(response);
EnsureTerminaInstalled();
crostini_manager()->StartTerminaVm( crostini_manager()->StartTerminaVm(
kVmName, disk_path, 0, kVmName, disk_path, 0,
base::BindOnce(&ExpectSuccess, run_loop()->QuitClosure())); base::BindOnce(&ExpectSuccess, run_loop()->QuitClosure()));
...@@ -465,6 +476,7 @@ TEST_F(CrostiniManagerTest, StartTerminaVmSuccess) { ...@@ -465,6 +476,7 @@ TEST_F(CrostiniManagerTest, StartTerminaVmSuccess) {
base::HistogramTester histogram_tester{}; base::HistogramTester histogram_tester{};
const base::FilePath& disk_path = base::FilePath(kVmName); const base::FilePath& disk_path = base::FilePath(kVmName);
EnsureTerminaInstalled();
crostini_manager()->StartTerminaVm( crostini_manager()->StartTerminaVm(
kVmName, disk_path, 0, kVmName, disk_path, 0,
base::BindOnce(&ExpectSuccess, run_loop()->QuitClosure())); base::BindOnce(&ExpectSuccess, run_loop()->QuitClosure()));
...@@ -478,6 +490,7 @@ TEST_F(CrostiniManagerTest, OnStartTremplinRecordsRunningVm) { ...@@ -478,6 +490,7 @@ TEST_F(CrostiniManagerTest, OnStartTremplinRecordsRunningVm) {
const std::string owner_id = CryptohomeIdForProfile(profile()); const std::string owner_id = CryptohomeIdForProfile(profile());
// Start the Vm. // Start the Vm.
EnsureTerminaInstalled();
crostini_manager()->StartTerminaVm( crostini_manager()->StartTerminaVm(
kVmName, disk_path, 0, kVmName, disk_path, 0,
base::BindOnce(&ExpectSuccess, run_loop()->QuitClosure())); base::BindOnce(&ExpectSuccess, run_loop()->QuitClosure()));
......
...@@ -68,6 +68,12 @@ const char kCrostiniStretchImageAlias[] = "debian/stretch"; ...@@ -68,6 +68,12 @@ const char kCrostiniStretchImageAlias[] = "debian/stretch";
const char kCrostiniBusterImageAlias[] = "debian/buster"; const char kCrostiniBusterImageAlias[] = "debian/buster";
const char kCrostiniDlcName[] = "termina-dlc"; const char kCrostiniDlcName[] = "termina-dlc";
const char kCrostiniKernel[] = "vm_kernel";
const char kCrostiniRootfs[] = "vm_rootfs.img";
const char kCrostiniToolfs[] = "vm_tools.img";
const char kCrostiniToolfsMountPath[] = "/opt/google/cros-containers";
const char kCrostiniToolfsType[] = "ext4";
const base::FilePath::CharType kHomeDirectory[] = FILE_PATH_LITERAL("/home"); const base::FilePath::CharType kHomeDirectory[] = FILE_PATH_LITERAL("/home");
namespace { namespace {
......
...@@ -48,6 +48,12 @@ extern const char kCrostiniStretchImageAlias[]; ...@@ -48,6 +48,12 @@ extern const char kCrostiniStretchImageAlias[];
extern const char kCrostiniBusterImageAlias[]; extern const char kCrostiniBusterImageAlias[];
extern const char kCrostiniDlcName[]; extern const char kCrostiniDlcName[];
extern const char kCrostiniKernel[];
extern const char kCrostiniRootfs[];
extern const char kCrostiniToolfs[];
extern const char kCrostiniToolfsMountPath[];
extern const char kCrostiniToolfsType[];
extern const base::FilePath::CharType kHomeDirectory[]; extern const base::FilePath::CharType kHomeDirectory[];
struct LinuxPackageInfo; struct LinuxPackageInfo;
......
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