Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <windows.h> | 5 #include <windows.h> |
| 6 | 6 |
| 7 #include <fstream> | 7 #include <fstream> |
| 8 | 8 |
| 9 #include "base/base_paths.h" | 9 #include "base/base_paths.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 35 using base::win::RegKey; | 35 using base::win::RegKey; |
| 36 using installer::InstallationState; | 36 using installer::InstallationState; |
| 37 using installer::InstallerState; | 37 using installer::InstallerState; |
| 38 using installer::MasterPreferences; | 38 using installer::MasterPreferences; |
| 39 using registry_util::RegistryOverrideManager; | 39 using registry_util::RegistryOverrideManager; |
| 40 | 40 |
| 41 class InstallerStateTest : public TestWithTempDirAndDeleteTempOverrideKeys { | 41 class InstallerStateTest : public TestWithTempDirAndDeleteTempOverrideKeys { |
| 42 protected: | 42 protected: |
| 43 }; | 43 }; |
| 44 | 44 |
| 45 // An installer state on which we can tweak the target path. | 45 // An installer state on which we can access otherwise protected members. |
| 46 class MockInstallerState : public InstallerState { | 46 class MockInstallerState : public InstallerState { |
| 47 public: | 47 public: |
| 48 MockInstallerState() : InstallerState() { } | 48 MockInstallerState() : InstallerState() { } |
| 49 void set_target_path(const FilePath& target_path) { | 49 void set_target_path(const FilePath& target_path) { |
| 50 target_path_ = target_path; | 50 target_path_ = target_path; |
| 51 } | 51 } |
| 52 static bool IsFileInUse(const FilePath& file) { | 52 static bool IsFileInUse(const FilePath& file) { |
| 53 return InstallerState::IsFileInUse(file); | 53 return InstallerState::IsFileInUse(file); |
| 54 } | 54 } |
| 55 const Version& critical_update_version() const { | |
| 56 return critical_update_version_; | |
| 57 } | |
| 55 }; | 58 }; |
| 56 | 59 |
| 57 // Simple function to dump some text into a new file. | 60 // Simple function to dump some text into a new file. |
| 58 void CreateTextFile(const std::wstring& filename, | 61 void CreateTextFile(const std::wstring& filename, |
| 59 const std::wstring& contents) { | 62 const std::wstring& contents) { |
| 60 std::ofstream file; | 63 std::ofstream file; |
| 61 file.open(filename.c_str()); | 64 file.open(filename.c_str()); |
| 62 ASSERT_TRUE(file.is_open()); | 65 ASSERT_TRUE(file.is_open()); |
| 63 file << contents; | 66 file << contents; |
| 64 file.close(); | 67 file.close(); |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 484 NULL, OPEN_EXISTING, 0, 0)); | 487 NULL, OPEN_EXISTING, 0, 0)); |
| 485 ASSERT_TRUE(temp_handle != NULL); | 488 ASSERT_TRUE(temp_handle != NULL); |
| 486 | 489 |
| 487 // The file should now be in use. | 490 // The file should now be in use. |
| 488 EXPECT_TRUE(MockInstallerState::IsFileInUse(temp_file)); | 491 EXPECT_TRUE(MockInstallerState::IsFileInUse(temp_file)); |
| 489 } | 492 } |
| 490 | 493 |
| 491 // And once the handle is gone, it should no longer be in use. | 494 // And once the handle is gone, it should no longer be in use. |
| 492 EXPECT_FALSE(MockInstallerState::IsFileInUse(temp_file)); | 495 EXPECT_FALSE(MockInstallerState::IsFileInUse(temp_file)); |
| 493 } | 496 } |
| 497 | |
| 498 // A fixture for testing InstallerState::DetermineCriticalVersion. Individual | |
| 499 // tests must invoke Initialize() with a critical version. | |
| 500 class InstallerStateCriticalVersionTest : public ::testing::Test { | |
| 501 protected: | |
| 502 InstallerStateCriticalVersionTest() : cmd_line_(CommandLine::NO_PROGRAM) {} | |
| 503 | |
| 504 // Creates a set of versions for use by all test runs. | |
| 505 static void SetUpTestCase() { | |
| 506 low_version_ = new Version("15.0.874.106"); | |
| 507 opv_version_ = new Version("15.0.874.255"); | |
| 508 middle_version_ = new Version("16.0.912.32"); | |
| 509 pv_version_ = new Version("16.0.912.255"); | |
| 510 high_version_ = new Version("17.0.932.0"); | |
| 511 } | |
| 512 | |
| 513 // Cleans up versions used by all test runs. | |
| 514 static void TearDownTestCase() { | |
| 515 delete low_version_; | |
| 516 delete opv_version_; | |
| 517 delete middle_version_; | |
| 518 delete pv_version_; | |
| 519 delete high_version_; | |
| 520 } | |
| 521 | |
| 522 // Initializes the InstallerState to use for a test run. The returned | |
| 523 // instance's critical update version is set to |version|. |version| may be | |
| 524 // NULL, in which case the critical update version is unset. | |
| 525 MockInstallerState& Initialize(const Version* version) { | |
| 526 cmd_line_ = version == NULL ? | |
| 527 CommandLine::FromString(L"setup.exe") : | |
| 528 CommandLine::FromString( | |
| 529 L"setup.exe --critical-update-version=" + | |
| 530 ASCIIToWide(version->GetString())); | |
| 531 prefs_.reset(new MasterPreferences(cmd_line_)); | |
| 532 machine_state_.Initialize(); | |
| 533 installer_state_.Initialize(cmd_line_, *prefs_, machine_state_); | |
| 534 return installer_state_; | |
| 535 } | |
| 536 | |
| 537 static Version* low_version_; | |
| 538 static Version* opv_version_; | |
| 539 static Version* middle_version_; | |
| 540 static Version* pv_version_; | |
| 541 static Version* high_version_; | |
| 542 | |
| 543 CommandLine cmd_line_; | |
| 544 scoped_ptr<MasterPreferences> prefs_; | |
| 545 InstallationState machine_state_; | |
| 546 MockInstallerState installer_state_; | |
| 547 }; | |
| 548 | |
| 549 Version* InstallerStateCriticalVersionTest::low_version_; | |
| 550 Version* InstallerStateCriticalVersionTest::opv_version_; | |
| 551 Version* InstallerStateCriticalVersionTest::middle_version_; | |
| 552 Version* InstallerStateCriticalVersionTest::pv_version_; | |
| 553 Version* InstallerStateCriticalVersionTest::high_version_; | |
|
Finnur
2011/11/11 10:31:01
= NULL; ?
grt (UTC plus 2)
2011/11/11 11:40:08
C++ zero-initializes these during static initializ
| |
| 554 | |
| 555 // Test the case where the critical version is less than the currently-running | |
| 556 // Chrome. The critical version is ignored since it doesn't apply. | |
| 557 TEST_F(InstallerStateCriticalVersionTest, CriticalBeforeOpv) { | |
| 558 MockInstallerState& installer_state(Initialize(low_version_)); | |
| 559 | |
| 560 EXPECT_TRUE(installer_state.critical_update_version().Equals(*low_version_)); | |
| 561 // Unable to determine the installed version, so assume critical update. | |
| 562 EXPECT_TRUE( | |
| 563 installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid()); | |
| 564 // Installed version is past the critical update. | |
| 565 EXPECT_FALSE( | |
| 566 installer_state.DetermineCriticalVersion(opv_version_, *pv_version_) | |
| 567 .IsValid()); | |
| 568 // Installed version is past the critical update. | |
| 569 EXPECT_FALSE( | |
| 570 installer_state.DetermineCriticalVersion(pv_version_, *pv_version_) | |
| 571 .IsValid()); | |
| 572 } | |
| 573 | |
| 574 // Test the case where the critical version is equal to the currently-running | |
| 575 // Chrome. The critical version is ignored since it doesn't apply. | |
| 576 TEST_F(InstallerStateCriticalVersionTest, CriticalEqualsOpv) { | |
| 577 MockInstallerState& installer_state(Initialize(opv_version_)); | |
| 578 | |
| 579 EXPECT_TRUE(installer_state.critical_update_version().Equals(*opv_version_)); | |
| 580 // Unable to determine the installed version, so assume critical update. | |
| 581 EXPECT_TRUE( | |
| 582 installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid()); | |
| 583 // Installed version equals the critical update. | |
| 584 EXPECT_FALSE( | |
| 585 installer_state.DetermineCriticalVersion(opv_version_, *pv_version_) | |
| 586 .IsValid()); | |
| 587 // Installed version equals the critical update. | |
| 588 EXPECT_FALSE( | |
| 589 installer_state.DetermineCriticalVersion(pv_version_, *pv_version_) | |
| 590 .IsValid()); | |
| 591 } | |
| 592 | |
| 593 // Test the case where the critical version is between the currently-running | |
| 594 // Chrome and the to-be-installed Chrome. | |
| 595 TEST_F(InstallerStateCriticalVersionTest, CriticalBetweenOpvAndPv) { | |
| 596 MockInstallerState& installer_state(Initialize(middle_version_)); | |
| 597 | |
| 598 EXPECT_TRUE(installer_state.critical_update_version().Equals( | |
| 599 *middle_version_)); | |
| 600 // Unable to determine the installed version, so assume critical update. | |
| 601 EXPECT_TRUE( | |
| 602 installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid()); | |
| 603 // Installed version before the critical update. | |
| 604 EXPECT_TRUE( | |
| 605 installer_state.DetermineCriticalVersion(opv_version_, *pv_version_) | |
| 606 .IsValid()); | |
| 607 // Installed version is past the critical update. | |
| 608 EXPECT_FALSE( | |
| 609 installer_state.DetermineCriticalVersion(pv_version_, *pv_version_) | |
| 610 .IsValid()); | |
| 611 } | |
| 612 | |
| 613 // Test the case where the critical version is the same as the to-be-installed | |
| 614 // Chrome. | |
| 615 TEST_F(InstallerStateCriticalVersionTest, CriticalEqualsPv) { | |
| 616 MockInstallerState& installer_state(Initialize(pv_version_)); | |
| 617 | |
| 618 EXPECT_TRUE(installer_state.critical_update_version().Equals( | |
| 619 *pv_version_)); | |
| 620 // Unable to determine the installed version, so assume critical update. | |
| 621 EXPECT_TRUE( | |
| 622 installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid()); | |
| 623 // Installed version before the critical update. | |
| 624 EXPECT_TRUE( | |
| 625 installer_state.DetermineCriticalVersion(opv_version_, *pv_version_) | |
| 626 .IsValid()); | |
| 627 // Installed version equals the critical update. | |
| 628 EXPECT_FALSE( | |
| 629 installer_state.DetermineCriticalVersion(pv_version_, *pv_version_) | |
| 630 .IsValid()); | |
| 631 } | |
| 632 | |
| 633 // Test the case where the critical version is greater than the to-be-installed | |
| 634 // Chrome. | |
| 635 TEST_F(InstallerStateCriticalVersionTest, CriticalAfterPv) { | |
| 636 MockInstallerState& installer_state(Initialize(high_version_)); | |
| 637 | |
| 638 EXPECT_TRUE(installer_state.critical_update_version().Equals( | |
| 639 *high_version_)); | |
| 640 // Critical update newer than the new version. | |
| 641 EXPECT_FALSE( | |
| 642 installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid()); | |
| 643 EXPECT_FALSE( | |
| 644 installer_state.DetermineCriticalVersion(opv_version_, *pv_version_) | |
| 645 .IsValid()); | |
| 646 EXPECT_FALSE( | |
| 647 installer_state.DetermineCriticalVersion(pv_version_, *pv_version_) | |
| 648 .IsValid()); | |
| 649 } | |
| OLD | NEW |