| 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 |