Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Side by Side Diff: chrome/installer/util/install_util_unittest.cc

Issue 7669061: Tommi: I need an owner review for the chrome frame changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Making use of scoped cleanup where it helps Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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::ScopedRegistryKeyOverride;
18 using registry_util::ScopedRegistryTempPathCleanup;
16 using ::testing::_; 19 using ::testing::_;
17 using ::testing::Return; 20 using ::testing::Return;
18 using ::testing::StrEq; 21 using ::testing::StrEq;
19 22
20 class MockRegistryValuePredicate : public InstallUtil::RegistryValuePredicate { 23 class MockRegistryValuePredicate : public InstallUtil::RegistryValuePredicate {
21 public: 24 public:
22 MOCK_CONST_METHOD1(Evaluate, bool(const std::wstring&)); 25 MOCK_CONST_METHOD1(Evaluate, bool(const std::wstring&));
23 }; 26 };
24 27
25 class InstallUtilTest : public TestWithTempDirAndDeleteTempOverrideKeys { 28 class InstallUtilTest : public TestWithTempDirAndDeleteTempOverrideKeys {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 } 72 }
70 } 73 }
71 74
72 TEST_F(InstallUtilTest, UpdateInstallerStageAP) { 75 TEST_F(InstallUtilTest, UpdateInstallerStageAP) {
73 const bool system_level = false; 76 const bool system_level = false;
74 const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 77 const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
75 std::wstring state_key_path(L"PhonyClientState"); 78 std::wstring state_key_path(L"PhonyClientState");
76 79
77 // Update the stage when there's no "ap" value. 80 // Update the stage when there's no "ap" value.
78 { 81 {
79 TempRegKeyOverride override(root, L"root_inst_res"); 82 ScopedRegistryTempPathCleanup cleanup;
83 ScopedRegistryKeyOverride override(root, L"root_inst_res");
80 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE); 84 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE);
81 InstallUtil::UpdateInstallerStage(system_level, state_key_path, 85 InstallUtil::UpdateInstallerStage(system_level, state_key_path,
82 installer::BUILDING); 86 installer::BUILDING);
83 std::wstring value; 87 std::wstring value;
84 EXPECT_EQ(ERROR_SUCCESS, 88 EXPECT_EQ(ERROR_SUCCESS,
85 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) 89 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE)
86 .ReadValue(google_update::kRegApField, &value)); 90 .ReadValue(google_update::kRegApField, &value));
87 EXPECT_EQ(L"-stage:building", value); 91 EXPECT_EQ(L"-stage:building", value);
88 } 92 }
89 TempRegKeyOverride::DeleteAllTempKeys();
90 93
91 // Update the stage when there is an "ap" value. 94 // Update the stage when there is an "ap" value.
92 { 95 {
93 TempRegKeyOverride override(root, L"root_inst_res"); 96 ScopedRegistryTempPathCleanup cleanup;
97 ScopedRegistryKeyOverride override(root, L"root_inst_res");
94 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) 98 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE)
95 .WriteValue(google_update::kRegApField, L"2.0-dev"); 99 .WriteValue(google_update::kRegApField, L"2.0-dev");
96 InstallUtil::UpdateInstallerStage(system_level, state_key_path, 100 InstallUtil::UpdateInstallerStage(system_level, state_key_path,
97 installer::BUILDING); 101 installer::BUILDING);
98 std::wstring value; 102 std::wstring value;
99 EXPECT_EQ(ERROR_SUCCESS, 103 EXPECT_EQ(ERROR_SUCCESS,
100 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) 104 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE)
101 .ReadValue(google_update::kRegApField, &value)); 105 .ReadValue(google_update::kRegApField, &value));
102 EXPECT_EQ(L"2.0-dev-stage:building", value); 106 EXPECT_EQ(L"2.0-dev-stage:building", value);
103 } 107 }
104 TempRegKeyOverride::DeleteAllTempKeys();
105 108
106 // Clear the stage. 109 // Clear the stage.
107 { 110 {
108 TempRegKeyOverride override(root, L"root_inst_res"); 111 ScopedRegistryTempPathCleanup cleanup;
112 ScopedRegistryKeyOverride override(root, L"root_inst_res");
109 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) 113 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE)
110 .WriteValue(google_update::kRegApField, L"2.0-dev-stage:building"); 114 .WriteValue(google_update::kRegApField, L"2.0-dev-stage:building");
111 InstallUtil::UpdateInstallerStage(system_level, state_key_path, 115 InstallUtil::UpdateInstallerStage(system_level, state_key_path,
112 installer::NO_STAGE); 116 installer::NO_STAGE);
113 std::wstring value; 117 std::wstring value;
114 EXPECT_EQ(ERROR_SUCCESS, 118 EXPECT_EQ(ERROR_SUCCESS,
115 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) 119 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE)
116 .ReadValue(google_update::kRegApField, &value)); 120 .ReadValue(google_update::kRegApField, &value));
117 EXPECT_EQ(L"2.0-dev", value); 121 EXPECT_EQ(L"2.0-dev", value);
118 } 122 }
119 TempRegKeyOverride::DeleteAllTempKeys();
120 } 123 }
121 124
122 TEST_F(InstallUtilTest, UpdateInstallerStage) { 125 TEST_F(InstallUtilTest, UpdateInstallerStage) {
123 const bool system_level = false; 126 const bool system_level = false;
124 const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 127 const HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
125 std::wstring state_key_path(L"PhonyClientState"); 128 std::wstring state_key_path(L"PhonyClientState");
126 129
127 // Update the stage when there's no "InstallerExtraCode1" value. 130 // Update the stage when there's no "InstallerExtraCode1" value.
128 { 131 {
129 TempRegKeyOverride override(root, L"root_inst_res"); 132 ScopedRegistryTempPathCleanup cleanup;
133 ScopedRegistryKeyOverride override(root, L"root_inst_res");
130 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) 134 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE)
131 .DeleteValue(installer::kInstallerExtraCode1); 135 .DeleteValue(installer::kInstallerExtraCode1);
132 InstallUtil::UpdateInstallerStage(system_level, state_key_path, 136 InstallUtil::UpdateInstallerStage(system_level, state_key_path,
133 installer::BUILDING); 137 installer::BUILDING);
134 DWORD value; 138 DWORD value;
135 EXPECT_EQ(ERROR_SUCCESS, 139 EXPECT_EQ(ERROR_SUCCESS,
136 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) 140 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE)
137 .ReadValueDW(installer::kInstallerExtraCode1, &value)); 141 .ReadValueDW(installer::kInstallerExtraCode1, &value));
138 EXPECT_EQ(static_cast<DWORD>(installer::BUILDING), value); 142 EXPECT_EQ(static_cast<DWORD>(installer::BUILDING), value);
139 } 143 }
140 TempRegKeyOverride::DeleteAllTempKeys();
141 144
142 // Update the stage when there is an "InstallerExtraCode1" value. 145 // Update the stage when there is an "InstallerExtraCode1" value.
143 { 146 {
144 TempRegKeyOverride override(root, L"root_inst_res"); 147 ScopedRegistryTempPathCleanup cleanup;
148 ScopedRegistryKeyOverride override(root, L"root_inst_res");
145 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) 149 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE)
146 .WriteValue(installer::kInstallerExtraCode1, 150 .WriteValue(installer::kInstallerExtraCode1,
147 static_cast<DWORD>(installer::UNPACKING)); 151 static_cast<DWORD>(installer::UNPACKING));
148 InstallUtil::UpdateInstallerStage(system_level, state_key_path, 152 InstallUtil::UpdateInstallerStage(system_level, state_key_path,
149 installer::BUILDING); 153 installer::BUILDING);
150 DWORD value; 154 DWORD value;
151 EXPECT_EQ(ERROR_SUCCESS, 155 EXPECT_EQ(ERROR_SUCCESS,
152 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) 156 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE)
153 .ReadValueDW(installer::kInstallerExtraCode1, &value)); 157 .ReadValueDW(installer::kInstallerExtraCode1, &value));
154 EXPECT_EQ(static_cast<DWORD>(installer::BUILDING), value); 158 EXPECT_EQ(static_cast<DWORD>(installer::BUILDING), value);
155 } 159 }
156 TempRegKeyOverride::DeleteAllTempKeys();
157 160
158 // Clear the stage. 161 // Clear the stage.
159 { 162 {
160 TempRegKeyOverride override(root, L"root_inst_res"); 163 ScopedRegistryTempPathCleanup cleanup;
164 ScopedRegistryKeyOverride override(root, L"root_inst_res");
161 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE) 165 RegKey(root, state_key_path.c_str(), KEY_SET_VALUE)
162 .WriteValue(installer::kInstallerExtraCode1, static_cast<DWORD>(5)); 166 .WriteValue(installer::kInstallerExtraCode1, static_cast<DWORD>(5));
163 InstallUtil::UpdateInstallerStage(system_level, state_key_path, 167 InstallUtil::UpdateInstallerStage(system_level, state_key_path,
164 installer::NO_STAGE); 168 installer::NO_STAGE);
165 DWORD value; 169 DWORD value;
166 EXPECT_EQ(ERROR_FILE_NOT_FOUND, 170 EXPECT_EQ(ERROR_FILE_NOT_FOUND,
167 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE) 171 RegKey(root, state_key_path.c_str(), KEY_QUERY_VALUE)
168 .ReadValueDW(installer::kInstallerExtraCode1, &value)); 172 .ReadValueDW(installer::kInstallerExtraCode1, &value));
169 } 173 }
170 TempRegKeyOverride::DeleteAllTempKeys();
171 } 174 }
172 175
173 TEST_F(InstallUtilTest, DeleteRegistryKeyIf) { 176 TEST_F(InstallUtilTest, DeleteRegistryKeyIf) {
174 const HKEY root = HKEY_CURRENT_USER; 177 const HKEY root = HKEY_CURRENT_USER;
175 std::wstring parent_key_path(L"SomeKey\\ToDelete"); 178 std::wstring parent_key_path(L"SomeKey\\ToDelete");
176 std::wstring child_key_path(parent_key_path); 179 std::wstring child_key_path(parent_key_path);
177 child_key_path.append(L"\\ChildKey\\WithAValue"); 180 child_key_path.append(L"\\ChildKey\\WithAValue");
178 const wchar_t value_name[] = L"some_value_name"; 181 const wchar_t value_name[] = L"some_value_name";
179 const wchar_t value[] = L"hi mom"; 182 const wchar_t value[] = L"hi mom";
180 183
181 { 184 {
182 TempRegKeyOverride override(root, L"root_key"); 185 ScopedRegistryTempPathCleanup cleanup;
186 ScopedRegistryKeyOverride override(root, L"root_key");
183 // Nothing to delete if the keys aren't even there. 187 // Nothing to delete if the keys aren't even there.
184 { 188 {
185 MockRegistryValuePredicate pred; 189 MockRegistryValuePredicate pred;
186 190
187 EXPECT_CALL(pred, Evaluate(_)).Times(0); 191 EXPECT_CALL(pred, Evaluate(_)).Times(0);
188 ASSERT_FALSE(RegKey(root, parent_key_path.c_str(), 192 ASSERT_FALSE(RegKey(root, parent_key_path.c_str(),
189 KEY_QUERY_VALUE).Valid()); 193 KEY_QUERY_VALUE).Valid());
190 EXPECT_TRUE(InstallUtil::DeleteRegistryKeyIf( 194 EXPECT_TRUE(InstallUtil::DeleteRegistryKeyIf(
191 root, parent_key_path, child_key_path, value_name, pred)); 195 root, parent_key_path, child_key_path, value_name, pred));
192 EXPECT_FALSE(RegKey(root, parent_key_path.c_str(), 196 EXPECT_FALSE(RegKey(root, parent_key_path.c_str(),
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 EXPECT_CALL(pred, Evaluate(StrEq(value))).WillOnce(Return(true)); 242 EXPECT_CALL(pred, Evaluate(StrEq(value))).WillOnce(Return(true));
239 ASSERT_EQ(ERROR_SUCCESS, 243 ASSERT_EQ(ERROR_SUCCESS,
240 RegKey(root, child_key_path.c_str(), 244 RegKey(root, child_key_path.c_str(),
241 KEY_SET_VALUE).WriteValue(value_name, value)); 245 KEY_SET_VALUE).WriteValue(value_name, value));
242 EXPECT_TRUE(InstallUtil::DeleteRegistryKeyIf( 246 EXPECT_TRUE(InstallUtil::DeleteRegistryKeyIf(
243 root, parent_key_path, child_key_path, value_name, pred)); 247 root, parent_key_path, child_key_path, value_name, pred));
244 EXPECT_FALSE(RegKey(root, parent_key_path.c_str(), 248 EXPECT_FALSE(RegKey(root, parent_key_path.c_str(),
245 KEY_QUERY_VALUE).Valid()); 249 KEY_QUERY_VALUE).Valid());
246 } 250 }
247 } 251 }
248 TempRegKeyOverride::DeleteAllTempKeys();
249 } 252 }
250 253
251 TEST_F(InstallUtilTest, DeleteRegistryValueIf) { 254 TEST_F(InstallUtilTest, DeleteRegistryValueIf) {
252 const HKEY root = HKEY_CURRENT_USER; 255 const HKEY root = HKEY_CURRENT_USER;
253 std::wstring key_path(L"SomeKey\\ToDelete"); 256 std::wstring key_path(L"SomeKey\\ToDelete");
254 const wchar_t value_name[] = L"some_value_name"; 257 const wchar_t value_name[] = L"some_value_name";
255 const wchar_t value[] = L"hi mom"; 258 const wchar_t value[] = L"hi mom";
256 259
257 { 260 {
258 TempRegKeyOverride override(root, L"root_key"); 261 ScopedRegistryTempPathCleanup cleanup;
262 ScopedRegistryKeyOverride override(root, L"root_key");
259 // Nothing to delete if the key isn't even there. 263 // Nothing to delete if the key isn't even there.
260 { 264 {
261 MockRegistryValuePredicate pred; 265 MockRegistryValuePredicate pred;
262 266
263 EXPECT_CALL(pred, Evaluate(_)).Times(0); 267 EXPECT_CALL(pred, Evaluate(_)).Times(0);
264 ASSERT_FALSE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); 268 ASSERT_FALSE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid());
265 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( 269 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf(
266 root, key_path.c_str(), value_name, pred)); 270 root, key_path.c_str(), value_name, pred));
267 EXPECT_FALSE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); 271 EXPECT_FALSE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid());
268 } 272 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 ASSERT_EQ(ERROR_SUCCESS, 305 ASSERT_EQ(ERROR_SUCCESS,
302 RegKey(root, key_path.c_str(), 306 RegKey(root, key_path.c_str(),
303 KEY_SET_VALUE).WriteValue(value_name, value)); 307 KEY_SET_VALUE).WriteValue(value_name, value));
304 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( 308 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf(
305 root, key_path.c_str(), value_name, pred)); 309 root, key_path.c_str(), value_name, pred));
306 EXPECT_TRUE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); 310 EXPECT_TRUE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid());
307 EXPECT_FALSE(RegKey(root, key_path.c_str(), 311 EXPECT_FALSE(RegKey(root, key_path.c_str(),
308 KEY_QUERY_VALUE).ValueExists(value_name)); 312 KEY_QUERY_VALUE).ValueExists(value_name));
309 } 313 }
310 } 314 }
311 TempRegKeyOverride::DeleteAllTempKeys();
312 315
313 { 316 {
314 TempRegKeyOverride override(root, L"root_key"); 317 ScopedRegistryTempPathCleanup cleanup;
318 ScopedRegistryKeyOverride override(root, L"root_key");
315 // Default value matches: delete. 319 // Default value matches: delete.
316 { 320 {
317 MockRegistryValuePredicate pred; 321 MockRegistryValuePredicate pred;
318 322
319 EXPECT_CALL(pred, Evaluate(StrEq(value))).WillOnce(Return(true)); 323 EXPECT_CALL(pred, Evaluate(StrEq(value))).WillOnce(Return(true));
320 ASSERT_EQ(ERROR_SUCCESS, 324 ASSERT_EQ(ERROR_SUCCESS,
321 RegKey(root, key_path.c_str(), 325 RegKey(root, key_path.c_str(),
322 KEY_SET_VALUE).WriteValue(L"", value)); 326 KEY_SET_VALUE).WriteValue(L"", value));
323 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf( 327 EXPECT_TRUE(InstallUtil::DeleteRegistryValueIf(
324 root, key_path.c_str(), L"", pred)); 328 root, key_path.c_str(), L"", pred));
325 EXPECT_TRUE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid()); 329 EXPECT_TRUE(RegKey(root, key_path.c_str(), KEY_QUERY_VALUE).Valid());
326 EXPECT_FALSE(RegKey(root, key_path.c_str(), 330 EXPECT_FALSE(RegKey(root, key_path.c_str(),
327 KEY_QUERY_VALUE).ValueExists(L"")); 331 KEY_QUERY_VALUE).ValueExists(L""));
328 } 332 }
329 } 333 }
330 TempRegKeyOverride::DeleteAllTempKeys();
331 } 334 }
332 335
333 TEST_F(InstallUtilTest, ValueEquals) { 336 TEST_F(InstallUtilTest, ValueEquals) {
334 InstallUtil::ValueEquals pred(L"howdy"); 337 InstallUtil::ValueEquals pred(L"howdy");
335 338
336 EXPECT_FALSE(pred.Evaluate(L"")); 339 EXPECT_FALSE(pred.Evaluate(L""));
337 EXPECT_FALSE(pred.Evaluate(L"Howdy")); 340 EXPECT_FALSE(pred.Evaluate(L"Howdy"));
338 EXPECT_FALSE(pred.Evaluate(L"howdy!")); 341 EXPECT_FALSE(pred.Evaluate(L"howdy!"));
339 EXPECT_FALSE(pred.Evaluate(L"!howdy")); 342 EXPECT_FALSE(pred.Evaluate(L"!howdy"));
340 EXPECT_TRUE(pred.Evaluate(L"howdy")); 343 EXPECT_TRUE(pred.Evaluate(L"howdy"));
341 } 344 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698