Commit 61c1411d authored by Satoshi Niwa's avatar Satoshi Niwa Committed by Commit Bot

arc_vm_client_adapter: Get chromeos_channel value from lsb-release

chromeos_channel value for ARC container is also extracted in the
same way. (GetChromeOsChannelFromFile() in arc_setup_util.cc)

This fixes the issue that "unknown" value is set for testimage
(b/151289109)

BUG=b:151289109
TEST="android-sh -c getprop" and check ro.boot.chromeos_channel is "testimage"

Change-Id: I7d84dab2adb665f56689cb26c2cd20082d64272c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2108306
Commit-Queue: Satoshi Niwa <niwa@chromium.org>
Auto-Submit: Satoshi Niwa <niwa@chromium.org>
Reviewed-by: default avatarYusuke Sato <yusukes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#751598}
parent 6f6c6e44
......@@ -22,9 +22,8 @@ void ArcClientAdapter::RemoveObserver(Observer* observer) {
}
// static
std::unique_ptr<ArcClientAdapter> ArcClientAdapter::Create(
version_info::Channel channel) {
return IsArcVmEnabled() ? CreateArcVmClientAdapter(channel)
std::unique_ptr<ArcClientAdapter> ArcClientAdapter::Create() {
return IsArcVmEnabled() ? CreateArcVmClientAdapter()
: CreateArcContainerClientAdapter();
}
......
......@@ -13,7 +13,6 @@
#include "chromeos/dbus/dbus_method_call_status.h"
#include "components/arc/session/arc_start_params.h"
#include "components/arc/session/arc_upgrade_params.h"
#include "components/version_info/channel.h"
namespace arc {
......@@ -27,8 +26,7 @@ class ArcClientAdapter {
};
// Creates a default instance of ArcClientAdapter.
static std::unique_ptr<ArcClientAdapter> Create(
version_info::Channel channel);
static std::unique_ptr<ArcClientAdapter> Create();
virtual ~ArcClientAdapter();
// StartMiniArc starts ARC with only a handful of ARC processes for Chrome OS
......
......@@ -196,7 +196,7 @@ version_info::Channel ArcSessionDelegateImpl::GetChannel() {
}
std::unique_ptr<ArcClientAdapter> ArcSessionDelegateImpl::CreateClient() {
return ArcClientAdapter::Create(GetChannel());
return ArcClientAdapter::Create();
}
// static
......
......@@ -59,6 +59,21 @@ chromeos::ConciergeClient* GetConciergeClient() {
return chromeos::DBusThreadManager::Get()->GetConciergeClient();
}
std::string GetChromeOsChannelFromLsbRelease() {
constexpr const char kChromeOsReleaseTrack[] = "CHROMEOS_RELEASE_TRACK";
constexpr const char kUnknown[] = "unknown";
const std::string kChannelSuffix = "-channel";
std::string value;
base::SysInfo::GetLsbReleaseValue(kChromeOsReleaseTrack, &value);
if (!base::EndsWith(value, kChannelSuffix, base::CompareCase::SENSITIVE)) {
LOG(ERROR) << "Unknown ChromeOS channel: \"" << value << "\"";
return kUnknown;
}
return value.erase(value.find(kChannelSuffix), kChannelSuffix.size());
}
// TODO(pliard): Export host-side /data to the VM, and remove the function.
vm_tools::concierge::CreateDiskImageRequest CreateArcDiskRequest(
const std::string& user_id_hash,
......@@ -290,14 +305,11 @@ class ArcVmClientAdapter : public ArcClientAdapter,
// Initializing |is_host_on_vm_| and |is_dev_mode_| is not always very fast.
// Try to initialize them in the constructor and in StartMiniArc respectively.
// They usually run when the system is not busy.
explicit ArcVmClientAdapter(version_info::Channel channel)
: ArcVmClientAdapter(channel, {}) {}
explicit ArcVmClientAdapter() : ArcVmClientAdapter({}) {}
// For testing purposes and the internal use (by the other ctor) only.
ArcVmClientAdapter(version_info::Channel channel,
const FileSystemStatusRewriter& rewriter)
: channel_(channel),
is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance()
ArcVmClientAdapter(const FileSystemStatusRewriter& rewriter)
: is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance()
->IsRunningOnVm()),
file_system_status_rewriter_for_testing_(rewriter) {
auto* client = GetConciergeClient();
......@@ -548,8 +560,7 @@ class ArcVmClientAdapter : public ArcClientAdapter,
DCHECK(is_dev_mode_);
std::vector<std::string> kernel_cmdline = GenerateKernelCmdline(
start_params_, params, file_system_status, *is_dev_mode_,
is_host_on_vm_, version_info::GetChannelString(channel_),
serial_number_);
is_host_on_vm_, GetChromeOsChannelFromLsbRelease(), serial_number_);
auto start_request = CreateStartArcVmRequest(
user_id_hash_, cpus, data_disk_path, params.demo_session_apps_path,
file_system_status, std::move(kernel_cmdline));
......@@ -614,8 +625,6 @@ class ArcVmClientAdapter : public ArcClientAdapter,
OnArcInstanceStopped();
}
const version_info::Channel channel_;
base::Optional<bool> is_dev_mode_;
// True when the *host* is running on a VM.
const bool is_host_on_vm_;
......@@ -637,15 +646,13 @@ class ArcVmClientAdapter : public ArcClientAdapter,
DISALLOW_COPY_AND_ASSIGN(ArcVmClientAdapter);
};
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter(
version_info::Channel channel) {
return std::make_unique<ArcVmClientAdapter>(channel);
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter() {
return std::make_unique<ArcVmClientAdapter>();
}
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapterForTesting(
version_info::Channel channel,
const FileSystemStatusRewriter& rewriter) {
return std::make_unique<ArcVmClientAdapter>(channel, rewriter);
return std::make_unique<ArcVmClientAdapter>(rewriter);
}
} // namespace arc
......@@ -10,7 +10,6 @@
#include "base/callback.h"
#include "components/arc/session/arc_client_adapter.h"
#include "components/arc/session/file_system_status.h"
#include "components/version_info/channel.h"
namespace arc {
......@@ -23,13 +22,11 @@ enum class ArcBinaryTranslationType {
};
// Returns an adapter for arcvm.
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter(
version_info::Channel channel);
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter();
using FileSystemStatusRewriter =
base::RepeatingCallback<void(FileSystemStatus*)>;
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapterForTesting(
version_info::Channel channel,
const FileSystemStatusRewriter& rewriter);
} // namespace arc
......
......@@ -16,8 +16,10 @@
#include "base/memory/ptr_util.h"
#include "base/run_loop.h"
#include "base/stl_util.h"
#include "base/system/sys_info.h"
#include "base/task/post_task.h"
#include "base/test/bind_test_util.h"
#include "base/time/time.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/debug_daemon/fake_debug_daemon_client.h"
#include "chromeos/dbus/fake_concierge_client.h"
......@@ -137,7 +139,6 @@ class ArcVmClientAdapterTest : public testing::Test,
void SetUp() override {
run_loop_ = std::make_unique<base::RunLoop>();
adapter_ = CreateArcVmClientAdapterForTesting(
version_info::Channel::STABLE,
base::BindRepeating(&ArcVmClientAdapterTest::RewriteStatus,
base::Unretained(this)));
arc_instance_stopped_called_ = false;
......@@ -812,12 +813,37 @@ TEST_F(ArcVmClientAdapterTest, KernelParam_RW) {
EXPECT_TRUE(base::Contains(request.params(), "rw"));
}
// Tests that CreateArcVmClientAdapter(), the non-testing version, doesn't
// crash.
// Tests that CreateArcVmClientAdapter() doesn't crash.
TEST_F(ArcVmClientAdapterTest, TestCreateArcVmClientAdapter) {
CreateArcVmClientAdapter(version_info::Channel::STABLE);
CreateArcVmClientAdapter(version_info::Channel::BETA);
CreateArcVmClientAdapter(version_info::Channel::DEV);
CreateArcVmClientAdapter();
}
TEST_F(ArcVmClientAdapterTest, ChromeOsChannelStable) {
base::SysInfo::SetChromeOSVersionInfoForTest(
"CHROMEOS_RELEASE_TRACK=stable-channel", base::Time::Now());
base::CommandLine::ForCurrentProcess()->InitFromArgv({""});
StartParams start_params(GetPopulatedStartParams());
SetValidUserInfo();
StartMiniArcWithParams(true, std::move(start_params));
UpgradeArc(true);
EXPECT_TRUE(
base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(),
"androidboot.chromeos_channel=stable"));
}
TEST_F(ArcVmClientAdapterTest, ChromeOsChannelUnknown) {
base::SysInfo::SetChromeOSVersionInfoForTest("CHROMEOS_RELEASE_TRACK=invalid",
base::Time::Now());
base::CommandLine::ForCurrentProcess()->InitFromArgv({""});
StartParams start_params(GetPopulatedStartParams());
SetValidUserInfo();
StartMiniArcWithParams(true, std::move(start_params));
UpgradeArc(true);
EXPECT_TRUE(
base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(),
"androidboot.chromeos_channel=unknown"));
}
// Tests that the binary translation type is set to None when no library is
......
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