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

Side by Side Diff: common/goopdate_utils_unittest.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « common/goopdate_utils.cc ('k') | common/install_manifest.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2007-2010 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 #include <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
OLDNEW
« no previous file with comments | « common/goopdate_utils.cc ('k') | common/install_manifest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698