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

Side by Side Diff: components/suggestions/suggestions_service_unittest.cc

Issue 1259123002: SuggestionsService support for Desktop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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
« no previous file with comments | « components/suggestions/suggestions_service.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "components/suggestions/suggestions_service.h" 5 #include "components/suggestions/suggestions_service.h"
6 6
7 #include <map> 7 #include <map>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 18 matching lines...) Expand all
29 using ::testing::Return; 29 using ::testing::Return;
30 using testing::SetArgPointee; 30 using testing::SetArgPointee;
31 using ::testing::NiceMock; 31 using ::testing::NiceMock;
32 using ::testing::StrictMock; 32 using ::testing::StrictMock;
33 using ::testing::_; 33 using ::testing::_;
34 34
35 namespace { 35 namespace {
36 36
37 const char kTestTitle[] = "a title"; 37 const char kTestTitle[] = "a title";
38 const char kTestUrl[] = "http://go.com"; 38 const char kTestUrl[] = "http://go.com";
39 const char kTestFaviconUrl[] =
40 "https://s2.googleusercontent.com/s2/favicons?domain_url="
41 "http://go.com&alt=s&sz=32";
39 const char kBlacklistUrl[] = "http://blacklist.com"; 42 const char kBlacklistUrl[] = "http://blacklist.com";
40 const char kBlacklistUrlAlt[] = "http://blacklist-atl.com"; 43 const char kBlacklistUrlAlt[] = "http://blacklist-atl.com";
41 const int64 kTestDefaultExpiry = 1402200000000000; 44 const int64 kTestDefaultExpiry = 1402200000000000;
42 const int64 kTestSetExpiry = 1404792000000000; 45 const int64 kTestSetExpiry = 1404792000000000;
43 46
44 scoped_ptr<net::FakeURLFetcher> CreateURLFetcher( 47 scoped_ptr<net::FakeURLFetcher> CreateURLFetcher(
45 const GURL& url, net::URLFetcherDelegate* delegate, 48 const GURL& url, net::URLFetcherDelegate* delegate,
46 const std::string& response_data, net::HttpStatusCode response_code, 49 const std::string& response_data, net::HttpStatusCode response_code,
47 net::URLRequestStatus::Status status) { 50 net::URLRequestStatus::Status status) {
48 scoped_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher( 51 scoped_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher(
49 url, delegate, response_data, response_code, status)); 52 url, delegate, response_data, response_code, status));
50 53
51 if (response_code == net::HTTP_OK) { 54 if (response_code == net::HTTP_OK) {
52 scoped_refptr<net::HttpResponseHeaders> download_headers( 55 scoped_refptr<net::HttpResponseHeaders> download_headers(
53 new net::HttpResponseHeaders("")); 56 new net::HttpResponseHeaders(""));
54 download_headers->AddHeader("Content-Type: text/html"); 57 download_headers->AddHeader("Content-Type: text/html");
55 fetcher->set_response_headers(download_headers); 58 fetcher->set_response_headers(download_headers);
56 } 59 }
57 return fetcher.Pass(); 60 return fetcher.Pass();
58 } 61 }
59 62
60 std::string GetExpectedBlacklistRequestUrl(const GURL& blacklist_url) { 63 std::string GetExpectedBlacklistRequestUrl(const GURL& blacklist_url) {
61 std::stringstream request_url; 64 std::stringstream request_url;
62 request_url << "https://www.google.com/chromesuggestions/blacklist?t=2&url=" 65 request_url << suggestions::kSuggestionsBlacklistURLPrefix
63 << net::EscapeQueryParamValue(blacklist_url.spec(), true); 66 << net::EscapeQueryParamValue(blacklist_url.spec(), true);
64 return request_url.str(); 67 return request_url.str();
65 } 68 }
66 69
67 // GMock matcher for protobuf equality. 70 // GMock matcher for protobuf equality.
68 MATCHER_P(EqualsProto, message, "") { 71 MATCHER_P(EqualsProto, message, "") {
69 // This implementation assumes protobuf serialization is deterministic, which 72 // This implementation assumes protobuf serialization is deterministic, which
70 // is true in practice but technically not something that code is supposed 73 // is true in practice but technically not something that code is supposed
71 // to rely on. However, it vastly simplifies the implementation. 74 // to rely on. However, it vastly simplifies the implementation.
72 std::string expected_serialized, actual_serialized; 75 std::string expected_serialized, actual_serialized;
(...skipping 29 matching lines...) Expand all
102 105
103 return profile; 106 return profile;
104 } 107 }
105 108
106 class TestSuggestionsStore : public suggestions::SuggestionsStore { 109 class TestSuggestionsStore : public suggestions::SuggestionsStore {
107 public: 110 public:
108 TestSuggestionsStore() { 111 TestSuggestionsStore() {
109 cached_suggestions = CreateSuggestionsProfile(); 112 cached_suggestions = CreateSuggestionsProfile();
110 } 113 }
111 bool LoadSuggestions(SuggestionsProfile* suggestions) override { 114 bool LoadSuggestions(SuggestionsProfile* suggestions) override {
112 if (cached_suggestions.suggestions_size()) { 115 suggestions->CopyFrom(cached_suggestions);
113 *suggestions = cached_suggestions; 116 return cached_suggestions.suggestions_size();
114 return true;
115 }
116 return false;
117 } 117 }
118 bool StoreSuggestions(const SuggestionsProfile& suggestions) 118 bool StoreSuggestions(const SuggestionsProfile& suggestions)
119 override { 119 override {
120 cached_suggestions = suggestions; 120 cached_suggestions.CopyFrom(suggestions);
121 return true; 121 return true;
122 } 122 }
123 void ClearSuggestions() override { 123 void ClearSuggestions() override {
124 cached_suggestions = SuggestionsProfile(); 124 cached_suggestions = SuggestionsProfile();
125 } 125 }
126 126
127 SuggestionsProfile cached_suggestions; 127 SuggestionsProfile cached_suggestions;
128 }; 128 };
129 129
130 class MockImageManager : public suggestions::ImageManager { 130 class MockImageManager : public suggestions::ImageManager {
131 public: 131 public:
132 MockImageManager() {} 132 MockImageManager() {}
133 virtual ~MockImageManager() {} 133 virtual ~MockImageManager() {}
134 MOCK_METHOD1(Initialize, void(const SuggestionsProfile&)); 134 MOCK_METHOD1(Initialize, void(const SuggestionsProfile&));
135 MOCK_METHOD2(GetImageForURL, 135 MOCK_METHOD2(GetImageForURL,
136 void(const GURL&, 136 void(const GURL&,
137 base::Callback<void(const GURL&, const SkBitmap*)>)); 137 base::Callback<void(const GURL&, const SkBitmap*)>));
138 }; 138 };
139 139
140 class MockBlacklistStore : public suggestions::BlacklistStore { 140 class MockBlacklistStore : public suggestions::BlacklistStore {
141 public: 141 public:
142 MOCK_METHOD1(BlacklistUrl, bool(const GURL&)); 142 MOCK_METHOD1(BlacklistUrl, bool(const GURL&));
143 MOCK_METHOD0(IsEmpty, bool()); 143 MOCK_METHOD0(IsEmpty, bool());
144 MOCK_METHOD1(GetTimeUntilReadyForUpload, bool(base::TimeDelta*)); 144 MOCK_METHOD1(GetTimeUntilReadyForUpload, bool(base::TimeDelta*));
145 MOCK_METHOD2(GetTimeUntilURLReadyForUpload, 145 MOCK_METHOD2(GetTimeUntilURLReadyForUpload,
146 bool(const GURL&, base::TimeDelta*)); 146 bool(const GURL&, base::TimeDelta*));
147 MOCK_METHOD1(GetCandidateForUpload, bool(GURL*)); 147 MOCK_METHOD1(GetCandidateForUpload, bool(GURL*));
148 MOCK_METHOD1(RemoveUrl, bool(const GURL&)); 148 MOCK_METHOD1(RemoveUrl, bool(const GURL&));
149 MOCK_METHOD1(FilterSuggestions, void(SuggestionsProfile*)); 149 MOCK_METHOD1(FilterSuggestions, void(SuggestionsProfile*));
150 MOCK_METHOD0(ClearBlacklist, void());
150 }; 151 };
151 152
152 class SuggestionsServiceTest : public testing::Test { 153 class SuggestionsServiceTest : public testing::Test {
153 public: 154 public:
154 void CheckSuggestionsData(const SuggestionsProfile& suggestions_profile) { 155 void CheckCallback(const SuggestionsProfile& suggestions_profile) {
156 ++suggestions_data_callback_count_;
157 }
158
159 void CheckSuggestionsData() {
160 SuggestionsProfile suggestions_profile;
161 test_suggestions_store_->LoadSuggestions(&suggestions_profile);
155 EXPECT_EQ(1, suggestions_profile.suggestions_size()); 162 EXPECT_EQ(1, suggestions_profile.suggestions_size());
156 EXPECT_EQ(kTestTitle, suggestions_profile.suggestions(0).title()); 163 EXPECT_EQ(kTestTitle, suggestions_profile.suggestions(0).title());
157 EXPECT_EQ(kTestUrl, suggestions_profile.suggestions(0).url()); 164 EXPECT_EQ(kTestUrl, suggestions_profile.suggestions(0).url());
158 ++suggestions_data_check_count_; 165 EXPECT_EQ(kTestFaviconUrl,
166 suggestions_profile.suggestions(0).favicon_url());
159 } 167 }
160 168
161 void SetBlacklistFailure() { 169 void SetBlacklistFailure() {
162 blacklisting_failed_ = true; 170 blacklisting_failed_ = true;
163 } 171 }
164 172
165 void SetUndoBlacklistFailure() { 173 void SetUndoBlacklistFailure() {
166 undo_blacklisting_failed_ = true; 174 undo_blacklisting_failed_ = true;
167 } 175 }
168 176
169 void ExpectEmptySuggestionsProfile(const SuggestionsProfile& profile) { 177 void ExpectEmptySuggestionsProfile(const SuggestionsProfile& profile) {
170 EXPECT_EQ(0, profile.suggestions_size()); 178 EXPECT_EQ(0, profile.suggestions_size());
171 ++suggestions_empty_data_count_; 179 ++suggestions_empty_data_count_;
172 } 180 }
173 181
174 int suggestions_data_check_count_; 182 int suggestions_data_callback_count_;
175 int suggestions_empty_data_count_; 183 int suggestions_empty_data_count_;
176 bool blacklisting_failed_; 184 bool blacklisting_failed_;
177 bool undo_blacklisting_failed_; 185 bool undo_blacklisting_failed_;
178 186
179 protected: 187 protected:
180 SuggestionsServiceTest() 188 SuggestionsServiceTest()
181 : suggestions_data_check_count_(0), 189 : suggestions_data_callback_count_(0),
182 suggestions_empty_data_count_(0), 190 suggestions_empty_data_count_(0),
183 blacklisting_failed_(false), 191 blacklisting_failed_(false),
184 undo_blacklisting_failed_(false), 192 undo_blacklisting_failed_(false),
185 factory_(NULL, base::Bind(&CreateURLFetcher)), 193 factory_(NULL, base::Bind(&CreateURLFetcher)),
186 mock_thumbnail_manager_(NULL), 194 mock_thumbnail_manager_(NULL),
187 mock_blacklist_store_(NULL), 195 mock_blacklist_store_(NULL),
188 test_suggestions_store_(NULL) {} 196 test_suggestions_store_(NULL) {}
189 197
190 ~SuggestionsServiceTest() override {} 198 ~SuggestionsServiceTest() override {}
191 199
192 void SetUp() override { 200 void SetUp() override {
193 request_context_ = 201 request_context_ =
194 new net::TestURLRequestContextGetter(io_message_loop_.task_runner()); 202 new net::TestURLRequestContextGetter(io_message_loop_.task_runner());
195 } 203 }
196 204
197 void FetchSuggestionsDataHelper(SyncState sync_state) { 205 void FetchSuggestionsDataHelper(SyncState sync_state) {
198 scoped_ptr<SuggestionsService> suggestions_service( 206 scoped_ptr<SuggestionsService> suggestions_service(
199 CreateSuggestionsServiceWithMocks()); 207 CreateSuggestionsServiceWithMocks());
200 EXPECT_TRUE(suggestions_service != NULL); 208 EXPECT_TRUE(suggestions_service != NULL);
201 209
202 // Add some suggestions in the cache. 210 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile();
203 FillSuggestionsStore();
204 SuggestionsProfile suggestions_profile;
205 test_suggestions_store_->LoadSuggestions(&suggestions_profile);
206 211
207 // Set up net::FakeURLFetcherFactory. 212 // Set up net::FakeURLFetcherFactory.
208 factory_.SetFakeResponse(GURL(kSuggestionsURL), 213 factory_.SetFakeResponse(GURL(kSuggestionsURL),
209 suggestions_profile.SerializeAsString(), 214 suggestions_profile.SerializeAsString(),
210 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 215 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
211 216
212 // Expectations. 217 // Expectations.
213 EXPECT_CALL(*mock_thumbnail_manager_, 218 EXPECT_CALL(*mock_thumbnail_manager_,
214 Initialize(EqualsProto(suggestions_profile))); 219 Initialize(EqualsProto(suggestions_profile)));
215 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)); 220 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_));
216 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) 221 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_))
217 .WillOnce(Return(false)); 222 .WillOnce(Return(false));
218 223
219 // Send the request. The data will be returned to the callback. 224 // Send the request. The data will be returned to the callback.
220 suggestions_service->FetchSuggestionsData( 225 suggestions_service->FetchSuggestionsData(
221 sync_state, 226 sync_state, base::Bind(&SuggestionsServiceTest::CheckCallback,
222 base::Bind(&SuggestionsServiceTest::CheckSuggestionsData, 227 base::Unretained(this)));
223 base::Unretained(this)));
224 228
225 // Ensure that CheckSuggestionsData() ran once. 229 // Ensure that CheckSuggestionsData() ran once.
226 EXPECT_EQ(1, suggestions_data_check_count_); 230 EXPECT_EQ(1, suggestions_data_callback_count_);
227 231
228 // Let the network request run. 232 // Let the network request run.
229 io_message_loop_.RunUntilIdle(); 233 io_message_loop_.RunUntilIdle();
234
235 CheckSuggestionsData();
230 } 236 }
231 237
232 SuggestionsService* CreateSuggestionsServiceWithMocks() { 238 SuggestionsService* CreateSuggestionsServiceWithMocks() {
233 // These objects are owned by the returned SuggestionsService, but we keep 239 // These objects are owned by the returned SuggestionsService, but we keep
234 // the pointer around for testing. 240 // the pointer around for testing.
235 test_suggestions_store_ = new TestSuggestionsStore(); 241 test_suggestions_store_ = new TestSuggestionsStore();
236 mock_thumbnail_manager_ = new StrictMock<MockImageManager>(); 242 mock_thumbnail_manager_ = new StrictMock<MockImageManager>();
237 mock_blacklist_store_ = new StrictMock<MockBlacklistStore>(); 243 mock_blacklist_store_ = new StrictMock<MockBlacklistStore>();
238 return new SuggestionsService( 244 return new SuggestionsService(
239 request_context_.get(), 245 request_context_.get(),
240 scoped_ptr<SuggestionsStore>(test_suggestions_store_), 246 scoped_ptr<SuggestionsStore>(test_suggestions_store_),
241 scoped_ptr<ImageManager>(mock_thumbnail_manager_), 247 scoped_ptr<ImageManager>(mock_thumbnail_manager_),
242 scoped_ptr<BlacklistStore>(mock_blacklist_store_)); 248 scoped_ptr<BlacklistStore>(mock_blacklist_store_));
243 } 249 }
244 250
245 void FillSuggestionsStore() {
246 test_suggestions_store_->StoreSuggestions(CreateSuggestionsProfile());
247 }
248
249 void Blacklist(SuggestionsService* suggestions_service, GURL url) { 251 void Blacklist(SuggestionsService* suggestions_service, GURL url) {
250 suggestions_service->BlacklistURL( 252 suggestions_service->BlacklistURL(
251 url, 253 url, base::Bind(&SuggestionsServiceTest::CheckCallback,
252 base::Bind(&SuggestionsServiceTest::CheckSuggestionsData, 254 base::Unretained(this)),
253 base::Unretained(this)),
254 base::Bind(&SuggestionsServiceTest::SetBlacklistFailure, 255 base::Bind(&SuggestionsServiceTest::SetBlacklistFailure,
255 base::Unretained(this))); 256 base::Unretained(this)));
256 } 257 }
257 258
258 void UndoBlacklist(SuggestionsService* suggestions_service, GURL url) { 259 void UndoBlacklist(SuggestionsService* suggestions_service, GURL url) {
259 suggestions_service->UndoBlacklistURL( 260 suggestions_service->UndoBlacklistURL(
260 url, 261 url, base::Bind(&SuggestionsServiceTest::CheckCallback,
261 base::Bind(&SuggestionsServiceTest::CheckSuggestionsData, 262 base::Unretained(this)),
262 base::Unretained(this)),
263 base::Bind(&SuggestionsServiceTest::SetUndoBlacklistFailure, 263 base::Bind(&SuggestionsServiceTest::SetUndoBlacklistFailure,
264 base::Unretained(this))); 264 base::Unretained(this)));
265 } 265 }
266 266
267 // Helper for Undo failure tests. Depending on |is_uploaded|, tests either 267 // Helper for Undo failure tests. Depending on |is_uploaded|, tests either
268 // the case where the URL is no longer in the local blacklist or the case 268 // the case where the URL is no longer in the local blacklist or the case
269 // in which it's not yet candidate for upload. 269 // in which it's not yet candidate for upload.
270 void UndoBlacklistURLFailsHelper(bool is_uploaded) { 270 void UndoBlacklistURLFailsHelper(bool is_uploaded) {
271 scoped_ptr<SuggestionsService> suggestions_service( 271 scoped_ptr<SuggestionsService> suggestions_service(
272 CreateSuggestionsServiceWithMocks()); 272 CreateSuggestionsServiceWithMocks());
(...skipping 22 matching lines...) Expand all
295 // URL is not yet candidate for upload. 295 // URL is not yet candidate for upload.
296 base::TimeDelta negative_delay = base::TimeDelta::FromHours(-1); 296 base::TimeDelta negative_delay = base::TimeDelta::FromHours(-1);
297 EXPECT_CALL(*mock_blacklist_store_, 297 EXPECT_CALL(*mock_blacklist_store_,
298 GetTimeUntilURLReadyForUpload(Eq(blacklist_url), _)) 298 GetTimeUntilURLReadyForUpload(Eq(blacklist_url), _))
299 .WillOnce(DoAll(SetArgPointee<1>(negative_delay), Return(true))); 299 .WillOnce(DoAll(SetArgPointee<1>(negative_delay), Return(true)));
300 } 300 }
301 301
302 Blacklist(suggestions_service.get(), blacklist_url); 302 Blacklist(suggestions_service.get(), blacklist_url);
303 UndoBlacklist(suggestions_service.get(), blacklist_url); 303 UndoBlacklist(suggestions_service.get(), blacklist_url);
304 304
305 EXPECT_EQ(1, suggestions_data_check_count_); 305 EXPECT_EQ(1, suggestions_data_callback_count_);
306 EXPECT_FALSE(blacklisting_failed_); 306 EXPECT_FALSE(blacklisting_failed_);
307 EXPECT_TRUE(undo_blacklisting_failed_); 307 EXPECT_TRUE(undo_blacklisting_failed_);
308 } 308 }
309 309
310 protected: 310 protected:
311 base::MessageLoopForIO io_message_loop_; 311 base::MessageLoopForIO io_message_loop_;
312 net::FakeURLFetcherFactory factory_; 312 net::FakeURLFetcherFactory factory_;
313 // Only used if the SuggestionsService is built with mocks. Not owned. 313 // Only used if the SuggestionsService is built with mocks. Not owned.
314 MockImageManager* mock_thumbnail_manager_; 314 MockImageManager* mock_thumbnail_manager_;
315 MockBlacklistStore* mock_blacklist_store_; 315 MockBlacklistStore* mock_blacklist_store_;
(...skipping 10 matching lines...) Expand all
326 326
327 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataSyncNotInitializedEnabled) { 327 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataSyncNotInitializedEnabled) {
328 FetchSuggestionsDataHelper(NOT_INITIALIZED_ENABLED); 328 FetchSuggestionsDataHelper(NOT_INITIALIZED_ENABLED);
329 } 329 }
330 330
331 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataSyncDisabled) { 331 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataSyncDisabled) {
332 scoped_ptr<SuggestionsService> suggestions_service( 332 scoped_ptr<SuggestionsService> suggestions_service(
333 CreateSuggestionsServiceWithMocks()); 333 CreateSuggestionsServiceWithMocks());
334 EXPECT_TRUE(suggestions_service != NULL); 334 EXPECT_TRUE(suggestions_service != NULL);
335 335
336 FillSuggestionsStore();
337
338 // Send the request. Cache is cleared and empty data will be returned to the 336 // Send the request. Cache is cleared and empty data will be returned to the
339 // callback. 337 // callback.
340 suggestions_service->FetchSuggestionsData( 338 suggestions_service->FetchSuggestionsData(
341 SYNC_OR_HISTORY_SYNC_DISABLED, 339 SYNC_OR_HISTORY_SYNC_DISABLED,
342 base::Bind(&SuggestionsServiceTest::ExpectEmptySuggestionsProfile, 340 base::Bind(&SuggestionsServiceTest::ExpectEmptySuggestionsProfile,
343 base::Unretained(this))); 341 base::Unretained(this)));
344 342
345 // Ensure that ExpectEmptySuggestionsProfile ran once. 343 // Ensure that ExpectEmptySuggestionsProfile ran once.
346 EXPECT_EQ(1, suggestions_empty_data_count_); 344 EXPECT_EQ(1, suggestions_empty_data_count_);
347 } 345 }
(...skipping 15 matching lines...) Expand all
363 361
364 // (Testing only) wait until suggestion fetch is complete. 362 // (Testing only) wait until suggestion fetch is complete.
365 io_message_loop_.RunUntilIdle(); 363 io_message_loop_.RunUntilIdle();
366 } 364 }
367 365
368 TEST_F(SuggestionsServiceTest, IssueRequestIfNoneOngoingResponseNotOK) { 366 TEST_F(SuggestionsServiceTest, IssueRequestIfNoneOngoingResponseNotOK) {
369 scoped_ptr<SuggestionsService> suggestions_service( 367 scoped_ptr<SuggestionsService> suggestions_service(
370 CreateSuggestionsServiceWithMocks()); 368 CreateSuggestionsServiceWithMocks());
371 EXPECT_TRUE(suggestions_service != NULL); 369 EXPECT_TRUE(suggestions_service != NULL);
372 370
373 // Add some suggestions in the cache.
374 FillSuggestionsStore();
375
376 // Fake a non-200 response code. 371 // Fake a non-200 response code.
377 factory_.SetFakeResponse(GURL(kSuggestionsURL), "irrelevant", 372 factory_.SetFakeResponse(GURL(kSuggestionsURL), "irrelevant",
378 net::HTTP_BAD_REQUEST, 373 net::HTTP_BAD_REQUEST,
379 net::URLRequestStatus::SUCCESS); 374 net::URLRequestStatus::SUCCESS);
380 375
381 // Expect that an upload to the blacklist is scheduled. 376 // Expect that an upload to the blacklist is scheduled.
382 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) 377 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_))
383 .WillOnce(Return(false)); 378 .WillOnce(Return(false));
384 379
385 // Send the request. Empty data will be returned to the callback. 380 // Send the request. Empty data will be returned to the callback.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 Blacklist(suggestions_service.get(), blacklist_url); 419 Blacklist(suggestions_service.get(), blacklist_url);
425 420
426 // Wait on the upload task. This only works when the scheduling task is not 421 // Wait on the upload task. This only works when the scheduling task is not
427 // for future execution (note how both the SuggestionsService's scheduling 422 // for future execution (note how both the SuggestionsService's scheduling
428 // delay and the BlacklistStore's candidacy delay are zero). Then wait on 423 // delay and the BlacklistStore's candidacy delay are zero). Then wait on
429 // the blacklist request, then again on the next blacklist scheduling task. 424 // the blacklist request, then again on the next blacklist scheduling task.
430 base::MessageLoop::current()->RunUntilIdle(); 425 base::MessageLoop::current()->RunUntilIdle();
431 io_message_loop_.RunUntilIdle(); 426 io_message_loop_.RunUntilIdle();
432 base::MessageLoop::current()->RunUntilIdle(); 427 base::MessageLoop::current()->RunUntilIdle();
433 428
434 // Ensure that CheckSuggestionsData() ran once. 429 EXPECT_EQ(1, suggestions_data_callback_count_);
435 EXPECT_EQ(1, suggestions_data_check_count_);
436 EXPECT_FALSE(blacklisting_failed_); 430 EXPECT_FALSE(blacklisting_failed_);
431 CheckSuggestionsData();
437 } 432 }
438 433
439 TEST_F(SuggestionsServiceTest, BlacklistURLFails) { 434 TEST_F(SuggestionsServiceTest, BlacklistURLFails) {
440 scoped_ptr<SuggestionsService> suggestions_service( 435 scoped_ptr<SuggestionsService> suggestions_service(
441 CreateSuggestionsServiceWithMocks()); 436 CreateSuggestionsServiceWithMocks());
442 EXPECT_TRUE(suggestions_service != NULL); 437 EXPECT_TRUE(suggestions_service != NULL);
443 GURL blacklist_url(kBlacklistUrl); 438 GURL blacklist_url(kBlacklistUrl);
444 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklist_url))) 439 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklist_url)))
445 .WillOnce(Return(false)); 440 .WillOnce(Return(false));
446 441
447 Blacklist(suggestions_service.get(), blacklist_url); 442 Blacklist(suggestions_service.get(), blacklist_url);
448 443
449 EXPECT_TRUE(blacklisting_failed_); 444 EXPECT_TRUE(blacklisting_failed_);
450 EXPECT_EQ(0, suggestions_data_check_count_); 445 EXPECT_EQ(0, suggestions_data_callback_count_);
451 } 446 }
452 447
453 // Initial blacklist request fails, triggering a second which succeeds. 448 // Initial blacklist request fails, triggering a second which succeeds.
454 TEST_F(SuggestionsServiceTest, BlacklistURLRequestFails) { 449 TEST_F(SuggestionsServiceTest, BlacklistURLRequestFails) {
455 scoped_ptr<SuggestionsService> suggestions_service( 450 scoped_ptr<SuggestionsService> suggestions_service(
456 CreateSuggestionsServiceWithMocks()); 451 CreateSuggestionsServiceWithMocks());
457 EXPECT_TRUE(suggestions_service != NULL); 452 EXPECT_TRUE(suggestions_service != NULL);
458 base::TimeDelta no_delay = base::TimeDelta::FromSeconds(0); 453 base::TimeDelta no_delay = base::TimeDelta::FromSeconds(0);
459 suggestions_service->set_blacklist_delay(no_delay); 454 suggestions_service->set_blacklist_delay(no_delay);
460 455
(...skipping 25 matching lines...) Expand all
486 .WillOnce(DoAll(SetArgPointee<0>(no_delay), Return(true))) 481 .WillOnce(DoAll(SetArgPointee<0>(no_delay), Return(true)))
487 .WillOnce(Return(false)); 482 .WillOnce(Return(false));
488 EXPECT_CALL(*mock_blacklist_store_, GetCandidateForUpload(_)) 483 EXPECT_CALL(*mock_blacklist_store_, GetCandidateForUpload(_))
489 .WillOnce(DoAll(SetArgPointee<0>(blacklist_url), Return(true))) 484 .WillOnce(DoAll(SetArgPointee<0>(blacklist_url), Return(true)))
490 .WillOnce(DoAll(SetArgPointee<0>(blacklist_url_alt), Return(true))); 485 .WillOnce(DoAll(SetArgPointee<0>(blacklist_url_alt), Return(true)));
491 EXPECT_CALL(*mock_blacklist_store_, RemoveUrl(Eq(blacklist_url_alt))) 486 EXPECT_CALL(*mock_blacklist_store_, RemoveUrl(Eq(blacklist_url_alt)))
492 .WillOnce(Return(true)); 487 .WillOnce(Return(true));
493 488
494 // Blacklist call, first request attempt. 489 // Blacklist call, first request attempt.
495 Blacklist(suggestions_service.get(), blacklist_url); 490 Blacklist(suggestions_service.get(), blacklist_url);
496 EXPECT_EQ(1, suggestions_data_check_count_); 491 EXPECT_EQ(1, suggestions_data_callback_count_);
497 EXPECT_FALSE(blacklisting_failed_); 492 EXPECT_FALSE(blacklisting_failed_);
498 493
499 // Wait for the first scheduling, the first request, the second scheduling, 494 // Wait for the first scheduling, the first request, the second scheduling,
500 // second request and the third scheduling. Again, note that calling 495 // second request and the third scheduling. Again, note that calling
501 // RunUntilIdle on the MessageLoop only works when the task is not posted for 496 // RunUntilIdle on the MessageLoop only works when the task is not posted for
502 // the future. 497 // the future.
503 base::MessageLoop::current()->RunUntilIdle(); 498 base::MessageLoop::current()->RunUntilIdle();
504 io_message_loop_.RunUntilIdle(); 499 io_message_loop_.RunUntilIdle();
505 base::MessageLoop::current()->RunUntilIdle(); 500 base::MessageLoop::current()->RunUntilIdle();
506 io_message_loop_.RunUntilIdle(); 501 io_message_loop_.RunUntilIdle();
507 base::MessageLoop::current()->RunUntilIdle(); 502 base::MessageLoop::current()->RunUntilIdle();
503 CheckSuggestionsData();
508 } 504 }
509 505
510 TEST_F(SuggestionsServiceTest, UndoBlacklistURL) { 506 TEST_F(SuggestionsServiceTest, UndoBlacklistURL) {
511 scoped_ptr<SuggestionsService> suggestions_service( 507 scoped_ptr<SuggestionsService> suggestions_service(
512 CreateSuggestionsServiceWithMocks()); 508 CreateSuggestionsServiceWithMocks());
513 EXPECT_TRUE(suggestions_service != NULL); 509 EXPECT_TRUE(suggestions_service != NULL);
514 // Ensure scheduling the request doesn't happen before undo. 510 // Ensure scheduling the request doesn't happen before undo.
515 base::TimeDelta delay = base::TimeDelta::FromHours(1); 511 base::TimeDelta delay = base::TimeDelta::FromHours(1);
516 suggestions_service->set_blacklist_delay(delay); 512 suggestions_service->set_blacklist_delay(delay);
517 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); 513 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile();
(...skipping 12 matching lines...) Expand all
530 // Undo expectations. 526 // Undo expectations.
531 EXPECT_CALL(*mock_blacklist_store_, 527 EXPECT_CALL(*mock_blacklist_store_,
532 GetTimeUntilURLReadyForUpload(Eq(blacklist_url), _)) 528 GetTimeUntilURLReadyForUpload(Eq(blacklist_url), _))
533 .WillOnce(DoAll(SetArgPointee<1>(delay), Return(true))); 529 .WillOnce(DoAll(SetArgPointee<1>(delay), Return(true)));
534 EXPECT_CALL(*mock_blacklist_store_, RemoveUrl(Eq(blacklist_url))) 530 EXPECT_CALL(*mock_blacklist_store_, RemoveUrl(Eq(blacklist_url)))
535 .WillOnce(Return(true)); 531 .WillOnce(Return(true));
536 532
537 Blacklist(suggestions_service.get(), blacklist_url); 533 Blacklist(suggestions_service.get(), blacklist_url);
538 UndoBlacklist(suggestions_service.get(), blacklist_url); 534 UndoBlacklist(suggestions_service.get(), blacklist_url);
539 535
540 EXPECT_EQ(2, suggestions_data_check_count_); 536 EXPECT_EQ(2, suggestions_data_callback_count_);
541 EXPECT_FALSE(blacklisting_failed_); 537 EXPECT_FALSE(blacklisting_failed_);
542 EXPECT_FALSE(undo_blacklisting_failed_); 538 EXPECT_FALSE(undo_blacklisting_failed_);
543 } 539 }
544 540
541 TEST_F(SuggestionsServiceTest, ClearBlacklist) {
542 scoped_ptr<SuggestionsService> suggestions_service(
543 CreateSuggestionsServiceWithMocks());
544 EXPECT_TRUE(suggestions_service != NULL);
545 // Ensure scheduling the request doesn't happen before undo.
546 base::TimeDelta delay = base::TimeDelta::FromHours(1);
547 suggestions_service->set_blacklist_delay(delay);
548 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile();
549 GURL blacklist_url(kBlacklistUrl);
550
551 factory_.SetFakeResponse(GURL(suggestions::kSuggestionsBlacklistClearURL),
552 suggestions_profile.SerializeAsString(),
553 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
554
555 // Blacklist expectations.
556 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklist_url)))
557 .WillOnce(Return(true));
558 EXPECT_CALL(*mock_thumbnail_manager_,
559 Initialize(EqualsProto(suggestions_profile)))
560 .Times(AnyNumber());
561 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)).Times(AnyNumber());
562 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_))
563 .WillOnce(DoAll(SetArgPointee<0>(delay), Return(true)));
564 EXPECT_CALL(*mock_blacklist_store_, ClearBlacklist());
565
566 Blacklist(suggestions_service.get(), blacklist_url);
567 suggestions_service->ClearBlacklist(base::Bind(
568 &SuggestionsServiceTest::CheckCallback, base::Unretained(this)));
569
570 EXPECT_EQ(2, suggestions_data_callback_count_);
571 EXPECT_FALSE(blacklisting_failed_);
572 }
545 573
546 TEST_F(SuggestionsServiceTest, UndoBlacklistURLFailsIfNotInBlacklist) { 574 TEST_F(SuggestionsServiceTest, UndoBlacklistURLFailsIfNotInBlacklist) {
547 UndoBlacklistURLFailsHelper(true); 575 UndoBlacklistURLFailsHelper(true);
548 } 576 }
549 577
550 TEST_F(SuggestionsServiceTest, UndoBlacklistURLFailsIfAlreadyCandidate) { 578 TEST_F(SuggestionsServiceTest, UndoBlacklistURLFailsIfAlreadyCandidate) {
551 UndoBlacklistURLFailsHelper(false); 579 UndoBlacklistURLFailsHelper(false);
552 } 580 }
553 581
554 TEST_F(SuggestionsServiceTest, GetBlacklistedUrl) { 582 TEST_F(SuggestionsServiceTest, GetBlacklistedUrl) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 scoped_ptr<SuggestionsService> suggestions_service( 626 scoped_ptr<SuggestionsService> suggestions_service(
599 CreateSuggestionsServiceWithMocks()); 627 CreateSuggestionsServiceWithMocks());
600 SuggestionsProfile suggestions = 628 SuggestionsProfile suggestions =
601 CreateSuggestionsProfileWithExpiryTimestamps(); 629 CreateSuggestionsProfileWithExpiryTimestamps();
602 suggestions_service->SetDefaultExpiryTimestamp(&suggestions, 630 suggestions_service->SetDefaultExpiryTimestamp(&suggestions,
603 kTestDefaultExpiry); 631 kTestDefaultExpiry);
604 EXPECT_EQ(kTestSetExpiry, suggestions.suggestions(0).expiry_ts()); 632 EXPECT_EQ(kTestSetExpiry, suggestions.suggestions(0).expiry_ts());
605 EXPECT_EQ(kTestDefaultExpiry, suggestions.suggestions(1).expiry_ts()); 633 EXPECT_EQ(kTestDefaultExpiry, suggestions.suggestions(1).expiry_ts());
606 } 634 }
607 } // namespace suggestions 635 } // namespace suggestions
OLDNEW
« no previous file with comments | « components/suggestions/suggestions_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698