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 |