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

Side by Side Diff: chrome/installer/util/product_unittest.cc

Issue 6288009: More installer refactoring in the interest of fixing some bugs and cleaning t... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/installer/util/product_state_unittest.cc ('k') | chrome/installer/util/util_constants.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "chrome/installer/util/product_unittest.h" 5 #include "chrome/installer/util/product_unittest.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/installer/util/chrome_frame_distribution.h" 9 #include "chrome/installer/util/chrome_frame_distribution.h"
10 #include "chrome/installer/util/google_update_constants.h" 10 #include "chrome/installer/util/google_update_constants.h"
11 #include "chrome/installer/util/installation_state.h" 11 #include "chrome/installer/util/installation_state.h"
12 #include "chrome/installer/util/package.h" 12 #include "chrome/installer/util/installer_state.h"
13 #include "chrome/installer/util/package_properties.h"
14 #include "chrome/installer/util/master_preferences.h" 13 #include "chrome/installer/util/master_preferences.h"
15 #include "chrome/installer/util/product.h" 14 #include "chrome/installer/util/product.h"
16 15
17 using base::win::RegKey; 16 using base::win::RegKey;
18 using installer::ChromePackageProperties;
19 using installer::ChromiumPackageProperties;
20 using installer::Package;
21 using installer::Product; 17 using installer::Product;
22 using installer::ProductPackageMapping;
23 using installer::MasterPreferences; 18 using installer::MasterPreferences;
24 19
25 void TestWithTempDir::SetUp() { 20 void TestWithTempDir::SetUp() {
26 // Name a subdirectory of the user temp directory. 21 // Name a subdirectory of the user temp directory.
27 ASSERT_TRUE(test_dir_.CreateUniqueTempDir()); 22 ASSERT_TRUE(test_dir_.CreateUniqueTempDir());
28 } 23 }
29 24
30 void TestWithTempDir::TearDown() { 25 void TestWithTempDir::TearDown() {
31 logging::CloseLogFile(); 26 logging::CloseLogFile();
32 ASSERT_TRUE(test_dir_.Delete()); 27 ASSERT_TRUE(test_dir_.Delete());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 //////////////////////////////////////////////////////////////////////////////// 70 ////////////////////////////////////////////////////////////////////////////////
76 71
77 class ProductTest : public TestWithTempDirAndDeleteTempOverrideKeys { 72 class ProductTest : public TestWithTempDirAndDeleteTempOverrideKeys {
78 protected: 73 protected:
79 }; 74 };
80 75
81 TEST_F(ProductTest, ProductInstallBasic) { 76 TEST_F(ProductTest, ProductInstallBasic) {
82 // TODO(tommi): We should mock this and use our mocked distribution. 77 // TODO(tommi): We should mock this and use our mocked distribution.
83 const bool multi_install = false; 78 const bool multi_install = false;
84 const bool system_level = true; 79 const bool system_level = true;
85 const installer::MasterPreferences& prefs = 80 CommandLine cmd_line = CommandLine::FromString(
86 installer::MasterPreferences::ForCurrentProcess(); 81 std::wstring(L"setup.exe") +
87 BrowserDistribution* distribution = 82 (multi_install ? L" --multi-install --chrome" : L"") +
88 BrowserDistribution::GetSpecificDistribution( 83 (system_level ? L" --system-level" : L""));
89 BrowserDistribution::CHROME_BROWSER, prefs); 84 installer::MasterPreferences prefs(cmd_line);
90 ChromePackageProperties properties; 85 installer::InstallationState machine_state;
91 scoped_refptr<Package> package(new Package(multi_install, system_level, 86 machine_state.Initialize();
92 test_dir_.path(), &properties)); 87 installer::InstallerState installer_state;
93 scoped_refptr<Product> product(new Product(distribution, package.get())); 88 installer_state.Initialize(cmd_line, prefs, machine_state);
89
90 const Product* product = installer_state.products()[0];
91 BrowserDistribution* distribution = product->distribution();
92 EXPECT_EQ(BrowserDistribution::CHROME_BROWSER, distribution->GetType());
94 93
95 FilePath user_data(product->GetUserDataPath()); 94 FilePath user_data(product->GetUserDataPath());
96 EXPECT_FALSE(user_data.empty()); 95 EXPECT_FALSE(user_data.empty());
97 EXPECT_NE(std::wstring::npos, 96 EXPECT_NE(std::wstring::npos,
98 user_data.value().find(installer::kInstallUserDataDir)); 97 user_data.value().find(installer::kInstallUserDataDir));
99 98
100 FilePath program_files; 99 FilePath program_files;
101 PathService::Get(base::DIR_PROGRAM_FILES, &program_files); 100 PathService::Get(base::DIR_PROGRAM_FILES, &program_files);
102 // The User Data path should never be under program files, even though 101 // The User Data path should never be under program files, even though
103 // system_level is true. 102 // system_level is true.
104 EXPECT_EQ(std::wstring::npos, 103 EXPECT_EQ(std::wstring::npos,
105 user_data.value().find(program_files.value())); 104 user_data.value().find(program_files.value()));
106 105
107 // We started out with a non-msi product. 106 // There should be no installed version in the registry.
108 EXPECT_FALSE(product->IsMsi()); 107 machine_state.Initialize();
108 EXPECT_TRUE(machine_state.GetProductState(
109 system_level, distribution->GetType()) == NULL);
109 110
110 HKEY root = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 111 HKEY root = installer_state.root_key();
111 { 112 {
112 TempRegKeyOverride override(root, L"root_pit"); 113 TempRegKeyOverride override(root, L"root_pit");
113 114
114 // Create a make-believe client state key.
115 RegKey key;
116 std::wstring state_key_path(distribution->GetStateKey());
117 ASSERT_EQ(ERROR_SUCCESS,
118 key.Create(root, state_key_path.c_str(), KEY_ALL_ACCESS));
119
120 // Set the MSI marker, delete the objects, create new ones and verify
121 // that we now see the MSI marker.
122 EXPECT_TRUE(product->SetMsiMarker(true));
123 package = new Package(multi_install, system_level, test_dir_.path(),
124 &properties);
125 product = new Product(distribution, package.get());
126 EXPECT_TRUE(product->IsMsi());
127
128 // There should be no installed version in the registry.
129 {
130 installer::InstallationState state;
131 state.Initialize(prefs);
132 EXPECT_TRUE(state.GetProductState(system_level,
133 distribution->GetType()) == NULL);
134 }
135
136 // Let's pretend chrome is installed. 115 // Let's pretend chrome is installed.
137 RegKey version_key(root, distribution->GetVersionKey().c_str(), 116 RegKey version_key(root, distribution->GetVersionKey().c_str(),
138 KEY_ALL_ACCESS); 117 KEY_ALL_ACCESS);
139 ASSERT_TRUE(version_key.Valid()); 118 ASSERT_TRUE(version_key.Valid());
140 119
141 const char kCurrentVersion[] = "1.2.3.4"; 120 const char kCurrentVersion[] = "1.2.3.4";
142 scoped_ptr<Version> current_version( 121 scoped_ptr<Version> current_version(
143 Version::GetVersionFromString(kCurrentVersion)); 122 Version::GetVersionFromString(kCurrentVersion));
144 version_key.WriteValue(google_update::kRegVersionField, 123 version_key.WriteValue(google_update::kRegVersionField,
145 UTF8ToWide(current_version->GetString()).c_str()); 124 UTF8ToWide(current_version->GetString()).c_str());
146 125
147 { 126 // We started out with a non-msi product.
148 installer::InstallationState state; 127 machine_state.Initialize();
149 state.Initialize(prefs); 128 const installer::ProductState* chrome_state =
150 const installer::ProductState* prod_state = 129 machine_state.GetProductState(system_level, distribution->GetType());
151 state.GetProductState(system_level, distribution->GetType()); 130 EXPECT_TRUE(chrome_state != NULL);
152 EXPECT_TRUE(prod_state != NULL); 131 if (chrome_state != NULL) {
153 if (prod_state != NULL) { 132 EXPECT_TRUE(chrome_state->version().Equals(*current_version.get()));
154 EXPECT_TRUE(prod_state->version().Equals(*current_version.get())); 133 EXPECT_FALSE(chrome_state->is_msi());
155 }
156 } 134 }
135
136 // Create a make-believe client state key.
137 RegKey key;
138 std::wstring state_key_path(distribution->GetStateKey());
139 ASSERT_EQ(ERROR_SUCCESS,
140 key.Create(root, state_key_path.c_str(), KEY_ALL_ACCESS));
141
142 // Set the MSI marker, refresh, and verify that we now see the MSI marker.
143 EXPECT_TRUE(product->SetMsiMarker(system_level, true));
144 machine_state.Initialize();
145 chrome_state =
146 machine_state.GetProductState(system_level, distribution->GetType());
147 EXPECT_TRUE(chrome_state != NULL);
148 if (chrome_state != NULL)
149 EXPECT_TRUE(chrome_state->is_msi());
157 } 150 }
158 } 151 }
159 152
160 TEST_F(ProductTest, LaunchChrome) { 153 TEST_F(ProductTest, LaunchChrome) {
161 // TODO(tommi): Test Product::LaunchChrome and 154 // TODO(tommi): Test Product::LaunchChrome and
162 // Product::LaunchChromeAndWait. 155 // Product::LaunchChromeAndWait.
163 LOG(ERROR) << "Test not implemented."; 156 LOG(ERROR) << "Test not implemented.";
164 } 157 }
165
166 // Overrides ChromeFrameDistribution for the sole purpose of returning
167 // the Chrome (not Chrome Frame) installation path.
168 class FakeChromeFrameDistribution : public ChromeFrameDistribution {
169 public:
170 explicit FakeChromeFrameDistribution(
171 const installer::MasterPreferences& prefs)
172 : ChromeFrameDistribution(prefs) {}
173 virtual std::wstring GetInstallSubDir() {
174 const MasterPreferences& prefs =
175 installer::MasterPreferences::ForCurrentProcess();
176 return BrowserDistribution::GetSpecificDistribution(
177 BrowserDistribution::CHROME_BROWSER, prefs)->GetInstallSubDir();
178 }
179 };
180
181 TEST_F(ProductTest, ProductInstallsBasic) {
182 const bool multi_install = true;
183 const bool system_level = true;
184 ProductPackageMapping installs(multi_install, system_level);
185 EXPECT_EQ(multi_install, installs.multi_install());
186 EXPECT_EQ(system_level, installs.system_level());
187 EXPECT_EQ(0U, installs.packages().size());
188 EXPECT_EQ(0U, installs.products().size());
189
190 // TODO(robertshield): Include test that use mock master preferences.
191 const MasterPreferences& prefs =
192 installer::MasterPreferences::ForCurrentProcess();
193
194 installs.AddDistribution(BrowserDistribution::CHROME_BROWSER, prefs);
195 FakeChromeFrameDistribution fake_chrome_frame(prefs);
196 installs.AddDistribution(&fake_chrome_frame);
197 EXPECT_EQ(2U, installs.products().size());
198 // Since our fake Chrome Frame distribution class is reporting the same
199 // installation directory as Chrome, we should have only one package object.
200 EXPECT_EQ(1U, installs.packages().size());
201 EXPECT_EQ(multi_install, installs.packages()[0]->multi_install());
202 }
OLDNEW
« no previous file with comments | « chrome/installer/util/product_state_unittest.cc ('k') | chrome/installer/util/util_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698