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

Side by Side Diff: chrome/browser/metrics/variations/variations_service_unittest.cc

Issue 883803002: Expose API on VariationsService to set the restrict mode param. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/metrics/variations/variations_service.h" 5 #include "chrome/browser/metrics/variations/variations_service.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/prefs/testing_pref_service.h" 10 #include "base/prefs/testing_pref_service.h"
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 // Simulates a variations service response by setting a date header and the 144 // Simulates a variations service response by setting a date header and the
145 // specified HTTP |response_code| on |fetcher|. 145 // specified HTTP |response_code| on |fetcher|.
146 void SimulateServerResponse(int response_code, net::TestURLFetcher* fetcher) { 146 void SimulateServerResponse(int response_code, net::TestURLFetcher* fetcher) {
147 ASSERT_TRUE(fetcher); 147 ASSERT_TRUE(fetcher);
148 scoped_refptr<net::HttpResponseHeaders> headers( 148 scoped_refptr<net::HttpResponseHeaders> headers(
149 new net::HttpResponseHeaders("date:Wed, 13 Feb 2013 00:25:24 GMT\0\0")); 149 new net::HttpResponseHeaders("date:Wed, 13 Feb 2013 00:25:24 GMT\0\0"));
150 fetcher->set_response_headers(headers); 150 fetcher->set_response_headers(headers);
151 fetcher->set_response_code(response_code); 151 fetcher->set_response_code(response_code);
152 } 152 }
153 153
154 // Helper class that abstracts away platform-specific details relating to the
155 // pref store used for the "restrict" param policy.
156 class TestVariationsPrefsStore {
157 public:
158 TestVariationsPrefsStore() {
159 #if defined(OS_ANDROID)
160 // Android uses profile prefs as the PrefService to generate the URL.
161 VariationsService::RegisterProfilePrefs(prefs_.registry());
162 #else
163 VariationsService::RegisterPrefs(prefs_.registry());
164 #endif
165
166 #if defined(OS_CHROMEOS)
167 cros_settings_ = chromeos::CrosSettings::Get();
168 DCHECK(cros_settings_ != NULL);
169 // Remove the real DeviceSettingsProvider and replace it with a stub that
170 // allows modifications in a test.
171 // TODO(asvitkine): Make a scoped helper class for this operation.
172 device_settings_provider_ = cros_settings_->GetProvider(
173 chromeos::kReportDeviceVersionInfo);
174 EXPECT_TRUE(device_settings_provider_ != NULL);
175 EXPECT_TRUE(cros_settings_->RemoveSettingsProvider(
176 device_settings_provider_));
177 cros_settings_->AddSettingsProvider(&stub_settings_provider_);
178 #endif
179 }
180
181 ~TestVariationsPrefsStore() {
182 #if defined(OS_CHROMEOS)
183 // Restore the real DeviceSettingsProvider.
184 EXPECT_TRUE(
185 cros_settings_->RemoveSettingsProvider(&stub_settings_provider_));
186 cros_settings_->AddSettingsProvider(device_settings_provider_);
187 #endif
188 }
189
190 void SetVariationsRestrictParameterPolicyValue(const std::string& value) {
191 #if defined(OS_CHROMEOS)
192 cros_settings_->SetString(chromeos::kVariationsRestrictParameter, value);
193 #else
194 prefs_.SetString(prefs::kVariationsRestrictParameter, value);
195 #endif
196 }
197
198 PrefService* prefs() { return &prefs_; }
199
200 private:
201 #if defined(OS_ANDROID)
202 // Android uses profile prefs as the PrefService to generate the URL.
203 TestingPrefServiceSyncable prefs_;
204 #else
205 TestingPrefServiceSimple prefs_;
206 #endif
207
208 #if defined(OS_CHROMEOS)
209 chromeos::CrosSettings* cros_settings_;
210 chromeos::StubCrosSettingsProvider stub_settings_provider_;
211 chromeos::CrosSettingsProvider* device_settings_provider_;
212 #endif
213
214 DISALLOW_COPY_AND_ASSIGN(TestVariationsPrefsStore);
215 };
216
154 } // namespace 217 } // namespace
155 218
156 class VariationsServiceTest : public ::testing::Test { 219 class VariationsServiceTest : public ::testing::Test {
157 protected: 220 protected:
158 VariationsServiceTest() {} 221 VariationsServiceTest() {}
159 222
160 private: 223 private:
161 #if defined(OS_CHROMEOS) 224 #if defined(OS_CHROMEOS)
162 // Not used directly. Initializes CrosSettings for testing. 225 // Not used directly. Initializes CrosSettings for testing.
163 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 226 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
164 chromeos::ScopedTestCrosSettings test_cros_settings_; 227 chromeos::ScopedTestCrosSettings test_cros_settings_;
165 #endif 228 #endif
166 229
167 DISALLOW_COPY_AND_ASSIGN(VariationsServiceTest); 230 DISALLOW_COPY_AND_ASSIGN(VariationsServiceTest);
168 }; 231 };
169 232
170 #if !defined(OS_CHROMEOS) 233 TEST_F(VariationsServiceTest, GetVariationsServerURL) {
171 TEST_F(VariationsServiceTest, VariationsURLIsValid) { 234 TestVariationsPrefsStore prefs_store;
172 #if defined(OS_ANDROID) 235 PrefService* prefs = prefs_store.prefs();
173 // Android uses profile prefs as the PrefService to generate the URL.
174 TestingPrefServiceSyncable prefs;
175 VariationsService::RegisterProfilePrefs(prefs.registry());
176 #else
177 TestingPrefServiceSimple prefs;
178 VariationsService::RegisterPrefs(prefs.registry());
179 #endif
180 const std::string default_variations_url = 236 const std::string default_variations_url =
181 VariationsService::GetDefaultVariationsServerURLForTesting(); 237 VariationsService::GetDefaultVariationsServerURLForTesting();
182 238
183 std::string value; 239 std::string value;
184 GURL url = VariationsService::GetVariationsServerURL(&prefs); 240 GURL url = VariationsService::GetVariationsServerURL(prefs, std::string());
185 EXPECT_TRUE(StartsWithASCII(url.spec(), default_variations_url, true)); 241 EXPECT_TRUE(StartsWithASCII(url.spec(), default_variations_url, true));
186 EXPECT_FALSE(net::GetValueForKeyInQuery(url, "restrict", &value)); 242 EXPECT_FALSE(net::GetValueForKeyInQuery(url, "restrict", &value));
187 243
188 prefs.SetString(prefs::kVariationsRestrictParameter, "restricted"); 244 prefs_store.SetVariationsRestrictParameterPolicyValue("restricted");
189 url = VariationsService::GetVariationsServerURL(&prefs); 245 url = VariationsService::GetVariationsServerURL(prefs, std::string());
190 EXPECT_TRUE(StartsWithASCII(url.spec(), default_variations_url, true)); 246 EXPECT_TRUE(StartsWithASCII(url.spec(), default_variations_url, true));
191 EXPECT_TRUE(net::GetValueForKeyInQuery(url, "restrict", &value)); 247 EXPECT_TRUE(net::GetValueForKeyInQuery(url, "restrict", &value));
192 EXPECT_EQ("restricted", value); 248 EXPECT_EQ("restricted", value);
193 }
194 #else
195 class VariationsServiceTestChromeOS : public VariationsServiceTest {
196 protected:
197 VariationsServiceTestChromeOS() {}
198 249
199 void SetUp() override { 250 // The override value should take precedence over what's in prefs.
200 cros_settings_ = chromeos::CrosSettings::Get(); 251 url = VariationsService::GetVariationsServerURL(prefs, "override");
201 DCHECK(cros_settings_ != NULL);
202 // Remove the real DeviceSettingsProvider and replace it with a stub that
203 // allows modifications in a test.
204 device_settings_provider_ = cros_settings_->GetProvider(
205 chromeos::kReportDeviceVersionInfo);
206 EXPECT_TRUE(device_settings_provider_ != NULL);
207 EXPECT_TRUE(cros_settings_->RemoveSettingsProvider(
208 device_settings_provider_));
209 cros_settings_->AddSettingsProvider(&stub_settings_provider_);
210 }
211
212 void TearDown() override {
213 // Restore the real DeviceSettingsProvider.
214 EXPECT_TRUE(
215 cros_settings_->RemoveSettingsProvider(&stub_settings_provider_));
216 cros_settings_->AddSettingsProvider(device_settings_provider_);
217 }
218
219 void SetVariationsRestrictParameterPolicyValue(std::string value) {
220 cros_settings_->SetString(chromeos::kVariationsRestrictParameter, value);
221 }
222
223 private:
224 chromeos::CrosSettings* cros_settings_;
225 chromeos::StubCrosSettingsProvider stub_settings_provider_;
226 chromeos::CrosSettingsProvider* device_settings_provider_;
227
228 DISALLOW_COPY_AND_ASSIGN(VariationsServiceTestChromeOS);
229 };
230
231 TEST_F(VariationsServiceTestChromeOS, VariationsURLIsValid) {
232 TestingPrefServiceSimple prefs;
233 VariationsService::RegisterPrefs(prefs.registry());
234 const std::string default_variations_url =
235 VariationsService::GetDefaultVariationsServerURLForTesting();
236
237 std::string value;
238 GURL url = VariationsService::GetVariationsServerURL(&prefs);
239 EXPECT_TRUE(StartsWithASCII(url.spec(), default_variations_url, true));
240 EXPECT_FALSE(net::GetValueForKeyInQuery(url, "restrict", &value));
241
242 SetVariationsRestrictParameterPolicyValue("restricted");
243 url = VariationsService::GetVariationsServerURL(&prefs);
244 EXPECT_TRUE(StartsWithASCII(url.spec(), default_variations_url, true)); 252 EXPECT_TRUE(StartsWithASCII(url.spec(), default_variations_url, true));
245 EXPECT_TRUE(net::GetValueForKeyInQuery(url, "restrict", &value)); 253 EXPECT_TRUE(net::GetValueForKeyInQuery(url, "restrict", &value));
246 EXPECT_EQ("restricted", value); 254 EXPECT_EQ("override", value);
247 } 255 }
248 #endif
249 256
250 TEST_F(VariationsServiceTest, VariationsURLHasOSNameParam) { 257 TEST_F(VariationsServiceTest, VariationsURLHasOSNameParam) {
251 TestingPrefServiceSimple prefs; 258 TestingPrefServiceSimple prefs;
252 VariationsService::RegisterPrefs(prefs.registry()); 259 VariationsService::RegisterPrefs(prefs.registry());
253 const GURL url = VariationsService::GetVariationsServerURL(&prefs); 260 const GURL url =
261 VariationsService::GetVariationsServerURL(&prefs, std::string());
254 262
255 std::string value; 263 std::string value;
256 EXPECT_TRUE(net::GetValueForKeyInQuery(url, "osname", &value)); 264 EXPECT_TRUE(net::GetValueForKeyInQuery(url, "osname", &value));
257 EXPECT_FALSE(value.empty()); 265 EXPECT_FALSE(value.empty());
258 } 266 }
259 267
260 TEST_F(VariationsServiceTest, RequestsInitiallyNotAllowed) { 268 TEST_F(VariationsServiceTest, RequestsInitiallyNotAllowed) {
261 base::MessageLoopForUI message_loop; 269 base::MessageLoopForUI message_loop;
262 content::TestBrowserThread ui_thread(content::BrowserThread::UI, 270 content::TestBrowserThread ui_thread(content::BrowserThread::UI,
263 &message_loop); 271 &message_loop);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 307
300 TEST_F(VariationsServiceTest, SeedStoredWhenOKStatus) { 308 TEST_F(VariationsServiceTest, SeedStoredWhenOKStatus) {
301 base::MessageLoop message_loop; 309 base::MessageLoop message_loop;
302 content::TestBrowserThread io_thread(content::BrowserThread::IO, 310 content::TestBrowserThread io_thread(content::BrowserThread::IO,
303 &message_loop); 311 &message_loop);
304 TestingPrefServiceSimple prefs; 312 TestingPrefServiceSimple prefs;
305 VariationsService::RegisterPrefs(prefs.registry()); 313 VariationsService::RegisterPrefs(prefs.registry());
306 314
307 TestVariationsService service( 315 TestVariationsService service(
308 new web_resource::TestRequestAllowedNotifier(&prefs), &prefs); 316 new web_resource::TestRequestAllowedNotifier(&prefs), &prefs);
309 const GURL url = VariationsService::GetVariationsServerURL(&prefs); 317 service.variations_server_url_ =
310 service.variations_server_url_ = url; 318 VariationsService::GetVariationsServerURL(&prefs, std::string());
311 service.set_intercepts_fetch(false); 319 service.set_intercepts_fetch(false);
312 320
313 net::TestURLFetcherFactory factory; 321 net::TestURLFetcherFactory factory;
314 service.DoActualFetch(); 322 service.DoActualFetch();
315 323
316 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); 324 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
317 SimulateServerResponse(net::HTTP_OK, fetcher); 325 SimulateServerResponse(net::HTTP_OK, fetcher);
318 fetcher->SetResponseString(SerializeSeed(CreateTestSeed())); 326 fetcher->SetResponseString(SerializeSeed(CreateTestSeed()));
319 327
320 EXPECT_FALSE(service.seed_stored()); 328 EXPECT_FALSE(service.seed_stored());
(...skipping 11 matching lines...) Expand all
332 }; 340 };
333 341
334 base::MessageLoop message_loop; 342 base::MessageLoop message_loop;
335 content::TestBrowserThread io_thread(content::BrowserThread::IO, 343 content::TestBrowserThread io_thread(content::BrowserThread::IO,
336 &message_loop); 344 &message_loop);
337 TestingPrefServiceSimple prefs; 345 TestingPrefServiceSimple prefs;
338 VariationsService::RegisterPrefs(prefs.registry()); 346 VariationsService::RegisterPrefs(prefs.registry());
339 347
340 VariationsService service( 348 VariationsService service(
341 new web_resource::TestRequestAllowedNotifier(&prefs), &prefs, NULL); 349 new web_resource::TestRequestAllowedNotifier(&prefs), &prefs, NULL);
342 const GURL url = VariationsService::GetVariationsServerURL(&prefs); 350 service.variations_server_url_ =
343 service.variations_server_url_ = url; 351 VariationsService::GetVariationsServerURL(&prefs, std::string());
344 for (size_t i = 0; i < arraysize(non_ok_status_codes); ++i) { 352 for (size_t i = 0; i < arraysize(non_ok_status_codes); ++i) {
345 net::TestURLFetcherFactory factory; 353 net::TestURLFetcherFactory factory;
346 service.DoActualFetch(); 354 service.DoActualFetch();
347 EXPECT_TRUE(prefs.FindPreference(prefs::kVariationsSeed)->IsDefaultValue()); 355 EXPECT_TRUE(prefs.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
348 356
349 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); 357 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
350 SimulateServerResponse(non_ok_status_codes[i], fetcher); 358 SimulateServerResponse(non_ok_status_codes[i], fetcher);
351 service.OnURLFetchComplete(fetcher); 359 service.OnURLFetchComplete(fetcher);
352 360
353 EXPECT_TRUE(prefs.FindPreference(prefs::kVariationsSeed)->IsDefaultValue()); 361 EXPECT_TRUE(prefs.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
354 } 362 }
355 } 363 }
356 364
357 TEST_F(VariationsServiceTest, SeedDateUpdatedOn304Status) { 365 TEST_F(VariationsServiceTest, SeedDateUpdatedOn304Status) {
358 base::MessageLoop message_loop; 366 base::MessageLoop message_loop;
359 content::TestBrowserThread io_thread(content::BrowserThread::IO, 367 content::TestBrowserThread io_thread(content::BrowserThread::IO,
360 &message_loop); 368 &message_loop);
361 TestingPrefServiceSimple prefs; 369 TestingPrefServiceSimple prefs;
362 VariationsService::RegisterPrefs(prefs.registry()); 370 VariationsService::RegisterPrefs(prefs.registry());
363 371
364 net::TestURLFetcherFactory factory; 372 net::TestURLFetcherFactory factory;
365 VariationsService service( 373 VariationsService service(
366 new web_resource::TestRequestAllowedNotifier(&prefs), &prefs, NULL); 374 new web_resource::TestRequestAllowedNotifier(&prefs), &prefs, NULL);
367 const GURL url = VariationsService::GetVariationsServerURL(&prefs); 375 service.variations_server_url_ =
368 service.variations_server_url_ = url; 376 VariationsService::GetVariationsServerURL(&prefs, std::string());
369 service.DoActualFetch(); 377 service.DoActualFetch();
370 EXPECT_TRUE( 378 EXPECT_TRUE(
371 prefs.FindPreference(prefs::kVariationsSeedDate)->IsDefaultValue()); 379 prefs.FindPreference(prefs::kVariationsSeedDate)->IsDefaultValue());
372 380
373 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); 381 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
374 SimulateServerResponse(net::HTTP_NOT_MODIFIED, fetcher); 382 SimulateServerResponse(net::HTTP_NOT_MODIFIED, fetcher);
375 service.OnURLFetchComplete(fetcher); 383 service.OnURLFetchComplete(fetcher);
376 EXPECT_FALSE( 384 EXPECT_FALSE(
377 prefs.FindPreference(prefs::kVariationsSeedDate)->IsDefaultValue()); 385 prefs.FindPreference(prefs::kVariationsSeedDate)->IsDefaultValue());
378 } 386 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 EXPECT_EQ(cases[i].expected_best_effort_notifications, 424 EXPECT_EQ(cases[i].expected_best_effort_notifications,
417 observer.best_effort_changes_notified()) << i; 425 observer.best_effort_changes_notified()) << i;
418 EXPECT_EQ(cases[i].expected_crtical_notifications, 426 EXPECT_EQ(cases[i].expected_crtical_notifications,
419 observer.crticial_changes_notified()) << i; 427 observer.crticial_changes_notified()) << i;
420 428
421 service.RemoveObserver(&observer); 429 service.RemoveObserver(&observer);
422 } 430 }
423 } 431 }
424 432
425 } // namespace chrome_variations 433 } // namespace chrome_variations
OLDNEW
« no previous file with comments | « chrome/browser/metrics/variations/variations_service.cc ('k') | chrome/browser/policy/policy_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698