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

Unified Diff: chrome/installer/util/installer_state_unittest.cc

Issue 8517012: Add support for --critical-update-version to installer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: last tweaks Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/installer/util/installer_state.cc ('k') | chrome/installer/util/util_constants.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/util/installer_state_unittest.cc
diff --git a/chrome/installer/util/installer_state_unittest.cc b/chrome/installer/util/installer_state_unittest.cc
index 14dec6da3eb6985f82c906ce52339db39ebf6208..5029699bac06854b9717237f8ed6069956016e0b 100644
--- a/chrome/installer/util/installer_state_unittest.cc
+++ b/chrome/installer/util/installer_state_unittest.cc
@@ -42,7 +42,7 @@ class InstallerStateTest : public TestWithTempDirAndDeleteTempOverrideKeys {
protected:
};
-// An installer state on which we can tweak the target path.
+// An installer state on which we can access otherwise protected members.
class MockInstallerState : public InstallerState {
public:
MockInstallerState() : InstallerState() { }
@@ -52,6 +52,9 @@ class MockInstallerState : public InstallerState {
static bool IsFileInUse(const FilePath& file) {
return InstallerState::IsFileInUse(file);
}
+ const Version& critical_update_version() const {
+ return critical_update_version_;
+ }
};
// Simple function to dump some text into a new file.
@@ -491,3 +494,156 @@ TEST_F(InstallerStateTest, IsFileInUse) {
// And once the handle is gone, it should no longer be in use.
EXPECT_FALSE(MockInstallerState::IsFileInUse(temp_file));
}
+
+// A fixture for testing InstallerState::DetermineCriticalVersion. Individual
+// tests must invoke Initialize() with a critical version.
+class InstallerStateCriticalVersionTest : public ::testing::Test {
+ protected:
+ InstallerStateCriticalVersionTest() : cmd_line_(CommandLine::NO_PROGRAM) {}
+
+ // Creates a set of versions for use by all test runs.
+ static void SetUpTestCase() {
+ low_version_ = new Version("15.0.874.106");
+ opv_version_ = new Version("15.0.874.255");
+ middle_version_ = new Version("16.0.912.32");
+ pv_version_ = new Version("16.0.912.255");
+ high_version_ = new Version("17.0.932.0");
+ }
+
+ // Cleans up versions used by all test runs.
+ static void TearDownTestCase() {
+ delete low_version_;
+ delete opv_version_;
+ delete middle_version_;
+ delete pv_version_;
+ delete high_version_;
+ }
+
+ // Initializes the InstallerState to use for a test run. The returned
+ // instance's critical update version is set to |version|. |version| may be
+ // NULL, in which case the critical update version is unset.
+ MockInstallerState& Initialize(const Version* version) {
+ cmd_line_ = version == NULL ?
+ CommandLine::FromString(L"setup.exe") :
+ CommandLine::FromString(
+ L"setup.exe --critical-update-version=" +
+ ASCIIToWide(version->GetString()));
+ prefs_.reset(new MasterPreferences(cmd_line_));
+ machine_state_.Initialize();
+ installer_state_.Initialize(cmd_line_, *prefs_, machine_state_);
+ return installer_state_;
+ }
+
+ static Version* low_version_;
+ static Version* opv_version_;
+ static Version* middle_version_;
+ static Version* pv_version_;
+ static Version* high_version_;
+
+ CommandLine cmd_line_;
+ scoped_ptr<MasterPreferences> prefs_;
+ InstallationState machine_state_;
+ MockInstallerState installer_state_;
+};
+
+Version* InstallerStateCriticalVersionTest::low_version_ = NULL;
+Version* InstallerStateCriticalVersionTest::opv_version_ = NULL;
+Version* InstallerStateCriticalVersionTest::middle_version_ = NULL;
+Version* InstallerStateCriticalVersionTest::pv_version_ = NULL;
+Version* InstallerStateCriticalVersionTest::high_version_ = NULL;
+
+// Test the case where the critical version is less than the currently-running
+// Chrome. The critical version is ignored since it doesn't apply.
+TEST_F(InstallerStateCriticalVersionTest, CriticalBeforeOpv) {
+ MockInstallerState& installer_state(Initialize(low_version_));
+
+ EXPECT_TRUE(installer_state.critical_update_version().Equals(*low_version_));
+ // Unable to determine the installed version, so assume critical update.
+ EXPECT_TRUE(
+ installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid());
+ // Installed version is past the critical update.
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(opv_version_, *pv_version_)
+ .IsValid());
+ // Installed version is past the critical update.
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(pv_version_, *pv_version_)
+ .IsValid());
+}
+
+// Test the case where the critical version is equal to the currently-running
+// Chrome. The critical version is ignored since it doesn't apply.
+TEST_F(InstallerStateCriticalVersionTest, CriticalEqualsOpv) {
+ MockInstallerState& installer_state(Initialize(opv_version_));
+
+ EXPECT_TRUE(installer_state.critical_update_version().Equals(*opv_version_));
+ // Unable to determine the installed version, so assume critical update.
+ EXPECT_TRUE(
+ installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid());
+ // Installed version equals the critical update.
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(opv_version_, *pv_version_)
+ .IsValid());
+ // Installed version equals the critical update.
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(pv_version_, *pv_version_)
+ .IsValid());
+}
+
+// Test the case where the critical version is between the currently-running
+// Chrome and the to-be-installed Chrome.
+TEST_F(InstallerStateCriticalVersionTest, CriticalBetweenOpvAndPv) {
+ MockInstallerState& installer_state(Initialize(middle_version_));
+
+ EXPECT_TRUE(installer_state.critical_update_version().Equals(
+ *middle_version_));
+ // Unable to determine the installed version, so assume critical update.
+ EXPECT_TRUE(
+ installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid());
+ // Installed version before the critical update.
+ EXPECT_TRUE(
+ installer_state.DetermineCriticalVersion(opv_version_, *pv_version_)
+ .IsValid());
+ // Installed version is past the critical update.
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(pv_version_, *pv_version_)
+ .IsValid());
+}
+
+// Test the case where the critical version is the same as the to-be-installed
+// Chrome.
+TEST_F(InstallerStateCriticalVersionTest, CriticalEqualsPv) {
+ MockInstallerState& installer_state(Initialize(pv_version_));
+
+ EXPECT_TRUE(installer_state.critical_update_version().Equals(
+ *pv_version_));
+ // Unable to determine the installed version, so assume critical update.
+ EXPECT_TRUE(
+ installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid());
+ // Installed version before the critical update.
+ EXPECT_TRUE(
+ installer_state.DetermineCriticalVersion(opv_version_, *pv_version_)
+ .IsValid());
+ // Installed version equals the critical update.
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(pv_version_, *pv_version_)
+ .IsValid());
+}
+
+// Test the case where the critical version is greater than the to-be-installed
+// Chrome.
+TEST_F(InstallerStateCriticalVersionTest, CriticalAfterPv) {
+ MockInstallerState& installer_state(Initialize(high_version_));
+
+ EXPECT_TRUE(installer_state.critical_update_version().Equals(
+ *high_version_));
+ // Critical update newer than the new version.
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(NULL, *pv_version_).IsValid());
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(opv_version_, *pv_version_)
+ .IsValid());
+ EXPECT_FALSE(
+ installer_state.DetermineCriticalVersion(pv_version_, *pv_version_)
+ .IsValid());
+}
« no previous file with comments | « chrome/installer/util/installer_state.cc ('k') | chrome/installer/util/util_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698