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

Side by Side Diff: chrome/browser/search/suggestions/suggestions_service_unittest.cc

Issue 341943002: [Android NTP] Logging histograms for users that are part of a control group. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: don't use the macro Created 6 years, 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/search/suggestions/suggestions_service.h" 5 #include "chrome/browser/search/suggestions/suggestions_service.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 suggestions_empty_data_count_(0), 115 suggestions_empty_data_count_(0),
116 factory_(NULL, base::Bind(&CreateURLFetcher)), 116 factory_(NULL, base::Bind(&CreateURLFetcher)),
117 mock_suggestions_store_(NULL) { 117 mock_suggestions_store_(NULL) {
118 profile_ = profile_builder_.Build(); 118 profile_ = profile_builder_.Build();
119 } 119 }
120 virtual ~SuggestionsServiceTest() {} 120 virtual ~SuggestionsServiceTest() {}
121 121
122 // Enables the "ChromeSuggestions.Group1" field trial. 122 // Enables the "ChromeSuggestions.Group1" field trial.
123 void EnableFieldTrial(const std::string& url, 123 void EnableFieldTrial(const std::string& url,
124 const std::string& suggestions_suffix, 124 const std::string& suggestions_suffix,
125 const std::string& blacklist_suffix) { 125 const std::string& blacklist_suffix,
126 bool control_group) {
126 // Clear the existing |field_trial_list_| to avoid firing a DCHECK. 127 // Clear the existing |field_trial_list_| to avoid firing a DCHECK.
127 field_trial_list_.reset(NULL); 128 field_trial_list_.reset(NULL);
128 field_trial_list_.reset( 129 field_trial_list_.reset(
129 new base::FieldTrialList(new metrics::SHA1EntropyProvider("foo"))); 130 new base::FieldTrialList(new metrics::SHA1EntropyProvider("foo")));
130 131
131 chrome_variations::testing::ClearAllVariationParams(); 132 chrome_variations::testing::ClearAllVariationParams();
132 std::map<std::string, std::string> params; 133 std::map<std::string, std::string> params;
133 params[kSuggestionsFieldTrialStateParam] = 134 params[kSuggestionsFieldTrialStateParam] =
134 kSuggestionsFieldTrialStateEnabled; 135 kSuggestionsFieldTrialStateEnabled;
136 if (control_group) {
137 params[kSuggestionsFieldTrialControlParam] =
138 kSuggestionsFieldTrialStateEnabled;
139 }
135 params[kSuggestionsFieldTrialURLParam] = url; 140 params[kSuggestionsFieldTrialURLParam] = url;
136 params[kSuggestionsFieldTrialSuggestionsSuffixParam] = suggestions_suffix; 141 params[kSuggestionsFieldTrialSuggestionsSuffixParam] = suggestions_suffix;
137 params[kSuggestionsFieldTrialBlacklistSuffixParam] = blacklist_suffix; 142 params[kSuggestionsFieldTrialBlacklistSuffixParam] = blacklist_suffix;
138 chrome_variations::AssociateVariationParams(kSuggestionsFieldTrialName, 143 chrome_variations::AssociateVariationParams(kSuggestionsFieldTrialName,
139 "Group1", params); 144 "Group1", params);
140 field_trial_ = base::FieldTrialList::CreateFieldTrial( 145 field_trial_ = base::FieldTrialList::CreateFieldTrial(
141 kSuggestionsFieldTrialName, "Group1"); 146 kSuggestionsFieldTrialName, "Group1");
142 field_trial_->group(); 147 field_trial_->group();
143 } 148 }
144 149
145 SuggestionsService* CreateSuggestionsService() { 150 SuggestionsService* CreateSuggestionsService() {
146 SuggestionsServiceFactory* suggestions_service_factory = 151 SuggestionsServiceFactory* suggestions_service_factory =
147 SuggestionsServiceFactory::GetInstance(); 152 SuggestionsServiceFactory::GetInstance();
148 return suggestions_service_factory->GetForProfile(profile_.get()); 153 return suggestions_service_factory->GetForProfile(profile_.get());
149 } 154 }
150 155
151 // Should not be called more than once per test since it stashes the 156 // Should not be called more than once per test since it stashes the
152 // SuggestionsStore in |mock_suggestions_store_|. 157 // SuggestionsStore in |mock_suggestions_store_|.
153 SuggestionsService* CreateSuggestionsServiceWithMockStore() { 158 SuggestionsService* CreateSuggestionsServiceWithMockStore() {
154 mock_suggestions_store_ = new StrictMock<MockSuggestionsStore>(); 159 mock_suggestions_store_ = new StrictMock<MockSuggestionsStore>();
155 return new SuggestionsService( 160 return new SuggestionsService(
156 profile_.get(), scoped_ptr<SuggestionsStore>(mock_suggestions_store_)); 161 profile_.get(), scoped_ptr<SuggestionsStore>(mock_suggestions_store_));
157 } 162 }
158 163
159 void FetchSuggestionsDataNoTimeoutHelper(bool interleaved_requests) { 164 void FetchSuggestionsDataNoTimeoutHelper(bool interleaved_requests) {
160 // Field trial enabled with a specific suggestions URL. 165 // Field trial enabled with a specific suggestions URL.
161 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsSuffix, 166 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsSuffix,
162 kFakeBlacklistSuffix); 167 kFakeBlacklistSuffix, false);
163 scoped_ptr<SuggestionsService> suggestions_service( 168 scoped_ptr<SuggestionsService> suggestions_service(
164 CreateSuggestionsServiceWithMockStore()); 169 CreateSuggestionsServiceWithMockStore());
165 EXPECT_TRUE(suggestions_service != NULL); 170 EXPECT_TRUE(suggestions_service != NULL);
166 scoped_ptr<SuggestionsProfile> suggestions_profile( 171 scoped_ptr<SuggestionsProfile> suggestions_profile(
167 CreateSuggestionsProfile()); 172 CreateSuggestionsProfile());
168 173
169 // Set up net::FakeURLFetcherFactory. 174 // Set up net::FakeURLFetcherFactory.
170 std::string expected_url = 175 std::string expected_url =
171 std::string(kFakeSuggestionsURL) + kFakeSuggestionsSuffix; 176 std::string(kFakeSuggestionsURL) + kFakeSuggestionsSuffix;
172 factory_.SetFakeResponse(GURL(expected_url), 177 factory_.SetFakeResponse(GURL(expected_url),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 scoped_ptr<TestingProfile> profile_; 221 scoped_ptr<TestingProfile> profile_;
217 222
218 DISALLOW_COPY_AND_ASSIGN(SuggestionsServiceTest); 223 DISALLOW_COPY_AND_ASSIGN(SuggestionsServiceTest);
219 }; 224 };
220 225
221 TEST_F(SuggestionsServiceTest, ServiceBeingCreated) { 226 TEST_F(SuggestionsServiceTest, ServiceBeingCreated) {
222 // Field trial not enabled. 227 // Field trial not enabled.
223 EXPECT_TRUE(CreateSuggestionsService() == NULL); 228 EXPECT_TRUE(CreateSuggestionsService() == NULL);
224 229
225 // Field trial enabled. 230 // Field trial enabled.
226 EnableFieldTrial("", "", ""); 231 EnableFieldTrial("", "", "", false);
227 EXPECT_TRUE(CreateSuggestionsService() != NULL); 232 EXPECT_TRUE(CreateSuggestionsService() != NULL);
228 } 233 }
229 234
235 TEST_F(SuggestionsServiceTest, IsControlGroup) {
236 // Field trial enabled.
237 EnableFieldTrial("", "", "", false);
238 EXPECT_FALSE(SuggestionsService::IsControlGroup());
239
240 EnableFieldTrial("", "", "", true);
241 EXPECT_TRUE(SuggestionsService::IsControlGroup());
242 }
243
230 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataNoTimeout) { 244 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataNoTimeout) {
231 FetchSuggestionsDataNoTimeoutHelper(false); 245 FetchSuggestionsDataNoTimeoutHelper(false);
232 } 246 }
233 247
234 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataNoTimeoutInterleaved) { 248 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataNoTimeoutInterleaved) {
235 FetchSuggestionsDataNoTimeoutHelper(true); 249 FetchSuggestionsDataNoTimeoutHelper(true);
236 } 250 }
237 251
238 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataRequestError) { 252 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataRequestError) {
239 // Field trial enabled with a specific suggestions URL. 253 // Field trial enabled with a specific suggestions URL.
240 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsSuffix, 254 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsSuffix,
241 kFakeBlacklistSuffix); 255 kFakeBlacklistSuffix, false);
242 scoped_ptr<SuggestionsService> suggestions_service( 256 scoped_ptr<SuggestionsService> suggestions_service(
243 CreateSuggestionsServiceWithMockStore()); 257 CreateSuggestionsServiceWithMockStore());
244 EXPECT_TRUE(suggestions_service != NULL); 258 EXPECT_TRUE(suggestions_service != NULL);
245 259
246 // Fake a request error. 260 // Fake a request error.
247 std::string expected_url = 261 std::string expected_url =
248 std::string(kFakeSuggestionsURL) + kFakeSuggestionsSuffix; 262 std::string(kFakeSuggestionsURL) + kFakeSuggestionsSuffix;
249 factory_.SetFakeResponse(GURL(expected_url), "irrelevant", net::HTTP_OK, 263 factory_.SetFakeResponse(GURL(expected_url), "irrelevant", net::HTTP_OK,
250 net::URLRequestStatus::FAILED); 264 net::URLRequestStatus::FAILED);
251 265
252 // Set up expectations on the SuggestionsStore. 266 // Set up expectations on the SuggestionsStore.
253 EXPECT_CALL(*mock_suggestions_store_, LoadSuggestions(_)) 267 EXPECT_CALL(*mock_suggestions_store_, LoadSuggestions(_))
254 .WillOnce(Return(true)); 268 .WillOnce(Return(true));
255 269
256 // Send the request. Empty data will be returned to the callback. 270 // Send the request. Empty data will be returned to the callback.
257 suggestions_service->FetchSuggestionsData( 271 suggestions_service->FetchSuggestionsData(
258 base::Bind(&SuggestionsServiceTest::ExpectEmptySuggestionsProfile, 272 base::Bind(&SuggestionsServiceTest::ExpectEmptySuggestionsProfile,
259 base::Unretained(this))); 273 base::Unretained(this)));
260 274
261 // (Testing only) wait until suggestion fetch is complete. 275 // (Testing only) wait until suggestion fetch is complete.
262 base::MessageLoop::current()->RunUntilIdle(); 276 base::MessageLoop::current()->RunUntilIdle();
263 277
264 // Ensure that ExpectEmptySuggestionsProfile ran once. 278 // Ensure that ExpectEmptySuggestionsProfile ran once.
265 EXPECT_EQ(1, suggestions_empty_data_count_); 279 EXPECT_EQ(1, suggestions_empty_data_count_);
266 } 280 }
267 281
268 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataResponseNotOK) { 282 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataResponseNotOK) {
269 // Field trial enabled with a specific suggestions URL. 283 // Field trial enabled with a specific suggestions URL.
270 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsSuffix, 284 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsSuffix,
271 kFakeBlacklistSuffix); 285 kFakeBlacklistSuffix, false);
272 scoped_ptr<SuggestionsService> suggestions_service( 286 scoped_ptr<SuggestionsService> suggestions_service(
273 CreateSuggestionsServiceWithMockStore()); 287 CreateSuggestionsServiceWithMockStore());
274 EXPECT_TRUE(suggestions_service != NULL); 288 EXPECT_TRUE(suggestions_service != NULL);
275 289
276 // Response code != 200. 290 // Response code != 200.
277 std::string expected_url = 291 std::string expected_url =
278 std::string(kFakeSuggestionsURL) + kFakeSuggestionsSuffix; 292 std::string(kFakeSuggestionsURL) + kFakeSuggestionsSuffix;
279 factory_.SetFakeResponse(GURL(expected_url), "irrelevant", 293 factory_.SetFakeResponse(GURL(expected_url), "irrelevant",
280 net::HTTP_BAD_REQUEST, 294 net::HTTP_BAD_REQUEST,
281 net::URLRequestStatus::SUCCESS); 295 net::URLRequestStatus::SUCCESS);
282 296
283 // Set up expectations on the SuggestionsStore. 297 // Set up expectations on the SuggestionsStore.
284 EXPECT_CALL(*mock_suggestions_store_, ClearSuggestions()); 298 EXPECT_CALL(*mock_suggestions_store_, ClearSuggestions());
285 299
286 // Send the request. Empty data will be returned to the callback. 300 // Send the request. Empty data will be returned to the callback.
287 suggestions_service->FetchSuggestionsData( 301 suggestions_service->FetchSuggestionsData(
288 base::Bind(&SuggestionsServiceTest::ExpectEmptySuggestionsProfile, 302 base::Bind(&SuggestionsServiceTest::ExpectEmptySuggestionsProfile,
289 base::Unretained(this))); 303 base::Unretained(this)));
290 304
291 // (Testing only) wait until suggestion fetch is complete. 305 // (Testing only) wait until suggestion fetch is complete.
292 base::MessageLoop::current()->RunUntilIdle(); 306 base::MessageLoop::current()->RunUntilIdle();
293 307
294 // Ensure that ExpectEmptySuggestionsProfile ran once. 308 // Ensure that ExpectEmptySuggestionsProfile ran once.
295 EXPECT_EQ(1, suggestions_empty_data_count_); 309 EXPECT_EQ(1, suggestions_empty_data_count_);
296 } 310 }
297 311
298 TEST_F(SuggestionsServiceTest, BlacklistURL) { 312 TEST_F(SuggestionsServiceTest, BlacklistURL) {
299 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsSuffix, 313 EnableFieldTrial(kFakeSuggestionsURL, kFakeSuggestionsSuffix,
300 kFakeBlacklistSuffix); 314 kFakeBlacklistSuffix, false);
301 scoped_ptr<SuggestionsService> suggestions_service( 315 scoped_ptr<SuggestionsService> suggestions_service(
302 CreateSuggestionsServiceWithMockStore()); 316 CreateSuggestionsServiceWithMockStore());
303 EXPECT_TRUE(suggestions_service != NULL); 317 EXPECT_TRUE(suggestions_service != NULL);
304 318
305 std::string expected_url(kFakeSuggestionsURL); 319 std::string expected_url(kFakeSuggestionsURL);
306 expected_url.append(kFakeBlacklistSuffix) 320 expected_url.append(kFakeBlacklistSuffix)
307 .append(net::EscapeQueryParamValue(GURL(kBlacklistUrl).spec(), true)); 321 .append(net::EscapeQueryParamValue(GURL(kBlacklistUrl).spec(), true));
308 scoped_ptr<SuggestionsProfile> suggestions_profile( 322 scoped_ptr<SuggestionsProfile> suggestions_profile(
309 CreateSuggestionsProfile()); 323 CreateSuggestionsProfile());
310 factory_.SetFakeResponse(GURL(expected_url), 324 factory_.SetFakeResponse(GURL(expected_url),
(...skipping 12 matching lines...) Expand all
323 base::Unretained(this))); 337 base::Unretained(this)));
324 338
325 // (Testing only) wait until blacklist request is complete. 339 // (Testing only) wait until blacklist request is complete.
326 base::MessageLoop::current()->RunUntilIdle(); 340 base::MessageLoop::current()->RunUntilIdle();
327 341
328 // Ensure that CheckSuggestionsData() ran once. 342 // Ensure that CheckSuggestionsData() ran once.
329 EXPECT_EQ(1, suggestions_data_check_count_); 343 EXPECT_EQ(1, suggestions_data_check_count_);
330 } 344 }
331 345
332 } // namespace suggestions 346 } // namespace suggestions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698