OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 #include <utility> | 6 #include <utility> |
7 | 7 |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/test/test_reg_util_win.h" |
9 #include "base/win/registry.h" | 10 #include "base/win/registry.h" |
10 #include "chrome/installer/util/google_update_constants.h" | 11 #include "chrome/installer/util/google_update_constants.h" |
11 #include "chrome/installer/util/install_util.h" | 12 #include "chrome/installer/util/install_util.h" |
12 #include "chrome/installer/util/product_unittest.h" | 13 #include "chrome/installer/util/product_unittest.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
14 | 15 |
15 using base::win::RegKey; | 16 using base::win::RegKey; |
| 17 using registry_util::RegistryOverrideManager; |
16 using ::testing::_; | 18 using ::testing::_; |
17 using ::testing::Return; | 19 using ::testing::Return; |
18 using ::testing::StrEq; | 20 using ::testing::StrEq; |
19 | 21 |
20 class MockRegistryValuePredicate : public InstallUtil::RegistryValuePredicate { | 22 class MockRegistryValuePredicate : public InstallUtil::RegistryValuePredicate { |
21 public: | 23 public: |
22 MOCK_CONST_METHOD1(Evaluate, bool(const std::wstring&)); | 24 MOCK_CONST_METHOD1(Evaluate, bool(const std::wstring&)); |
23 }; | 25 }; |
24 | 26 |
25 class InstallUtilTest : public TestWithTempDirAndDeleteTempOverrideKeys { | 27 class InstallUtilTest : public TestWithTempDirAndDeleteTempOverrideKeys { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 } | 71 } |
70 } | 72 } |
71 | 73 |
72 TEST_F(InstallUtilTest, UpdateInstallerStageAP) { | 74 TEST_F(InstallUtilTest, UpdateInstallerStageAP) { |
73 const bool system_level = false; | 75 const bool system_level = false; |
74 const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 76 const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
75 std::wstring state_key_path(L"PhonyClientState"); | 77 std::wstring state_key_path(L"PhonyClientState"); |
76 | 78 |
77 // Update the stage when there's no "ap" value. | 79 // Update the stage when there's no "ap" value. |
78 { | 80 { |
79 TempRegKeyOverride override(root, L"root_inst_res"); | 81 RegistryOverrideManager override_manager; |
| 82 override_manager.OverrideRegistry(root, L"root_inst_res"); |
80 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE); | 83 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE); |
81 InstallUtil::UpdateInstallerStage(system_level, state_key_path, | 84 InstallUtil::UpdateInstallerStage(system_level, state_key_path, |
82 installer::BUILDING); | 85 installer::BUILDING); |
83 std::wstring value; | 86 std::wstring value; |
84 EXPECT_EQ(ERROR_SUCCESS, | 87 EXPECT_EQ(ERROR_SUCCESS, |
85 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) | 88 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) |
86 .ReadValue(google_update::kRegApField, &value)); | 89 .ReadValue(google_update::kRegApField, &value)); |
87 EXPECT_EQ(L"-stage:building", value); | 90 EXPECT_EQ(L"-stage:building", value); |
88 } | 91 } |
89 TempRegKeyOverride::DeleteAllTempKeys(); | |
90 | 92 |
91 // Update the stage when there is an "ap" value. | 93 // Update the stage when there is an "ap" value. |
92 { | 94 { |
93 TempRegKeyOverride override(root, L"root_inst_res"); | 95 RegistryOverrideManager override_manager; |
| 96 override_manager.OverrideRegistry(root, L"root_inst_res"); |
94 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) | 97 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) |
95 .WriteValue(google_update::kRegApField, L"2.0-dev"); | 98 .WriteValue(google_update::kRegApField, L"2.0-dev"); |
96 InstallUtil::UpdateInstallerStage(system_level, state_key_path, | 99 InstallUtil::UpdateInstallerStage(system_level, state_key_path, |
97 installer::BUILDING); | 100 installer::BUILDING); |
98 std::wstring value; | 101 std::wstring value; |
99 EXPECT_EQ(ERROR_SUCCESS, | 102 EXPECT_EQ(ERROR_SUCCESS, |
100 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) | 103 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) |
101 .ReadValue(google_update::kRegApField, &value)); | 104 .ReadValue(google_update::kRegApField, &value)); |
102 EXPECT_EQ(L"2.0-dev-stage:building", value); | 105 EXPECT_EQ(L"2.0-dev-stage:building", value); |
103 } | 106 } |
104 TempRegKeyOverride::DeleteAllTempKeys(); | |
105 | 107 |
106 // Clear the stage. | 108 // Clear the stage. |
107 { | 109 { |
108 TempRegKeyOverride override(root, L"root_inst_res"); | 110 RegistryOverrideManager override_manager; |
| 111 override_manager.OverrideRegistry(root, L"root_inst_res"); |
109 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) | 112 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) |
110 .WriteValue(google_update::kRegApField, L"2.0-dev-stage:building"); | 113 .WriteValue(google_update::kRegApField, L"2.0-dev-stage:building"); |
111 InstallUtil::UpdateInstallerStage(system_level, state_key_path, | 114 InstallUtil::UpdateInstallerStage(system_level, state_key_path, |
112 installer::NO_STAGE); | 115 installer::NO_STAGE); |
113 std::wstring value; | 116 std::wstring value; |
114 EXPECT_EQ(ERROR_SUCCESS, | 117 EXPECT_EQ(ERROR_SUCCESS, |
115 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) | 118 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) |
116 .ReadValue(google_update::kRegApField, &value)); | 119 .ReadValue(google_update::kRegApField, &value)); |
117 EXPECT_EQ(L"2.0-dev", value); | 120 EXPECT_EQ(L"2.0-dev", value); |
118 } | 121 } |
119 TempRegKeyOverride::DeleteAllTempKeys(); | |
120 } | 122 } |
121 | 123 |
122 TEST_F(InstallUtilTest, UpdateInstallerStage) { | 124 TEST_F(InstallUtilTest, UpdateInstallerStage) { |
123 const bool system_level = false; | 125 const bool system_level = false; |
124 const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 126 const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
125 std::wstring state_key_path(L"PhonyClientState"); | 127 std::wstring state_key_path(L"PhonyClientState"); |
126 | 128 |
127 // Update the stage when there's no "InstallerExtraCode1" value. | 129 // Update the stage when there's no "InstallerExtraCode1" value. |
128 { | 130 { |
129 TempRegKeyOverride override(root, L"root_inst_res"); | 131 RegistryOverrideManager override_manager; |
| 132 override_manager.OverrideRegistry(root, L"root_inst_res"); |
130 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) | 133 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) |
131 .DeleteValue(installer::kInstallerExtraCode1); | 134 .DeleteValue(installer::kInstallerExtraCode1); |
132 InstallUtil::UpdateInstallerStage(system_level, state_key_path, | 135 InstallUtil::UpdateInstallerStage(system_level, state_key_path, |
133 installer::BUILDING); | 136 installer::BUILDING); |
134 DWORD value; | 137 DWORD value; |
135 EXPECT_EQ(ERROR_SUCCESS, | 138 EXPECT_EQ(ERROR_SUCCESS, |
136 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) | 139 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) |
137 .ReadValueDW(installer::kInstallerExtraCode1, &value)); | 140 .ReadValueDW(installer::kInstallerExtraCode1, &value)); |
138 EXPECT_EQ(static_cast<DWORD>(installer::BUILDING), value); | 141 EXPECT_EQ(static_cast<DWORD>(installer::BUILDING), value); |
139 } | 142 } |
140 TempRegKeyOverride::DeleteAllTempKeys(); | |
141 | 143 |
142 // Update the stage when there is an "InstallerExtraCode1" value. | 144 // Update the stage when there is an "InstallerExtraCode1" value. |
143 { | 145 { |
144 TempRegKeyOverride override(root, L"root_inst_res"); | 146 RegistryOverrideManager override_manager; |
| 147 override_manager.OverrideRegistry(root, L"root_inst_res"); |
145 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) | 148 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) |
146 .WriteValue(installer::kInstallerExtraCode1, | 149 .WriteValue(installer::kInstallerExtraCode1, |
147 static_cast<DWORD>(installer::UNPACKING)); | 150 static_cast<DWORD>(installer::UNPACKING)); |
148 InstallUtil::UpdateInstallerStage(system_level, state_key_path, | 151 InstallUtil::UpdateInstallerStage(system_level, state_key_path, |
149 installer::BUILDING); | 152 installer::BUILDING); |
150 DWORD value; | 153 DWORD value; |
151 EXPECT_EQ(ERROR_SUCCESS, | 154 EXPECT_EQ(ERROR_SUCCESS, |
152 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) | 155 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) |
153 .ReadValueDW(installer::kInstallerExtraCode1, &value)); | 156 .ReadValueDW(installer::kInstallerExtraCode1, &value)); |
154 EXPECT_EQ(static_cast<DWORD>(installer::BUILDING), value); | 157 EXPECT_EQ(static_cast<DWORD>(installer::BUILDING), value); |
155 } | 158 } |
156 TempRegKeyOverride::DeleteAllTempKeys(); | |
157 | 159 |
158 // Clear the stage. | 160 // Clear the stage. |
159 { | 161 { |
160 TempRegKeyOverride override(root, L"root_inst_res"); | 162 RegistryOverrideManager override_manager; |
| 163 override_manager.OverrideRegistry(root, L"root_inst_res"); |
161 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) | 164 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) |
162 .WriteValue(installer::kInstallerExtraCode1, static_cast<DWORD>(5)); | 165 .WriteValue(installer::kInstallerExtraCode1, static_cast<DWORD>(5)); |
163 InstallUtil::UpdateInstallerStage(system_level, state_key_path, | 166 InstallUtil::UpdateInstallerStage(system_level, state_key_path, |
164 installer::NO_STAGE); | 167 installer::NO_STAGE); |
165 DWORD value; | 168 DWORD value; |
166 EXPECT_EQ(ERROR_FILE_NOT_FOUND, | 169 EXPECT_EQ(ERROR_FILE_NOT_FOUND, |
167 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) | 170 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) |
168 .ReadValueDW(installer::kInstallerExtraCode1, &value)); | 171 .ReadValueDW(installer::kInstallerExtraCode1, &value)); |
169 } | 172 } |
170 TempRegKeyOverride::DeleteAllTempKeys(); | |
171 } | 173 } |
172 | 174 |
173 TEST_F(InstallUtilTest, DeleteRegistryKeyIf) { | 175 TEST_F(InstallUtilTest, DeleteRegistryKeyIf) { |
174 const HKEY root = HKEY_CURRENT_USER; | 176 const HKEY root = HKEY_CURRENT_USER; |
175 std::wstring parent_key_path(L"SomeKey\\ToDelete"); | 177 std::wstring parent_key_path(L"SomeKey\\ToDelete"); |
176 std::wstring child_key_path(parent_key_path); | 178 std::wstring child_key_path(parent_key_path); |
177 child_key_path.append(L"\\ChildKey\\WithAValue"); | 179 child_key_path.append(L"\\ChildKey\\WithAValue"); |
178 const wchar_t value_name[] = L"some_value_name"; | 180 const wchar_t value_name[] = L"some_value_name"; |
179 const wchar_t value[] = L"hi mom"; | 181 const wchar_t value[] = L"hi mom"; |
180 | 182 |
181 { | 183 { |
182 TempRegKeyOverride override(root, L"root_key"); | 184 RegistryOverrideManager override_manager; |
| 185 override_manager.OverrideRegistry(root, L"root_key"); |
183 // Nothing to delete if the keys aren't even there. | 186 // Nothing to delete if the keys aren't even there. |
184 { | 187 { |
185 MockRegistryValuePredicate pred; | 188 MockRegistryValuePredicate pred; |
186 | 189 |
187 EXPECT_CALL(pred, Evaluate(_)).Times(0); | 190 EXPECT_CALL(pred, Evaluate(_)).Times(0); |
188 ASSERT_FALSE(RegKey(root, parent_key_path.c_str(), | 191 ASSERT_FALSE(RegKey(root, parent_key_path.c_str(), |
189 KEY_QUERY_VALUE).Valid()); | 192 KEY_QUERY_VALUE).Valid()); |
190 EXPECT_TRUE(InstallUtil::DeleteRegistryKeyIf( | 193 EXPECT_TRUE(InstallUtil::DeleteRegistryKeyIf( |
191 root, parent_key_path, child_key_path, value_name, pred)); | 194 root, parent_key_path, child_key_path, value_name, pred)); |
192 EXPECT_FALSE(RegKey(root, parent_key_path.c_str(), | 195 EXPECT_FALSE(RegKey(root, parent_key_path.c_str(), |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 EXPECT_CALL(pred, Evaluate(StrEq(value))).WillOnce(Return(true)); | 241 EXPECT_CALL(pred, Evaluate(StrEq(value))).WillOnce(Return(true)); |
239 ASSERT_EQ(ERROR_SUCCESS, | 242 ASSERT_EQ(ERROR_SUCCESS, |
240 RegKey(root, child_key_path.c_str(), | 243 RegKey(root, child_key_path.c_str(), |
241 KEY_SET_VALUE).WriteValue(value_name, value)); | 244 KEY_SET_VALUE).WriteValue(value_name, value)); |
242 EXPECT_TRUE(InstallUtil::DeleteRegistryKeyIf( | 245 EXPECT_TRUE(InstallUtil::DeleteRegistryKeyIf( |
243 root, parent_key_path, child_key_path, value_name, pred)); | 246 root, parent_key_path, child_key_path, value_name, pred)); |
244 EXPECT_FALSE(RegKey(root, parent_key_path.c_str(), | 247 EXPECT_FALSE(RegKey(root, parent_key_path.c_str(), |
245 KEY_QUERY_VALUE).Valid()); | 248 KEY_QUERY_VALUE).Valid()); |
246 } | 249 } |
247 } | 250 } |
248 TempRegKeyOverride::DeleteAllTempKeys(); | |
249 } | 251 } |
250 | 252 |
251 TEST_F(InstallUtilTest, DeleteRegistryValueIf) { | 253 TEST_F(InstallUtilTest, DeleteRegistryValueIf) { |
252 const HKEY root = HKEY_CURRENT_USER; | 254 const HKEY root = HKEY_CURRENT_USER; |
253 std::wstring key_path(L"SomeKey\\ToDelete"); | 255 std::wstring key_path(L"SomeKey\\ToDelete"); |
254 const wchar_t value_name[] = L"some_value_name"; | 256 const wchar_t value_name[] = L"some_value_name"; |
255 const wchar_t value[] = L"hi mom"; | 257 const wchar_t value[] = L"hi mom"; |
256 | 258 |
257 { | 259 { |
258 TempRegKeyOverride override(root, L"root_key"); | 260 RegistryOverrideManager override_manager; |
| 261 override_manager.OverrideRegistry(root, L"root_key"); |
259 // Nothing to delete if the key isn't even there. | 262 // Nothing to delete if the key isn't even there. |
260 { | 263 { |
261 MockRegistryValuePredicate pred; | 264 MockRegistryValuePredicate pred; |
262 | 265 |
263 EXPECT_CALL(pred, Evaluate(_)).Times(0); | 266 EXPECT_CALL(pred, Evaluate(_)).Times(0); |
264 ASSERT_FALSE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); | 267 ASSERT_FALSE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); |
265 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( | 268 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( |
266 root, key_path.c_str(), value_name, pred)); | 269 root, key_path.c_str(), value_name, pred)); |
267 EXPECT_FALSE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); | 270 EXPECT_FALSE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); |
268 } | 271 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 ASSERT_EQ(ERROR_SUCCESS, | 304 ASSERT_EQ(ERROR_SUCCESS, |
302 RegKey(root, key_path.c_str(), | 305 RegKey(root, key_path.c_str(), |
303 KEY_SET_VALUE).WriteValue(value_name, value)); | 306 KEY_SET_VALUE).WriteValue(value_name, value)); |
304 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( | 307 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( |
305 root, key_path.c_str(), value_name, pred)); | 308 root, key_path.c_str(), value_name, pred)); |
306 EXPECT_TRUE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); | 309 EXPECT_TRUE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); |
307 EXPECT_FALSE(RegKey(root, key_path.c_str(), | 310 EXPECT_FALSE(RegKey(root, key_path.c_str(), |
308 KEY_QUERY_VALUE).ValueExists(value_name)); | 311 KEY_QUERY_VALUE).ValueExists(value_name)); |
309 } | 312 } |
310 } | 313 } |
311 TempRegKeyOverride::DeleteAllTempKeys(); | |
312 | 314 |
313 { | 315 { |
314 TempRegKeyOverride override(root, L"root_key"); | 316 RegistryOverrideManager override_manager; |
| 317 override_manager.OverrideRegistry(root, L"root_key"); |
315 // Default value matches: delete. | 318 // Default value matches: delete. |
316 { | 319 { |
317 MockRegistryValuePredicate pred; | 320 MockRegistryValuePredicate pred; |
318 | 321 |
319 EXPECT_CALL(pred, Evaluate(StrEq(value))).WillOnce(Return(true)); | 322 EXPECT_CALL(pred, Evaluate(StrEq(value))).WillOnce(Return(true)); |
320 ASSERT_EQ(ERROR_SUCCESS, | 323 ASSERT_EQ(ERROR_SUCCESS, |
321 RegKey(root, key_path.c_str(), | 324 RegKey(root, key_path.c_str(), |
322 KEY_SET_VALUE).WriteValue(L"", value)); | 325 KEY_SET_VALUE).WriteValue(L"", value)); |
323 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( | 326 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( |
324 root, key_path.c_str(), L"", pred)); | 327 root, key_path.c_str(), L"", pred)); |
325 EXPECT_TRUE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); | 328 EXPECT_TRUE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); |
326 EXPECT_FALSE(RegKey(root, key_path.c_str(), | 329 EXPECT_FALSE(RegKey(root, key_path.c_str(), |
327 KEY_QUERY_VALUE).ValueExists(L"")); | 330 KEY_QUERY_VALUE).ValueExists(L"")); |
328 } | 331 } |
329 } | 332 } |
330 TempRegKeyOverride::DeleteAllTempKeys(); | |
331 } | 333 } |
332 | 334 |
333 TEST_F(InstallUtilTest, ValueEquals) { | 335 TEST_F(InstallUtilTest, ValueEquals) { |
334 InstallUtil::ValueEquals pred(L"howdy"); | 336 InstallUtil::ValueEquals pred(L"howdy"); |
335 | 337 |
336 EXPECT_FALSE(pred.Evaluate(L"")); | 338 EXPECT_FALSE(pred.Evaluate(L"")); |
337 EXPECT_FALSE(pred.Evaluate(L"Howdy")); | 339 EXPECT_FALSE(pred.Evaluate(L"Howdy")); |
338 EXPECT_FALSE(pred.Evaluate(L"howdy!")); | 340 EXPECT_FALSE(pred.Evaluate(L"howdy!")); |
339 EXPECT_FALSE(pred.Evaluate(L"!howdy")); | 341 EXPECT_FALSE(pred.Evaluate(L"!howdy")); |
340 EXPECT_TRUE(pred.Evaluate(L"howdy")); | 342 EXPECT_TRUE(pred.Evaluate(L"howdy")); |
341 } | 343 } |
OLD | NEW |