Commit 8db30317 authored by Fergus Dall's avatar Fergus Dall Committed by Commit Bot

Reland "Start setting StartVmRequest.vm"

This is a reland of 6d67f881

Original change's description:
> 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: Nicholas Verne <nverne@chromium.org>
> Reviewed-by: David Munro <davidmunro@google.com>
> Cr-Commit-Position: refs/heads/master@{#795346}

Bug: 953544
Change-Id: Ib741759a5b61dc810d66c9d182131766247a5a30
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2341224
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@{#796450}
parent ffd91e52
...@@ -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