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) { ...@@ -22,9 +22,8 @@ void ArcClientAdapter::RemoveObserver(Observer* observer) {
} }
// static // static
std::unique_ptr<ArcClientAdapter> ArcClientAdapter::Create( std::unique_ptr<ArcClientAdapter> ArcClientAdapter::Create() {
version_info::Channel channel) { return IsArcVmEnabled() ? CreateArcVmClientAdapter()
return IsArcVmEnabled() ? CreateArcVmClientAdapter(channel)
: CreateArcContainerClientAdapter(); : CreateArcContainerClientAdapter();
} }
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include "chromeos/dbus/dbus_method_call_status.h" #include "chromeos/dbus/dbus_method_call_status.h"
#include "components/arc/session/arc_start_params.h" #include "components/arc/session/arc_start_params.h"
#include "components/arc/session/arc_upgrade_params.h" #include "components/arc/session/arc_upgrade_params.h"
#include "components/version_info/channel.h"
namespace arc { namespace arc {
...@@ -27,8 +26,7 @@ class ArcClientAdapter { ...@@ -27,8 +26,7 @@ class ArcClientAdapter {
}; };
// Creates a default instance of ArcClientAdapter. // Creates a default instance of ArcClientAdapter.
static std::unique_ptr<ArcClientAdapter> Create( static std::unique_ptr<ArcClientAdapter> Create();
version_info::Channel channel);
virtual ~ArcClientAdapter(); virtual ~ArcClientAdapter();
// StartMiniArc starts ARC with only a handful of ARC processes for Chrome OS // StartMiniArc starts ARC with only a handful of ARC processes for Chrome OS
......
...@@ -196,7 +196,7 @@ version_info::Channel ArcSessionDelegateImpl::GetChannel() { ...@@ -196,7 +196,7 @@ version_info::Channel ArcSessionDelegateImpl::GetChannel() {
} }
std::unique_ptr<ArcClientAdapter> ArcSessionDelegateImpl::CreateClient() { std::unique_ptr<ArcClientAdapter> ArcSessionDelegateImpl::CreateClient() {
return ArcClientAdapter::Create(GetChannel()); return ArcClientAdapter::Create();
} }
// static // static
......
...@@ -59,6 +59,21 @@ chromeos::ConciergeClient* GetConciergeClient() { ...@@ -59,6 +59,21 @@ chromeos::ConciergeClient* GetConciergeClient() {
return chromeos::DBusThreadManager::Get()->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. // TODO(pliard): Export host-side /data to the VM, and remove the function.
vm_tools::concierge::CreateDiskImageRequest CreateArcDiskRequest( vm_tools::concierge::CreateDiskImageRequest CreateArcDiskRequest(
const std::string& user_id_hash, const std::string& user_id_hash,
...@@ -290,14 +305,11 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -290,14 +305,11 @@ class ArcVmClientAdapter : public ArcClientAdapter,
// Initializing |is_host_on_vm_| and |is_dev_mode_| is not always very fast. // 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. // Try to initialize them in the constructor and in StartMiniArc respectively.
// They usually run when the system is not busy. // They usually run when the system is not busy.
explicit ArcVmClientAdapter(version_info::Channel channel) explicit ArcVmClientAdapter() : ArcVmClientAdapter({}) {}
: ArcVmClientAdapter(channel, {}) {}
// For testing purposes and the internal use (by the other ctor) only. // For testing purposes and the internal use (by the other ctor) only.
ArcVmClientAdapter(version_info::Channel channel, ArcVmClientAdapter(const FileSystemStatusRewriter& rewriter)
const FileSystemStatusRewriter& rewriter) : is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance()
: channel_(channel),
is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance()
->IsRunningOnVm()), ->IsRunningOnVm()),
file_system_status_rewriter_for_testing_(rewriter) { file_system_status_rewriter_for_testing_(rewriter) {
auto* client = GetConciergeClient(); auto* client = GetConciergeClient();
...@@ -548,8 +560,7 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -548,8 +560,7 @@ class ArcVmClientAdapter : public ArcClientAdapter,
DCHECK(is_dev_mode_); DCHECK(is_dev_mode_);
std::vector<std::string> kernel_cmdline = GenerateKernelCmdline( std::vector<std::string> kernel_cmdline = GenerateKernelCmdline(
start_params_, params, file_system_status, *is_dev_mode_, start_params_, params, file_system_status, *is_dev_mode_,
is_host_on_vm_, version_info::GetChannelString(channel_), is_host_on_vm_, GetChromeOsChannelFromLsbRelease(), serial_number_);
serial_number_);
auto start_request = CreateStartArcVmRequest( auto start_request = CreateStartArcVmRequest(
user_id_hash_, cpus, data_disk_path, params.demo_session_apps_path, user_id_hash_, cpus, data_disk_path, params.demo_session_apps_path,
file_system_status, std::move(kernel_cmdline)); file_system_status, std::move(kernel_cmdline));
...@@ -614,8 +625,6 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -614,8 +625,6 @@ class ArcVmClientAdapter : public ArcClientAdapter,
OnArcInstanceStopped(); OnArcInstanceStopped();
} }
const version_info::Channel channel_;
base::Optional<bool> is_dev_mode_; base::Optional<bool> is_dev_mode_;
// True when the *host* is running on a VM. // True when the *host* is running on a VM.
const bool is_host_on_vm_; const bool is_host_on_vm_;
...@@ -637,15 +646,13 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -637,15 +646,13 @@ class ArcVmClientAdapter : public ArcClientAdapter,
DISALLOW_COPY_AND_ASSIGN(ArcVmClientAdapter); DISALLOW_COPY_AND_ASSIGN(ArcVmClientAdapter);
}; };
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter( std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter() {
version_info::Channel channel) { return std::make_unique<ArcVmClientAdapter>();
return std::make_unique<ArcVmClientAdapter>(channel);
} }
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapterForTesting( std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapterForTesting(
version_info::Channel channel,
const FileSystemStatusRewriter& rewriter) { const FileSystemStatusRewriter& rewriter) {
return std::make_unique<ArcVmClientAdapter>(channel, rewriter); return std::make_unique<ArcVmClientAdapter>(rewriter);
} }
} // namespace arc } // namespace arc
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "base/callback.h" #include "base/callback.h"
#include "components/arc/session/arc_client_adapter.h" #include "components/arc/session/arc_client_adapter.h"
#include "components/arc/session/file_system_status.h" #include "components/arc/session/file_system_status.h"
#include "components/version_info/channel.h"
namespace arc { namespace arc {
...@@ -23,13 +22,11 @@ enum class ArcBinaryTranslationType { ...@@ -23,13 +22,11 @@ enum class ArcBinaryTranslationType {
}; };
// Returns an adapter for arcvm. // Returns an adapter for arcvm.
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter( std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter();
version_info::Channel channel);
using FileSystemStatusRewriter = using FileSystemStatusRewriter =
base::RepeatingCallback<void(FileSystemStatus*)>; base::RepeatingCallback<void(FileSystemStatus*)>;
std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapterForTesting( std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapterForTesting(
version_info::Channel channel,
const FileSystemStatusRewriter& rewriter); const FileSystemStatusRewriter& rewriter);
} // namespace arc } // namespace arc
......
...@@ -16,8 +16,10 @@ ...@@ -16,8 +16,10 @@
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/system/sys_info.h"
#include "base/task/post_task.h" #include "base/task/post_task.h"
#include "base/test/bind_test_util.h" #include "base/test/bind_test_util.h"
#include "base/time/time.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/debug_daemon/fake_debug_daemon_client.h" #include "chromeos/dbus/debug_daemon/fake_debug_daemon_client.h"
#include "chromeos/dbus/fake_concierge_client.h" #include "chromeos/dbus/fake_concierge_client.h"
...@@ -137,7 +139,6 @@ class ArcVmClientAdapterTest : public testing::Test, ...@@ -137,7 +139,6 @@ class ArcVmClientAdapterTest : public testing::Test,
void SetUp() override { void SetUp() override {
run_loop_ = std::make_unique<base::RunLoop>(); run_loop_ = std::make_unique<base::RunLoop>();
adapter_ = CreateArcVmClientAdapterForTesting( adapter_ = CreateArcVmClientAdapterForTesting(
version_info::Channel::STABLE,
base::BindRepeating(&ArcVmClientAdapterTest::RewriteStatus, base::BindRepeating(&ArcVmClientAdapterTest::RewriteStatus,
base::Unretained(this))); base::Unretained(this)));
arc_instance_stopped_called_ = false; arc_instance_stopped_called_ = false;
...@@ -812,12 +813,37 @@ TEST_F(ArcVmClientAdapterTest, KernelParam_RW) { ...@@ -812,12 +813,37 @@ TEST_F(ArcVmClientAdapterTest, KernelParam_RW) {
EXPECT_TRUE(base::Contains(request.params(), "rw")); EXPECT_TRUE(base::Contains(request.params(), "rw"));
} }
// Tests that CreateArcVmClientAdapter(), the non-testing version, doesn't // Tests that CreateArcVmClientAdapter() doesn't crash.
// crash.
TEST_F(ArcVmClientAdapterTest, TestCreateArcVmClientAdapter) { TEST_F(ArcVmClientAdapterTest, TestCreateArcVmClientAdapter) {
CreateArcVmClientAdapter(version_info::Channel::STABLE); CreateArcVmClientAdapter();
CreateArcVmClientAdapter(version_info::Channel::BETA); }
CreateArcVmClientAdapter(version_info::Channel::DEV);
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 // 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