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

Side by Side Diff: client/install_self_unittest.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « client/install_self_internal.h ('k') | client/install_self_unittest_no_xml_parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2007-2010 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 #include "omaha/base/constants.h"
17 #include "omaha/base/reg_key.h"
18 #include "omaha/client/install_self.h"
19 #include "omaha/client/install_self_internal.h"
20 #include "omaha/common/const_goopdate.h"
21 #include "omaha/testing/unit_test.h"
22
23 namespace omaha {
24
25 namespace install_self {
26
27 namespace {
28
29 const TCHAR* const kAppMachineClientStatePath =
30 _T("HKLM\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME
31 _T("\\ClientState\\{50DA5C89-FF97-4536-BF3F-DF54C2F02EA8}\\");
32
33 const TCHAR* const kAppUserClientStatePath =
34 _T("HKCU\\Software\\") SHORT_COMPANY_NAME _T("\\") PRODUCT_NAME
35 _T("\\ClientState\\{50DA5C89-FF97-4536-BF3F-DF54C2F02EA8}\\");
36
37 } // namespace
38
39 class RegistryProtectedInstallSelfTest
40 : public RegistryProtectedTest {
41 };
42
43 TEST(InstallTest, CheckSystemRequirements) {
44 EXPECT_SUCCEEDED(internal::CheckSystemRequirements());
45 }
46
47 TEST(InstallTest, HasXmlParser_True) {
48 EXPECT_TRUE(internal::HasXmlParser());
49 }
50
51 // A few tests for the public method. The bulk of the cases are covered by
52 // SetEulaRequiredState tests.
53 TEST_F(RegistryProtectedInstallSelfTest,
54 SetEulaAccepted_Machine_KeyDoesNotExist) {
55 EXPECT_EQ(S_OK, SetEulaAccepted(true));
56 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
57 }
58
59 TEST_F(RegistryProtectedInstallSelfTest,
60 SetEulaAccepted_Machine_ValueDoesNotExist) {
61 EXPECT_SUCCEEDED(RegKey::CreateKey(MACHINE_REG_UPDATE));
62 EXPECT_EQ(S_FALSE, SetEulaAccepted(true));
63 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
64 }
65
66 TEST_F(RegistryProtectedInstallSelfTest, SetEulaAccepted_Machine_ExistsZero) {
67 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
68 _T("eulaaccepted"),
69 static_cast<DWORD>(0)));
70 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_CLIENT_STATE_GOOPDATE,
71 _T("eulaaccepted"),
72 static_cast<DWORD>(0)));
73 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
74 _T("eulaaccepted"),
75 static_cast<DWORD>(0)));
76
77 EXPECT_SUCCEEDED(SetEulaAccepted(true));
78 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
79
80 // ClientState for Google Update (never used) and other apps is not affected.
81 DWORD value = UINT_MAX;
82 EXPECT_SUCCEEDED(RegKey::GetValue(MACHINE_REG_CLIENT_STATE_GOOPDATE,
83 _T("eulaaccepted"),
84 &value));
85 EXPECT_EQ(0, value);
86 value = UINT_MAX;
87 EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
88 _T("eulaaccepted"),
89 &value));
90 EXPECT_EQ(0, value);
91 }
92
93 TEST_F(RegistryProtectedInstallSelfTest, SetEulaAccepted_User_KeyDoesNotExist) {
94 EXPECT_EQ(S_OK, SetEulaAccepted(false));
95 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
96 }
97
98 TEST_F(RegistryProtectedInstallSelfTest,
99 SetEulaAccepted_User_ValueDoesNotExist) {
100 EXPECT_SUCCEEDED(RegKey::CreateKey(USER_REG_UPDATE));
101 EXPECT_EQ(S_FALSE, SetEulaAccepted(false));
102 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
103 }
104
105 TEST_F(RegistryProtectedInstallSelfTest, SetEulaAccepted_User_ExistsZero) {
106 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
107 _T("eulaaccepted"),
108 static_cast<DWORD>(0)));
109 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENT_STATE_GOOPDATE,
110 _T("eulaaccepted"),
111 static_cast<DWORD>(0)));
112 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
113 _T("eulaaccepted"),
114 static_cast<DWORD>(0)));
115
116 EXPECT_SUCCEEDED(SetEulaAccepted(false));
117 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
118
119 // ClientState for Google Update (never used) and other apps is not affected.
120 DWORD value = UINT_MAX;
121 EXPECT_SUCCEEDED(RegKey::GetValue(USER_REG_CLIENT_STATE_GOOPDATE,
122 _T("eulaaccepted"),
123 &value));
124 EXPECT_EQ(0, value);
125 value = UINT_MAX;
126 EXPECT_SUCCEEDED(RegKey::GetValue(kAppUserClientStatePath,
127 _T("eulaaccepted"),
128 &value));
129 EXPECT_EQ(0, value);
130 }
131
132 // TODO(omaha3): Enable once the EULA support is finalized. The tests were
133 // significantly changed in the mainline.
134 #if 0
135 TEST_F(SetupRegistryProtectedMachineTest,
136 SetEulaRequiredState_NotRequired_KeyDoesNotExist) {
137 SetModeInstall();
138 args_.is_eula_required_set = false;
139 EXPECT_EQ(S_OK, SetEulaRequiredState());
140 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
141 }
142
143 TEST_F(SetupRegistryProtectedMachineTest,
144 SetEulaRequiredState_NotRequired_ValueDoesNotExist) {
145 EXPECT_SUCCEEDED(RegKey::CreateKey(MACHINE_REG_UPDATE));
146 SetModeInstall();
147 args_.is_eula_required_set = false;
148 EXPECT_SUCCEEDED(SetEulaRequiredState());
149 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
150 }
151
152 TEST_F(SetupRegistryProtectedMachineTest,
153 SetEulaRequiredState_NotRequired_ExistsZero) {
154 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
155 _T("eulaaccepted"),
156 static_cast<DWORD>(0)));
157 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_CLIENT_STATE_GOOPDATE,
158 _T("eulaaccepted"),
159 static_cast<DWORD>(0)));
160 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
161 _T("eulaaccepted"),
162 static_cast<DWORD>(0)));
163
164 SetModeInstall();
165 args_.is_eula_required_set = false;
166 EXPECT_SUCCEEDED(SetEulaRequiredState());
167 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
168
169 // ClientState for Google Update (never used) and other apps is not affected.
170 DWORD value = UINT_MAX;
171 EXPECT_SUCCEEDED(RegKey::GetValue(MACHINE_REG_CLIENT_STATE_GOOPDATE,
172 _T("eulaaccepted"),
173 &value));
174 EXPECT_EQ(0, value);
175 value = UINT_MAX;
176 EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
177 _T("eulaaccepted"),
178 &value));
179 EXPECT_EQ(0, value);
180 }
181
182 TEST_F(SetupRegistryProtectedMachineTest,
183 SetEulaRequiredState_NotRequired_ExistsOne) {
184 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
185 _T("eulaaccepted"),
186 static_cast<DWORD>(1)));
187 SetModeInstall();
188 args_.is_eula_required_set = false;
189 EXPECT_SUCCEEDED(SetEulaRequiredState());
190 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
191 }
192
193 TEST_F(SetupRegistryProtectedMachineTest,
194 SetEulaRequiredState_NotRequired_ExistsOther) {
195 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
196 _T("eulaaccepted"),
197 static_cast<DWORD>(8000)));
198 SetModeInstall();
199 args_.is_eula_required_set = false;
200 EXPECT_SUCCEEDED(SetEulaRequiredState());
201 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
202 }
203
204 TEST_F(SetupRegistryProtectedMachineTest,
205 SetEulaRequiredState_NotRequired_ExistsString) {
206 EXPECT_SUCCEEDED(
207 RegKey::SetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), _T("0")));
208 SetModeInstall();
209 args_.is_eula_required_set = false;
210 EXPECT_SUCCEEDED(SetEulaRequiredState());
211 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
212 }
213
214 TEST_F(SetupRegistryProtectedMachineTest,
215 SetEulaRequiredState_NotRequired_ValueDoesNotExistAlreadyInstalled) {
216 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
217 _T("pv"),
218 _T("1.2.3.4")));
219
220 SetModeInstall();
221 args_.is_eula_required_set = false;
222 EXPECT_SUCCEEDED(SetEulaRequiredState());
223 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
224 }
225
226 TEST_F(SetupRegistryProtectedMachineTest,
227 SetEulaRequiredState_NotRequired_ExistsZeroAlreadyInstalled) {
228 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
229 _T("eulaaccepted"),
230 static_cast<DWORD>(0)));
231 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
232 _T("pv"),
233 _T("1.2.3.4")));
234
235 SetModeInstall();
236 args_.is_eula_required_set = false;
237 EXPECT_SUCCEEDED(SetEulaRequiredState());
238 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
239 }
240
241 TEST_F(SetupRegistryProtectedMachineTest,
242 SetEulaRequiredState_Required_DoesNotExist) {
243 SetModeInstall();
244 args_.is_eula_required_set = true;
245 EXPECT_SUCCEEDED(SetEulaRequiredState());
246 DWORD value = UINT_MAX;
247 EXPECT_SUCCEEDED(
248 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
249 EXPECT_EQ(0, value);
250 }
251
252 TEST_F(SetupRegistryProtectedMachineTest,
253 SetEulaRequiredState_Required_ExistsZero) {
254 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
255 _T("eulaaccepted"),
256 static_cast<DWORD>(0)));
257 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_CLIENT_STATE_GOOPDATE,
258 _T("eulaaccepted"),
259 static_cast<DWORD>(0)));
260 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientStatePath,
261 _T("eulaaccepted"),
262 static_cast<DWORD>(0)));
263
264 SetModeInstall();
265 args_.is_eula_required_set = true;
266 EXPECT_SUCCEEDED(SetEulaRequiredState());
267 DWORD value = UINT_MAX;
268 EXPECT_SUCCEEDED(
269 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
270 EXPECT_EQ(0, value);
271
272 // ClientState for Google Update (never used) and other apps is not affected.
273 value = UINT_MAX;
274 EXPECT_SUCCEEDED(RegKey::GetValue(MACHINE_REG_CLIENT_STATE_GOOPDATE,
275 _T("eulaaccepted"),
276 &value));
277 EXPECT_EQ(0, value);
278 value = UINT_MAX;
279 EXPECT_SUCCEEDED(RegKey::GetValue(kAppMachineClientStatePath,
280 _T("eulaaccepted"),
281 &value));
282 EXPECT_EQ(0, value);
283 }
284
285 // The existing value is ignored if there are not two registered apps. This is
286 // an artifact of the implementation and not a requirement.
287 TEST_F(SetupRegistryProtectedMachineTest,
288 SetEulaRequiredState_Required_ExistsOne) {
289 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
290 _T("eulaaccepted"),
291 static_cast<DWORD>(1)));
292 SetModeInstall();
293 args_.is_eula_required_set = true;
294 EXPECT_SUCCEEDED(SetEulaRequiredState());
295 DWORD value = UINT_MAX;
296 EXPECT_SUCCEEDED(
297 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
298 EXPECT_EQ(0, value);
299 }
300
301 TEST_F(SetupRegistryProtectedMachineTest,
302 SetEulaRequiredState_Required_ExistsOther) {
303 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
304 _T("eulaaccepted"),
305 static_cast<DWORD>(8000)));
306 SetModeInstall();
307 args_.is_eula_required_set = true;
308 EXPECT_SUCCEEDED(SetEulaRequiredState());
309 DWORD value = UINT_MAX;
310 EXPECT_SUCCEEDED(
311 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
312 EXPECT_EQ(0, value);
313 }
314
315 TEST_F(SetupRegistryProtectedMachineTest,
316 SetEulaRequiredState_Required_ExistsString) {
317 EXPECT_SUCCEEDED(
318 RegKey::SetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), _T("0")));
319 SetModeInstall();
320 args_.is_eula_required_set = true;
321 EXPECT_SUCCEEDED(SetEulaRequiredState());
322 DWORD value = UINT_MAX;
323 EXPECT_SUCCEEDED(
324 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
325 EXPECT_EQ(0, value);
326 }
327
328 // One app is not sufficient for detecting that Google Update is already
329 // installed.
330 TEST_F(SetupRegistryProtectedMachineTest,
331 SetEulaRequiredState_Required_ValueDoesNotExistOneAppRegistered) {
332 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientsPath,
333 _T("pv"),
334 _T("1.2.3.4")));
335
336 SetModeInstall();
337 args_.is_eula_required_set = true;
338 EXPECT_SUCCEEDED(SetEulaRequiredState());
339 DWORD value = UINT_MAX;
340 EXPECT_SUCCEEDED(
341 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
342 EXPECT_EQ(0, value);
343 }
344
345 // Even Google Update registered is not sufficient for detecting that Google
346 // Update is already installed.
347 TEST_F(SetupRegistryProtectedMachineTest,
348 SetEulaRequiredState_Required_ValueDoesNotExistGoogleUpdateRegistered) {
349 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_CLIENT_STATE,
350 _T("pv"),
351 _T("1.2.3.4")));
352
353 SetModeInstall();
354 args_.is_eula_required_set = true;
355 EXPECT_SUCCEEDED(SetEulaRequiredState());
356 DWORD value = UINT_MAX;
357 EXPECT_SUCCEEDED(
358 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
359 EXPECT_EQ(0, value);
360 }
361
362 // Important: The existing state is not changed because two apps are registered.
363 TEST_F(SetupRegistryProtectedMachineTest,
364 SetEulaRequiredState_Required_ValueDoesNotExistTwoAppsRegistered) {
365 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientsPath,
366 _T("pv"),
367 _T("1.2.3.4")));
368 EXPECT_SUCCEEDED(RegKey::SetValue(kApp2MachineClientsPath,
369 _T("pv"),
370 _T("1.2.3.4")));
371
372 SetModeInstall();
373 args_.is_eula_required_set = true;
374 EXPECT_SUCCEEDED(SetEulaRequiredState());
375 EXPECT_FALSE(RegKey::HasValue(MACHINE_REG_UPDATE, _T("eulaaccepted")));
376 }
377
378 // The existing state is not changed because Google Update is already
379 // installed, but there is no way to differentiate this from writing 0.
380 TEST_F(SetupRegistryProtectedMachineTest,
381 SetEulaRequiredState_Required_ExistsZeroTwoAppsRegistered) {
382 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
383 _T("eulaaccepted"),
384 static_cast<DWORD>(0)));
385 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientsPath,
386 _T("pv"),
387 _T("1.2.3.4")));
388 EXPECT_SUCCEEDED(RegKey::SetValue(kApp2MachineClientsPath,
389 _T("pv"),
390 _T("1.2.3.4")));
391
392 SetModeInstall();
393 args_.is_eula_required_set = true;
394 EXPECT_SUCCEEDED(SetEulaRequiredState());
395 DWORD value = UINT_MAX;
396 EXPECT_SUCCEEDED(
397 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
398 EXPECT_EQ(0, value);
399 }
400
401 // The existing state is not changed because Google Update is already installed.
402 TEST_F(SetupRegistryProtectedMachineTest,
403 SetEulaRequiredState_Required_ExistsOneTwoAppsRegistered) {
404 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
405 _T("eulaaccepted"),
406 static_cast<DWORD>(1)));
407 EXPECT_SUCCEEDED(RegKey::SetValue(kAppMachineClientsPath,
408 _T("pv"),
409 _T("1.2.3.4")));
410 EXPECT_SUCCEEDED(RegKey::SetValue(kApp2MachineClientsPath,
411 _T("pv"),
412 _T("1.2.3.4")));
413
414 SetModeInstall();
415 args_.is_eula_required_set = true;
416 EXPECT_SUCCEEDED(SetEulaRequiredState());
417 DWORD value = UINT_MAX;
418 EXPECT_SUCCEEDED(
419 RegKey::GetValue(MACHINE_REG_UPDATE, _T("eulaaccepted"), &value));
420 EXPECT_EQ(1, value);
421 }
422
423 TEST_F(SetupRegistryProtectedUserTest,
424 SetEulaRequiredState_NotRequired_KeyDoesNotExist) {
425 SetModeInstall();
426 args_.is_eula_required_set = false;
427 EXPECT_EQ(S_OK, SetEulaRequiredState());
428 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
429 }
430
431 TEST_F(SetupRegistryProtectedUserTest,
432 SetEulaRequiredState_NotRequired_ValueDoesNotExist) {
433 EXPECT_SUCCEEDED(RegKey::CreateKey(USER_REG_UPDATE));
434 SetModeInstall();
435 args_.is_eula_required_set = false;
436 EXPECT_SUCCEEDED(SetEulaRequiredState());
437 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
438 }
439
440 TEST_F(SetupRegistryProtectedUserTest,
441 SetEulaRequiredState_NotRequired_ExistsZero) {
442 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
443 _T("eulaaccepted"),
444 static_cast<DWORD>(0)));
445 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENT_STATE_GOOPDATE,
446 _T("eulaaccepted"),
447 static_cast<DWORD>(0)));
448 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
449 _T("eulaaccepted"),
450 static_cast<DWORD>(0)));
451
452 SetModeInstall();
453 args_.is_eula_required_set = false;
454 EXPECT_SUCCEEDED(SetEulaRequiredState());
455 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
456
457 // ClientState for Google Update (never used) and other apps is not affected.
458 DWORD value = UINT_MAX;
459 EXPECT_SUCCEEDED(RegKey::GetValue(USER_REG_CLIENT_STATE_GOOPDATE,
460 _T("eulaaccepted"),
461 &value));
462 EXPECT_EQ(0, value);
463 value = UINT_MAX;
464 EXPECT_SUCCEEDED(RegKey::GetValue(kAppUserClientStatePath,
465 _T("eulaaccepted"),
466 &value));
467 EXPECT_EQ(0, value);
468 }
469
470 TEST_F(SetupRegistryProtectedUserTest,
471 SetEulaRequiredState_NotRequired_ExistsOne) {
472 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
473 _T("eulaaccepted"),
474 static_cast<DWORD>(1)));
475 SetModeInstall();
476 args_.is_eula_required_set = false;
477 EXPECT_SUCCEEDED(SetEulaRequiredState());
478 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
479 }
480
481 TEST_F(SetupRegistryProtectedUserTest,
482 SetEulaRequiredState_NotRequired_ExistsOther) {
483 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
484 _T("eulaaccepted"),
485 static_cast<DWORD>(8000)));
486 SetModeInstall();
487 args_.is_eula_required_set = false;
488 EXPECT_SUCCEEDED(SetEulaRequiredState());
489 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
490 }
491
492 TEST_F(SetupRegistryProtectedUserTest,
493 SetEulaRequiredState_NotRequired_ExistsString) {
494 EXPECT_SUCCEEDED(
495 RegKey::SetValue(USER_REG_UPDATE, _T("eulaaccepted"), _T("0")));
496 SetModeInstall();
497 args_.is_eula_required_set = false;
498 EXPECT_SUCCEEDED(SetEulaRequiredState());
499 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
500 }
501
502 TEST_F(SetupRegistryProtectedUserTest,
503 SetEulaRequiredState_NotRequired_ValueDoesNotExistAlreadyInstalled) {
504 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
505 _T("pv"),
506 _T("1.2.3.4")));
507
508 SetModeInstall();
509 args_.is_eula_required_set = false;
510 EXPECT_SUCCEEDED(SetEulaRequiredState());
511 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
512 }
513
514 TEST_F(SetupRegistryProtectedUserTest,
515 SetEulaRequiredState_NotRequired_ExistsZeroAlreadyInstalled) {
516 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
517 _T("eulaaccepted"),
518 static_cast<DWORD>(0)));
519 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
520 _T("pv"),
521 _T("1.2.3.4")));
522
523 SetModeInstall();
524 args_.is_eula_required_set = false;
525 EXPECT_SUCCEEDED(SetEulaRequiredState());
526 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
527 }
528
529 TEST_F(SetupRegistryProtectedUserTest,
530 SetEulaRequiredState_Required_DoesNotExist) {
531 SetModeInstall();
532 args_.is_eula_required_set = true;
533 EXPECT_SUCCEEDED(SetEulaRequiredState());
534 DWORD value = UINT_MAX;
535 EXPECT_SUCCEEDED(
536 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
537 EXPECT_EQ(0, value);
538 }
539
540 TEST_F(SetupRegistryProtectedUserTest,
541 SetEulaRequiredState_Required_ExistsZero) {
542 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
543 _T("eulaaccepted"),
544 static_cast<DWORD>(0)));
545 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENT_STATE_GOOPDATE,
546 _T("eulaaccepted"),
547 static_cast<DWORD>(0)));
548 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientStatePath,
549 _T("eulaaccepted"),
550 static_cast<DWORD>(0)));
551
552 SetModeInstall();
553 args_.is_eula_required_set = true;
554 EXPECT_SUCCEEDED(SetEulaRequiredState());
555 DWORD value = UINT_MAX;
556 EXPECT_SUCCEEDED(
557 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
558 EXPECT_EQ(0, value);
559
560 // ClientState for Google Update (never used) and other apps is not affected.
561 value = UINT_MAX;
562 EXPECT_SUCCEEDED(RegKey::GetValue(USER_REG_CLIENT_STATE_GOOPDATE,
563 _T("eulaaccepted"),
564 &value));
565 EXPECT_EQ(0, value);
566 value = UINT_MAX;
567 EXPECT_SUCCEEDED(RegKey::GetValue(kAppUserClientStatePath,
568 _T("eulaaccepted"),
569 &value));
570 EXPECT_EQ(0, value);
571 }
572
573 // The existing value is ignored if there are not two registered apps. This is
574 // an artifact of the implementation and not a requirement.
575 TEST_F(SetupRegistryProtectedUserTest,
576 SetEulaRequiredState_Required_ExistsOne) {
577 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
578 _T("eulaaccepted"),
579 static_cast<DWORD>(1)));
580 SetModeInstall();
581 args_.is_eula_required_set = true;
582 EXPECT_SUCCEEDED(SetEulaRequiredState());
583 DWORD value = UINT_MAX;
584 EXPECT_SUCCEEDED(
585 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
586 EXPECT_EQ(0, value);
587 }
588
589 TEST_F(SetupRegistryProtectedUserTest,
590 SetEulaRequiredState_Required_ExistsOther) {
591 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
592 _T("eulaaccepted"),
593 static_cast<DWORD>(8000)));
594 SetModeInstall();
595 args_.is_eula_required_set = true;
596 EXPECT_SUCCEEDED(SetEulaRequiredState());
597 DWORD value = UINT_MAX;
598 EXPECT_SUCCEEDED(
599 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
600 EXPECT_EQ(0, value);
601 }
602
603 TEST_F(SetupRegistryProtectedUserTest,
604 SetEulaRequiredState_Required_ExistsString) {
605 EXPECT_SUCCEEDED(
606 RegKey::SetValue(USER_REG_UPDATE, _T("eulaaccepted"), _T("0")));
607 SetModeInstall();
608 args_.is_eula_required_set = true;
609 EXPECT_SUCCEEDED(SetEulaRequiredState());
610 DWORD value = UINT_MAX;
611 EXPECT_SUCCEEDED(
612 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
613 EXPECT_EQ(0, value);
614 }
615
616 // One app is not sufficient for detecting that Google Update is already
617 // installed.
618 TEST_F(SetupRegistryProtectedUserTest,
619 SetEulaRequiredState_Required_ValueDoesNotExistOneAppRegistered) {
620 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientsPath,
621 _T("pv"),
622 _T("1.2.3.4")));
623
624 SetModeInstall();
625 args_.is_eula_required_set = true;
626 EXPECT_SUCCEEDED(SetEulaRequiredState());
627 DWORD value = UINT_MAX;
628 EXPECT_SUCCEEDED(
629 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
630 EXPECT_EQ(0, value);
631 }
632
633 // Even Google Update registered is not sufficient for detecting that Google
634 // Update is already installed.
635 TEST_F(SetupRegistryProtectedUserTest,
636 SetEulaRequiredState_Required_ValueDoesNotExistGoogleUpdateRegistered) {
637 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENT_STATE,
638 _T("pv"),
639 _T("1.2.3.4")));
640
641 SetModeInstall();
642 args_.is_eula_required_set = true;
643 EXPECT_SUCCEEDED(SetEulaRequiredState());
644 DWORD value = UINT_MAX;
645 EXPECT_SUCCEEDED(
646 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
647 EXPECT_EQ(0, value);
648 }
649
650 // Important: The existing state is not changed because two apps are registered.
651 TEST_F(SetupRegistryProtectedUserTest,
652 SetEulaRequiredState_Required_ValueDoesNotExistTwoAppsRegistered) {
653 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientsPath,
654 _T("pv"),
655 _T("1.2.3.4")));
656 EXPECT_SUCCEEDED(RegKey::SetValue(kApp2UserClientsPath,
657 _T("pv"),
658 _T("1.2.3.4")));
659
660 SetModeInstall();
661 args_.is_eula_required_set = true;
662 EXPECT_SUCCEEDED(SetEulaRequiredState());
663 EXPECT_FALSE(RegKey::HasValue(USER_REG_UPDATE, _T("eulaaccepted")));
664 }
665
666 // The existing state is not changed because Google Update is already
667 // installed, but there is no way to differentiate this from writing 0.
668 TEST_F(SetupRegistryProtectedUserTest,
669 SetEulaRequiredState_Required_ExistsZeroTwoAppsRegistered) {
670 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
671 _T("eulaaccepted"),
672 static_cast<DWORD>(0)));
673 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientsPath,
674 _T("pv"),
675 _T("1.2.3.4")));
676 EXPECT_SUCCEEDED(RegKey::SetValue(kApp2UserClientsPath,
677 _T("pv"),
678 _T("1.2.3.4")));
679
680 SetModeInstall();
681 args_.is_eula_required_set = true;
682 EXPECT_SUCCEEDED(SetEulaRequiredState());
683 DWORD value = UINT_MAX;
684 EXPECT_SUCCEEDED(
685 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
686 EXPECT_EQ(0, value);
687 }
688
689 // The existing state is not changed because Google Update is already installed.
690 TEST_F(SetupRegistryProtectedUserTest,
691 SetEulaRequiredState_Required_ExistsOneTwoAppsRegistered) {
692 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
693 _T("eulaaccepted"),
694 static_cast<DWORD>(1)));
695 EXPECT_SUCCEEDED(RegKey::SetValue(kAppUserClientsPath,
696 _T("pv"),
697 _T("1.2.3.4")));
698 EXPECT_SUCCEEDED(RegKey::SetValue(kApp2UserClientsPath,
699 _T("pv"),
700 _T("1.2.3.4")));
701
702 SetModeInstall();
703 args_.is_eula_required_set = true;
704 EXPECT_SUCCEEDED(SetEulaRequiredState());
705 DWORD value = UINT_MAX;
706 EXPECT_SUCCEEDED(
707 RegKey::GetValue(USER_REG_UPDATE, _T("eulaaccepted"), &value));
708 EXPECT_EQ(1, value);
709 }
710 #endif
711
712 TEST_F(RegistryProtectedInstallSelfTest, PersistUpdateErrorInfo_User) {
713 internal::PersistUpdateErrorInfo(false, 0x98765432, 77, _T("1.2.3.4"));
714
715 DWORD value(0);
716 EXPECT_SUCCEEDED(RegKey::GetValue(USER_REG_UPDATE,
717 kRegValueSelfUpdateErrorCode,
718 &value));
719 EXPECT_EQ(0x98765432, value);
720
721 EXPECT_SUCCEEDED(RegKey::GetValue(USER_REG_UPDATE,
722 kRegValueSelfUpdateExtraCode1,
723 &value));
724 EXPECT_EQ(77, value);
725
726 CString version;
727 EXPECT_SUCCEEDED(RegKey::GetValue(USER_REG_UPDATE,
728 kRegValueSelfUpdateVersion,
729 &version));
730 EXPECT_FALSE(version.IsEmpty());
731 EXPECT_STREQ(_T("1.2.3.4"), version);
732 }
733
734 TEST_F(RegistryProtectedInstallSelfTest, PersistUpdateErrorInfo_Machine) {
735 internal::PersistUpdateErrorInfo(true, 0x98765430, 0x12345678, _T("2.3.4.5"));
736
737 DWORD value(0);
738 EXPECT_SUCCEEDED(RegKey::GetValue(MACHINE_REG_UPDATE,
739 kRegValueSelfUpdateErrorCode,
740 &value));
741 EXPECT_EQ(0x98765430, value);
742
743 EXPECT_SUCCEEDED(RegKey::GetValue(MACHINE_REG_UPDATE,
744 kRegValueSelfUpdateExtraCode1,
745 &value));
746 EXPECT_EQ(0x12345678, value);
747
748 CString version;
749 EXPECT_SUCCEEDED(RegKey::GetValue(MACHINE_REG_UPDATE,
750 kRegValueSelfUpdateVersion,
751 &version));
752 EXPECT_FALSE(version.IsEmpty());
753 EXPECT_STREQ(_T("2.3.4.5"), version);
754 }
755
756 TEST_F(RegistryProtectedInstallSelfTest,
757 ReadAndClearUpdateErrorInfo_User_KeyDoesNotExist) {
758 DWORD self_update_error_code(0);
759 DWORD self_update_extra_code1(0);
760 CString self_update_version;
761 ExpectAsserts expect_asserts;
762 EXPECT_FALSE(ReadAndClearUpdateErrorInfo(false,
763 &self_update_error_code,
764 &self_update_extra_code1,
765 &self_update_version));
766 }
767
768 TEST_F(RegistryProtectedInstallSelfTest,
769 ReadAndClearUpdateErrorInfo_Machine_KeyDoesNotExist) {
770 DWORD self_update_error_code(0);
771 DWORD self_update_extra_code1(0);
772 CString self_update_version;
773 ExpectAsserts expect_asserts;
774 EXPECT_FALSE(ReadAndClearUpdateErrorInfo(true,
775 &self_update_error_code,
776 &self_update_extra_code1,
777 &self_update_version));
778 }
779
780 TEST_F(RegistryProtectedInstallSelfTest,
781 ReadAndClearUpdateErrorInfo_User_UpdateErrorCodeDoesNotExist) {
782 EXPECT_SUCCEEDED(RegKey::CreateKey(USER_REG_UPDATE));
783 DWORD self_update_error_code(0);
784 DWORD self_update_extra_code1(0);
785 CString self_update_version;
786 EXPECT_FALSE(ReadAndClearUpdateErrorInfo(false,
787 &self_update_error_code,
788 &self_update_extra_code1,
789 &self_update_version));
790 }
791
792 TEST_F(RegistryProtectedInstallSelfTest,
793 ReadAndClearUpdateErrorInfo_Machine_UpdateErrorCodeDoesNotExist) {
794 EXPECT_SUCCEEDED(RegKey::CreateKey(MACHINE_REG_UPDATE));
795 DWORD self_update_error_code(0);
796 DWORD self_update_extra_code1(0);
797 CString self_update_version;
798 EXPECT_FALSE(ReadAndClearUpdateErrorInfo(true,
799 &self_update_error_code,
800 &self_update_extra_code1,
801 &self_update_version));
802 }
803
804 TEST_F(RegistryProtectedInstallSelfTest,
805 ReadAndClearUpdateErrorInfo_User_AllValuesPresent) {
806 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
807 kRegValueSelfUpdateErrorCode,
808 static_cast<DWORD>(0x87654321)));
809 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
810 kRegValueSelfUpdateExtraCode1,
811 static_cast<DWORD>(55)));
812 EXPECT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE,
813 kRegValueSelfUpdateVersion,
814 _T("0.2.4.8")));
815
816 DWORD self_update_error_code(0);
817 DWORD self_update_extra_code1(0);
818 CString self_update_version;
819 EXPECT_TRUE(ReadAndClearUpdateErrorInfo(false,
820 &self_update_error_code,
821 &self_update_extra_code1,
822 &self_update_version));
823
824 EXPECT_EQ(0x87654321, self_update_error_code);
825 EXPECT_EQ(55, self_update_extra_code1);
826 EXPECT_STREQ(_T("0.2.4.8"), self_update_version);
827 }
828
829 TEST_F(RegistryProtectedInstallSelfTest,
830 ReadAndClearUpdateErrorInfo_Machine_AllValuesPresent) {
831 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
832 kRegValueSelfUpdateErrorCode,
833 static_cast<DWORD>(0x87654321)));
834 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
835 kRegValueSelfUpdateExtraCode1,
836 static_cast<DWORD>(55)));
837 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
838 kRegValueSelfUpdateVersion,
839 _T("0.2.4.8")));
840
841 DWORD self_update_error_code(0);
842 DWORD self_update_extra_code1(0);
843 CString self_update_version;
844 EXPECT_TRUE(ReadAndClearUpdateErrorInfo(true,
845 &self_update_error_code,
846 &self_update_extra_code1,
847 &self_update_version));
848
849 EXPECT_EQ(0x87654321, self_update_error_code);
850 EXPECT_EQ(55, self_update_extra_code1);
851 EXPECT_STREQ(_T("0.2.4.8"), self_update_version);
852 }
853
854 TEST_F(RegistryProtectedInstallSelfTest,
855 ReadAndClearUpdateErrorInfo_User_ValuesPresentInMachineOnly) {
856 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
857 kRegValueSelfUpdateErrorCode,
858 static_cast<DWORD>(0x87654321)));
859 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
860 kRegValueSelfUpdateExtraCode1,
861 static_cast<DWORD>(55)));
862 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE,
863 kRegValueSelfUpdateVersion,
864 _T("0.2.4.8")));
865
866 DWORD self_update_error_code(0);
867 DWORD self_update_extra_code1(0);
868 CString self_update_version;
869 ExpectAsserts expect_asserts;
870 EXPECT_FALSE(ReadAndClearUpdateErrorInfo(false,
871 &self_update_error_code,
872 &self_update_extra_code1,
873 &self_update_version));
874 }
875
876 } // namespace install_self
877
878 } // namespace omaha
OLDNEW
« no previous file with comments | « client/install_self_internal.h ('k') | client/install_self_unittest_no_xml_parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698