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 <windows.h> | |
17 #include <atlpath.h> | |
18 #include <atlsecurity.h> | |
19 #include <atlstr.h> | |
20 #include <map> | |
21 #include <vector> | |
22 #include "omaha/base/app_util.h" | |
23 #include "omaha/base/browser_utils.h" | |
24 #include "omaha/base/constants.h" | |
25 #include "omaha/base/const_utils.h" | |
26 #include "omaha/base/error.h" | |
27 #include "omaha/base/file.h" | |
28 #include "omaha/base/omaha_version.h" | |
29 #include "omaha/base/path.h" | |
30 #include "omaha/base/reg_key.h" | |
31 #include "omaha/base/scope_guard.h" | |
32 #include "omaha/base/scoped_ptr_cotask.h" | |
33 #include "omaha/base/string.h" | |
34 #include "omaha/base/time.h" | |
35 #include "omaha/base/user_info.h" | |
36 #include "omaha/base/utils.h" | |
37 #include "omaha/base/vistautil.h" | |
38 #include "omaha/base/vista_utils.h" | |
39 #include "omaha/common/config_manager.h" | |
40 #include "omaha/common/const_goopdate.h" | |
41 #include "omaha/common/const_group_policy.h" | |
42 #include "omaha/common/goopdate_utils.h" | |
43 #include "omaha/common/oem_install_utils.h" | |
44 #include "omaha/testing/resource.h" | |
45 #include "omaha/testing/unit_test.h" | |
46 | |
47 namespace omaha { | |
48 | |
49 namespace { | |
50 | |
51 #define DUMMY_CLSID _T("{6FC94136-0D4C-450e-99C2-BCDA72A9C8F0}") | |
52 const TCHAR* hkcr_key_name = _T("HKCR\\CLSID\\") DUMMY_CLSID; | |
53 const TCHAR* hklm_key_name = _T("HKLM\\Software\\Classes\\CLSID\\") DUMMY_CLSID; | |
54 const TCHAR* hkcu_key_name = _T("HKCU\\Software\\Classes\\CLSID\\") DUMMY_CLSID; | |
55 | |
56 const TCHAR* kAppId = _T("{3DAE8C13-C394-481E-8163-4E7A7699084F}"); | |
57 | |
58 } // namespace | |
59 | |
60 namespace goopdate_utils { | |
61 | |
62 static void Cleanup() { | |
63 ASSERT_SUCCEEDED(RemoveRedirectHKCR()); | |
64 | |
65 RegKey::DeleteKey(hkcr_key_name, true); | |
66 RegKey::DeleteKey(hklm_key_name, true); | |
67 RegKey::DeleteKey(hkcu_key_name, true); | |
68 } | |
69 | |
70 static void TestGetBrowserToRestart(BrowserType stamped, | |
71 bool found1, | |
72 bool killed1, | |
73 BrowserType def_browser, | |
74 bool found2, | |
75 bool killed2, | |
76 BrowserType expected) { | |
77 TerminateBrowserResult res(found1, killed1); | |
78 TerminateBrowserResult def(found2, killed2); | |
79 | |
80 BrowserType type = BROWSER_UNKNOWN; | |
81 if (expected == BROWSER_UNKNOWN) { | |
82 EXPECT_FALSE(GetBrowserToRestart(stamped, | |
83 def_browser, | |
84 res, | |
85 def, | |
86 &type)) | |
87 << _T("stamped: ") << stamped << _T(" ") << found1 << _T(" ") << killed1 | |
88 << _T(" default: ") << def_browser << _T(" ") << found2 << _T(" ") | |
89 << killed2; | |
90 } else { | |
91 EXPECT_TRUE(GetBrowserToRestart(stamped, | |
92 def_browser, | |
93 res, | |
94 def, | |
95 &type)) | |
96 << _T("stamped: ") << stamped << _T(" ") << found1 << _T(" ") << killed1 | |
97 << _T(" default: ") << def_browser << _T(" ") << found2 << _T(" ") | |
98 << killed2; | |
99 } | |
100 EXPECT_EQ(expected, type) | |
101 << _T("stamped: ") << stamped << _T(" ") << found1 << _T(" ") << killed1 | |
102 << _T(" default: ") << def_browser << _T(" ") << found2 << _T(" ") | |
103 << killed2; | |
104 } | |
105 | |
106 // TerminateAllBrowsers is not tested with valid browser values because the | |
107 // tests would terminate developers' browsers. | |
108 | |
109 TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedUnknown) { | |
110 ExpectAsserts expect_asserts; | |
111 TestGetBrowserToRestart(BROWSER_UNKNOWN, false, false, | |
112 BROWSER_IE, false, false, | |
113 BROWSER_IE); | |
114 TestGetBrowserToRestart(BROWSER_UNKNOWN, true, false, | |
115 BROWSER_IE, false, false, | |
116 BROWSER_IE); | |
117 } | |
118 | |
119 TEST(GoopdateUtilsTest, GetBrowserToRestart_DefaultUnknown) { | |
120 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
121 BROWSER_UNKNOWN, false, false, | |
122 BROWSER_UNKNOWN); | |
123 } | |
124 | |
125 TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedAndDefaultUnknown) { | |
126 ExpectAsserts expect_asserts; | |
127 TestGetBrowserToRestart(BROWSER_UNKNOWN, false, false, | |
128 BROWSER_UNKNOWN, false, false, | |
129 BROWSER_UNKNOWN); | |
130 TestGetBrowserToRestart(BROWSER_UNKNOWN, true, false, | |
131 BROWSER_UNKNOWN, false, false, | |
132 BROWSER_UNKNOWN); | |
133 } | |
134 | |
135 TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedDefault) { | |
136 ExpectAsserts expect_asserts; | |
137 TestGetBrowserToRestart(BROWSER_DEFAULT, false, false, | |
138 BROWSER_IE, false, false, | |
139 BROWSER_IE); | |
140 TestGetBrowserToRestart(BROWSER_DEFAULT, true, false, | |
141 BROWSER_IE, false, false, | |
142 BROWSER_IE); | |
143 } | |
144 | |
145 TEST(GoopdateUtilsTest, GetBrowserToRestart_DefaultDefault) { | |
146 ExpectAsserts expect_asserts; | |
147 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
148 BROWSER_DEFAULT, false, false, | |
149 BROWSER_UNKNOWN); | |
150 } | |
151 | |
152 TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedAndDefaultDefault) { | |
153 ExpectAsserts expect_asserts; | |
154 TestGetBrowserToRestart(BROWSER_DEFAULT, false, false, | |
155 BROWSER_DEFAULT, false, false, | |
156 BROWSER_UNKNOWN); | |
157 TestGetBrowserToRestart(BROWSER_DEFAULT, true, false, | |
158 BROWSER_DEFAULT, false, false, | |
159 BROWSER_UNKNOWN); | |
160 } | |
161 | |
162 TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedMax) { | |
163 ExpectAsserts expect_asserts; | |
164 TestGetBrowserToRestart(BROWSER_MAX, false, false, | |
165 BROWSER_IE, false, false, | |
166 BROWSER_IE); | |
167 TestGetBrowserToRestart(BROWSER_MAX, true, false, | |
168 BROWSER_IE, false, false, | |
169 BROWSER_IE); | |
170 } | |
171 | |
172 TEST(GoopdateUtilsTest, GetBrowserToRestart_DefaultMax) { | |
173 ExpectAsserts expect_asserts; | |
174 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
175 BROWSER_MAX, false, false, | |
176 BROWSER_UNKNOWN); | |
177 } | |
178 | |
179 TEST(GoopdateUtilsTest, GetBrowserToRestart_StampedAndDefaultMax) { | |
180 ExpectAsserts expect_asserts; | |
181 TestGetBrowserToRestart(BROWSER_MAX, false, false, | |
182 BROWSER_MAX, false, false, | |
183 BROWSER_UNKNOWN); | |
184 TestGetBrowserToRestart(BROWSER_MAX, true, false, | |
185 BROWSER_MAX, false, false, | |
186 BROWSER_UNKNOWN); | |
187 } | |
188 | |
189 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeIE_DefaultIE) { | |
190 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
191 BROWSER_IE, false, false, | |
192 BROWSER_IE); | |
193 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
194 BROWSER_IE, false, true, | |
195 BROWSER_IE); | |
196 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
197 BROWSER_IE, true, false, | |
198 BROWSER_IE); | |
199 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
200 BROWSER_IE, true, true, | |
201 BROWSER_IE); | |
202 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
203 BROWSER_IE, false, false, | |
204 BROWSER_IE); | |
205 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
206 BROWSER_IE, false, true, | |
207 BROWSER_IE); | |
208 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
209 BROWSER_IE, true, false, | |
210 BROWSER_IE); | |
211 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
212 BROWSER_IE, true, true, | |
213 BROWSER_IE); | |
214 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
215 BROWSER_IE, false, false, | |
216 BROWSER_IE); | |
217 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
218 BROWSER_IE, false, true, | |
219 BROWSER_IE); | |
220 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
221 BROWSER_IE, true, false, | |
222 BROWSER_IE); | |
223 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
224 BROWSER_IE, true, true, | |
225 BROWSER_IE); | |
226 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
227 BROWSER_IE, false, false, | |
228 BROWSER_IE); | |
229 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
230 BROWSER_IE, false, true, | |
231 BROWSER_IE); | |
232 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
233 BROWSER_IE, true, false, | |
234 BROWSER_IE); | |
235 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
236 BROWSER_IE, true, true, | |
237 BROWSER_IE); | |
238 } | |
239 | |
240 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeIE_DefaultFirefox) { | |
241 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
242 BROWSER_FIREFOX, false, false, | |
243 BROWSER_FIREFOX); | |
244 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
245 BROWSER_FIREFOX, false, true, | |
246 BROWSER_FIREFOX); | |
247 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
248 BROWSER_FIREFOX, true, false, | |
249 BROWSER_UNKNOWN); | |
250 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
251 BROWSER_FIREFOX, true, true, | |
252 BROWSER_FIREFOX); | |
253 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
254 BROWSER_FIREFOX, false, false, | |
255 BROWSER_FIREFOX); | |
256 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
257 BROWSER_FIREFOX, false, true, | |
258 BROWSER_FIREFOX); | |
259 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
260 BROWSER_FIREFOX, true, false, | |
261 BROWSER_UNKNOWN); | |
262 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
263 BROWSER_FIREFOX, true, true, | |
264 BROWSER_FIREFOX); | |
265 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
266 BROWSER_FIREFOX, false, false, | |
267 BROWSER_IE); | |
268 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
269 BROWSER_FIREFOX, false, true, | |
270 BROWSER_IE); | |
271 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
272 BROWSER_FIREFOX, true, false, | |
273 BROWSER_IE); | |
274 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
275 BROWSER_FIREFOX, true, true, | |
276 BROWSER_IE); | |
277 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
278 BROWSER_FIREFOX, false, false, | |
279 BROWSER_IE); | |
280 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
281 BROWSER_FIREFOX, false, true, | |
282 BROWSER_IE); | |
283 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
284 BROWSER_FIREFOX, true, false, | |
285 BROWSER_IE); | |
286 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
287 BROWSER_FIREFOX, true, true, | |
288 BROWSER_IE); | |
289 } | |
290 | |
291 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeIE_DefaultChrome) { | |
292 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
293 BROWSER_CHROME, false, false, | |
294 BROWSER_CHROME); | |
295 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
296 BROWSER_CHROME, false, true, | |
297 BROWSER_CHROME); | |
298 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
299 BROWSER_CHROME, true, false, | |
300 BROWSER_UNKNOWN); | |
301 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
302 BROWSER_CHROME, true, true, | |
303 BROWSER_CHROME); | |
304 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
305 BROWSER_CHROME, false, false, | |
306 BROWSER_CHROME); | |
307 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
308 BROWSER_CHROME, false, true, | |
309 BROWSER_CHROME); | |
310 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
311 BROWSER_CHROME, true, false, | |
312 BROWSER_UNKNOWN); | |
313 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
314 BROWSER_CHROME, true, true, | |
315 BROWSER_CHROME); | |
316 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
317 BROWSER_CHROME, false, false, | |
318 BROWSER_IE); | |
319 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
320 BROWSER_CHROME, false, true, | |
321 BROWSER_IE); | |
322 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
323 BROWSER_CHROME, true, false, | |
324 BROWSER_IE); | |
325 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
326 BROWSER_CHROME, true, true, | |
327 BROWSER_IE); | |
328 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
329 BROWSER_CHROME, false, false, | |
330 BROWSER_IE); | |
331 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
332 BROWSER_CHROME, false, true, | |
333 BROWSER_IE); | |
334 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
335 BROWSER_CHROME, true, false, | |
336 BROWSER_IE); | |
337 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
338 BROWSER_CHROME, true, true, | |
339 BROWSER_IE); | |
340 } | |
341 | |
342 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeIE_DefaultUnknown) { | |
343 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
344 BROWSER_UNKNOWN, false, false, | |
345 BROWSER_UNKNOWN); | |
346 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
347 BROWSER_UNKNOWN, false, true, | |
348 BROWSER_UNKNOWN); | |
349 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
350 BROWSER_UNKNOWN, true, false, | |
351 BROWSER_UNKNOWN); | |
352 TestGetBrowserToRestart(BROWSER_IE, false, false, | |
353 BROWSER_UNKNOWN, true, true, | |
354 BROWSER_UNKNOWN); | |
355 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
356 BROWSER_UNKNOWN, false, false, | |
357 BROWSER_UNKNOWN); | |
358 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
359 BROWSER_UNKNOWN, false, true, | |
360 BROWSER_UNKNOWN); | |
361 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
362 BROWSER_UNKNOWN, true, false, | |
363 BROWSER_UNKNOWN); | |
364 TestGetBrowserToRestart(BROWSER_IE, false, true, | |
365 BROWSER_UNKNOWN, true, true, | |
366 BROWSER_UNKNOWN); | |
367 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
368 BROWSER_UNKNOWN, false, false, | |
369 BROWSER_IE); | |
370 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
371 BROWSER_UNKNOWN, false, true, | |
372 BROWSER_IE); | |
373 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
374 BROWSER_UNKNOWN, true, false, | |
375 BROWSER_IE); | |
376 TestGetBrowserToRestart(BROWSER_IE, true, false, | |
377 BROWSER_UNKNOWN, true, true, | |
378 BROWSER_IE); | |
379 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
380 BROWSER_UNKNOWN, false, false, | |
381 BROWSER_IE); | |
382 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
383 BROWSER_UNKNOWN, false, true, | |
384 BROWSER_IE); | |
385 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
386 BROWSER_UNKNOWN, true, false, | |
387 BROWSER_IE); | |
388 TestGetBrowserToRestart(BROWSER_IE, true, true, | |
389 BROWSER_UNKNOWN, true, true, | |
390 BROWSER_IE); | |
391 } | |
392 | |
393 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeFirefox_DefaultIE) { | |
394 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
395 BROWSER_IE, false, false, | |
396 BROWSER_IE); | |
397 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
398 BROWSER_IE, false, true, | |
399 BROWSER_IE); | |
400 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
401 BROWSER_IE, true, false, | |
402 BROWSER_IE); | |
403 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
404 BROWSER_IE, true, true, | |
405 BROWSER_IE); | |
406 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
407 BROWSER_IE, false, false, | |
408 BROWSER_IE); | |
409 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
410 BROWSER_IE, false, true, | |
411 BROWSER_IE); | |
412 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
413 BROWSER_IE, true, false, | |
414 BROWSER_IE); | |
415 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
416 BROWSER_IE, true, true, | |
417 BROWSER_IE); | |
418 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
419 BROWSER_IE, false, false, | |
420 BROWSER_UNKNOWN); | |
421 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
422 BROWSER_IE, false, true, | |
423 BROWSER_UNKNOWN); | |
424 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
425 BROWSER_IE, true, false, | |
426 BROWSER_UNKNOWN); | |
427 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
428 BROWSER_IE, true, true, | |
429 BROWSER_UNKNOWN); | |
430 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
431 BROWSER_IE, false, false, | |
432 BROWSER_FIREFOX); | |
433 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
434 BROWSER_IE, false, true, | |
435 BROWSER_FIREFOX); | |
436 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
437 BROWSER_IE, true, false, | |
438 BROWSER_FIREFOX); | |
439 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
440 BROWSER_IE, true, true, | |
441 BROWSER_FIREFOX); | |
442 } | |
443 | |
444 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeFirefox_DefaultFirefox) { | |
445 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
446 BROWSER_FIREFOX, false, false, | |
447 BROWSER_FIREFOX); | |
448 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
449 BROWSER_FIREFOX, false, true, | |
450 BROWSER_FIREFOX); | |
451 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
452 BROWSER_FIREFOX, true, false, | |
453 BROWSER_UNKNOWN); | |
454 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
455 BROWSER_FIREFOX, true, true, | |
456 BROWSER_FIREFOX); | |
457 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
458 BROWSER_FIREFOX, false, false, | |
459 BROWSER_FIREFOX); | |
460 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
461 BROWSER_FIREFOX, false, true, | |
462 BROWSER_FIREFOX); | |
463 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
464 BROWSER_FIREFOX, true, false, | |
465 BROWSER_UNKNOWN); | |
466 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
467 BROWSER_FIREFOX, true, true, | |
468 BROWSER_FIREFOX); | |
469 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
470 BROWSER_FIREFOX, false, false, | |
471 BROWSER_UNKNOWN); | |
472 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
473 BROWSER_FIREFOX, false, true, | |
474 BROWSER_UNKNOWN); | |
475 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
476 BROWSER_FIREFOX, true, false, | |
477 BROWSER_UNKNOWN); | |
478 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
479 BROWSER_FIREFOX, true, true, | |
480 BROWSER_UNKNOWN); | |
481 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
482 BROWSER_FIREFOX, false, false, | |
483 BROWSER_FIREFOX); | |
484 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
485 BROWSER_FIREFOX, false, true, | |
486 BROWSER_FIREFOX); | |
487 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
488 BROWSER_FIREFOX, true, false, | |
489 BROWSER_FIREFOX); | |
490 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
491 BROWSER_FIREFOX, true, true, | |
492 BROWSER_FIREFOX); | |
493 } | |
494 | |
495 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeFirefox_DefaultChrome) { | |
496 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
497 BROWSER_CHROME, false, false, | |
498 BROWSER_CHROME); | |
499 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
500 BROWSER_CHROME, false, true, | |
501 BROWSER_CHROME); | |
502 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
503 BROWSER_CHROME, true, false, | |
504 BROWSER_UNKNOWN); | |
505 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
506 BROWSER_CHROME, true, true, | |
507 BROWSER_CHROME); | |
508 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
509 BROWSER_CHROME, false, false, | |
510 BROWSER_CHROME); | |
511 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
512 BROWSER_CHROME, false, true, | |
513 BROWSER_CHROME); | |
514 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
515 BROWSER_CHROME, true, false, | |
516 BROWSER_UNKNOWN); | |
517 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
518 BROWSER_CHROME, true, true, | |
519 BROWSER_CHROME); | |
520 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
521 BROWSER_CHROME, false, false, | |
522 BROWSER_UNKNOWN); | |
523 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
524 BROWSER_CHROME, false, true, | |
525 BROWSER_UNKNOWN); | |
526 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
527 BROWSER_CHROME, true, false, | |
528 BROWSER_UNKNOWN); | |
529 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
530 BROWSER_CHROME, true, true, | |
531 BROWSER_UNKNOWN); | |
532 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
533 BROWSER_CHROME, false, false, | |
534 BROWSER_FIREFOX); | |
535 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
536 BROWSER_CHROME, false, true, | |
537 BROWSER_FIREFOX); | |
538 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
539 BROWSER_CHROME, true, false, | |
540 BROWSER_FIREFOX); | |
541 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
542 BROWSER_CHROME, true, true, | |
543 BROWSER_FIREFOX); | |
544 } | |
545 | |
546 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeFirefox_DefaultUnknown) { | |
547 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
548 BROWSER_UNKNOWN, false, false, | |
549 BROWSER_UNKNOWN); | |
550 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
551 BROWSER_UNKNOWN, false, true, | |
552 BROWSER_UNKNOWN); | |
553 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
554 BROWSER_UNKNOWN, true, false, | |
555 BROWSER_UNKNOWN); | |
556 TestGetBrowserToRestart(BROWSER_FIREFOX, false, false, | |
557 BROWSER_UNKNOWN, true, true, | |
558 BROWSER_UNKNOWN); | |
559 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
560 BROWSER_UNKNOWN, false, false, | |
561 BROWSER_UNKNOWN); | |
562 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
563 BROWSER_UNKNOWN, false, true, | |
564 BROWSER_UNKNOWN); | |
565 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
566 BROWSER_UNKNOWN, true, false, | |
567 BROWSER_UNKNOWN); | |
568 TestGetBrowserToRestart(BROWSER_FIREFOX, false, true, | |
569 BROWSER_UNKNOWN, true, true, | |
570 BROWSER_UNKNOWN); | |
571 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
572 BROWSER_UNKNOWN, false, false, | |
573 BROWSER_UNKNOWN); | |
574 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
575 BROWSER_UNKNOWN, false, true, | |
576 BROWSER_UNKNOWN); | |
577 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
578 BROWSER_UNKNOWN, true, false, | |
579 BROWSER_UNKNOWN); | |
580 TestGetBrowserToRestart(BROWSER_FIREFOX, true, false, | |
581 BROWSER_UNKNOWN, true, true, | |
582 BROWSER_UNKNOWN); | |
583 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
584 BROWSER_UNKNOWN, false, false, | |
585 BROWSER_FIREFOX); | |
586 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
587 BROWSER_UNKNOWN, false, true, | |
588 BROWSER_FIREFOX); | |
589 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
590 BROWSER_UNKNOWN, true, false, | |
591 BROWSER_FIREFOX); | |
592 TestGetBrowserToRestart(BROWSER_FIREFOX, true, true, | |
593 BROWSER_UNKNOWN, true, true, | |
594 BROWSER_FIREFOX); | |
595 } | |
596 | |
597 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeChrome_DefaultIE) { | |
598 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
599 BROWSER_IE, false, false, | |
600 BROWSER_IE); | |
601 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
602 BROWSER_IE, false, true, | |
603 BROWSER_IE); | |
604 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
605 BROWSER_IE, true, false, | |
606 BROWSER_IE); | |
607 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
608 BROWSER_IE, true, true, | |
609 BROWSER_IE); | |
610 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
611 BROWSER_IE, false, false, | |
612 BROWSER_IE); | |
613 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
614 BROWSER_IE, false, true, | |
615 BROWSER_IE); | |
616 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
617 BROWSER_IE, true, false, | |
618 BROWSER_IE); | |
619 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
620 BROWSER_IE, true, true, | |
621 BROWSER_IE); | |
622 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
623 BROWSER_IE, false, false, | |
624 BROWSER_UNKNOWN); | |
625 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
626 BROWSER_IE, false, true, | |
627 BROWSER_UNKNOWN); | |
628 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
629 BROWSER_IE, true, false, | |
630 BROWSER_UNKNOWN); | |
631 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
632 BROWSER_IE, true, true, | |
633 BROWSER_UNKNOWN); | |
634 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
635 BROWSER_IE, false, false, | |
636 BROWSER_CHROME); | |
637 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
638 BROWSER_IE, false, true, | |
639 BROWSER_CHROME); | |
640 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
641 BROWSER_IE, true, false, | |
642 BROWSER_CHROME); | |
643 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
644 BROWSER_IE, true, true, | |
645 BROWSER_CHROME); | |
646 } | |
647 | |
648 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeChrome_DefaultFirefox) { | |
649 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
650 BROWSER_FIREFOX, false, false, | |
651 BROWSER_FIREFOX); | |
652 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
653 BROWSER_FIREFOX, false, true, | |
654 BROWSER_FIREFOX); | |
655 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
656 BROWSER_FIREFOX, true, false, | |
657 BROWSER_UNKNOWN); | |
658 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
659 BROWSER_FIREFOX, true, true, | |
660 BROWSER_FIREFOX); | |
661 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
662 BROWSER_FIREFOX, false, false, | |
663 BROWSER_FIREFOX); | |
664 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
665 BROWSER_FIREFOX, false, true, | |
666 BROWSER_FIREFOX); | |
667 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
668 BROWSER_FIREFOX, true, false, | |
669 BROWSER_UNKNOWN); | |
670 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
671 BROWSER_FIREFOX, true, true, | |
672 BROWSER_FIREFOX); | |
673 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
674 BROWSER_FIREFOX, false, false, | |
675 BROWSER_UNKNOWN); | |
676 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
677 BROWSER_FIREFOX, false, true, | |
678 BROWSER_UNKNOWN); | |
679 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
680 BROWSER_FIREFOX, true, false, | |
681 BROWSER_UNKNOWN); | |
682 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
683 BROWSER_FIREFOX, true, true, | |
684 BROWSER_UNKNOWN); | |
685 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
686 BROWSER_FIREFOX, false, false, | |
687 BROWSER_CHROME); | |
688 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
689 BROWSER_FIREFOX, false, true, | |
690 BROWSER_CHROME); | |
691 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
692 BROWSER_FIREFOX, true, false, | |
693 BROWSER_CHROME); | |
694 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
695 BROWSER_FIREFOX, true, true, | |
696 BROWSER_CHROME); | |
697 } | |
698 | |
699 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeChrome_DefaultChrome) { | |
700 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
701 BROWSER_CHROME, false, false, | |
702 BROWSER_CHROME); | |
703 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
704 BROWSER_CHROME, false, true, | |
705 BROWSER_CHROME); | |
706 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
707 BROWSER_CHROME, true, false, | |
708 BROWSER_UNKNOWN); | |
709 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
710 BROWSER_CHROME, true, true, | |
711 BROWSER_CHROME); | |
712 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
713 BROWSER_CHROME, false, false, | |
714 BROWSER_CHROME); | |
715 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
716 BROWSER_CHROME, false, true, | |
717 BROWSER_CHROME); | |
718 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
719 BROWSER_CHROME, true, false, | |
720 BROWSER_UNKNOWN); | |
721 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
722 BROWSER_CHROME, true, true, | |
723 BROWSER_CHROME); | |
724 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
725 BROWSER_CHROME, false, false, | |
726 BROWSER_UNKNOWN); | |
727 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
728 BROWSER_CHROME, false, true, | |
729 BROWSER_UNKNOWN); | |
730 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
731 BROWSER_CHROME, true, false, | |
732 BROWSER_UNKNOWN); | |
733 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
734 BROWSER_CHROME, true, true, | |
735 BROWSER_UNKNOWN); | |
736 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
737 BROWSER_CHROME, false, false, | |
738 BROWSER_CHROME); | |
739 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
740 BROWSER_CHROME, false, true, | |
741 BROWSER_CHROME); | |
742 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
743 BROWSER_CHROME, true, false, | |
744 BROWSER_CHROME); | |
745 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
746 BROWSER_CHROME, true, true, | |
747 BROWSER_CHROME); | |
748 } | |
749 | |
750 TEST(GoopdateUtilsTest, GetBrowserToRestart_TypeChrome_DefaultUnknown) { | |
751 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
752 BROWSER_UNKNOWN, false, false, | |
753 BROWSER_UNKNOWN); | |
754 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
755 BROWSER_UNKNOWN, false, true, | |
756 BROWSER_UNKNOWN); | |
757 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
758 BROWSER_UNKNOWN, true, false, | |
759 BROWSER_UNKNOWN); | |
760 TestGetBrowserToRestart(BROWSER_CHROME, false, false, | |
761 BROWSER_UNKNOWN, true, true, | |
762 BROWSER_UNKNOWN); | |
763 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
764 BROWSER_UNKNOWN, false, false, | |
765 BROWSER_UNKNOWN); | |
766 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
767 BROWSER_UNKNOWN, false, true, | |
768 BROWSER_UNKNOWN); | |
769 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
770 BROWSER_UNKNOWN, true, false, | |
771 BROWSER_UNKNOWN); | |
772 TestGetBrowserToRestart(BROWSER_CHROME, false, true, | |
773 BROWSER_UNKNOWN, true, true, | |
774 BROWSER_UNKNOWN); | |
775 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
776 BROWSER_UNKNOWN, false, false, | |
777 BROWSER_UNKNOWN); | |
778 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
779 BROWSER_UNKNOWN, false, true, | |
780 BROWSER_UNKNOWN); | |
781 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
782 BROWSER_UNKNOWN, true, false, | |
783 BROWSER_UNKNOWN); | |
784 TestGetBrowserToRestart(BROWSER_CHROME, true, false, | |
785 BROWSER_UNKNOWN, true, true, | |
786 BROWSER_UNKNOWN); | |
787 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
788 BROWSER_UNKNOWN, false, false, | |
789 BROWSER_CHROME); | |
790 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
791 BROWSER_UNKNOWN, false, true, | |
792 BROWSER_CHROME); | |
793 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
794 BROWSER_UNKNOWN, true, false, | |
795 BROWSER_CHROME); | |
796 TestGetBrowserToRestart(BROWSER_CHROME, true, true, | |
797 BROWSER_UNKNOWN, true, true, | |
798 BROWSER_CHROME); | |
799 } | |
800 | |
801 TEST(GoopdateUtilsTest, ConvertStringToBrowserType) { | |
802 BrowserType type = BROWSER_UNKNOWN; | |
803 ASSERT_SUCCEEDED(ConvertStringToBrowserType(_T("0"), &type)); | |
804 ASSERT_EQ(BROWSER_UNKNOWN, type); | |
805 | |
806 ASSERT_SUCCEEDED(ConvertStringToBrowserType(_T("1"), &type)); | |
807 ASSERT_EQ(BROWSER_DEFAULT, type); | |
808 | |
809 ASSERT_SUCCEEDED(ConvertStringToBrowserType(_T("2"), &type)); | |
810 ASSERT_EQ(BROWSER_IE, type); | |
811 | |
812 ASSERT_SUCCEEDED(ConvertStringToBrowserType(_T("3"), &type)); | |
813 ASSERT_EQ(BROWSER_FIREFOX, type); | |
814 | |
815 ASSERT_SUCCEEDED(ConvertStringToBrowserType(_T("4"), &type)); | |
816 ASSERT_EQ(BROWSER_CHROME, type); | |
817 | |
818 ASSERT_FAILED(ConvertStringToBrowserType(_T("5"), &type)); | |
819 ASSERT_FAILED(ConvertStringToBrowserType(_T("asdf"), &type)); | |
820 ASSERT_FAILED(ConvertStringToBrowserType(_T("234"), &type)); | |
821 ASSERT_FAILED(ConvertStringToBrowserType(_T("-1"), &type)); | |
822 } | |
823 | |
824 TEST(GoopdateUtilsTest, RedirectHKCRTest) { | |
825 RegKey key; | |
826 Cleanup(); | |
827 | |
828 if (vista_util::IsUserAdmin()) { | |
829 // Only run this part of the test for Admins, because non-admins cannot | |
830 // write to HKLM. | |
831 | |
832 // Without redirection, a HKCR write should write HKLM\Software\Classes, | |
833 // assuming that the key does not already exist in HKCU. | |
834 ASSERT_SUCCEEDED(key.Create(hkcr_key_name)); | |
835 ASSERT_TRUE(RegKey::HasKey(hklm_key_name)); | |
836 ASSERT_FALSE(RegKey::HasKey(hkcu_key_name)); | |
837 | |
838 Cleanup(); | |
839 | |
840 ASSERT_SUCCEEDED(RedirectHKCR(true)); | |
841 | |
842 // With HKLM redirection, a HKCR write should write HKLM\Software\Classes. | |
843 ASSERT_SUCCEEDED(key.Create(hkcr_key_name)); | |
844 ASSERT_TRUE(RegKey::HasKey(hklm_key_name)); | |
845 ASSERT_FALSE(RegKey::HasKey(hkcu_key_name)); | |
846 | |
847 Cleanup(); | |
848 } else { | |
849 std::wcout << _T("\tPart of this test did not run because the user ") | |
850 _T("is not an admin.") << std::endl; | |
851 } | |
852 | |
853 ASSERT_SUCCEEDED(RedirectHKCR(false)); | |
854 | |
855 // With HKCU redirection, a HKCR write should write HKCU\Software\Classes. | |
856 ASSERT_SUCCEEDED(key.Create(hkcr_key_name)); | |
857 ASSERT_FALSE(RegKey::HasKey(hklm_key_name)); | |
858 ASSERT_TRUE(RegKey::HasKey(hkcu_key_name)); | |
859 | |
860 ASSERT_SUCCEEDED(RemoveRedirectHKCR()); | |
861 | |
862 if (vista_util::IsUserAdmin()) { | |
863 // Without redirection, the following HKCR writes should write | |
864 // HKCU\Software\Classes. | |
865 // This is because the key already exists in HKCU from the writes above. | |
866 ASSERT_SUCCEEDED(key.Create(hkcr_key_name)); | |
867 ASSERT_EQ(user_info::IsRunningAsSystem(), RegKey::HasKey(hklm_key_name)); | |
868 ASSERT_TRUE(RegKey::HasKey(hkcu_key_name)); | |
869 } else { | |
870 std::wcout << _T("\tPart of this test did not run because the user ") | |
871 _T("is not an admin.") << std::endl; | |
872 } | |
873 | |
874 Cleanup(); | |
875 } | |
876 | |
877 TEST(GoopdateUtilsTest, GetOSInfo) { | |
878 CString os_version; | |
879 CString service_pack; | |
880 EXPECT_SUCCEEDED(GetOSInfo(&os_version, &service_pack)); | |
881 EXPECT_TRUE(!os_version.IsEmpty()); | |
882 } | |
883 | |
884 class GoopdateUtilsRegistryProtectedTest : public testing::Test { | |
885 protected: | |
886 GoopdateUtilsRegistryProtectedTest() | |
887 : hive_override_key_name_(kRegistryHiveOverrideRoot) { | |
888 } | |
889 | |
890 CString hive_override_key_name_; | |
891 | |
892 virtual void SetUp() { | |
893 RegKey::DeleteKey(hive_override_key_name_, true); | |
894 OverrideRegistryHives(hive_override_key_name_); | |
895 } | |
896 | |
897 virtual void TearDown() { | |
898 RestoreRegistryHives(); | |
899 ASSERT_SUCCEEDED(RegKey::DeleteKey(hive_override_key_name_, true)); | |
900 } | |
901 }; | |
902 | |
903 class GoopdateUtilsRegistryProtectedBooleanTest | |
904 : public ::testing::TestWithParam<bool> { | |
905 protected: | |
906 GoopdateUtilsRegistryProtectedBooleanTest() | |
907 : hive_override_key_name_(kRegistryHiveOverrideRoot) { | |
908 } | |
909 | |
910 CString hive_override_key_name_; | |
911 | |
912 virtual void SetUp() { | |
913 RegKey::DeleteKey(hive_override_key_name_, true); | |
914 OverrideRegistryHives(hive_override_key_name_); | |
915 } | |
916 | |
917 virtual void TearDown() { | |
918 RestoreRegistryHives(); | |
919 ASSERT_SUCCEEDED(RegKey::DeleteKey(hive_override_key_name_, true)); | |
920 } | |
921 }; | |
922 | |
923 // Some methods used by goopdate_utils rely on registry entries that are | |
924 // overridden in the registry, so we need to write it. | |
925 class GoopdateUtilsRegistryProtectedWithMachineFolderPathsTest | |
926 : public GoopdateUtilsRegistryProtectedTest { | |
927 protected: | |
928 virtual void SetUp() { | |
929 // The tests start GoogleUpdate processes running as user and these | |
930 // processes need the following registry value. | |
931 ASSERT_SUCCEEDED(RegKey::SetValue(USER_REG_UPDATE, | |
932 kRegValueInstalledVersion, | |
933 GetVersionString())); | |
934 | |
935 GoopdateUtilsRegistryProtectedTest::SetUp(); | |
936 | |
937 // Creates a registry value for the Windows shell functions to work when | |
938 // the registry hives are redirected. | |
939 const TCHAR kWindowsCurrentVersionKeyPath[] = | |
940 _T("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion"); | |
941 const TCHAR kProgramFilesDirValueName[] = _T("ProgramFilesDir"); | |
942 const TCHAR kProgramFilesPath[] = _T("C:\\Program Files"); | |
943 ASSERT_SUCCEEDED(RegKey::SetValue(kWindowsCurrentVersionKeyPath, | |
944 kProgramFilesDirValueName, | |
945 kProgramFilesPath)); | |
946 } | |
947 }; | |
948 | |
949 // Some methods used by goopdate_utils rely on registry entries that are | |
950 // overridden in the registry, so we need to write it. | |
951 class GoopdateUtilsRegistryProtectedWithUserFolderPathsTest | |
952 : public GoopdateUtilsRegistryProtectedTest { | |
953 protected: | |
954 virtual void SetUp() { | |
955 const TCHAR kUserShellKeyPath[] = | |
956 _T("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\") | |
957 _T("User Shell Folders"); | |
958 const TCHAR kLocalAppDataValueDirName[] = _T("Local AppData"); | |
959 const TCHAR kLocalAppDataPath[] = | |
960 _T("%USERPROFILE%\\Local Settings\\Application Data"); | |
961 | |
962 GoopdateUtilsRegistryProtectedTest::SetUp(); | |
963 ASSERT_SUCCEEDED(RegKey::SetValueExpandSZ(kUserShellKeyPath, | |
964 kLocalAppDataValueDirName, | |
965 kLocalAppDataPath)); | |
966 } | |
967 }; | |
968 | |
969 class VersionProtectedTest : public RegistryProtectedTest { | |
970 protected: | |
971 VersionProtectedTest() | |
972 : RegistryProtectedTest(), | |
973 module_version_(GetVersion()) { | |
974 } | |
975 | |
976 virtual void SetUp() { | |
977 RegistryProtectedTest::SetUp(); | |
978 InitializeVersion(kFakeVersion); | |
979 } | |
980 | |
981 virtual void TearDown() { | |
982 InitializeVersion(module_version_); | |
983 RegistryProtectedTest::TearDown(); | |
984 } | |
985 | |
986 const ULONGLONG module_version_; | |
987 static const ULONGLONG kFakeVersion = 0x0005000600070008; | |
988 }; | |
989 | |
990 // pv should be ignored. | |
991 TEST_F(GoopdateUtilsRegistryProtectedWithMachineFolderPathsTest, | |
992 BuildGoogleUpdateExePath_MachineVersionFound) { | |
993 ASSERT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_CLIENTS_GOOPDATE, | |
994 _T("pv"), | |
995 _T("1.2.3.4"))); | |
996 | |
997 CString path = BuildGoogleUpdateExePath(true); | |
998 CString program_files_path; | |
999 EXPECT_SUCCEEDED(GetFolderPath(CSIDL_PROGRAM_FILES, &program_files_path)); | |
1000 EXPECT_STREQ(program_files_path + _T("\\") + SHORT_COMPANY_NAME + | |
1001 _T("\\") + PRODUCT_NAME + _T("\\GoogleUpdate.exe"), | |
1002 path); | |
1003 } | |
1004 | |
1005 TEST_F(GoopdateUtilsRegistryProtectedWithMachineFolderPathsTest, | |
1006 BuildGoogleUpdateExePath_MachineVersionNotFound) { | |
1007 // Test when the key doesn't exist. | |
1008 CString path = BuildGoogleUpdateExePath(true); | |
1009 CString program_files_path; | |
1010 EXPECT_SUCCEEDED(GetFolderPath(CSIDL_PROGRAM_FILES, &program_files_path)); | |
1011 EXPECT_STREQ(program_files_path + _T("\\") + SHORT_COMPANY_NAME + | |
1012 _T("\\") + PRODUCT_NAME + _T("\\GoogleUpdate.exe"), | |
1013 path); | |
1014 | |
1015 // Test when the key exists but the value doesn't. | |
1016 ASSERT_SUCCEEDED(RegKey::CreateKey(MACHINE_REG_CLIENTS_GOOPDATE)); | |
1017 path = BuildGoogleUpdateExePath(true); | |
1018 EXPECT_STREQ(program_files_path + _T("\\") + SHORT_COMPANY_NAME + | |
1019 _T("\\") + PRODUCT_NAME + _T("\\GoogleUpdate.exe"), | |
1020 path); | |
1021 } | |
1022 | |
1023 // pv should be ignored. | |
1024 TEST_F(GoopdateUtilsRegistryProtectedWithUserFolderPathsTest, | |
1025 BuildGoogleUpdateExePath_UserVersionFound) { | |
1026 ASSERT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENTS_GOOPDATE, | |
1027 _T("pv"), | |
1028 _T("1.2.3.4"))); | |
1029 | |
1030 CString path = BuildGoogleUpdateExePath(false); | |
1031 | |
1032 CString user_appdata; | |
1033 EXPECT_SUCCEEDED(GetFolderPath(CSIDL_LOCAL_APPDATA, &user_appdata)); | |
1034 CString expected_path; | |
1035 expected_path.Format(_T("%s\\") SHORT_COMPANY_NAME _T("\\") | |
1036 PRODUCT_NAME _T("\\GoogleUpdate.exe"), | |
1037 user_appdata); | |
1038 EXPECT_STREQ(expected_path, path); | |
1039 } | |
1040 | |
1041 TEST_F(GoopdateUtilsRegistryProtectedWithUserFolderPathsTest, | |
1042 BuildGoogleUpdateExePath_UserVersionNotFound) { | |
1043 CString user_appdata; | |
1044 EXPECT_SUCCEEDED(GetFolderPath(CSIDL_LOCAL_APPDATA, &user_appdata)); | |
1045 CString expected_path; | |
1046 expected_path.Format(_T("%s\\") SHORT_COMPANY_NAME _T("\\") | |
1047 PRODUCT_NAME _T("\\GoogleUpdate.exe"), | |
1048 user_appdata); | |
1049 | |
1050 // Test when the key doesn't exist. | |
1051 CString path = BuildGoogleUpdateExePath(false); | |
1052 EXPECT_STREQ(expected_path, path); | |
1053 | |
1054 // Test when the key exists but the value doesn't. | |
1055 ASSERT_SUCCEEDED(RegKey::CreateKey(USER_REG_CLIENTS_GOOPDATE)); | |
1056 path = BuildGoogleUpdateExePath(false); | |
1057 EXPECT_STREQ(expected_path, path); | |
1058 } | |
1059 | |
1060 // The version is no longer used by StartGoogleUpdateWithArgs, so the return | |
1061 // value depends on whether program_files\Google\Update\GoogleUpdate.exe exists. | |
1062 // The arguments must be valid to avoid displaying invalid command line error. | |
1063 TEST_F(GoopdateUtilsRegistryProtectedWithMachineFolderPathsTest, | |
1064 StartGoogleUpdateWithArgs_MachineVersionVersionDoesNotExist) { | |
1065 ASSERT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_CLIENTS_GOOPDATE, | |
1066 _T("pv"), | |
1067 _T("1.2.3.4"))); | |
1068 const TCHAR* kArgs = _T("/cr"); | |
1069 HRESULT hr = StartGoogleUpdateWithArgs(true, kArgs, NULL); | |
1070 EXPECT_TRUE(S_OK == hr || HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr); | |
1071 } | |
1072 | |
1073 // The version is no longer used by StartGoogleUpdateWithArgs, so the return | |
1074 // value depends on whether <user_folder>\Google\Update\GoogleUpdate.exe exists. | |
1075 // The arguments must be valid to avoid displaying invalid command line error. | |
1076 TEST_F(GoopdateUtilsRegistryProtectedWithUserFolderPathsTest, | |
1077 StartGoogleUpdateWithArgs_UserVersionVersionDoesNotExist) { | |
1078 ASSERT_SUCCEEDED(RegKey::SetValue(USER_REG_CLIENTS_GOOPDATE, | |
1079 _T("pv"), | |
1080 _T("1.2.3.4"))); | |
1081 const TCHAR* kArgs = _T("/cr"); | |
1082 HRESULT hr = StartGoogleUpdateWithArgs(false, kArgs, NULL); | |
1083 EXPECT_TRUE(S_OK == hr || HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr); | |
1084 } | |
1085 | |
1086 TEST(GoopdateUtilsTest, BuildInstallDirectory_Machine) { | |
1087 const CPath dir = BuildInstallDirectory(true, _T("1.2.3.0")); | |
1088 CString program_files_path; | |
1089 EXPECT_SUCCEEDED(GetFolderPath(CSIDL_PROGRAM_FILES, &program_files_path)); | |
1090 EXPECT_STREQ(program_files_path + _T("\\") + SHORT_COMPANY_NAME + | |
1091 _T("\\") + PRODUCT_NAME + _T("\\1.2.3.0"), dir); | |
1092 } | |
1093 | |
1094 TEST(GoopdateUtilsTest, BuildInstallDirectory_User) { | |
1095 CPath expected_path(GetGoogleUpdateUserPath()); | |
1096 expected_path.Append(_T("4.5.6.7")); | |
1097 EXPECT_STREQ(expected_path, | |
1098 BuildInstallDirectory(false, _T("4.5.6.7"))); | |
1099 } | |
1100 | |
1101 TEST(GoopdateUtilsTest, ConvertBrowserTypeToString) { | |
1102 for (int i = 0; i < BROWSER_MAX; ++i) { | |
1103 CString str_type = ConvertBrowserTypeToString( | |
1104 static_cast<BrowserType>(i)); | |
1105 BrowserType type = BROWSER_UNKNOWN; | |
1106 ASSERT_HRESULT_SUCCEEDED( | |
1107 ConvertStringToBrowserType(str_type, &type)); | |
1108 ASSERT_EQ(static_cast<int>(type), i); | |
1109 } | |
1110 } | |
1111 | |
1112 TEST(GoopdateUtilsTest, UniqueEventInEnvironment_User) { | |
1113 const TCHAR* kEnvVarName = _T("SOME_ENV_VAR_FOR_TEST"); | |
1114 scoped_event created_event; | |
1115 scoped_event opened_event; | |
1116 | |
1117 ASSERT_HRESULT_SUCCEEDED(CreateUniqueEventInEnvironment( | |
1118 kEnvVarName, | |
1119 false, | |
1120 address(created_event))); | |
1121 ASSERT_TRUE(created_event); | |
1122 EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(get(created_event), 0)); | |
1123 | |
1124 TCHAR event_name[MAX_PATH] = {0}; | |
1125 EXPECT_TRUE( | |
1126 ::GetEnvironmentVariable(kEnvVarName, event_name, arraysize(event_name))); | |
1127 | |
1128 ASSERT_HRESULT_SUCCEEDED(OpenUniqueEventFromEnvironment( | |
1129 kEnvVarName, | |
1130 false, | |
1131 address(opened_event))); | |
1132 ASSERT_TRUE(opened_event); | |
1133 | |
1134 EXPECT_TRUE(::SetEvent(get(opened_event))); | |
1135 EXPECT_EQ(WAIT_OBJECT_0, ::WaitForSingleObject(get(created_event), 0)); | |
1136 | |
1137 EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, NULL)); | |
1138 } | |
1139 | |
1140 TEST(GoopdateUtilsTest, UniqueEventInEnvironment_Machine) { | |
1141 const TCHAR* kEnvVarName = _T("OTHER_ENV_VAR_FOR_TEST"); | |
1142 scoped_event created_event; | |
1143 scoped_event opened_event; | |
1144 TCHAR event_name[MAX_PATH] = {0}; | |
1145 | |
1146 if (!vista_util::IsUserAdmin()) { | |
1147 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_OWNER), | |
1148 CreateUniqueEventInEnvironment(kEnvVarName, | |
1149 true, | |
1150 address(created_event))); | |
1151 EXPECT_FALSE(created_event); | |
1152 | |
1153 EXPECT_FALSE(::GetEnvironmentVariable(kEnvVarName, | |
1154 event_name, | |
1155 arraysize(event_name))); | |
1156 return; | |
1157 } | |
1158 | |
1159 ASSERT_HRESULT_SUCCEEDED(CreateUniqueEventInEnvironment( | |
1160 kEnvVarName, | |
1161 true, | |
1162 address(created_event))); | |
1163 ASSERT_TRUE(created_event); | |
1164 EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(get(created_event), 0)); | |
1165 | |
1166 EXPECT_TRUE( | |
1167 ::GetEnvironmentVariable(kEnvVarName, event_name, arraysize(event_name))); | |
1168 | |
1169 ASSERT_HRESULT_SUCCEEDED(OpenUniqueEventFromEnvironment( | |
1170 kEnvVarName, | |
1171 true, | |
1172 address(opened_event))); | |
1173 ASSERT_TRUE(opened_event); | |
1174 | |
1175 EXPECT_TRUE(::SetEvent(get(opened_event))); | |
1176 EXPECT_EQ(WAIT_OBJECT_0, ::WaitForSingleObject(get(created_event), 0)); | |
1177 | |
1178 EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, NULL)); | |
1179 } | |
1180 | |
1181 TEST(GoopdateUtilsTest, UniqueEventInEnvironment_UserMachineMismatch) { | |
1182 const TCHAR* kEnvVarName = _T("ENV_VAR_FOR_MIXED_TEST"); | |
1183 scoped_event created_event; | |
1184 scoped_event opened_event; | |
1185 | |
1186 ASSERT_HRESULT_SUCCEEDED(CreateUniqueEventInEnvironment( | |
1187 kEnvVarName, | |
1188 false, | |
1189 address(created_event))); | |
1190 ASSERT_TRUE(created_event); | |
1191 EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(get(created_event), 0)); | |
1192 | |
1193 TCHAR event_name[MAX_PATH] = {0}; | |
1194 EXPECT_TRUE( | |
1195 ::GetEnvironmentVariable(kEnvVarName, event_name, arraysize(event_name))); | |
1196 | |
1197 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), | |
1198 OpenUniqueEventFromEnvironment(kEnvVarName, | |
1199 true, | |
1200 address(opened_event))); | |
1201 | |
1202 EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, NULL)); | |
1203 } | |
1204 | |
1205 TEST(GoopdateUtilsTest, OpenUniqueEventFromEnvironment_EnvVarDoesNotExist) { | |
1206 const TCHAR* kEnvVarName = _T("ANOTHER_ENV_VAR_FOR_TEST"); | |
1207 scoped_event opened_event; | |
1208 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_ENVVAR_NOT_FOUND), | |
1209 OpenUniqueEventFromEnvironment(kEnvVarName, | |
1210 false, | |
1211 address(opened_event))); | |
1212 } | |
1213 | |
1214 TEST(GoopdateUtilsTest, OpenUniqueEventFromEnvironment_EventDoesNotExist) { | |
1215 const TCHAR* kEnvVarName = _T("YET_ANOTHER_ENV_VAR_FOR_TEST"); | |
1216 | |
1217 EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, _T("foo"))); | |
1218 | |
1219 scoped_event opened_event; | |
1220 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), | |
1221 OpenUniqueEventFromEnvironment(kEnvVarName, | |
1222 false, | |
1223 address(opened_event))); | |
1224 | |
1225 EXPECT_TRUE(::SetEnvironmentVariable(kEnvVarName, NULL)); | |
1226 } | |
1227 | |
1228 | |
1229 CString GetTempFile() { | |
1230 TCHAR temp_path[MAX_PATH] = {0}; | |
1231 TCHAR temp_file[MAX_PATH] = {0}; | |
1232 | |
1233 EXPECT_LT(::GetTempPath(arraysize(temp_path), temp_path), | |
1234 arraysize(temp_path)); | |
1235 EXPECT_NE(0, ::GetTempFileName(temp_path, _T("ut_"), 0, temp_file)); | |
1236 return CString(temp_file); | |
1237 } | |
1238 | |
1239 typedef std::map<CString, CString> StringMap; | |
1240 typedef StringMap::const_iterator StringMapIter; | |
1241 | |
1242 TEST(GoopdateUtilsTest, ReadNameValuePairsFromFileTest_MissingFile) { | |
1243 CString temp_file = GetTempFile(); | |
1244 ::DeleteFile(temp_file); | |
1245 | |
1246 ASSERT_FALSE(File::Exists(temp_file)); | |
1247 | |
1248 StringMap pairs_read; | |
1249 ASSERT_FAILED(ReadNameValuePairsFromFile(temp_file, | |
1250 _T("my_group"), | |
1251 &pairs_read)); | |
1252 ASSERT_EQ(0, pairs_read.size()); | |
1253 } | |
1254 | |
1255 TEST(GoopdateUtilsTest, ReadNameValuePairsFromFileTest_ReadEmpty) { | |
1256 CString temp_file = GetTempFile(); | |
1257 ON_SCOPE_EXIT(::DeleteFile, temp_file.GetString()); | |
1258 File file_write; | |
1259 EXPECT_SUCCEEDED(file_write.Open(temp_file, true, false)); | |
1260 file_write.Close(); | |
1261 | |
1262 StringMap pairs_read; | |
1263 ASSERT_SUCCEEDED(ReadNameValuePairsFromFile(temp_file, | |
1264 _T("my_group"), | |
1265 &pairs_read)); | |
1266 ASSERT_EQ(0, pairs_read.size()); | |
1267 } | |
1268 | |
1269 void ValidateStringMapEquality(const StringMap& expected, | |
1270 const StringMap& actual) { | |
1271 ASSERT_EQ(expected.size(), actual.size()); | |
1272 | |
1273 StringMapIter it_expected = expected.begin(); | |
1274 for (; it_expected != expected.end(); ++it_expected) { | |
1275 StringMapIter it_actual = actual.find(it_expected->first); | |
1276 ASSERT_TRUE(it_actual != actual.end()); | |
1277 ASSERT_STREQ(it_expected->second, it_actual->second); | |
1278 } | |
1279 } | |
1280 | |
1281 TEST(GoopdateUtilsTest, ReadNameValuePairsFromFileTest_ReadOnePair) { | |
1282 CString group = _T("my_group"); | |
1283 | |
1284 StringMap pairs_write; | |
1285 pairs_write[_T("some_name")] = _T("some_value"); | |
1286 | |
1287 CString temp_file = GetTempFile(); | |
1288 ON_SCOPE_EXIT(::DeleteFile, temp_file.GetString()); | |
1289 ASSERT_SUCCEEDED(WriteNameValuePairsToFile(temp_file, group, pairs_write)); | |
1290 ASSERT_TRUE(File::Exists(temp_file)); | |
1291 | |
1292 StringMap pairs_read; | |
1293 ASSERT_SUCCEEDED(ReadNameValuePairsFromFile(temp_file, group, &pairs_read)); | |
1294 | |
1295 ValidateStringMapEquality(pairs_write, pairs_read); | |
1296 } | |
1297 | |
1298 TEST(GoopdateUtilsTest, ReadNameValuePairsFromFileTest_ReadManyPairs) { | |
1299 CString group = _T("my_group"); | |
1300 | |
1301 StringMap pairs_write; | |
1302 const int kCountPairs = 10; | |
1303 for (int i = 1; i <= kCountPairs; ++i) { | |
1304 CString name; | |
1305 name.Format(_T("name%d"), i); | |
1306 CString value; | |
1307 value.Format(_T("value%d"), i); | |
1308 pairs_write[name] = value; | |
1309 } | |
1310 | |
1311 CString temp_file = GetTempFile(); | |
1312 ON_SCOPE_EXIT(::DeleteFile, temp_file.GetString()); | |
1313 ASSERT_SUCCEEDED(WriteNameValuePairsToFile(temp_file, group, pairs_write)); | |
1314 ASSERT_TRUE(File::Exists(temp_file)); | |
1315 | |
1316 StringMap pairs_read; | |
1317 ASSERT_SUCCEEDED(ReadNameValuePairsFromFile(temp_file, group, &pairs_read)); | |
1318 | |
1319 ValidateStringMapEquality(pairs_write, pairs_read); | |
1320 } | |
1321 | |
1322 TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_LegacyVersions) { | |
1323 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.0.0.0"))); | |
1324 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.1.103.9"))); | |
1325 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.1.65535.65535"))); | |
1326 } | |
1327 | |
1328 TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_Omaha2AndLater) { | |
1329 EXPECT_TRUE(IsGoogleUpdate2OrLater(_T("1.2.0.0"))); | |
1330 EXPECT_TRUE(IsGoogleUpdate2OrLater(_T("1.2.0111.2222"))); | |
1331 EXPECT_TRUE(IsGoogleUpdate2OrLater(_T("1.3.456.7890"))); | |
1332 EXPECT_TRUE(IsGoogleUpdate2OrLater(_T("2.0.0.0"))); | |
1333 } | |
1334 | |
1335 TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_VersionZero) { | |
1336 ExpectAsserts expect_asserts; | |
1337 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("0.0.0.0"))); | |
1338 } | |
1339 | |
1340 TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_VersionUpperLimits) { | |
1341 EXPECT_TRUE(IsGoogleUpdate2OrLater(_T("65535.65535.65535.65535"))); | |
1342 | |
1343 ExpectAsserts expect_asserts; | |
1344 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("65536.65536.65536.65536"))); | |
1345 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.2.65536.65536"))); | |
1346 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.1.65536.65536"))); | |
1347 } | |
1348 | |
1349 TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_TooFewElements) { | |
1350 ExpectAsserts expect_asserts; | |
1351 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.1.1"))); | |
1352 } | |
1353 | |
1354 TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_ExtraPeriod) { | |
1355 ExpectAsserts expect_asserts; | |
1356 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.1.2.3."))); | |
1357 } | |
1358 | |
1359 TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_TooManyElements) { | |
1360 ExpectAsserts expect_asserts; | |
1361 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.1.2.3.4"))); | |
1362 } | |
1363 | |
1364 TEST(GoopdateUtilsTest, IsGoogleUpdate2OrLater_Char) { | |
1365 ExpectAsserts expect_asserts; | |
1366 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.B.3.4"))); | |
1367 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.2.3.B"))); | |
1368 EXPECT_FALSE(IsGoogleUpdate2OrLater(_T("1.2.3.9B"))); | |
1369 } | |
1370 | |
1371 TEST(GoopdateUtilsTest, WriteInstallerDataToTempFile) { | |
1372 CStringA utf8_bom; | |
1373 utf8_bom.Format("%c%c%c", 0xEF, 0xBB, 0xBF); | |
1374 | |
1375 std::vector<CString> list_installer_data; | |
1376 list_installer_data.push_back(_T("")); | |
1377 list_installer_data.push_back(_T("hello\n")); | |
1378 list_installer_data.push_back(_T("good bye")); | |
1379 list_installer_data.push_back(_T(" there you\n go ")); | |
1380 list_installer_data.push_back(_T("\"http://foo.bar.org/?q=stuff&h=other\"")); | |
1381 list_installer_data.push_back(_T("foo\r\nbar\n")); | |
1382 list_installer_data.push_back(_T("foo\n\rbar")); // LFCR is not recognized. | |
1383 list_installer_data.push_back(_T("this is a string over 1024 characters. ----
--------------------------01------------------------------02--------------------
----------03------------------------------04------------------------------05----
--------------------------06------------------------------07--------------------
----------08------------------------------09------------------------------10----
--------------------------11------------------------------12--------------------
----------13------------------------------14------------------------------15----
--------------------------16------------------------------17--------------------
----------18------------------------------19------------------------------20----
--------------------------21------------------------------22--------------------
----------23------------------------------24------------------------------25----
--------------------------26------------------------------27--------------------
----------28------------------------------29------------------------------30----
--------------------------31------------------------------32--------------------
----------33------------------------------34------------------------------35----
--------------------------36------------------------------37--------------------
----------38------------------------------39------------------------------40 end
.")); //NOLINT | |
1384 | |
1385 std::vector<CStringA> expected_installer_data; | |
1386 expected_installer_data.push_back(""); | |
1387 expected_installer_data.push_back("hello\n"); | |
1388 expected_installer_data.push_back("good bye"); | |
1389 expected_installer_data.push_back(" there you\n go "); | |
1390 expected_installer_data.push_back("\"http://foo.bar.org/?q=stuff&h=other\""); | |
1391 expected_installer_data.push_back("foo\r\nbar\n"); | |
1392 expected_installer_data.push_back("foo\n\rbar"); | |
1393 expected_installer_data.push_back("this is a string over 1024 characters. ---
---------------------------01------------------------------02-------------------
-----------03------------------------------04------------------------------05---
---------------------------06------------------------------07-------------------
-----------08------------------------------09------------------------------10---
---------------------------11------------------------------12-------------------
-----------13------------------------------14------------------------------15---
---------------------------16------------------------------17-------------------
-----------18------------------------------19------------------------------20---
---------------------------21------------------------------22-------------------
-----------23------------------------------24------------------------------25---
---------------------------26------------------------------27-------------------
-----------28------------------------------29------------------------------30---
---------------------------31------------------------------32-------------------
-----------33------------------------------34------------------------------35---
---------------------------36------------------------------37-------------------
-----------38------------------------------39------------------------------40 en
d."); //NOLINT | |
1394 | |
1395 ASSERT_EQ(expected_installer_data.size(), list_installer_data.size()); | |
1396 | |
1397 for (size_t i = 0; i < list_installer_data.size(); ++i) { | |
1398 CString installer_data = list_installer_data[i]; | |
1399 SCOPED_TRACE(installer_data); | |
1400 | |
1401 CString file_path; | |
1402 HRESULT hr = WriteInstallerDataToTempFile(installer_data, &file_path); | |
1403 ON_SCOPE_EXIT(::DeleteFile, file_path.GetString()); | |
1404 EXPECT_SUCCEEDED(hr); | |
1405 | |
1406 // TODO(omaha): consider eliminating the special case. | |
1407 // WriteInstallerDataToTempFile() will return S_FALSE with "" data. | |
1408 if (S_OK == hr) { | |
1409 File file; | |
1410 const int kBufferLen = 4096; | |
1411 std::vector<byte> data_line(kBufferLen); | |
1412 EXPECT_SUCCEEDED(file.Open(file_path, false, false)); | |
1413 uint32 bytes_read(0); | |
1414 EXPECT_SUCCEEDED(file.Read(data_line.size(), | |
1415 &data_line.front(), | |
1416 &bytes_read)); | |
1417 data_line.resize(bytes_read); | |
1418 data_line.push_back(0); | |
1419 EXPECT_STREQ(utf8_bom + expected_installer_data[i], | |
1420 reinterpret_cast<const char*>(&data_line.front())); | |
1421 EXPECT_SUCCEEDED(file.Close()); | |
1422 } else { | |
1423 EXPECT_TRUE(installer_data.IsEmpty()); | |
1424 } | |
1425 } | |
1426 } | |
1427 | |
1428 TEST_F(GoopdateUtilsRegistryProtectedTest, UpdateLastChecked) { | |
1429 EXPECT_SUCCEEDED(UpdateLastChecked(false)); | |
1430 EXPECT_FALSE(ShouldCheckForUpdates(false)); | |
1431 | |
1432 ConfigManager::Instance()->SetLastCheckedTime(false, 0); | |
1433 EXPECT_TRUE(ShouldCheckForUpdates(false)); | |
1434 } | |
1435 | |
1436 TEST_F(GoopdateUtilsRegistryProtectedTest, | |
1437 ShouldCheckForUpdates_NoLastCheckedPresent) { | |
1438 EXPECT_TRUE(ShouldCheckForUpdates(false)); | |
1439 } | |
1440 | |
1441 TEST_F(GoopdateUtilsRegistryProtectedTest, | |
1442 ShouldCheckForUpdates_LastCheckedPresent) { | |
1443 const uint32 now = Time64ToInt32(GetCurrent100NSTime()); | |
1444 | |
1445 ConfigManager::Instance()->SetLastCheckedTime(false, now - 10); | |
1446 EXPECT_FALSE(ShouldCheckForUpdates(false)); | |
1447 | |
1448 ConfigManager::Instance()->SetLastCheckedTime(false, | |
1449 now - kLastCheckPeriodSec - 1); | |
1450 EXPECT_TRUE(ShouldCheckForUpdates(false)); | |
1451 } | |
1452 | |
1453 TEST_F(GoopdateUtilsRegistryProtectedTest, | |
1454 ShouldCheckForUpdates_LastCheckedInFuture) { | |
1455 const uint32 now = Time64ToInt32(GetCurrent100NSTime()); | |
1456 | |
1457 // The absolute difference is within the check period. | |
1458 ConfigManager::Instance()->SetLastCheckedTime(false, now + 600); | |
1459 EXPECT_FALSE(ShouldCheckForUpdates(false)); | |
1460 | |
1461 // The absolute difference is greater than the check period. | |
1462 ConfigManager::Instance()->SetLastCheckedTime(false, | |
1463 now + kLastCheckPeriodSec + 1); | |
1464 EXPECT_TRUE(ShouldCheckForUpdates(false)); | |
1465 } | |
1466 | |
1467 TEST_F(GoopdateUtilsRegistryProtectedTest, | |
1468 ShouldCheckForUpdates_PeriodZero) { | |
1469 EXPECT_SUCCEEDED( | |
1470 RegKey::SetValue(kRegKeyGoopdateGroupPolicy, | |
1471 kRegValueAutoUpdateCheckPeriodOverrideMinutes, | |
1472 static_cast<DWORD>(0))); | |
1473 | |
1474 EXPECT_FALSE(ShouldCheckForUpdates(false)); | |
1475 } | |
1476 | |
1477 TEST_F(GoopdateUtilsRegistryProtectedTest, | |
1478 ShouldCheckForUpdates_PeriodOverride) { | |
1479 const DWORD kOverrideMinutes = 10; | |
1480 const DWORD kOverrideSeconds = kOverrideMinutes * 60; | |
1481 const uint32 now = Time64ToInt32(GetCurrent100NSTime()); | |
1482 | |
1483 EXPECT_SUCCEEDED( | |
1484 RegKey::SetValue(kRegKeyGoopdateGroupPolicy, | |
1485 kRegValueAutoUpdateCheckPeriodOverrideMinutes, | |
1486 kOverrideMinutes)); | |
1487 | |
1488 ConfigManager::Instance()->SetLastCheckedTime(false, now - 10); | |
1489 EXPECT_FALSE(ShouldCheckForUpdates(false)); | |
1490 | |
1491 ConfigManager::Instance()->SetLastCheckedTime(false, | |
1492 now - kOverrideSeconds - 1); | |
1493 EXPECT_TRUE(ShouldCheckForUpdates(false)); | |
1494 } | |
1495 | |
1496 TEST_P(GoopdateUtilsRegistryProtectedBooleanTest, CreateUserId) { | |
1497 const bool is_machine = GetParam(); | |
1498 CString user_id1, user_id2; | |
1499 | |
1500 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV, | |
1501 kRegValueForceUsageStats, | |
1502 _T("1"))); | |
1503 | |
1504 EXPECT_SUCCEEDED(goopdate_utils::CreateUserId(is_machine)); | |
1505 user_id1 = goopdate_utils::GetUserIdLazyInit(is_machine); | |
1506 | |
1507 // If user id exists, CreateUserId() should not create a new one. | |
1508 EXPECT_SUCCEEDED(goopdate_utils::CreateUserId(is_machine)); | |
1509 user_id2 = goopdate_utils::GetUserIdLazyInit(is_machine); | |
1510 EXPECT_STREQ(user_id1, user_id2); | |
1511 | |
1512 goopdate_utils::DeleteUserId(is_machine); | |
1513 | |
1514 // Recreate user id should result in a different id. | |
1515 user_id2 = goopdate_utils::GetUserIdLazyInit(is_machine); | |
1516 EXPECT_STRNE(user_id1, user_id2); | |
1517 | |
1518 // Id generation should fail if machine is in OEM install state. | |
1519 const DWORD now = Time64ToInt32(GetCurrent100NSTime()); | |
1520 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE, | |
1521 _T("OemInstallTime"), | |
1522 now)); | |
1523 if (is_machine) { | |
1524 ASSERT_TRUE(oem_install_utils::IsOemInstalling(is_machine)); | |
1525 EXPECT_FAILED(goopdate_utils::CreateUserId(is_machine)); | |
1526 } else { | |
1527 ASSERT_FALSE(oem_install_utils::IsOemInstalling(is_machine)); | |
1528 EXPECT_SUCCEEDED(goopdate_utils::CreateUserId(is_machine)); | |
1529 } | |
1530 } | |
1531 | |
1532 TEST_F(GoopdateUtilsRegistryProtectedTest, | |
1533 GenerateUserId_EachUserShouldHaveHisOwnHive) { | |
1534 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV, | |
1535 kRegValueForceUsageStats, | |
1536 _T("1"))); | |
1537 | |
1538 CString machine_user_id = goopdate_utils::GetUserIdLazyInit(true); | |
1539 CString user_id = goopdate_utils::GetUserIdLazyInit(false); | |
1540 EXPECT_STRNE(machine_user_id, user_id); | |
1541 } | |
1542 | |
1543 TEST_P(GoopdateUtilsRegistryProtectedBooleanTest, GetOptInUserId_UpdateDev) { | |
1544 const bool is_machine = GetParam(); | |
1545 | |
1546 CString user_id = goopdate_utils::GetUserIdLazyInit(is_machine); | |
1547 EXPECT_TRUE(user_id.IsEmpty()); | |
1548 | |
1549 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV, | |
1550 kRegValueForceUsageStats, | |
1551 _T("1"))); | |
1552 | |
1553 user_id = goopdate_utils::GetUserIdLazyInit(is_machine); | |
1554 EXPECT_FALSE(user_id.IsEmpty()); | |
1555 | |
1556 EXPECT_STREQ(user_id, goopdate_utils::GetUserIdLazyInit(is_machine)); | |
1557 | |
1558 GUID guid = GUID_NULL; | |
1559 EXPECT_SUCCEEDED(StringToGuidSafe(user_id, &guid)); | |
1560 } | |
1561 | |
1562 TEST_P(GoopdateUtilsRegistryProtectedBooleanTest, GetOptInUserId_AppOptIn) { | |
1563 const bool is_machine = GetParam(); | |
1564 CString user_id = goopdate_utils::GetUserIdLazyInit(is_machine); | |
1565 EXPECT_TRUE(user_id.IsEmpty()); | |
1566 | |
1567 CString key_path = | |
1568 ConfigManager::Instance()->registry_client_state(is_machine); | |
1569 key_path = AppendRegKeyPath(key_path, kAppId); | |
1570 EXPECT_SUCCEEDED(RegKey::SetValue(key_path, | |
1571 kRegValueForceUsageStats, | |
1572 static_cast<DWORD>(1))); | |
1573 | |
1574 user_id = goopdate_utils::GetUserIdLazyInit(is_machine); | |
1575 EXPECT_FALSE(user_id.IsEmpty()); | |
1576 | |
1577 GUID guid = GUID_NULL; | |
1578 EXPECT_SUCCEEDED(StringToGuidSafe(user_id, &guid)); | |
1579 } | |
1580 | |
1581 TEST_F(GoopdateUtilsRegistryProtectedTest, GetOptInUserId_UserNotOptIn) { | |
1582 const bool is_machine = false; | |
1583 | |
1584 EXPECT_TRUE(goopdate_utils::GetUserIdLazyInit(is_machine).IsEmpty()); | |
1585 | |
1586 EXPECT_SUCCEEDED(goopdate_utils::CreateUserId(is_machine)); | |
1587 EXPECT_TRUE( | |
1588 RegKey::HasValue(ConfigManager::Instance()->registry_update(is_machine), | |
1589 kRegValueUserId)); | |
1590 EXPECT_TRUE(goopdate_utils::GetUserIdLazyInit(is_machine).IsEmpty()); | |
1591 | |
1592 // ID should be removed. | |
1593 EXPECT_FALSE( | |
1594 RegKey::HasValue(ConfigManager::Instance()->registry_update(is_machine), | |
1595 kRegValueUserId)); | |
1596 } | |
1597 | |
1598 TEST_P(GoopdateUtilsRegistryProtectedBooleanTest, | |
1599 GetOptInUserId_OemInstalling) { | |
1600 const bool is_machine = GetParam(); | |
1601 EXPECT_SUCCEEDED(goopdate_utils::CreateUserId(is_machine)); | |
1602 | |
1603 const DWORD now = Time64ToInt32(GetCurrent100NSTime()); | |
1604 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE, | |
1605 _T("OemInstallTime"), | |
1606 now)); | |
1607 EXPECT_EQ(is_machine, oem_install_utils::IsOemInstalling(is_machine)); | |
1608 | |
1609 EXPECT_SUCCEEDED(RegKey::SetValue(MACHINE_REG_UPDATE_DEV, | |
1610 kRegValueForceUsageStats, | |
1611 _T("1"))); | |
1612 | |
1613 if (is_machine) { | |
1614 EXPECT_TRUE(goopdate_utils::GetUserIdLazyInit(is_machine).IsEmpty()); | |
1615 | |
1616 EXPECT_SUCCEEDED(RegKey::DeleteValue(MACHINE_REG_UPDATE, | |
1617 _T("OemInstallTime"))); | |
1618 EXPECT_FALSE(goopdate_utils::GetUserIdLazyInit(is_machine).IsEmpty()); | |
1619 } else { | |
1620 EXPECT_FALSE(goopdate_utils::GetUserIdLazyInit(is_machine).IsEmpty()); | |
1621 } | |
1622 } | |
1623 | |
1624 INSTANTIATE_TEST_CASE_P(MachineOrUser, | |
1625 GoopdateUtilsRegistryProtectedBooleanTest, | |
1626 ::testing::Bool()); | |
1627 | |
1628 } // namespace goopdate_utils | |
1629 | |
1630 } // namespace omaha | |
OLD | NEW |