OLD | NEW |
| (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 | |
OLD | NEW |