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

Side by Side Diff: sync/internal_api/attachments/attachment_uploader_impl_unittest.cc

Issue 554743004: Update AttachmentServiceImpl to retry attachment uploads. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge with master. Created 6 years, 3 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 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 "sync/internal_api/public/attachments/attachment_uploader_impl.h" 5 #include "sync/internal_api/public/attachments/attachment_uploader_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/ref_counted_memory.h" 10 #include "base/memory/ref_counted_memory.h"
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 // token service. 502 // token service.
503 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString); 503 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
504 some_data->data() = kAttachmentData; 504 some_data->data() = kAttachmentData;
505 Attachment attachment = Attachment::Create(some_data); 505 Attachment attachment = Attachment::Create(some_data);
506 uploader()->UploadAttachment(attachment, upload_callback()); 506 uploader()->UploadAttachment(attachment, upload_callback());
507 507
508 RunAndWaitFor(1); 508 RunAndWaitFor(1);
509 509
510 // See that the done callback was invoked. 510 // See that the done callback was invoked.
511 ASSERT_EQ(1U, upload_results().size()); 511 ASSERT_EQ(1U, upload_results().size());
512 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]); 512 EXPECT_EQ(AttachmentUploader::UPLOAD_TRANSIENT_ERROR, upload_results()[0]);
513 ASSERT_EQ(1U, attachment_ids().size()); 513 ASSERT_EQ(1U, attachment_ids().size());
514 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]); 514 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]);
515 515
516 // See that no HTTP request was received. 516 // See that no HTTP request was received.
517 ASSERT_EQ(0U, http_requests_received().size()); 517 ASSERT_EQ(0U, http_requests_received().size());
518 } 518 }
519 519
520 // Verify behavior when the server returns "503 Service Unavailable". 520 // Verify behavior when the server returns "503 Service Unavailable".
521 TEST_F(AttachmentUploaderImplTest, UploadAttachment_ServiceUnavilable) { 521 TEST_F(AttachmentUploaderImplTest, UploadAttachment_ServiceUnavilable) {
522 token_service().AddAccount(kAccountId); 522 token_service().AddAccount(kAccountId);
523 request_handler().SetStatusCode(net::HTTP_SERVICE_UNAVAILABLE); 523 request_handler().SetStatusCode(net::HTTP_SERVICE_UNAVAILABLE);
524 524
525 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString); 525 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
526 some_data->data() = kAttachmentData; 526 some_data->data() = kAttachmentData;
527 Attachment attachment = Attachment::Create(some_data); 527 Attachment attachment = Attachment::Create(some_data);
528 uploader()->UploadAttachment(attachment, upload_callback()); 528 uploader()->UploadAttachment(attachment, upload_callback());
529 529
530 RunAndWaitFor(1); 530 RunAndWaitFor(1);
531 531
532 // See that the done callback was invoked. 532 // See that the done callback was invoked.
533 ASSERT_EQ(1U, upload_results().size()); 533 ASSERT_EQ(1U, upload_results().size());
534 EXPECT_EQ(AttachmentUploader::UPLOAD_TRANSIENT_ERROR, upload_results()[0]);
535 ASSERT_EQ(1U, attachment_ids().size());
536 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]);
537
538 // See that the HTTP server received one request.
539 ASSERT_EQ(1U, http_requests_received().size());
540 const HttpRequest& http_request = http_requests_received().front();
541 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method);
542 std::string expected_relative_url(kAttachments +
543 attachment.GetId().GetProto().unique_id());
544 EXPECT_EQ(expected_relative_url, http_request.relative_url);
545 EXPECT_TRUE(http_request.has_content);
546 EXPECT_EQ(kAttachmentData, http_request.content);
547 std::string expected_header(kAuthorization);
548 const std::string header_name(kAuthorization);
549 const std::string header_value(std::string("Bearer ") + kAccessToken);
550 EXPECT_THAT(http_request.headers,
551 testing::Contains(testing::Pair(header_name, header_value)));
552
553 // See that we did not invalidate the token.
554 ASSERT_EQ(0, token_service().num_invalidate_token());
555 }
556
557 // Verify that we "403 Forbidden" as a non-transient error.
558 TEST_F(AttachmentUploaderImplTest, UploadAttachment_Forbidden) {
559 token_service().AddAccount(kAccountId);
560 request_handler().SetStatusCode(net::HTTP_FORBIDDEN);
561
562 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
563 some_data->data() = kAttachmentData;
564 Attachment attachment = Attachment::Create(some_data);
565 uploader()->UploadAttachment(attachment, upload_callback());
566
567 RunAndWaitFor(1);
568
569 // See that the done callback was invoked.
570 ASSERT_EQ(1U, upload_results().size());
534 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]); 571 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]);
535 ASSERT_EQ(1U, attachment_ids().size()); 572 ASSERT_EQ(1U, attachment_ids().size());
536 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]); 573 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]);
537 574
538 // See that the HTTP server received one request. 575 // See that the HTTP server received one request.
539 ASSERT_EQ(1U, http_requests_received().size()); 576 ASSERT_EQ(1U, http_requests_received().size());
540 const HttpRequest& http_request = http_requests_received().front(); 577 const HttpRequest& http_request = http_requests_received().front();
541 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method); 578 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method);
542 std::string expected_relative_url(kAttachments + 579 std::string expected_relative_url(kAttachments +
543 attachment.GetId().GetProto().unique_id()); 580 attachment.GetId().GetProto().unique_id());
(...skipping 18 matching lines...) Expand all
562 599
563 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString); 600 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
564 some_data->data() = kAttachmentData; 601 some_data->data() = kAttachmentData;
565 Attachment attachment = Attachment::Create(some_data); 602 Attachment attachment = Attachment::Create(some_data);
566 uploader()->UploadAttachment(attachment, upload_callback()); 603 uploader()->UploadAttachment(attachment, upload_callback());
567 604
568 RunAndWaitFor(1); 605 RunAndWaitFor(1);
569 606
570 // See that the done callback was invoked. 607 // See that the done callback was invoked.
571 ASSERT_EQ(1U, upload_results().size()); 608 ASSERT_EQ(1U, upload_results().size());
572 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]); 609 EXPECT_EQ(AttachmentUploader::UPLOAD_TRANSIENT_ERROR, upload_results()[0]);
573 ASSERT_EQ(1U, attachment_ids().size()); 610 ASSERT_EQ(1U, attachment_ids().size());
574 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]); 611 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]);
575 612
576 // See that the HTTP server received one request. 613 // See that the HTTP server received one request.
577 ASSERT_EQ(1U, http_requests_received().size()); 614 ASSERT_EQ(1U, http_requests_received().size());
578 const HttpRequest& http_request = http_requests_received().front(); 615 const HttpRequest& http_request = http_requests_received().front();
579 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method); 616 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method);
580 std::string expected_relative_url(kAttachments + 617 std::string expected_relative_url(kAttachments +
581 attachment.GetId().GetProto().unique_id()); 618 attachment.GetId().GetProto().unique_id());
582 EXPECT_EQ(expected_relative_url, http_request.relative_url); 619 EXPECT_EQ(expected_relative_url, http_request.relative_url);
583 EXPECT_TRUE(http_request.has_content); 620 EXPECT_TRUE(http_request.has_content);
584 EXPECT_EQ(kAttachmentData, http_request.content); 621 EXPECT_EQ(kAttachmentData, http_request.content);
585 std::string expected_header(kAuthorization); 622 std::string expected_header(kAuthorization);
586 const std::string header_name(kAuthorization); 623 const std::string header_name(kAuthorization);
587 const std::string header_value(std::string("Bearer ") + kAccessToken); 624 const std::string header_value(std::string("Bearer ") + kAccessToken);
588 EXPECT_THAT(http_request.headers, 625 EXPECT_THAT(http_request.headers,
589 testing::Contains(testing::Pair(header_name, header_value))); 626 testing::Contains(testing::Pair(header_name, header_value)));
590 627
591 // See that we invalidated the token. 628 // See that we invalidated the token.
592 ASSERT_EQ(1, token_service().num_invalidate_token()); 629 ASSERT_EQ(1, token_service().num_invalidate_token());
593 } 630 }
594 631
595 // TODO(maniscalco): Add test case for when we are uploading an attachment that 632 // TODO(maniscalco): Add test case for when we are uploading an attachment that
596 // already exists. 409 Conflict? (bug 379825) 633 // already exists. 409 Conflict? (bug 379825)
597 634
598 } // namespace syncer 635 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/internal_api/attachments/attachment_uploader_impl.cc ('k') | sync/internal_api/attachments/task_queue.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698