| Index: chrome/installer/setup/setup_util_unittest.cc
|
| diff --git a/chrome/installer/setup/setup_util_unittest.cc b/chrome/installer/setup/setup_util_unittest.cc
|
| index bebf65a14725f264539513e9aa1c3f3cf0139291..10b093632613aface668e87a7a68e3118b8ce8a5 100644
|
| --- a/chrome/installer/setup/setup_util_unittest.cc
|
| +++ b/chrome/installer/setup/setup_util_unittest.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/command_line.h"
|
| #include "base/files/file_util.h"
|
| #include "base/files/scoped_temp_dir.h"
|
| +#include "base/macros.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/process/kill.h"
|
| #include "base/process/launch.h"
|
| @@ -20,11 +21,15 @@
|
| #include "base/threading/platform_thread.h"
|
| #include "base/time/time.h"
|
| #include "base/version.h"
|
| +#include "base/win/registry.h"
|
| #include "base/win/scoped_handle.h"
|
| #include "base/win/windows_version.h"
|
| #include "chrome/installer/setup/setup_constants.h"
|
| #include "chrome/installer/setup/setup_util.h"
|
| +#include "chrome/installer/setup/update_active_setup_version_work_item.h"
|
| +#include "chrome/installer/util/browser_distribution.h"
|
| #include "chrome/installer/util/google_update_constants.h"
|
| +#include "chrome/installer/util/install_util.h"
|
| #include "chrome/installer/util/installation_state.h"
|
| #include "chrome/installer/util/installer_state.h"
|
| #include "chrome/installer/util/updating_app_registration_data.h"
|
| @@ -33,20 +38,22 @@
|
|
|
| namespace {
|
|
|
| -class SetupUtilTestWithDir : public testing::Test {
|
| +class SetupUtilTest : public testing::Test {
|
| protected:
|
| + SetupUtilTest() {}
|
| +
|
| void SetUp() override {
|
| - // Create a temp directory for testing.
|
| ASSERT_TRUE(test_dir_.CreateUniqueTempDir());
|
| + registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER);
|
| + registry_override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE);
|
| }
|
|
|
| - void TearDown() override {
|
| - // Clean up test directory manually so we can fail if it leaks.
|
| - ASSERT_TRUE(test_dir_.Delete());
|
| - }
|
| -
|
| - // The temporary directory used to contain the test operations.
|
| base::ScopedTempDir test_dir_;
|
| +
|
| + private:
|
| + registry_util::RegistryOverrideManager registry_override_manager_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SetupUtilTest);
|
| };
|
|
|
| // The privilege tested in ScopeTokenPrivilege tests below.
|
| @@ -100,8 +107,88 @@ bool CurrentProcessHasPrivilege(const wchar_t* privilege_name) {
|
|
|
| } // namespace
|
|
|
| +TEST_F(SetupUtilTest, UpdateLastOSUpgradeHandledByActiveSetup) {
|
| + BrowserDistribution* chrome_dist =
|
| + BrowserDistribution::GetSpecificDistribution(
|
| + BrowserDistribution::CHROME_BROWSER);
|
| + const base::string16 active_setup_path(
|
| + InstallUtil::GetActiveSetupPath(chrome_dist));
|
| +
|
| + base::win::RegKey test_key;
|
| + base::string16 unused_tmp;
|
| +
|
| + EXPECT_EQ(ERROR_FILE_NOT_FOUND,
|
| + test_key.Open(HKEY_LOCAL_MACHINE, active_setup_path.c_str(),
|
| + KEY_QUERY_VALUE));
|
| + // The WorkItem assume the ActiveSetup key itself already exists and only
|
| + // handles the Version entry, create it now, but don't fill the "Version"
|
| + // entry just yet.
|
| + EXPECT_EQ(ERROR_SUCCESS,
|
| + test_key.Create(HKEY_LOCAL_MACHINE, active_setup_path.c_str(),
|
| + KEY_QUERY_VALUE));
|
| + EXPECT_EQ(ERROR_FILE_NOT_FOUND, test_key.ReadValue(L"Version", &unused_tmp));
|
| +
|
| + // Test returns false when no Active Setup version present (and doesn't alter
|
| + // that state).
|
| + EXPECT_FALSE(
|
| + installer::UpdateLastOSUpgradeHandledByActiveSetup(chrome_dist));
|
| + EXPECT_EQ(ERROR_FILE_NOT_FOUND, test_key.ReadValue(L"Version", &unused_tmp));
|
| +
|
| + {
|
| + UpdateActiveSetupVersionWorkItem active_setup_work_item(
|
| + active_setup_path, UpdateActiveSetupVersionWorkItem::UPDATE);
|
| + active_setup_work_item.Do();
|
| + EXPECT_EQ(ERROR_SUCCESS, test_key.ReadValue(L"Version", &unused_tmp));
|
| + }
|
| +
|
| + // Test returns false with default Active Setup version.
|
| + EXPECT_FALSE(
|
| + installer::UpdateLastOSUpgradeHandledByActiveSetup(chrome_dist));
|
| + EXPECT_EQ(ERROR_SUCCESS, test_key.ReadValue(L"Version", &unused_tmp));
|
| +
|
| + // Run through |kIterations| sequences of bumping the OS upgrade version |i|
|
| + // times and simulating a regular update |kIterations-i| times, confirming
|
| + // that handling any number of OS upgrades only results in a single hit and
|
| + // that no amount of regular updates after that result in any hit.
|
| + const size_t kIterations = 4U;
|
| + for (size_t i = 0U; i < kIterations; ++i) {
|
| + SCOPED_TRACE(i);
|
| + // Bump the OS_UPGRADES component |i| times.
|
| + for (size_t j = 0; j < i; ++j) {
|
| + UpdateActiveSetupVersionWorkItem active_setup_work_item(
|
| + active_setup_path, UpdateActiveSetupVersionWorkItem::
|
| + UPDATE_AND_BUMP_OS_UPGRADES_COMPONENT);
|
| + active_setup_work_item.Do();
|
| + }
|
| +
|
| + // There should be a single OS upgrade to handle if the OS_UPGRADES
|
| + // component was bumped at least once.
|
| + EXPECT_EQ(i > 0, installer::UpdateLastOSUpgradeHandledByActiveSetup(
|
| + chrome_dist));
|
| +
|
| + // We should only be told to handle the latest OS upgrade once above.
|
| + EXPECT_FALSE(
|
| + installer::UpdateLastOSUpgradeHandledByActiveSetup(chrome_dist));
|
| + EXPECT_FALSE(
|
| + installer::UpdateLastOSUpgradeHandledByActiveSetup(chrome_dist));
|
| +
|
| + // Run |kIterations-i| regular updates.
|
| + for (size_t j = i; j < kIterations; ++j) {
|
| + UpdateActiveSetupVersionWorkItem active_setup_work_item(
|
| + active_setup_path, UpdateActiveSetupVersionWorkItem::UPDATE);
|
| + active_setup_work_item.Do();
|
| + }
|
| +
|
| + // No amount of regular updates should trigger an OS upgrade to be handled.
|
| + EXPECT_FALSE(
|
| + installer::UpdateLastOSUpgradeHandledByActiveSetup(chrome_dist));
|
| + EXPECT_FALSE(
|
| + installer::UpdateLastOSUpgradeHandledByActiveSetup(chrome_dist));
|
| + }
|
| +}
|
| +
|
| // Test that we are parsing Chrome version correctly.
|
| -TEST_F(SetupUtilTestWithDir, GetMaxVersionFromArchiveDirTest) {
|
| +TEST_F(SetupUtilTest, GetMaxVersionFromArchiveDirTest) {
|
| // Create a version dir
|
| base::FilePath chrome_dir = test_dir_.path().AppendASCII("1.0.0.0");
|
| base::CreateDirectory(chrome_dir);
|
| @@ -137,7 +224,7 @@ TEST_F(SetupUtilTestWithDir, GetMaxVersionFromArchiveDirTest) {
|
| ASSERT_EQ(version->GetString(), "9.9.9.9");
|
| }
|
|
|
| -TEST_F(SetupUtilTestWithDir, DeleteFileFromTempProcess) {
|
| +TEST_F(SetupUtilTest, DeleteFileFromTempProcess) {
|
| base::FilePath test_file;
|
| base::CreateTemporaryFileInDir(test_dir_.path(), &test_file);
|
| ASSERT_TRUE(base::PathExists(test_file));
|
| @@ -267,7 +354,7 @@ namespace {
|
|
|
| // A test fixture that configures an InstallationState and an InstallerState
|
| // with a product being updated.
|
| -class FindArchiveToPatchTest : public SetupUtilTestWithDir {
|
| +class FindArchiveToPatchTest : public SetupUtilTest {
|
| protected:
|
| class FakeInstallationState : public installer::InstallationState {
|
| };
|
| @@ -291,7 +378,7 @@ class FindArchiveToPatchTest : public SetupUtilTestWithDir {
|
| };
|
|
|
| void SetUp() override {
|
| - SetupUtilTestWithDir::SetUp();
|
| + SetupUtilTest::SetUp();
|
| product_version_ = Version("30.0.1559.0");
|
| max_version_ = Version("47.0.1559.0");
|
|
|
| @@ -318,7 +405,7 @@ class FindArchiveToPatchTest : public SetupUtilTestWithDir {
|
|
|
| void TearDown() override {
|
| original_state_.reset();
|
| - SetupUtilTestWithDir::TearDown();
|
| + SetupUtilTest::TearDown();
|
| }
|
|
|
| base::FilePath GetArchivePath(const Version& version) const {
|
| @@ -434,6 +521,8 @@ class MigrateMultiToSingleTest : public testing::Test {
|
| static const HKEY kRootKey;
|
| static const wchar_t kVersionString[];
|
| static const wchar_t kMultiChannel[];
|
| +
|
| + private:
|
| registry_util::RegistryOverrideManager registry_override_manager_;
|
| };
|
|
|
|
|