Index: chrome/installer/setup/install_worker_unittest.cc |
diff --git a/chrome/installer/setup/install_worker_unittest.cc b/chrome/installer/setup/install_worker_unittest.cc |
index 9cd28f086d8db0137ec9b6c6e623c343b4d516e7..f53a48e8cdf441cbd0dd37cdb3660bb4fa4a5545 100644 |
--- a/chrome/installer/setup/install_worker_unittest.cc |
+++ b/chrome/installer/setup/install_worker_unittest.cc |
@@ -4,12 +4,15 @@ |
#include "chrome/installer/setup/install_worker.h" |
+#include <vector> |
+ |
#include "base/win/registry.h" |
#include "base/version.h" |
#include "chrome/common/chrome_constants.h" |
#include "chrome/installer/setup/setup_util.h" |
-#include "chrome/installer/util/delete_reg_key_work_item.h" |
#include "chrome/installer/util/create_reg_key_work_item.h" |
+#include "chrome/installer/util/delete_reg_key_work_item.h" |
+#include "chrome/installer/util/delete_tree_work_item.h" |
#include "chrome/installer/util/helper.h" |
#include "chrome/installer/util/google_update_constants.h" |
#include "chrome/installer/util/installation_state.h" |
@@ -28,12 +31,14 @@ using installer::Product; |
using installer::ProductState; |
using ::testing::_; |
+using ::testing::AnyNumber; |
using ::testing::AtLeast; |
using ::testing::AtMost; |
using ::testing::Bool; |
using ::testing::Combine; |
-using ::testing::HasSubstr; |
using ::testing::Eq; |
+using ::testing::HasSubstr; |
+using ::testing::NiceMock; |
using ::testing::Return; |
using ::testing::StrCaseEq; |
using ::testing::StrEq; |
@@ -47,51 +52,65 @@ class MockWorkItemList : public WorkItemList { |
public: |
MockWorkItemList() {} |
- MOCK_METHOD4(AddCopyRegKeyWorkItem, WorkItem* (HKEY, |
- const std::wstring&, |
- const std::wstring&, |
- CopyOverWriteOption)); |
- MOCK_METHOD5(AddCopyTreeWorkItem, WorkItem*(const std::wstring&, |
- const std::wstring&, |
- const std::wstring&, |
- CopyOverWriteOption, |
- const std::wstring&)); |
+ MOCK_METHOD5(AddCopyTreeWorkItem, |
+ WorkItem*(const std::wstring&, |
+ const std::wstring&, |
+ const std::wstring&, |
+ CopyOverWriteOption, |
+ const std::wstring&)); |
MOCK_METHOD1(AddCreateDirWorkItem, WorkItem* (const base::FilePath&)); |
- MOCK_METHOD2(AddCreateRegKeyWorkItem, WorkItem* (HKEY, const std::wstring&)); |
- MOCK_METHOD2(AddDeleteRegKeyWorkItem, WorkItem* (HKEY, const std::wstring&)); |
- MOCK_METHOD3(AddDeleteRegValueWorkItem, WorkItem* (HKEY, |
- const std::wstring&, |
- const std::wstring&)); |
- MOCK_METHOD2(AddDeleteTreeWorkItem, WorkItem* ( |
- const base::FilePath&, |
- const std::vector<base::FilePath>&)); |
- MOCK_METHOD1(AddDeleteTreeWorkItem, WorkItem* (const base::FilePath&)); |
- MOCK_METHOD3(AddMoveTreeWorkItem, WorkItem* (const std::wstring&, |
- const std::wstring&, |
- const std::wstring&)); |
+ MOCK_METHOD3(AddCreateRegKeyWorkItem, |
+ WorkItem*(HKEY, const std::wstring&, REGSAM)); |
+ MOCK_METHOD3(AddDeleteRegKeyWorkItem, |
+ WorkItem*(HKEY, const std::wstring&, REGSAM)); |
+ MOCK_METHOD4( |
+ AddDeleteRegValueWorkItem, |
+ WorkItem*(HKEY, const std::wstring&, REGSAM, const std::wstring&)); |
+ MOCK_METHOD3(AddDeleteTreeWorkItem, |
+ WorkItem*(const base::FilePath&, |
+ const base::FilePath&, |
+ const std::vector<base::FilePath>&)); |
+ MOCK_METHOD2(AddDeleteTreeWorkItem, |
+ WorkItem*(const base::FilePath&, const base::FilePath&)); |
+ MOCK_METHOD4(AddMoveTreeWorkItem, |
+ WorkItem*(const std::wstring&, |
+ const std::wstring&, |
+ const std::wstring&, |
+ MoveTreeOption)); |
// Workaround for gmock problems with disambiguating between string pointers |
// and DWORD. |
- virtual WorkItem* AddSetRegValueWorkItem(HKEY a1, const std::wstring& a2, |
- const std::wstring& a3, const std::wstring& a4, bool a5) { |
- return AddSetRegStringValueWorkItem(a1, a2, a3, a4, a5); |
+ virtual WorkItem* AddSetRegValueWorkItem(HKEY a1, |
+ const std::wstring& a2, |
+ REGSAM a3, |
+ const std::wstring& a4, |
+ const std::wstring& a5, |
+ bool a6) { |
+ return AddSetRegStringValueWorkItem(a1, a2, a3, a4, a5, a6); |
} |
- virtual WorkItem* AddSetRegValueWorkItem(HKEY a1, const std::wstring& a2, |
- const std::wstring& a3, |
- DWORD a4, bool a5) { |
- return AddSetRegDwordValueWorkItem(a1, a2, a3, a4, a5); |
+ virtual WorkItem* AddSetRegValueWorkItem(HKEY a1, |
+ const std::wstring& a2, |
+ REGSAM a3, |
+ const std::wstring& a4, |
+ DWORD a5, |
+ bool a6) { |
+ return AddSetRegDwordValueWorkItem(a1, a2, a3, a4, a5, a6); |
} |
- MOCK_METHOD5(AddSetRegStringValueWorkItem, WorkItem*(HKEY, |
- const std::wstring&, |
- const std::wstring&, |
- const std::wstring&, |
- bool)); |
- MOCK_METHOD5(AddSetRegDwordValueWorkItem, WorkItem* (HKEY, |
- const std::wstring&, |
- const std::wstring&, |
- DWORD, |
- bool)); |
+ MOCK_METHOD6(AddSetRegStringValueWorkItem, |
+ WorkItem*(HKEY, |
+ const std::wstring&, |
+ REGSAM, |
+ const std::wstring&, |
+ const std::wstring&, |
+ bool)); |
+ MOCK_METHOD6(AddSetRegDwordValueWorkItem, |
+ WorkItem*(HKEY, |
+ const std::wstring&, |
+ REGSAM, |
+ const std::wstring&, |
+ DWORD, |
+ bool)); |
MOCK_METHOD3(AddSelfRegWorkItem, WorkItem* (const std::wstring&, |
bool, |
bool)); |
@@ -432,7 +451,7 @@ class InstallWorkerTest : public testing::Test { |
TEST_F(InstallWorkerTest, TestInstallChromeSingleSystem) { |
const bool system_level = true; |
const bool multi_install = false; |
- MockWorkItemList work_item_list; |
+ NiceMock<MockWorkItemList> work_item_list; |
const HKEY kRegRoot = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
static const wchar_t kRegKeyPath[] = L"Software\\Chromium\\test"; |
@@ -442,6 +461,12 @@ TEST_F(InstallWorkerTest, TestInstallChromeSingleSystem) { |
scoped_ptr<SetRegValueWorkItem> set_reg_value_work_item( |
WorkItem::CreateSetRegValueWorkItem( |
kRegRoot, kRegKeyPath, WorkItem::kWow64Default, L"", L"", false)); |
+ scoped_ptr<DeleteTreeWorkItem> delete_tree_work_item( |
+ WorkItem::CreateDeleteTreeWorkItem(base::FilePath(), base::FilePath(), |
+ std::vector<base::FilePath>())); |
+ scoped_ptr<DeleteRegKeyWorkItem> delete_reg_key_work_item( |
+ WorkItem::CreateDeleteRegKeyWorkItem(kRegRoot, kRegKeyPath, |
+ WorkItem::kWow64Default)); |
scoped_ptr<InstallationState> installation_state( |
BuildChromeInstallationState(system_level, multi_install)); |
@@ -455,10 +480,14 @@ TEST_F(InstallWorkerTest, TestInstallChromeSingleSystem) { |
// TODO(robertshield): Set up some real expectations. |
EXPECT_CALL(work_item_list, AddCopyTreeWorkItem(_, _, _, _, _)) |
.Times(AtLeast(1)); |
- EXPECT_CALL(work_item_list, AddCreateRegKeyWorkItem(_, _)) |
+ EXPECT_CALL(work_item_list, AddCreateRegKeyWorkItem(_, _, _)) |
.WillRepeatedly(Return(create_reg_key_work_item.get())); |
- EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem(_, _, _, _, _)) |
+ EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem(_, _, _, _, _, _)) |
.WillRepeatedly(Return(set_reg_value_work_item.get())); |
+ EXPECT_CALL(work_item_list, AddDeleteTreeWorkItem(_, _)) |
+ .WillRepeatedly(Return(delete_tree_work_item.get())); |
+ EXPECT_CALL(work_item_list, AddDeleteRegKeyWorkItem(_, _, _)) |
+ .WillRepeatedly(Return(delete_reg_key_work_item.get())); |
AddInstallWorkItems(*installation_state.get(), |
*installer_state.get(), |
@@ -523,7 +552,7 @@ TEST_P(OldIELowRightsTests, AddDeleteOldIELowRightsPolicyWorkItems) { |
StrictMock<MockWorkItemList> work_item_list; |
EXPECT_CALL(work_item_list, |
- AddDeleteRegKeyWorkItem(root_key_, StrEq(old_elevation_key))) |
+ AddDeleteRegKeyWorkItem(root_key_, StrEq(old_elevation_key), _)) |
.Times(1); |
AddDeleteOldIELowRightsPolicyWorkItems(*installer_state_.get(), |
@@ -538,6 +567,7 @@ TEST_F(InstallWorkerTest, GoogleUpdateWorkItemsTest) { |
const bool multi_install = true; |
MockWorkItemList work_item_list; |
+ // Per-machine single-install Chrome is installed. |
scoped_ptr<MockInstallationState> installation_state( |
BuildChromeInstallationState(system_level, false)); |
@@ -545,60 +575,55 @@ TEST_F(InstallWorkerTest, GoogleUpdateWorkItemsTest) { |
cf_state.set_version(new Version(*current_version_)); |
cf_state.set_multi_install(false); |
+ // Per-machine single-install Chrome Frame is installed. |
installation_state->SetProductState(system_level, |
BrowserDistribution::CHROME_FRAME, cf_state); |
+ // Prepare per-machine multi-install Chrome for installation. |
scoped_ptr<MockInstallerState> installer_state( |
BuildChromeInstallerState(system_level, multi_install, |
*installation_state, |
InstallerState::MULTI_INSTALL)); |
- // Expect the multi Client State key to be created. |
+ // Expect the multi Client State key to be created for the binaries. |
BrowserDistribution* multi_dist = |
BrowserDistribution::GetSpecificDistribution( |
BrowserDistribution::CHROME_BINARIES); |
std::wstring multi_app_guid(multi_dist->GetAppGuid()); |
std::wstring multi_client_state_suffix(L"ClientState\\" + multi_app_guid); |
- EXPECT_CALL(work_item_list, |
- AddCreateRegKeyWorkItem(_, HasSubstr(multi_client_state_suffix))) |
- .Times(testing::AnyNumber()); |
+ EXPECT_CALL(work_item_list, AddCreateRegKeyWorkItem( |
+ _, HasSubstr(multi_client_state_suffix), _)) |
+ .Times(AnyNumber()); |
// Expect ClientStateMedium to be created for system-level installs. |
EXPECT_CALL(work_item_list, |
- AddCreateRegKeyWorkItem(_, HasSubstr(L"ClientStateMedium\\" + |
- multi_app_guid))) |
+ AddCreateRegKeyWorkItem( |
+ _, HasSubstr(L"ClientStateMedium\\" + multi_app_guid), _)) |
.Times(system_level ? 1 : 0); |
// Expect to see a set value for the "TEST" brand code in the multi Client |
// State key. |
- EXPECT_CALL(work_item_list, |
- AddSetRegStringValueWorkItem(_, |
- HasSubstr(multi_client_state_suffix), |
- StrEq(google_update::kRegBrandField), |
- StrEq(L"TEST"), |
- _)).Times(1); |
+ EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem( |
+ _, HasSubstr(multi_client_state_suffix), _, |
+ StrEq(google_update::kRegBrandField), |
+ StrEq(L"TEST"), _)).Times(1); |
// There may also be some calls to set 'ap' values. |
- EXPECT_CALL(work_item_list, |
- AddSetRegStringValueWorkItem(_, _, |
- StrEq(google_update::kRegApField), |
- _, _)).Times(testing::AnyNumber()); |
+ EXPECT_CALL(work_item_list, AddSetRegStringValueWorkItem( |
+ _, _, _, StrEq(google_update::kRegApField), _, |
+ _)).Times(AnyNumber()); |
// Expect "oeminstall" to be cleared. |
- EXPECT_CALL(work_item_list, |
- AddDeleteRegValueWorkItem( |
- _, |
- HasSubstr(multi_client_state_suffix), |
- StrEq(google_update::kRegOemInstallField))).Times(1); |
+ EXPECT_CALL(work_item_list, AddDeleteRegValueWorkItem( |
+ _, HasSubstr(multi_client_state_suffix), _, |
+ StrEq(google_update::kRegOemInstallField))) |
+ .Times(1); |
// Expect "eulaaccepted" to set. |
- EXPECT_CALL(work_item_list, |
- AddSetRegDwordValueWorkItem( |
- _, |
- HasSubstr(multi_client_state_suffix), |
- StrEq(google_update::kRegEULAAceptedField), |
- Eq(static_cast<DWORD>(1)), |
- _)).Times(1); |
+ EXPECT_CALL(work_item_list, AddSetRegDwordValueWorkItem( |
+ _, HasSubstr(multi_client_state_suffix), _, |
+ StrEq(google_update::kRegEULAAceptedField), |
+ Eq(static_cast<DWORD>(1)), _)).Times(1); |
AddGoogleUpdateWorkItems(*installation_state.get(), |
*installer_state.get(), |
@@ -632,17 +657,15 @@ TEST_F(InstallWorkerTest, AddUsageStatsWorkItems) { |
BrowserDistribution::GetSpecificDistribution( |
BrowserDistribution::CHROME_BINARIES); |
std::wstring multi_app_guid(multi_dist->GetAppGuid()); |
- EXPECT_CALL(work_item_list, |
- AddCreateRegKeyWorkItem(_, HasSubstr(multi_app_guid))).Times(1); |
+ EXPECT_CALL(work_item_list, AddCreateRegKeyWorkItem( |
+ _, HasSubstr(multi_app_guid), _)).Times(1); |
// Expect to see a set value for the usagestats in the multi Client State key. |
- EXPECT_CALL(work_item_list, |
- AddSetRegDwordValueWorkItem( |
- _, |
- HasSubstr(multi_app_guid), |
- StrEq(google_update::kRegUsageStatsField), |
- Eq(static_cast<DWORD>(1)), |
- Eq(true))).Times(1); |
+ EXPECT_CALL(work_item_list, AddSetRegDwordValueWorkItem( |
+ _, HasSubstr(multi_app_guid), _, |
+ StrEq(google_update::kRegUsageStatsField), |
+ Eq(static_cast<DWORD>(1)), Eq(true))) |
+ .Times(1); |
// Expect to see some values cleaned up from Chrome's keys. |
BrowserDistribution* chrome_dist = |
@@ -651,20 +674,18 @@ TEST_F(InstallWorkerTest, AddUsageStatsWorkItems) { |
if (system_level) { |
EXPECT_CALL(work_item_list, |
AddDeleteRegValueWorkItem( |
- _, |
- StrEq(chrome_dist->GetStateMediumKey()), |
+ _, StrEq(chrome_dist->GetStateMediumKey()), _, |
StrEq(google_update::kRegUsageStatsField))).Times(1); |
EXPECT_CALL(work_item_list, |
AddDeleteRegValueWorkItem( |
- Eq(HKEY_CURRENT_USER), |
- StrEq(chrome_dist->GetStateKey()), |
+ Eq(HKEY_CURRENT_USER), StrEq(chrome_dist->GetStateKey()), _, |
StrEq(google_update::kRegUsageStatsField))).Times(1); |
} |
- EXPECT_CALL(work_item_list, |
- AddDeleteRegValueWorkItem( |
- Eq(installer_state->root_key()), |
- StrEq(chrome_dist->GetStateKey()), |
- StrEq(google_update::kRegUsageStatsField))).Times(1); |
+ EXPECT_CALL( |
+ work_item_list, |
+ AddDeleteRegValueWorkItem( |
+ Eq(installer_state->root_key()), StrEq(chrome_dist->GetStateKey()), _, |
+ StrEq(google_update::kRegUsageStatsField))).Times(1); |
AddUsageStatsWorkItems(*installation_state.get(), |
*installer_state.get(), |
@@ -686,8 +707,8 @@ class QuickEnableAbsentTest : public InstallWorkerTest { |
delete_reg_key_item_.reset(WorkItem::CreateDeleteRegKeyWorkItem( |
root_key_, kRegKeyPath, WorkItem::kWow64Default)); |
machine_state_.reset(new MockInstallationState()); |
- EXPECT_CALL(work_item_list_, |
- AddDeleteRegKeyWorkItem(Eq(root_key_), StrCaseEq(kRegKeyPath))) |
+ EXPECT_CALL(work_item_list_, AddDeleteRegKeyWorkItem( |
+ Eq(root_key_), StrCaseEq(kRegKeyPath), _)) |
.Times(AtMost(1)) |
.WillRepeatedly(Return(delete_reg_key_item_.get())); |
} |