Chromium Code Reviews| Index: chrome/installer/util/install_util_unittest.cc |
| diff --git a/chrome/installer/util/install_util_unittest.cc b/chrome/installer/util/install_util_unittest.cc |
| index 67d1e72d2d5bec2493e9a89aefdf98194db16ee6..b60f7fd28dae6556d5ed75c44d1b557ee7f5b44a 100644 |
| --- a/chrome/installer/util/install_util_unittest.cc |
| +++ b/chrome/installer/util/install_util_unittest.cc |
| @@ -19,7 +19,9 @@ |
| #include "base/test/test_reg_util_win.h" |
| #include "base/win/registry.h" |
| #include "chrome/installer/util/google_update_constants.h" |
| +#include "chrome/installer/util/test_app_registration_data.h" |
| #include "chrome/installer/util/work_item.h" |
| +#include "chrome/installer/util/work_item_list.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -33,6 +35,14 @@ class MockRegistryValuePredicate : public InstallUtil::RegistryValuePredicate { |
| MOCK_CONST_METHOD1(Evaluate, bool(const std::wstring&)); |
| }; |
| +class TestBrowserDistribution : public BrowserDistribution { |
| + public: |
| + TestBrowserDistribution() |
| + : BrowserDistribution(CHROME_BROWSER, |
| + std::unique_ptr<AppRegistrationData>( |
| + new TestAppRegistrationData())) {} |
| +}; |
| + |
| class InstallUtilTest : public testing::Test { |
| protected: |
| InstallUtilTest() {} |
| @@ -520,3 +530,106 @@ TEST_F(InstallUtilTest, IsPerUserInstall) { |
| EXPECT_TRUE(InstallUtil::IsPerUserInstall(some_exe)); |
| #endif // defined(_WIN64) |
| } |
| + |
| +TEST_F(InstallUtilTest, AddDowngradeVersion) { |
| + TestBrowserDistribution dist; |
| + bool system_install = true; |
| + RegKey(HKEY_LOCAL_MACHINE, dist.GetStateKey().c_str(), |
| + KEY_SET_VALUE | KEY_WOW64_32KEY); |
| + std::unique_ptr<WorkItemList> list; |
| + |
| + base::Version current_version("1.1.1.1"); |
| + base::Version higer_new_version("1.1.1.2"); |
| + base::Version lower_new_version_1("1.1.1.0"); |
| + base::Version lower_new_version_2("1.1.0.0"); |
| + |
| + ASSERT_FALSE( |
| + InstallUtil::GetDowngradeVersion(system_install, &dist).IsValid()); |
| + |
| + // Upgrade should not create the value. |
| + list.reset((WorkItem::CreateWorkItemList())); |
|
grt (UTC plus 2)
2016/05/20 18:17:05
nit: remove spurious parens
zmin
2016/05/20 19:11:22
Done.
|
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, ¤t_version, higer_new_version, &dist, list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + ASSERT_FALSE( |
| + InstallUtil::GetDowngradeVersion(system_install, &dist).IsValid()); |
| + |
| + // Downgrade should create the value. |
| + list.reset(WorkItem::CreateWorkItemList()); |
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, ¤t_version, lower_new_version_1, &dist, list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + EXPECT_EQ(current_version, |
| + InstallUtil::GetDowngradeVersion(system_install, &dist)); |
| + |
| + // Multiple downgrads should not change the value. |
|
grt (UTC plus 2)
2016/05/20 18:17:05
downgrades
zmin
2016/05/20 19:11:21
Done.
|
| + list.reset(WorkItem::CreateWorkItemList()); |
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, &lower_new_version_1, lower_new_version_2, &dist, |
| + list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + EXPECT_EQ(current_version, |
| + InstallUtil::GetDowngradeVersion(system_install, &dist)); |
| +} |
| + |
| +TEST_F(InstallUtilTest, DeleteDowngradeVersion) { |
| + TestBrowserDistribution dist; |
| + bool system_install = true; |
| + RegKey(HKEY_LOCAL_MACHINE, dist.GetStateKey().c_str(), |
| + KEY_SET_VALUE | KEY_WOW64_32KEY); |
| + std::unique_ptr<WorkItemList> list; |
| + |
| + base::Version current_version("1.1.1.1"); |
| + base::Version higer_new_version("1.1.1.2"); |
| + base::Version lower_new_version_1("1.1.1.0"); |
| + base::Version lower_new_version_2("1.1.0.0"); |
| + |
| + list.reset(WorkItem::CreateWorkItemList()); |
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, ¤t_version, lower_new_version_2, &dist, list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + EXPECT_EQ(current_version, |
| + InstallUtil::GetDowngradeVersion(system_install, &dist)); |
| + |
| + // Upgrade should not delete the value if it still lower than the version that |
| + // downgrade from. |
| + list.reset(WorkItem::CreateWorkItemList()); |
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, &lower_new_version_2, lower_new_version_1, &dist, |
| + list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + EXPECT_EQ(current_version, |
| + InstallUtil::GetDowngradeVersion(system_install, &dist)); |
| + |
| + // Repair should not delete the value. |
| + list.reset(WorkItem::CreateWorkItemList()); |
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, &lower_new_version_1, lower_new_version_1, &dist, |
| + list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + EXPECT_EQ(current_version, |
| + InstallUtil::GetDowngradeVersion(system_install, &dist)); |
| + |
| + // Fully upgrade should delete the value. |
| + list.reset(WorkItem::CreateWorkItemList()); |
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, &lower_new_version_1, higer_new_version, &dist, |
| + list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + ASSERT_FALSE( |
| + InstallUtil::GetDowngradeVersion(system_install, &dist).IsValid()); |
| + |
| + // Fresh install should delete the value if exist |
|
grt (UTC plus 2)
2016/05/20 18:17:05
nit: "it exists."
zmin
2016/05/20 19:11:21
Done.
|
| + list.reset(WorkItem::CreateWorkItemList()); |
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, ¤t_version, lower_new_version_2, &dist, list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + EXPECT_EQ(current_version, |
| + InstallUtil::GetDowngradeVersion(system_install, &dist)); |
| + list.reset(WorkItem::CreateWorkItemList()); |
| + InstallUtil::AddUpdateDowngradeVersionItem( |
| + system_install, nullptr, lower_new_version_1, &dist, list.get()); |
| + ASSERT_TRUE(list->Do()); |
| + ASSERT_FALSE( |
| + InstallUtil::GetDowngradeVersion(system_install, &dist).IsValid()); |
| +} |