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

Side by Side Diff: components/doodle/doodle_fetcher_impl_unittest.cc

Issue 2726883002: [Doodle] Replace the expiry_date in DoodleConfig by time_to_live (Closed)
Patch Set: Created 3 years, 9 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/doodle/doodle_fetcher_impl.h" 5 #include "components/doodle/doodle_fetcher_impl.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/json/json_reader.h" 12 #include "base/json/json_reader.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/test/simple_test_clock.h"
16 #include "base/values.h" 15 #include "base/values.h"
17 #include "components/google/core/browser/google_switches.h" 16 #include "components/google/core/browser/google_switches.h"
18 #include "components/google/core/browser/google_url_tracker.h" 17 #include "components/google/core/browser/google_url_tracker.h"
19 #include "net/http/http_status_code.h" 18 #include "net/http/http_status_code.h"
20 #include "net/url_request/test_url_fetcher_factory.h" 19 #include "net/url_request/test_url_fetcher_factory.h"
21 #include "net/url_request/url_request_status.h" 20 #include "net/url_request/url_request_status.h"
22 #include "net/url_request/url_request_test_util.h" 21 #include "net/url_request/url_request_test_util.h"
23 #include "testing/gmock/include/gmock/gmock.h" 22 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
25 24
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 69
71 class DoodleFetcherImplTest : public testing::Test { 70 class DoodleFetcherImplTest : public testing::Test {
72 public: 71 public:
73 DoodleFetcherImplTest() 72 DoodleFetcherImplTest()
74 : url_(GURL(GoogleURLTracker::kDefaultGoogleHomepage)), 73 : url_(GURL(GoogleURLTracker::kDefaultGoogleHomepage)),
75 google_url_tracker_(base::MakeUnique<GoogleURLTrackerClientStub>(), 74 google_url_tracker_(base::MakeUnique<GoogleURLTrackerClientStub>(),
76 GoogleURLTracker::UNIT_TEST_MODE), 75 GoogleURLTracker::UNIT_TEST_MODE),
77 doodle_fetcher_( 76 doodle_fetcher_(
78 new net::TestURLRequestContextGetter(message_loop_.task_runner()), 77 new net::TestURLRequestContextGetter(message_loop_.task_runner()),
79 &google_url_tracker_, 78 &google_url_tracker_,
80 base::Bind(ParseJson)) { 79 base::Bind(ParseJson)) {}
81 // Random difference to ensure that expiry_dates are really relative.
82 auto clock = base::MakeUnique<base::SimpleTestClock>();
83 clock_ = clock.get();
84 clock_->Advance(base::TimeDelta::FromMilliseconds(1123581321));
85 doodle_fetcher_.SetClockForTesting(std::move(clock));
86 }
87 80
88 void RespondWithData(const std::string& data) { 81 void RespondWithData(const std::string& data) {
89 RespondToFetcherWithData(GetRunningFetcher(), data); 82 RespondToFetcherWithData(GetRunningFetcher(), data);
90 } 83 }
91 84
92 void RespondToFetcherWithData(net::TestURLFetcher* url_fetcher, 85 void RespondToFetcherWithData(net::TestURLFetcher* url_fetcher,
93 const std::string& data) { 86 const std::string& data) {
94 url_fetcher->set_status(net::URLRequestStatus()); 87 url_fetcher->set_status(net::URLRequestStatus());
95 url_fetcher->set_response_code(net::HTTP_OK); 88 url_fetcher->set_response_code(net::HTTP_OK);
96 url_fetcher->SetResponseString(data); 89 url_fetcher->SetResponseString(data);
(...skipping 29 matching lines...) Expand all
126 *config_out = config; 119 *config_out = config;
127 } 120 }
128 }, 121 },
129 state_out, config_out); 122 state_out, config_out);
130 } 123 }
131 124
132 DoodleFetcherImpl* doodle_fetcher() { return &doodle_fetcher_; } 125 DoodleFetcherImpl* doodle_fetcher() { return &doodle_fetcher_; }
133 126
134 GURL GetGoogleBaseURL() { return google_url_tracker_.google_url(); } 127 GURL GetGoogleBaseURL() { return google_url_tracker_.google_url(); }
135 128
136 base::Time TimeFromNow(uint64_t milliseconds) {
137 return clock_->Now() + base::TimeDelta::FromMilliseconds(milliseconds);
138 }
139
140 private: 129 private:
141 base::MessageLoop message_loop_; 130 base::MessageLoop message_loop_;
142 GURL url_; 131 GURL url_;
143 net::TestURLFetcherFactory url_fetcher_factory_; 132 net::TestURLFetcherFactory url_fetcher_factory_;
144 base::SimpleTestClock* clock_; // Owned by the doodle_fetcher.
145 GoogleURLTracker google_url_tracker_; 133 GoogleURLTracker google_url_tracker_;
146 DoodleFetcherImpl doodle_fetcher_; 134 DoodleFetcherImpl doodle_fetcher_;
147 }; 135 };
148 136
149 TEST_F(DoodleFetcherImplTest, ReturnsFromFetchWithoutError) { 137 TEST_F(DoodleFetcherImplTest, ReturnsFromFetchWithoutError) {
150 DoodleState state(DoodleState::NO_DOODLE); 138 DoodleState state(DoodleState::NO_DOODLE);
151 base::Optional<DoodleConfig> response; 139 base::Optional<DoodleConfig> response;
152 140
153 doodle_fetcher()->FetchDoodle( 141 doodle_fetcher()->FetchDoodle(
154 CreateResponseSavingCallback(&state, &response)); 142 CreateResponseSavingCallback(&state, &response));
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 EXPECT_TRUE(config.fullpage_interactive_url.is_empty()); 213 EXPECT_TRUE(config.fullpage_interactive_url.is_empty());
226 EXPECT_TRUE(config.target_url.is_valid()); 214 EXPECT_TRUE(config.target_url.is_valid());
227 EXPECT_THAT(config.target_url, 215 EXPECT_THAT(config.target_url,
228 Eq(Resolve("/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d" 216 Eq(Resolve("/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d"
229 "0ahUKEw"))); 217 "0ahUKEw")));
230 EXPECT_THAT(config.doodle_type, Eq(DoodleType::SIMPLE)); 218 EXPECT_THAT(config.doodle_type, Eq(DoodleType::SIMPLE));
231 EXPECT_THAT(config.alt_text, Eq("Mouseover Text")); 219 EXPECT_THAT(config.alt_text, Eq("Mouseover Text"));
232 EXPECT_THAT(config.interactive_html, 220 EXPECT_THAT(config.interactive_html,
233 Eq("\u003cstyle\u003e\u003c/style\u003e")); 221 Eq("\u003cstyle\u003e\u003c/style\u003e"));
234 222
235 EXPECT_THAT(config.expiry_date, Eq(TimeFromNow(55000))); 223 EXPECT_THAT(config.time_to_live,
224 Eq(base::TimeDelta::FromMilliseconds(55000)));
236 } 225 }
237 226
238 TEST_F(DoodleFetcherImplTest, DoodleExpiresWithinThirtyDaysForTooLargeTTL) { 227 TEST_F(DoodleFetcherImplTest, DoodleExpiresWithinThirtyDaysForTooLargeTTL) {
239 DoodleState state(DoodleState::NO_DOODLE); 228 DoodleState state(DoodleState::NO_DOODLE);
240 base::Optional<DoodleConfig> response; 229 base::Optional<DoodleConfig> response;
241 230
242 doodle_fetcher()->FetchDoodle( 231 doodle_fetcher()->FetchDoodle(
243 CreateResponseSavingCallback(&state, &response)); 232 CreateResponseSavingCallback(&state, &response));
244 RespondWithData(R"json({"ddljson": { 233 RespondWithData(R"json({"ddljson": {
245 "time_to_live_ms":5184000000, 234 "time_to_live_ms":5184000000,
246 "large_image": {"url":"/logos/doodles/2015/some.gif"} 235 "large_image": {"url":"/logos/doodles/2015/some.gif"}
247 }})json"); // 60 days 236 }})json"); // 60 days
248 237
249 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 238 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
250 ASSERT_TRUE(response.has_value()); 239 ASSERT_TRUE(response.has_value());
251 EXPECT_THAT(response.value().expiry_date, 240 EXPECT_THAT(response.value().time_to_live,
252 Eq(TimeFromNow(30ul * 24 * 60 * 60 * 1000 /* ms */))); // 30 days 241 Eq(base::TimeDelta::FromMilliseconds(30ul * 24 * 60 * 60 *
242 1000))); // 30 days
253 } 243 }
254 244
255 TEST_F(DoodleFetcherImplTest, DoodleExpiresNowWithNegativeTTL) { 245 TEST_F(DoodleFetcherImplTest, DoodleExpiresNowWithNegativeTTL) {
fhorschig 2017/03/01 15:40:52 Can we change the name to remove the "Now"? e.g. S
Marc Treib 2017/03/02 09:28:02 Renamed to DoodleExpiresImmediatelyWithNegativeTTL
fhorschig 2017/03/02 10:35:13 I like that one and it's not pressing. (Actually,
256 DoodleState state(DoodleState::NO_DOODLE); 246 DoodleState state(DoodleState::NO_DOODLE);
257 base::Optional<DoodleConfig> response; 247 base::Optional<DoodleConfig> response;
258 248
259 doodle_fetcher()->FetchDoodle( 249 doodle_fetcher()->FetchDoodle(
260 CreateResponseSavingCallback(&state, &response)); 250 CreateResponseSavingCallback(&state, &response));
261 RespondWithData(R"json({"ddljson": { 251 RespondWithData(R"json({"ddljson": {
262 "time_to_live_ms":-1, 252 "time_to_live_ms":-1,
263 "large_image": {"url":"/logos/doodles/2015/some.gif"} 253 "large_image": {"url":"/logos/doodles/2015/some.gif"}
264 }})json"); 254 }})json");
265 255
266 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 256 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
267 ASSERT_TRUE(response.has_value()); 257 ASSERT_TRUE(response.has_value());
268 EXPECT_THAT(response.value().expiry_date, Eq(TimeFromNow(0))); 258 EXPECT_THAT(response.value().time_to_live,
259 Eq(base::TimeDelta::FromMilliseconds(0)));
269 } 260 }
270 261
271 TEST_F(DoodleFetcherImplTest, DoodleExpiresNowWithoutValidTTL) { 262 TEST_F(DoodleFetcherImplTest, DoodleExpiresNowWithoutValidTTL) {
fhorschig 2017/03/01 15:40:52 ShouldExpireImmediatelyWithoutValidTTL?
Marc Treib 2017/03/02 09:28:02 DoodleExpiresImmediatelyWithoutValidTTL
272 DoodleState state(DoodleState::NO_DOODLE); 263 DoodleState state(DoodleState::NO_DOODLE);
273 base::Optional<DoodleConfig> response; 264 base::Optional<DoodleConfig> response;
274 265
275 doodle_fetcher()->FetchDoodle( 266 doodle_fetcher()->FetchDoodle(
276 CreateResponseSavingCallback(&state, &response)); 267 CreateResponseSavingCallback(&state, &response));
277 RespondWithData(R"json({"ddljson": { 268 RespondWithData(R"json({"ddljson": {
278 "large_image": {"url":"/logos/doodles/2015/some.gif"} 269 "large_image": {"url":"/logos/doodles/2015/some.gif"}
279 }})json"); 270 }})json");
280 271
281 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 272 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
282 ASSERT_TRUE(response.has_value()); 273 ASSERT_TRUE(response.has_value());
283 EXPECT_THAT(response.value().expiry_date, Eq(TimeFromNow(0))); 274 EXPECT_THAT(response.value().time_to_live,
275 Eq(base::TimeDelta::FromMilliseconds(0)));
284 } 276 }
285 277
286 TEST_F(DoodleFetcherImplTest, ReturnsNoDoodleForMissingLargeImageUrl) { 278 TEST_F(DoodleFetcherImplTest, ReturnsNoDoodleForMissingLargeImageUrl) {
287 DoodleState state(DoodleState::AVAILABLE); 279 DoodleState state(DoodleState::AVAILABLE);
288 base::Optional<DoodleConfig> response; 280 base::Optional<DoodleConfig> response;
289 281
290 doodle_fetcher()->FetchDoodle( 282 doodle_fetcher()->FetchDoodle(
291 CreateResponseSavingCallback(&state, &response)); 283 CreateResponseSavingCallback(&state, &response));
292 RespondWithData(R"json({"ddljson": { 284 RespondWithData(R"json({"ddljson": {
293 "time_to_live_ms":55000, 285 "time_to_live_ms":55000,
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 switches::kGoogleBaseURL, "http://www.google.kz"); 408 switches::kGoogleBaseURL, "http://www.google.kz");
417 409
418 doodle_fetcher()->FetchDoodle( 410 doodle_fetcher()->FetchDoodle(
419 CreateResponseSavingCallback(/*state=*/nullptr, /*response=*/nullptr)); 411 CreateResponseSavingCallback(/*state=*/nullptr, /*response=*/nullptr));
420 412
421 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(), 413 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(),
422 Eq(GURL("http://www.google.kz").Resolve(kDoodleConfigPath))); 414 Eq(GURL("http://www.google.kz").Resolve(kDoodleConfigPath)));
423 } 415 }
424 416
425 } // namespace doodle 417 } // namespace doodle
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698