Commit 76a48dae authored by Toni Barzic's avatar Toni Barzic Committed by Commit Bot

Use fake cros component manager in crostini browser tests

Updates crostini installer browser test setup to use fake cros component
manager implementation.

BUG=None
TEST=cq passes

Change-Id: I85e19ffeade2a932678ddaee92db8329b0bde426
Reviewed-on: https://chromium-review.googlesource.com/c/1303036Reviewed-by: default avatarNicholas Verne <nverne@chromium.org>
Commit-Queue: Toni Baržić <tbarzic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#603579}
parent 65f5d3e1
...@@ -4,29 +4,32 @@ ...@@ -4,29 +4,32 @@
#include "chrome/browser/ui/views/crostini/crostini_browser_test_util.h" #include "chrome/browser/ui/views/crostini/crostini_browser_test_util.h"
#include <utility>
#include "base/path_service.h" #include "base/path_service.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_browser_main.h" #include "chrome/browser/chrome_browser_main.h"
#include "chrome/browser/chrome_browser_main_extra_parts.h" #include "chrome/browser/chrome_browser_main_extra_parts.h"
#include "chrome/browser/chromeos/crostini/crostini_pref_names.h" #include "chrome/browser/chromeos/crostini/crostini_pref_names.h"
#include "chrome/browser/chromeos/crostini/crostini_util.h" #include "chrome/browser/chromeos/crostini/crostini_util.h"
#include "chrome/browser/component_updater/cros_component_installer_chromeos.h" #include "chrome/browser/component_updater/fake_cros_component_manager.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_features.h" #include "chrome/common/chrome_features.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/fake_image_loader_client.h"
#include "components/component_updater/component_updater_paths.h" #include "components/component_updater/component_updater_paths.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "net/base/mock_network_change_notifier.h" #include "net/base/mock_network_change_notifier.h"
#include "net/base/network_change_notifier_factory.h" #include "net/base/network_change_notifier_factory.h"
#include "third_party/cros_system_api/dbus/service_constants.h" #include "third_party/cros_system_api/dbus/service_constants.h"
// ChromeBrowserMainExtraParts used to install a MockNetworkChangeNotifier. // ChromeBrowserMainExtraParts used to install a MockNetworkChangeNotifier and
class ChromeBrowserMainExtraPartsNetFactoryInstaller // FakeCrOSComponentManager.
class CrostiniBrowserTestChromeBrowserMainExtraParts
: public ChromeBrowserMainExtraParts { : public ChromeBrowserMainExtraParts {
public: public:
ChromeBrowserMainExtraPartsNetFactoryInstaller() = default; explicit CrostiniBrowserTestChromeBrowserMainExtraParts(bool register_termina)
~ChromeBrowserMainExtraPartsNetFactoryInstaller() override { : register_termina_(register_termina) {}
~CrostiniBrowserTestChromeBrowserMainExtraParts() override {
// |network_change_notifier_| needs to be destroyed before |net_installer_|. // |network_change_notifier_| needs to be destroyed before |net_installer_|.
network_change_notifier_.reset(); network_change_notifier_.reset();
} }
...@@ -35,8 +38,34 @@ class ChromeBrowserMainExtraPartsNetFactoryInstaller ...@@ -35,8 +38,34 @@ class ChromeBrowserMainExtraPartsNetFactoryInstaller
return network_change_notifier_.get(); return network_change_notifier_.get();
} }
component_updater::FakeCrOSComponentManager* cros_component_manager() {
return cros_component_manager_ptr_;
}
// ChromeBrowserMainExtraParts: // ChromeBrowserMainExtraParts:
void PreEarlyInitialization() override {} void PostEarlyInitialization() override {
auto cros_component_manager =
std::make_unique<component_updater::FakeCrOSComponentManager>();
cros_component_manager->set_supported_components(
{imageloader::kTerminaComponentName});
if (register_termina_) {
cros_component_manager->set_registered_components(
{imageloader::kTerminaComponentName});
cros_component_manager->ResetComponentState(
imageloader::kTerminaComponentName,
component_updater::FakeCrOSComponentManager::ComponentInfo(
component_updater::CrOSComponentManager::Error::NONE,
base::FilePath("/dev/null"), base::FilePath("/dev/null")));
}
cros_component_manager_ptr_ = cros_component_manager.get();
browser_process_platform_part_test_api_ =
std::make_unique<BrowserProcessPlatformPartTestApi>(
g_browser_process->platform_part());
browser_process_platform_part_test_api_->InitializeCrosComponentManager(
std::move(cros_component_manager));
}
void PostMainMessageLoopStart() override { void PostMainMessageLoopStart() override {
ASSERT_TRUE(net::NetworkChangeNotifier::HasNetworkChangeNotifier()); ASSERT_TRUE(net::NetworkChangeNotifier::HasNetworkChangeNotifier());
net_installer_ = net_installer_ =
...@@ -46,34 +75,42 @@ class ChromeBrowserMainExtraPartsNetFactoryInstaller ...@@ -46,34 +75,42 @@ class ChromeBrowserMainExtraPartsNetFactoryInstaller
network_change_notifier_->SetConnectionType( network_change_notifier_->SetConnectionType(
net::NetworkChangeNotifier::CONNECTION_WIFI); net::NetworkChangeNotifier::CONNECTION_WIFI);
} }
void PostMainMessageLoopRun() override {
cros_component_manager_ptr_ = nullptr;
browser_process_platform_part_test_api_->ShutdownCrosComponentManager();
browser_process_platform_part_test_api_.reset();
}
private: private:
const bool register_termina_;
std::unique_ptr<BrowserProcessPlatformPartTestApi>
browser_process_platform_part_test_api_;
component_updater::FakeCrOSComponentManager* cros_component_manager_ptr_ =
nullptr;
std::unique_ptr<net::test::MockNetworkChangeNotifier> std::unique_ptr<net::test::MockNetworkChangeNotifier>
network_change_notifier_; network_change_notifier_;
std::unique_ptr<net::NetworkChangeNotifier::DisableForTest> net_installer_; std::unique_ptr<net::NetworkChangeNotifier::DisableForTest> net_installer_;
DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainExtraPartsNetFactoryInstaller); DISALLOW_COPY_AND_ASSIGN(CrostiniBrowserTestChromeBrowserMainExtraParts);
}; };
CrostiniDialogBrowserTest::CrostiniDialogBrowserTest() CrostiniDialogBrowserTest::CrostiniDialogBrowserTest(bool register_termina)
: dir_component_user_override_(component_updater::DIR_COMPONENT_USER) { : register_termina_(register_termina) {}
auto image_loader_client =
std::make_unique<chromeos::FakeImageLoaderClient>(); CrostiniDialogBrowserTest::~CrostiniDialogBrowserTest() = default;
image_loader_client_ = image_loader_client.get();
chromeos::DBusThreadManager::GetSetterForTesting()->SetImageLoaderClient(
std::move(image_loader_client));
}
void CrostiniDialogBrowserTest::CreatedBrowserMainParts( void CrostiniDialogBrowserTest::CreatedBrowserMainParts(
content::BrowserMainParts* browser_main_parts) { content::BrowserMainParts* browser_main_parts) {
ChromeBrowserMainParts* chrome_browser_main_parts = ChromeBrowserMainParts* chrome_browser_main_parts =
static_cast<ChromeBrowserMainParts*>(browser_main_parts); static_cast<ChromeBrowserMainParts*>(browser_main_parts);
extra_parts_ = new ChromeBrowserMainExtraPartsNetFactoryInstaller(); extra_parts_ =
new CrostiniBrowserTestChromeBrowserMainExtraParts(register_termina_);
chrome_browser_main_parts->AddParts(extra_parts_); chrome_browser_main_parts->AddParts(extra_parts_);
} }
void CrostiniDialogBrowserTest::SetUp() { void CrostiniDialogBrowserTest::SetUp() {
InitCrosTermina();
crostini::SetCrostiniUIAllowedForTesting(true); crostini::SetCrostiniUIAllowedForTesting(true);
DialogBrowserTest::SetUp(); DialogBrowserTest::SetUp();
} }
...@@ -81,25 +118,6 @@ void CrostiniDialogBrowserTest::SetUp() { ...@@ -81,25 +118,6 @@ void CrostiniDialogBrowserTest::SetUp() {
void CrostiniDialogBrowserTest::SetUpOnMainThread() { void CrostiniDialogBrowserTest::SetUpOnMainThread() {
browser()->profile()->GetPrefs()->SetBoolean( browser()->profile()->GetPrefs()->SetBoolean(
crostini::prefs::kCrostiniEnabled, true); crostini::prefs::kCrostiniEnabled, true);
auto* cros_component_manager =
g_browser_process->platform_part()->cros_component_manager();
cros_component_manager->RegisterCompatiblePath(
imageloader::kTerminaComponentName, cros_termina_resources_.GetPath());
image_loader_client_->RegisterComponent(
imageloader::kTerminaComponentName, "1.1",
cros_termina_resources_.GetPath().value(), base::DoNothing());
}
void CrostiniDialogBrowserTest::InitCrosTermina() {
base::FilePath component_user_dir;
ASSERT_TRUE(base::PathService::Get(component_updater::DIR_COMPONENT_USER,
&component_user_dir));
ASSERT_TRUE(cros_termina_resources_.Set(
component_user_dir.Append("cros-components")
.Append(imageloader::kTerminaComponentName)));
image_loader_client_->SetMountPathForComponent(
imageloader::kTerminaComponentName, cros_termina_resources_.GetPath());
} }
void CrostiniDialogBrowserTest::SetConnectionType( void CrostiniDialogBrowserTest::SetConnectionType(
...@@ -108,8 +126,9 @@ void CrostiniDialogBrowserTest::SetConnectionType( ...@@ -108,8 +126,9 @@ void CrostiniDialogBrowserTest::SetConnectionType(
} }
void CrostiniDialogBrowserTest::UnregisterTermina() { void CrostiniDialogBrowserTest::UnregisterTermina() {
auto* cros_component_manager = extra_parts_->cros_component_manager()->ResetComponentState(
g_browser_process->platform_part()->cros_component_manager(); imageloader::kTerminaComponentName,
cros_component_manager->UnregisterCompatiblePath( component_updater::FakeCrOSComponentManager::ComponentInfo(
imageloader::kTerminaComponentName); component_updater::CrOSComponentManager::Error::INSTALL_FAILURE,
base::FilePath(), base::FilePath()));
} }
...@@ -5,29 +5,26 @@ ...@@ -5,29 +5,26 @@
#ifndef CHROME_BROWSER_UI_VIEWS_CROSTINI_CROSTINI_BROWSER_TEST_UTIL_H_ #ifndef CHROME_BROWSER_UI_VIEWS_CROSTINI_CROSTINI_BROWSER_TEST_UTIL_H_
#define CHROME_BROWSER_UI_VIEWS_CROSTINI_CROSTINI_BROWSER_TEST_UTIL_H_ #define CHROME_BROWSER_UI_VIEWS_CROSTINI_CROSTINI_BROWSER_TEST_UTIL_H_
#include "base/files/scoped_temp_dir.h" #include <memory>
#include "base/test/scoped_path_override.h"
#include "chrome/browser/ui/test/test_browser_dialog.h" #include "chrome/browser/ui/test/test_browser_dialog.h"
#include "chrome/test/base/browser_process_platform_part_test_api_chromeos.h"
#include "net/base/network_change_notifier.h" #include "net/base/network_change_notifier.h"
class ChromeBrowserMainExtraPartsNetFactoryInstaller; class CrostiniBrowserTestChromeBrowserMainExtraParts;
namespace chromeos {
class FakeImageLoaderClient;
} // namespace chromeos
// Common base for Crostini dialog broswer tests. Allows tests to set network // Common base for Crostini dialog broswer tests. Allows tests to set network
// connection type. // connection type.
class CrostiniDialogBrowserTest : public DialogBrowserTest { class CrostiniDialogBrowserTest : public DialogBrowserTest {
public: public:
CrostiniDialogBrowserTest(); explicit CrostiniDialogBrowserTest(bool register_termina);
~CrostiniDialogBrowserTest() override;
// BrowserTestBase: // BrowserTestBase:
void CreatedBrowserMainParts( void CreatedBrowserMainParts(
content::BrowserMainParts* browser_main_parts) override; content::BrowserMainParts* browser_main_parts) override;
void SetUp() override; void SetUp() override;
void SetUpOnMainThread() override; void SetUpOnMainThread() override;
virtual void InitCrosTermina();
void SetConnectionType( void SetConnectionType(
net::NetworkChangeNotifier::ConnectionType connection_type); net::NetworkChangeNotifier::ConnectionType connection_type);
...@@ -35,12 +32,10 @@ class CrostiniDialogBrowserTest : public DialogBrowserTest { ...@@ -35,12 +32,10 @@ class CrostiniDialogBrowserTest : public DialogBrowserTest {
void UnregisterTermina(); void UnregisterTermina();
protected: protected:
const bool register_termina_;
// Owned by content::Browser // Owned by content::Browser
ChromeBrowserMainExtraPartsNetFactoryInstaller* extra_parts_ = nullptr; CrostiniBrowserTestChromeBrowserMainExtraParts* extra_parts_ = nullptr;
// Image loader client injected into, and owned by DBusThreadManager.
chromeos::FakeImageLoaderClient* image_loader_client_ = nullptr;
base::ScopedPathOverride dir_component_user_override_;
base::ScopedTempDir cros_termina_resources_;
private: private:
DISALLOW_COPY_AND_ASSIGN(CrostiniDialogBrowserTest); DISALLOW_COPY_AND_ASSIGN(CrostiniDialogBrowserTest);
......
...@@ -76,7 +76,8 @@ class CrostiniInstallerViewBrowserTest : public CrostiniDialogBrowserTest { ...@@ -76,7 +76,8 @@ class CrostiniInstallerViewBrowserTest : public CrostiniDialogBrowserTest {
}; };
CrostiniInstallerViewBrowserTest() CrostiniInstallerViewBrowserTest()
: waiting_fake_concierge_client_(new WaitingFakeConciergeClient()), : CrostiniDialogBrowserTest(true /*register_termina*/),
waiting_fake_concierge_client_(new WaitingFakeConciergeClient()),
waiting_disk_mount_manager_observer_( waiting_disk_mount_manager_observer_(
new WaitingDiskMountManagerObserver) { new WaitingDiskMountManagerObserver) {
chromeos::DBusThreadManager::GetSetterForTesting()->SetConciergeClient( chromeos::DBusThreadManager::GetSetterForTesting()->SetConciergeClient(
......
...@@ -52,7 +52,11 @@ class CrostiniUninstallerViewBrowserTest : public CrostiniDialogBrowserTest { ...@@ -52,7 +52,11 @@ class CrostiniUninstallerViewBrowserTest : public CrostiniDialogBrowserTest {
}; };
CrostiniUninstallerViewBrowserTest() CrostiniUninstallerViewBrowserTest()
: waiting_fake_concierge_client_(new WaitingFakeConciergeClient()) { : CrostiniUninstallerViewBrowserTest(true /*register_termina*/) {}
explicit CrostiniUninstallerViewBrowserTest(bool register_termina)
: CrostiniDialogBrowserTest(register_termina),
waiting_fake_concierge_client_(new WaitingFakeConciergeClient()) {
chromeos::DBusThreadManager::GetSetterForTesting()->SetConciergeClient( chromeos::DBusThreadManager::GetSetterForTesting()->SetConciergeClient(
base::WrapUnique(waiting_fake_concierge_client_)); base::WrapUnique(waiting_fake_concierge_client_));
} }
...@@ -91,17 +95,8 @@ class CrostiniUninstallerViewBrowserTest : public CrostiniDialogBrowserTest { ...@@ -91,17 +95,8 @@ class CrostiniUninstallerViewBrowserTest : public CrostiniDialogBrowserTest {
class CrostiniUninstalledUninstallerViewBrowserTest class CrostiniUninstalledUninstallerViewBrowserTest
: public CrostiniUninstallerViewBrowserTest { : public CrostiniUninstallerViewBrowserTest {
public: public:
CrostiniUninstalledUninstallerViewBrowserTest() = default; CrostiniUninstalledUninstallerViewBrowserTest()
: CrostiniUninstallerViewBrowserTest(false /*register_termina*/) {}
void SetUpOnMainThread() override {
browser()->profile()->GetPrefs()->SetBoolean(
crostini::prefs::kCrostiniEnabled, true);
// Skips installing the Cros-Termina component.
}
void InitCrosTermina() override {
// Skips setting up the Cros-Termina component.
}
private: private:
DISALLOW_COPY_AND_ASSIGN(CrostiniUninstalledUninstallerViewBrowserTest); DISALLOW_COPY_AND_ASSIGN(CrostiniUninstalledUninstallerViewBrowserTest);
......
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
class CrostiniUpgradeViewBrowserTest : public CrostiniDialogBrowserTest { class CrostiniUpgradeViewBrowserTest : public CrostiniDialogBrowserTest {
public: public:
CrostiniUpgradeViewBrowserTest() = default; CrostiniUpgradeViewBrowserTest()
: CrostiniDialogBrowserTest(true /*register_termina*/) {}
// DialogBrowserTest: // DialogBrowserTest:
void ShowUi(const std::string& name) override { void ShowUi(const std::string& name) override {
......
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