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

Side by Side Diff: components/offline_pages/core/prefetch/prefetch_request_operation_response_unittest.cc

Issue 2928243002: Return operation name in prefetch request callback and add internal page hookup (Closed)
Patch Set: Fix comment indent in JS Created 3 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
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "base/test/mock_callback.h" 5 #include "base/test/mock_callback.h"
6 #include "components/offline_pages/core/prefetch/generate_page_bundle_request.h" 6 #include "components/offline_pages/core/prefetch/generate_page_bundle_request.h"
7 #include "components/offline_pages/core/prefetch/get_operation_request.h" 7 #include "components/offline_pages/core/prefetch/get_operation_request.h"
8 #include "components/offline_pages/core/prefetch/prefetch_proto_utils.h" 8 #include "components/offline_pages/core/prefetch/prefetch_proto_utils.h"
9 #include "components/offline_pages/core/prefetch/prefetch_request_test_base.h" 9 #include "components/offline_pages/core/prefetch/prefetch_request_test_base.h"
10 #include "components/offline_pages/core/prefetch/prefetch_types.h" 10 #include "components/offline_pages/core/prefetch/prefetch_types.h"
11 #include "components/offline_pages/core/prefetch/proto/offline_pages.pb.h" 11 #include "components/offline_pages/core/prefetch/proto/offline_pages.pb.h"
12 #include "components/offline_pages/core/prefetch/proto/operation.pb.h" 12 #include "components/offline_pages/core/prefetch/proto/operation.pb.h"
13 #include "net/http/http_status_code.h" 13 #include "net/http/http_status_code.h"
14 #include "net/url_request/url_request_status.h" 14 #include "net/url_request/url_request_status.h"
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "url/gurl.h" 16 #include "url/gurl.h"
17 17
18 using testing::_; 18 using testing::_;
19 using testing::DoAll; 19 using testing::DoAll;
20 using testing::Eq; 20 using testing::Eq;
21 using testing::SaveArg; 21 using testing::SaveArg;
22 22
23 namespace offline_pages { 23 namespace offline_pages {
24 24
25 namespace { 25 namespace {
26 const version_info::Channel kTestChannel = version_info::Channel::UNKNOWN; 26 const version_info::Channel kTestChannel = version_info::Channel::UNKNOWN;
27 const char kTestOperationName[] = "operation/test123";
27 const char kTestURL[] = "http://example.com"; 28 const char kTestURL[] = "http://example.com";
28 const char kTestURL2[] = "http://example.com/2"; 29 const char kTestURL2[] = "http://example.com/2";
29 const char kTestURL3[] = "http://example.com/3"; 30 const char kTestURL3[] = "http://example.com/3";
30 const char kTestURL4[] = "http://example.com/4"; 31 const char kTestURL4[] = "http://example.com/4";
31 const char kTestUserAgent[] = "Test User Agent"; 32 const char kTestUserAgent[] = "Test User Agent";
32 const char kTestGCMID[] = "Test GCM ID"; 33 const char kTestGCMID[] = "Test GCM ID";
33 const int kTestMaxBundleSize = 100000; 34 const int kTestMaxBundleSize = 100000;
34 const char kTestBodyName[] = "body_name"; 35 const char kTestBodyName[] = "body_name";
35 const int64_t kTestBodyLength = 12345678LL; 36 const int64_t kTestBodyLength = 12345678LL;
36 const char kTestMethodName[] = "Test name"; 37 const char kTestMethodName[] = "Test name";
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 95
95 protected: 96 protected:
96 // Helper function to build the operation based on |is_done| that controls 97 // Helper function to build the operation based on |is_done| that controls
97 // where Any value goes. 98 // where Any value goes.
98 std::string BuildOperation(bool is_done, 99 std::string BuildOperation(bool is_done,
99 int error_code, 100 int error_code,
100 const std::string& error_message, 101 const std::string& error_message,
101 const std::string& any_type_url, 102 const std::string& any_type_url,
102 const std::string& any_value) { 103 const std::string& any_value) {
103 proto::Operation operation; 104 proto::Operation operation;
105 operation.set_name(kTestOperationName);
104 operation.set_done(is_done); 106 operation.set_done(is_done);
105 if (error_code != proto::OK) { 107 if (error_code != proto::OK) {
106 operation.mutable_error()->set_code(error_code); 108 operation.mutable_error()->set_code(error_code);
107 operation.mutable_error()->set_message(error_message); 109 operation.mutable_error()->set_message(error_message);
108 } 110 }
109 if (!any_type_url.empty()) { 111 if (!any_type_url.empty()) {
110 proto::Any* any = 112 proto::Any* any =
111 is_done ? operation.mutable_response() : operation.mutable_metadata(); 113 is_done ? operation.mutable_response() : operation.mutable_metadata();
112 any->set_type_url(any_type_url); 114 any->set_type_url(any_type_url);
113 any->set_value(any_value); 115 any->set_value(any_value);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 } 229 }
228 230
229 PrefetchRequestStatus SendWithPageBundleResponse( 231 PrefetchRequestStatus SendWithPageBundleResponse(
230 const proto::PageBundle& bundle) { 232 const proto::PageBundle& bundle) {
231 std::string bundle_data; 233 std::string bundle_data;
232 EXPECT_TRUE(bundle.SerializeToString(&bundle_data)); 234 EXPECT_TRUE(bundle.SerializeToString(&bundle_data));
233 return SendWithResponse( 235 return SendWithResponse(
234 builder_.BuildFromAny(kPageBundleTypeURL, bundle_data)); 236 builder_.BuildFromAny(kPageBundleTypeURL, bundle_data));
235 } 237 }
236 238
239 const std::string& operation_name() const { return operation_name_; }
237 const std::vector<RenderPageInfo>& pages() const { return pages_; } 240 const std::vector<RenderPageInfo>& pages() const { return pages_; }
238 241
239 private: 242 private:
240 PrefetchRequestStatus SendWithResponse(const std::string& response_data) { 243 PrefetchRequestStatus SendWithResponse(const std::string& response_data) {
241 base::MockCallback<PrefetchRequestFinishedCallback> callback; 244 base::MockCallback<PrefetchRequestFinishedCallback> callback;
242 builder_.CreateRequest(request_context(), callback.Get()); 245 builder_.CreateRequest(request_context(), callback.Get());
243 246
244 PrefetchRequestStatus status; 247 PrefetchRequestStatus status;
248 operation_name_.clear();
245 pages_.clear(); 249 pages_.clear();
246 EXPECT_CALL(callback, Run(_, _)) 250 EXPECT_CALL(callback, Run(_, _, _))
247 .WillOnce(DoAll(SaveArg<0>(&status), SaveArg<1>(&pages_))); 251 .WillOnce(DoAll(SaveArg<0>(&status), SaveArg<1>(&operation_name_),
252 SaveArg<2>(&pages_)));
248 RespondWithData(response_data); 253 RespondWithData(response_data);
249 return status; 254 return status;
250 } 255 }
251 256
252 T builder_; 257 T builder_;
258 std::string operation_name_;
253 std::vector<RenderPageInfo> pages_; 259 std::vector<RenderPageInfo> pages_;
254 }; 260 };
255 261
256 // Lists all scenarios we want to test. 262 // Lists all scenarios we want to test.
257 typedef testing::Types<GeneratePageBundleRequestDoneOperationBuilder, 263 typedef testing::Types<GeneratePageBundleRequestDoneOperationBuilder,
258 GeneratePageBundleRequestPendingOperationBuilder, 264 GeneratePageBundleRequestPendingOperationBuilder,
259 GetOperationRequestDoneOperationBuilder, 265 GetOperationRequestDoneOperationBuilder,
260 GetOperationRequestPendingOperationBuilder> 266 GetOperationRequestPendingOperationBuilder>
261 MyTypes; 267 MyTypes;
262 TYPED_TEST_CASE(PrefetchRequestOperationResponseTest, MyTypes); 268 TYPED_TEST_CASE(PrefetchRequestOperationResponseTest, MyTypes);
263 269
264 TYPED_TEST(PrefetchRequestOperationResponseTest, EmptyOperation) { 270 TYPED_TEST(PrefetchRequestOperationResponseTest, EmptyOperation) {
265 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF, 271 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
266 // No error is set for OK. Thus this will cause the operation 272 // No error is set for OK. Thus this will cause the operation
267 // being filled with only done flag. 273 // being filled with only done flag.
268 this->SendWithErrorResponse(proto::OK, "")); 274 this->SendWithErrorResponse(proto::OK, ""));
275 EXPECT_TRUE(this->operation_name().empty());
269 EXPECT_TRUE(this->pages().empty()); 276 EXPECT_TRUE(this->pages().empty());
270 } 277 }
271 278
272 TYPED_TEST(PrefetchRequestOperationResponseTest, ErrorValue) { 279 TYPED_TEST(PrefetchRequestOperationResponseTest, ErrorValue) {
273 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF, 280 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
274 this->SendWithErrorResponse(proto::UNKNOWN, kErrorMessage)); 281 this->SendWithErrorResponse(proto::UNKNOWN, kErrorMessage));
282 EXPECT_TRUE(this->operation_name().empty());
275 EXPECT_TRUE(this->pages().empty()); 283 EXPECT_TRUE(this->pages().empty());
276 } 284 }
277 285
278 TYPED_TEST(PrefetchRequestOperationResponseTest, InvalidTypeUrl) { 286 TYPED_TEST(PrefetchRequestOperationResponseTest, InvalidTypeUrl) {
279 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF, 287 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
280 this->SendWithAnyResponse("foo", "")); 288 this->SendWithAnyResponse("foo", ""));
289 EXPECT_TRUE(this->operation_name().empty());
281 EXPECT_TRUE(this->pages().empty()); 290 EXPECT_TRUE(this->pages().empty());
282 } 291 }
283 292
284 TYPED_TEST(PrefetchRequestOperationResponseTest, InvalidValue) { 293 TYPED_TEST(PrefetchRequestOperationResponseTest, InvalidValue) {
285 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF, 294 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
286 this->SendWithAnyResponse(kPageBundleTypeURL, "foo")); 295 this->SendWithAnyResponse(kPageBundleTypeURL, "foo"));
296 EXPECT_TRUE(this->operation_name().empty());
287 EXPECT_TRUE(this->pages().empty()); 297 EXPECT_TRUE(this->pages().empty());
288 } 298 }
289 299
290 TYPED_TEST(PrefetchRequestOperationResponseTest, EmptyPageBundle) { 300 TYPED_TEST(PrefetchRequestOperationResponseTest, EmptyPageBundle) {
291 proto::PageBundle bundle; 301 proto::PageBundle bundle;
292 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF, 302 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
293 this->SendWithPageBundleResponse(bundle)); 303 this->SendWithPageBundleResponse(bundle));
304 EXPECT_TRUE(this->operation_name().empty());
294 EXPECT_TRUE(this->pages().empty()); 305 EXPECT_TRUE(this->pages().empty());
295 } 306 }
296 307
297 TYPED_TEST(PrefetchRequestOperationResponseTest, EmptyArchive) { 308 TYPED_TEST(PrefetchRequestOperationResponseTest, EmptyArchive) {
298 proto::PageBundle bundle; 309 proto::PageBundle bundle;
299 bundle.add_archives(); 310 bundle.add_archives();
300 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF, 311 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
301 this->SendWithPageBundleResponse(bundle)); 312 this->SendWithPageBundleResponse(bundle));
313 EXPECT_TRUE(this->operation_name().empty());
302 EXPECT_TRUE(this->pages().empty()); 314 EXPECT_TRUE(this->pages().empty());
303 } 315 }
304 316
305 TYPED_TEST(PrefetchRequestOperationResponseTest, NoPageInfo) { 317 TYPED_TEST(PrefetchRequestOperationResponseTest, NoPageInfo) {
306 proto::PageBundle bundle; 318 proto::PageBundle bundle;
307 proto::Archive* archive = bundle.add_archives(); 319 proto::Archive* archive = bundle.add_archives();
308 archive->set_body_name(kTestBodyName); 320 archive->set_body_name(kTestBodyName);
309 archive->set_body_length(kTestBodyLength); 321 archive->set_body_length(kTestBodyLength);
310 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF, 322 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
311 this->SendWithPageBundleResponse(bundle)); 323 this->SendWithPageBundleResponse(bundle));
324 EXPECT_TRUE(this->operation_name().empty());
312 EXPECT_TRUE(this->pages().empty()); 325 EXPECT_TRUE(this->pages().empty());
313 } 326 }
314 327
315 TYPED_TEST(PrefetchRequestOperationResponseTest, MissingPageInfoUrl) { 328 TYPED_TEST(PrefetchRequestOperationResponseTest, MissingPageInfoUrl) {
316 proto::PageBundle bundle; 329 proto::PageBundle bundle;
317 proto::Archive* archive = bundle.add_archives(); 330 proto::Archive* archive = bundle.add_archives();
318 proto::PageInfo* page_info = archive->add_page_infos(); 331 proto::PageInfo* page_info = archive->add_page_infos();
319 page_info->set_redirect_url(kTestURL); 332 page_info->set_redirect_url(kTestURL);
320 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF, 333 EXPECT_EQ(PrefetchRequestStatus::SHOULD_RETRY_WITH_BACKOFF,
321 this->SendWithPageBundleResponse(bundle)); 334 this->SendWithPageBundleResponse(bundle));
335 EXPECT_TRUE(this->operation_name().empty());
322 EXPECT_TRUE(this->pages().empty()); 336 EXPECT_TRUE(this->pages().empty());
323 } 337 }
324 338
325 TYPED_TEST(PrefetchRequestOperationResponseTest, SinglePage) { 339 TYPED_TEST(PrefetchRequestOperationResponseTest, SinglePage) {
326 proto::PageBundle bundle; 340 proto::PageBundle bundle;
327 proto::Archive* archive = bundle.add_archives(); 341 proto::Archive* archive = bundle.add_archives();
328 archive->set_body_name(kTestBodyName); 342 archive->set_body_name(kTestBodyName);
329 archive->set_body_length(kTestBodyLength); 343 archive->set_body_length(kTestBodyLength);
330 proto::PageInfo* page_info = archive->add_page_infos(); 344 proto::PageInfo* page_info = archive->add_page_infos();
331 page_info->set_url(kTestURL); 345 page_info->set_url(kTestURL);
332 page_info->set_redirect_url(kTestURL2); 346 page_info->set_redirect_url(kTestURL2);
333 page_info->mutable_status()->set_code(proto::OK); 347 page_info->mutable_status()->set_code(proto::OK);
334 page_info->set_transformation(proto::NO_TRANSFORMATION); 348 page_info->set_transformation(proto::NO_TRANSFORMATION);
335 int64_t ms_since_epoch = base::Time::Now().ToJavaTime(); 349 int64_t ms_since_epoch = base::Time::Now().ToJavaTime();
336 page_info->mutable_render_time()->set_seconds(ms_since_epoch / 1000); 350 page_info->mutable_render_time()->set_seconds(ms_since_epoch / 1000);
337 page_info->mutable_render_time()->set_nanos((ms_since_epoch % 1000) * 351 page_info->mutable_render_time()->set_nanos((ms_since_epoch % 1000) *
338 1000000); 352 1000000);
339 EXPECT_EQ(PrefetchRequestStatus::SUCCESS, 353 EXPECT_EQ(PrefetchRequestStatus::SUCCESS,
340 this->SendWithPageBundleResponse(bundle)); 354 this->SendWithPageBundleResponse(bundle));
355 EXPECT_EQ(kTestOperationName, this->operation_name());
341 ASSERT_EQ(1u, this->pages().size()); 356 ASSERT_EQ(1u, this->pages().size());
342 EXPECT_EQ(kTestURL, this->pages().back().url); 357 EXPECT_EQ(kTestURL, this->pages().back().url);
343 EXPECT_EQ(kTestURL2, this->pages().back().redirect_url); 358 EXPECT_EQ(kTestURL2, this->pages().back().redirect_url);
344 EXPECT_EQ(RenderStatus::RENDERED, this->pages().back().status); 359 EXPECT_EQ(RenderStatus::RENDERED, this->pages().back().status);
345 EXPECT_EQ(kTestBodyName, this->pages().back().body_name); 360 EXPECT_EQ(kTestBodyName, this->pages().back().body_name);
346 EXPECT_EQ(kTestBodyLength, this->pages().back().body_length); 361 EXPECT_EQ(kTestBodyLength, this->pages().back().body_length);
347 EXPECT_EQ(ms_since_epoch, this->pages().back().render_time.ToJavaTime()); 362 EXPECT_EQ(ms_since_epoch, this->pages().back().render_time.ToJavaTime());
348 } 363 }
349 364
350 TYPED_TEST(PrefetchRequestOperationResponseTest, MultiplePages) { 365 TYPED_TEST(PrefetchRequestOperationResponseTest, MultiplePages) {
(...skipping 25 matching lines...) Expand all
376 page_info->set_url(kTestURL4); 391 page_info->set_url(kTestURL4);
377 page_info->mutable_status()->set_code(proto::OK); 392 page_info->mutable_status()->set_code(proto::OK);
378 page_info->set_transformation(proto::NO_TRANSFORMATION); 393 page_info->set_transformation(proto::NO_TRANSFORMATION);
379 int64_t ms_since_epoch = base::Time::Now().ToJavaTime(); 394 int64_t ms_since_epoch = base::Time::Now().ToJavaTime();
380 page_info->mutable_render_time()->set_seconds(ms_since_epoch / 1000); 395 page_info->mutable_render_time()->set_seconds(ms_since_epoch / 1000);
381 page_info->mutable_render_time()->set_nanos((ms_since_epoch % 1000) * 396 page_info->mutable_render_time()->set_nanos((ms_since_epoch % 1000) *
382 1000000); 397 1000000);
383 398
384 EXPECT_EQ(PrefetchRequestStatus::SUCCESS, 399 EXPECT_EQ(PrefetchRequestStatus::SUCCESS,
385 this->SendWithPageBundleResponse(bundle)); 400 this->SendWithPageBundleResponse(bundle));
401 EXPECT_EQ(kTestOperationName, this->operation_name());
386 ASSERT_EQ(4u, this->pages().size()); 402 ASSERT_EQ(4u, this->pages().size());
387 EXPECT_EQ(kTestURL, this->pages().at(0).url); 403 EXPECT_EQ(kTestURL, this->pages().at(0).url);
388 EXPECT_EQ(RenderStatus::PENDING, this->pages().at(0).status); 404 EXPECT_EQ(RenderStatus::PENDING, this->pages().at(0).status);
389 EXPECT_EQ(kTestURL2, this->pages().at(1).url); 405 EXPECT_EQ(kTestURL2, this->pages().at(1).url);
390 EXPECT_EQ(RenderStatus::EXCEEDED_LIMIT, this->pages().at(1).status); 406 EXPECT_EQ(RenderStatus::EXCEEDED_LIMIT, this->pages().at(1).status);
391 EXPECT_EQ(kTestURL3, this->pages().at(2).url); 407 EXPECT_EQ(kTestURL3, this->pages().at(2).url);
392 EXPECT_EQ(RenderStatus::FAILED, this->pages().at(2).status); 408 EXPECT_EQ(RenderStatus::FAILED, this->pages().at(2).status);
393 EXPECT_EQ(kTestURL4, this->pages().at(3).url); 409 EXPECT_EQ(kTestURL4, this->pages().at(3).url);
394 EXPECT_EQ(RenderStatus::RENDERED, this->pages().at(3).status); 410 EXPECT_EQ(RenderStatus::RENDERED, this->pages().at(3).status);
395 EXPECT_EQ(kTestBodyName, this->pages().at(3).body_name); 411 EXPECT_EQ(kTestBodyName, this->pages().at(3).body_name);
396 EXPECT_EQ(kTestBodyLength, this->pages().at(3).body_length); 412 EXPECT_EQ(kTestBodyLength, this->pages().at(3).body_length);
397 EXPECT_EQ(ms_since_epoch, this->pages().at(3).render_time.ToJavaTime()); 413 EXPECT_EQ(ms_since_epoch, this->pages().at(3).render_time.ToJavaTime());
398 } 414 }
399 415
400 } // namespace offline_pages 416 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698