| Index: chrome/installer/util/product_state_unittest.cc
|
| diff --git a/chrome/installer/util/product_state_unittest.cc b/chrome/installer/util/product_state_unittest.cc
|
| index 1b710e0f2d787e4c52542764d782bf522862e3c7..37fbc5dc1d54e216a6e09388dff1046f75d179f3 100644
|
| --- a/chrome/installer/util/product_state_unittest.cc
|
| +++ b/chrome/installer/util/product_state_unittest.cc
|
| @@ -4,7 +4,6 @@
|
|
|
| #include <windows.h>
|
|
|
| -#include "base/strings/utf_string_conversions.h"
|
| #include "base/test/test_reg_util_win.h"
|
| #include "base/version.h"
|
| #include "base/win/registry.h"
|
| @@ -14,76 +13,34 @@
|
| #include "chrome/installer/util/util_constants.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| -using base::win::RegKey;
|
| -using installer::ProductState;
|
| -using registry_util::RegistryOverrideManager;
|
| +namespace installer {
|
|
|
| -class ProductStateTest : public testing::Test {
|
| +class ProductStateTest : public testing::TestWithParam<bool> {
|
| protected:
|
| - static void SetUpTestCase();
|
| - static void TearDownTestCase();
|
| -
|
| - void SetUp() override;
|
| - void TearDown() override;
|
| + ProductStateTest();
|
|
|
| void ApplyUninstallCommand(const wchar_t* exe_path, const wchar_t* args);
|
| void MinimallyInstallProduct(const wchar_t* version);
|
|
|
| - static BrowserDistribution* dist_;
|
| - bool system_install_;
|
| - HKEY overridden_;
|
| + const bool system_install_;
|
| + const HKEY overridden_;
|
| registry_util::RegistryOverrideManager registry_override_manager_;
|
| - RegKey clients_;
|
| - RegKey client_state_;
|
| + base::win::RegKey clients_;
|
| + base::win::RegKey client_state_;
|
| };
|
|
|
| -BrowserDistribution* ProductStateTest::dist_;
|
| -
|
| -// static
|
| -void ProductStateTest::SetUpTestCase() {
|
| - testing::Test::SetUpTestCase();
|
| -
|
| - // We'll use Chrome as our test subject.
|
| - dist_ = BrowserDistribution::GetSpecificDistribution(
|
| - BrowserDistribution::CHROME_BROWSER);
|
| -}
|
| -
|
| -// static
|
| -void ProductStateTest::TearDownTestCase() {
|
| - dist_ = NULL;
|
| -
|
| - testing::Test::TearDownTestCase();
|
| -}
|
| -
|
| -void ProductStateTest::SetUp() {
|
| - testing::Test::SetUp();
|
| -
|
| - // Create/open the keys for the product we'll test.
|
| - system_install_ = true;
|
| - overridden_ = (system_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER);
|
| -
|
| - // Override for test purposes. We don't use ScopedRegistryKeyOverride
|
| - // directly because it doesn't suit itself to our use here.
|
| - RegKey temp_key;
|
| -
|
| +ProductStateTest::ProductStateTest()
|
| + : system_install_(GetParam()),
|
| + overridden_(system_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER) {
|
| registry_override_manager_.OverrideRegistry(overridden_);
|
|
|
| + BrowserDistribution* dist = BrowserDistribution::GetDistribution();
|
| EXPECT_EQ(ERROR_SUCCESS,
|
| - clients_.Create(overridden_, dist_->GetVersionKey().c_str(),
|
| - KEY_ALL_ACCESS));
|
| + clients_.Create(overridden_, dist->GetVersionKey().c_str(),
|
| + KEY_ALL_ACCESS | KEY_WOW64_32KEY));
|
| EXPECT_EQ(ERROR_SUCCESS,
|
| - client_state_.Create(overridden_, dist_->GetStateKey().c_str(),
|
| - KEY_ALL_ACCESS));
|
| -}
|
| -
|
| -void ProductStateTest::TearDown() {
|
| - // Done with the keys.
|
| - client_state_.Close();
|
| - clients_.Close();
|
| - overridden_ = NULL;
|
| - system_install_ = false;
|
| -
|
| - testing::Test::TearDown();
|
| + client_state_.Create(overridden_, dist->GetStateKey().c_str(),
|
| + KEY_ALL_ACCESS | KEY_WOW64_32KEY));
|
| }
|
|
|
| void ProductStateTest::MinimallyInstallProduct(const wchar_t* version) {
|
| @@ -94,32 +51,29 @@ void ProductStateTest::MinimallyInstallProduct(const wchar_t* version) {
|
| void ProductStateTest::ApplyUninstallCommand(const wchar_t* exe_path,
|
| const wchar_t* args) {
|
| if (exe_path == NULL) {
|
| - LONG result = client_state_.DeleteValue(installer::kUninstallStringField);
|
| + LONG result = client_state_.DeleteValue(kUninstallStringField);
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| } else {
|
| EXPECT_EQ(ERROR_SUCCESS,
|
| - client_state_.WriteValue(installer::kUninstallStringField,
|
| - exe_path));
|
| + client_state_.WriteValue(kUninstallStringField, exe_path));
|
| }
|
|
|
| if (args == NULL) {
|
| - LONG result =
|
| - client_state_.DeleteValue(installer::kUninstallArgumentsField);
|
| + LONG result = client_state_.DeleteValue(kUninstallArgumentsField);
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| } else {
|
| EXPECT_EQ(ERROR_SUCCESS,
|
| - client_state_.WriteValue(installer::kUninstallArgumentsField,
|
| - args));
|
| + client_state_.WriteValue(kUninstallArgumentsField, args));
|
| }
|
| }
|
|
|
| -TEST_F(ProductStateTest, InitializeInstalled) {
|
| +TEST_P(ProductStateTest, InitializeInstalled) {
|
| // Not installed.
|
| {
|
| ProductState state;
|
| LONG result = clients_.DeleteValue(google_update::kRegVersionField);
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_FALSE(state.Initialize(system_install_, dist_));
|
| + EXPECT_FALSE(state.Initialize(system_install_));
|
| }
|
|
|
| // Empty version.
|
| @@ -127,7 +81,7 @@ TEST_F(ProductStateTest, InitializeInstalled) {
|
| ProductState state;
|
| LONG result = clients_.WriteValue(google_update::kRegVersionField, L"");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_FALSE(state.Initialize(system_install_, dist_));
|
| + EXPECT_FALSE(state.Initialize(system_install_));
|
| }
|
|
|
| // Bogus version.
|
| @@ -136,7 +90,7 @@ TEST_F(ProductStateTest, InitializeInstalled) {
|
| LONG result = clients_.WriteValue(google_update::kRegVersionField,
|
| L"goofy");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_FALSE(state.Initialize(system_install_, dist_));
|
| + EXPECT_FALSE(state.Initialize(system_install_));
|
| }
|
|
|
| // Valid "pv" value.
|
| @@ -145,13 +99,13 @@ TEST_F(ProductStateTest, InitializeInstalled) {
|
| LONG result = clients_.WriteValue(google_update::kRegVersionField,
|
| L"10.0.47.0");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_EQ("10.0.47.0", state.version().GetString());
|
| }
|
| }
|
|
|
| // Test extraction of the "opv" value from the Clients key.
|
| -TEST_F(ProductStateTest, InitializeOldVersion) {
|
| +TEST_P(ProductStateTest, InitializeOldVersion) {
|
| MinimallyInstallProduct(L"10.0.1.1");
|
|
|
| // No "opv" value.
|
| @@ -159,7 +113,7 @@ TEST_F(ProductStateTest, InitializeOldVersion) {
|
| ProductState state;
|
| LONG result = clients_.DeleteValue(google_update::kRegOldVersionField);
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.old_version() == NULL);
|
| }
|
|
|
| @@ -168,7 +122,7 @@ TEST_F(ProductStateTest, InitializeOldVersion) {
|
| ProductState state;
|
| LONG result = clients_.WriteValue(google_update::kRegOldVersionField, L"");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.old_version() == NULL);
|
| }
|
|
|
| @@ -178,7 +132,7 @@ TEST_F(ProductStateTest, InitializeOldVersion) {
|
| LONG result = clients_.WriteValue(google_update::kRegOldVersionField,
|
| L"coming home");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.old_version() == NULL);
|
| }
|
|
|
| @@ -188,14 +142,14 @@ TEST_F(ProductStateTest, InitializeOldVersion) {
|
| LONG result = clients_.WriteValue(google_update::kRegOldVersionField,
|
| L"10.0.47.0");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.old_version() != NULL);
|
| EXPECT_EQ("10.0.47.0", state.old_version()->GetString());
|
| }
|
| }
|
|
|
| // Test extraction of the "cmd" value from the Clients key.
|
| -TEST_F(ProductStateTest, InitializeRenameCmd) {
|
| +TEST_P(ProductStateTest, InitializeRenameCmd) {
|
| MinimallyInstallProduct(L"10.0.1.1");
|
|
|
| // No "cmd" value.
|
| @@ -203,7 +157,7 @@ TEST_F(ProductStateTest, InitializeRenameCmd) {
|
| ProductState state;
|
| LONG result = clients_.DeleteValue(google_update::kRegRenameCmdField);
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.rename_cmd().empty());
|
| }
|
|
|
| @@ -212,7 +166,7 @@ TEST_F(ProductStateTest, InitializeRenameCmd) {
|
| ProductState state;
|
| LONG result = clients_.WriteValue(google_update::kRegRenameCmdField, L"");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.rename_cmd().empty());
|
| }
|
|
|
| @@ -222,13 +176,13 @@ TEST_F(ProductStateTest, InitializeRenameCmd) {
|
| LONG result = clients_.WriteValue(google_update::kRegRenameCmdField,
|
| L"spam.exe --spamalot");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_EQ(L"spam.exe --spamalot", state.rename_cmd());
|
| }
|
| }
|
|
|
| // Test extraction of the "ap" value from the ClientState key.
|
| -TEST_F(ProductStateTest, InitializeChannelInfo) {
|
| +TEST_P(ProductStateTest, InitializeChannelInfo) {
|
| MinimallyInstallProduct(L"10.0.1.1");
|
|
|
| // No "ap" value.
|
| @@ -236,7 +190,7 @@ TEST_F(ProductStateTest, InitializeChannelInfo) {
|
| ProductState state;
|
| LONG result = client_state_.DeleteValue(google_update::kRegApField);
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.channel().value().empty());
|
| }
|
|
|
| @@ -245,7 +199,7 @@ TEST_F(ProductStateTest, InitializeChannelInfo) {
|
| ProductState state;
|
| LONG result = client_state_.WriteValue(google_update::kRegApField, L"");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.channel().value().empty());
|
| }
|
|
|
| @@ -254,21 +208,21 @@ TEST_F(ProductStateTest, InitializeChannelInfo) {
|
| ProductState state;
|
| LONG result = client_state_.WriteValue(google_update::kRegApField, L"spam");
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_EQ(L"spam", state.channel().value());
|
| }
|
| }
|
|
|
| // Test extraction of the uninstall command and arguments from the ClientState
|
| // key.
|
| -TEST_F(ProductStateTest, InitializeUninstallCommand) {
|
| +TEST_P(ProductStateTest, InitializeUninstallCommand) {
|
| MinimallyInstallProduct(L"10.0.1.1");
|
|
|
| // No uninstall command.
|
| {
|
| ProductState state;
|
| ApplyUninstallCommand(NULL, NULL);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.GetSetupPath().empty());
|
| EXPECT_TRUE(state.uninstall_command().GetCommandLineString().empty());
|
| EXPECT_TRUE(state.uninstall_command().GetSwitches().empty());
|
| @@ -278,7 +232,7 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
|
| {
|
| ProductState state;
|
| ApplyUninstallCommand(L"", L"");
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.GetSetupPath().empty());
|
| EXPECT_TRUE(state.uninstall_command().GetCommandLineString().empty());
|
| EXPECT_TRUE(state.uninstall_command().GetSwitches().empty());
|
| @@ -288,7 +242,7 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
|
| {
|
| ProductState state;
|
| ApplyUninstallCommand(NULL, L"--uninstall");
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.GetSetupPath().empty());
|
| EXPECT_EQ(L" --uninstall",
|
| state.uninstall_command().GetCommandLineString());
|
| @@ -299,7 +253,7 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
|
| {
|
| ProductState state;
|
| ApplyUninstallCommand(L"setup.exe", NULL);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_EQ(L"setup.exe", state.GetSetupPath().value());
|
| EXPECT_EQ(L"setup.exe", state.uninstall_command().GetCommandLineString());
|
| EXPECT_TRUE(state.uninstall_command().GetSwitches().empty());
|
| @@ -309,7 +263,7 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
|
| {
|
| ProductState state;
|
| ApplyUninstallCommand(L"set up.exe", NULL);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_EQ(L"set up.exe", state.GetSetupPath().value());
|
| EXPECT_EQ(L"\"set up.exe\"",
|
| state.uninstall_command().GetCommandLineString());
|
| @@ -320,7 +274,7 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
|
| {
|
| ProductState state;
|
| ApplyUninstallCommand(L"setup.exe", L"--uninstall");
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_EQ(L"setup.exe", state.GetSetupPath().value());
|
| EXPECT_EQ(L"setup.exe --uninstall",
|
| state.uninstall_command().GetCommandLineString());
|
| @@ -329,7 +283,7 @@ TEST_F(ProductStateTest, InitializeUninstallCommand) {
|
| }
|
|
|
| // Test extraction of the msi marker from the ClientState key.
|
| -TEST_F(ProductStateTest, InitializeMsi) {
|
| +TEST_P(ProductStateTest, InitializeMsi) {
|
| MinimallyInstallProduct(L"10.0.1.1");
|
|
|
| // No msi marker.
|
| @@ -337,7 +291,7 @@ TEST_F(ProductStateTest, InitializeMsi) {
|
| ProductState state;
|
| LONG result = client_state_.DeleteValue(google_update::kRegMSIField);
|
| EXPECT_TRUE(result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_FALSE(state.is_msi());
|
| }
|
|
|
| @@ -347,7 +301,7 @@ TEST_F(ProductStateTest, InitializeMsi) {
|
| EXPECT_EQ(ERROR_SUCCESS,
|
| client_state_.WriteValue(google_update::kRegMSIField,
|
| static_cast<DWORD>(0)));
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_FALSE(state.is_msi());
|
| }
|
|
|
| @@ -357,7 +311,7 @@ TEST_F(ProductStateTest, InitializeMsi) {
|
| EXPECT_EQ(ERROR_SUCCESS,
|
| client_state_.WriteValue(google_update::kRegMSIField,
|
| static_cast<DWORD>(1)));
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.is_msi());
|
| }
|
|
|
| @@ -367,7 +321,7 @@ TEST_F(ProductStateTest, InitializeMsi) {
|
| EXPECT_EQ(ERROR_SUCCESS,
|
| client_state_.WriteValue(google_update::kRegMSIField,
|
| static_cast<DWORD>(47)));
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.is_msi());
|
| }
|
|
|
| @@ -377,20 +331,20 @@ TEST_F(ProductStateTest, InitializeMsi) {
|
| EXPECT_EQ(ERROR_SUCCESS,
|
| client_state_.WriteValue(google_update::kRegMSIField,
|
| L"bogus!"));
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_FALSE(state.is_msi());
|
| }
|
| }
|
|
|
| // Test detection of multi-install.
|
| -TEST_F(ProductStateTest, InitializeMultiInstall) {
|
| +TEST_P(ProductStateTest, InitializeMultiInstall) {
|
| MinimallyInstallProduct(L"10.0.1.1");
|
|
|
| // No uninstall command means single install.
|
| {
|
| ProductState state;
|
| ApplyUninstallCommand(NULL, NULL);
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_FALSE(state.is_multi_install());
|
| }
|
|
|
| @@ -398,7 +352,7 @@ TEST_F(ProductStateTest, InitializeMultiInstall) {
|
| {
|
| ProductState state;
|
| ApplyUninstallCommand(L"setup.exe", L"--uninstall");
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_FALSE(state.is_multi_install());
|
| }
|
|
|
| @@ -407,7 +361,12 @@ TEST_F(ProductStateTest, InitializeMultiInstall) {
|
| ProductState state;
|
| ApplyUninstallCommand(L"setup.exe",
|
| L"--uninstall --chrome --multi-install");
|
| - EXPECT_TRUE(state.Initialize(system_install_, dist_));
|
| + EXPECT_TRUE(state.Initialize(system_install_));
|
| EXPECT_TRUE(state.is_multi_install());
|
| }
|
| }
|
| +
|
| +INSTANTIATE_TEST_CASE_P(UserLevel, ProductStateTest, ::testing::Values(false));
|
| +INSTANTIATE_TEST_CASE_P(SystemLevel, ProductStateTest, ::testing::Values(true));
|
| +
|
| +} // namespace installer
|
|
|