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

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

Issue 394293003: Do not update AttachmentIds after uploading attachments to sync server. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 "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 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 virtual void SetUp(); 180 virtual void SetUp();
181 virtual void TearDown(); 181 virtual void TearDown();
182 182
183 // Run the message loop until UploadDone has been invoked |num_uploads| times. 183 // Run the message loop until UploadDone has been invoked |num_uploads| times.
184 void RunAndWaitFor(int num_uploads); 184 void RunAndWaitFor(int num_uploads);
185 185
186 scoped_ptr<AttachmentUploader>& uploader(); 186 scoped_ptr<AttachmentUploader>& uploader();
187 const AttachmentUploader::UploadCallback& upload_callback() const; 187 const AttachmentUploader::UploadCallback& upload_callback() const;
188 std::vector<HttpRequest>& http_requests_received(); 188 std::vector<HttpRequest>& http_requests_received();
189 std::vector<AttachmentUploader::UploadResult>& upload_results(); 189 std::vector<AttachmentUploader::UploadResult>& upload_results();
190 std::vector<AttachmentId>& updated_attachment_ids(); 190 std::vector<AttachmentId>& attachment_ids();
191 MockOAuth2TokenService& token_service(); 191 MockOAuth2TokenService& token_service();
192 base::MessageLoopForIO& message_loop(); 192 base::MessageLoopForIO& message_loop();
193 RequestHandler& request_handler(); 193 RequestHandler& request_handler();
194 194
195 private: 195 private:
196 // An UploadCallback invoked by AttachmentUploaderImpl. 196 // An UploadCallback invoked by AttachmentUploaderImpl.
197 void UploadDone(const AttachmentUploader::UploadResult& result, 197 void UploadDone(const AttachmentUploader::UploadResult& result,
198 const AttachmentId& updated_attachment_id); 198 const AttachmentId& attachment_id);
199 199
200 base::MessageLoopForIO message_loop_; 200 base::MessageLoopForIO message_loop_;
201 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 201 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
202 scoped_ptr<RequestHandler> request_handler_; 202 scoped_ptr<RequestHandler> request_handler_;
203 scoped_ptr<AttachmentUploader> uploader_; 203 scoped_ptr<AttachmentUploader> uploader_;
204 AttachmentUploader::UploadCallback upload_callback_; 204 AttachmentUploader::UploadCallback upload_callback_;
205 net::test_server::EmbeddedTestServer server_; 205 net::test_server::EmbeddedTestServer server_;
206 // A closure that signals an upload has finished. 206 // A closure that signals an upload has finished.
207 base::Closure signal_upload_done_; 207 base::Closure signal_upload_done_;
208 std::vector<HttpRequest> http_requests_received_; 208 std::vector<HttpRequest> http_requests_received_;
209 std::vector<AttachmentUploader::UploadResult> upload_results_; 209 std::vector<AttachmentUploader::UploadResult> upload_results_;
210 std::vector<AttachmentId> updated_attachment_ids_; 210 std::vector<AttachmentId> attachment_ids_;
211 scoped_ptr<MockOAuth2TokenService> token_service_; 211 scoped_ptr<MockOAuth2TokenService> token_service_;
212 212
213 // Must be last data member. 213 // Must be last data member.
214 base::WeakPtrFactory<AttachmentUploaderImplTest> weak_ptr_factory_; 214 base::WeakPtrFactory<AttachmentUploaderImplTest> weak_ptr_factory_;
215 }; 215 };
216 216
217 // Handles HTTP requests received by the EmbeddedTestServer. 217 // Handles HTTP requests received by the EmbeddedTestServer.
218 // 218 //
219 // Responds with HTTP_OK by default. See |SetStatusCode|. 219 // Responds with HTTP_OK by default. See |SetStatusCode|.
220 class RequestHandler : public base::NonThreadSafe { 220 class RequestHandler : public base::NonThreadSafe {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 std::vector<HttpRequest>& AttachmentUploaderImplTest::http_requests_received() { 308 std::vector<HttpRequest>& AttachmentUploaderImplTest::http_requests_received() {
309 return http_requests_received_; 309 return http_requests_received_;
310 } 310 }
311 311
312 std::vector<AttachmentUploader::UploadResult>& 312 std::vector<AttachmentUploader::UploadResult>&
313 AttachmentUploaderImplTest::upload_results() { 313 AttachmentUploaderImplTest::upload_results() {
314 return upload_results_; 314 return upload_results_;
315 } 315 }
316 316
317 std::vector<AttachmentId>& 317 std::vector<AttachmentId>&
318 AttachmentUploaderImplTest::updated_attachment_ids() { 318 AttachmentUploaderImplTest::attachment_ids() {
319 return updated_attachment_ids_; 319 return attachment_ids_;
320 } 320 }
321 321
322 MockOAuth2TokenService& AttachmentUploaderImplTest::token_service() { 322 MockOAuth2TokenService& AttachmentUploaderImplTest::token_service() {
323 return *token_service_; 323 return *token_service_;
324 } 324 }
325 325
326 base::MessageLoopForIO& AttachmentUploaderImplTest::message_loop() { 326 base::MessageLoopForIO& AttachmentUploaderImplTest::message_loop() {
327 return message_loop_; 327 return message_loop_;
328 } 328 }
329 329
330 RequestHandler& AttachmentUploaderImplTest::request_handler() { 330 RequestHandler& AttachmentUploaderImplTest::request_handler() {
331 return *request_handler_; 331 return *request_handler_;
332 } 332 }
333 333
334 void AttachmentUploaderImplTest::UploadDone( 334 void AttachmentUploaderImplTest::UploadDone(
335 const AttachmentUploader::UploadResult& result, 335 const AttachmentUploader::UploadResult& result,
336 const AttachmentId& updated_attachment_id) { 336 const AttachmentId& attachment_id) {
337 DCHECK(CalledOnValidThread()); 337 DCHECK(CalledOnValidThread());
338 upload_results_.push_back(result); 338 upload_results_.push_back(result);
339 updated_attachment_ids_.push_back(updated_attachment_id); 339 attachment_ids_.push_back(attachment_id);
340 DCHECK(!signal_upload_done_.is_null()); 340 DCHECK(!signal_upload_done_.is_null());
341 signal_upload_done_.Run(); 341 signal_upload_done_.Run();
342 } 342 }
343 343
344 RequestHandler::RequestHandler( 344 RequestHandler::RequestHandler(
345 const scoped_refptr<base::SingleThreadTaskRunner>& test_task_runner, 345 const scoped_refptr<base::SingleThreadTaskRunner>& test_task_runner,
346 const base::WeakPtr<AttachmentUploaderImplTest>& test) 346 const base::WeakPtr<AttachmentUploaderImplTest>& test)
347 : status_code_(net::HTTP_OK), 347 : status_code_(net::HTTP_OK),
348 test_task_runner_(test_task_runner), 348 test_task_runner_(test_task_runner),
349 test_(test) { 349 test_(test) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 some_data->data() = kAttachmentData; 425 some_data->data() = kAttachmentData;
426 Attachment attachment = Attachment::Create(some_data); 426 Attachment attachment = Attachment::Create(some_data);
427 uploader()->UploadAttachment(attachment, upload_callback()); 427 uploader()->UploadAttachment(attachment, upload_callback());
428 428
429 // Run until the done callback is invoked. 429 // Run until the done callback is invoked.
430 RunAndWaitFor(1); 430 RunAndWaitFor(1);
431 431
432 // See that the done callback was invoked with the right arguments. 432 // See that the done callback was invoked with the right arguments.
433 ASSERT_EQ(1U, upload_results().size()); 433 ASSERT_EQ(1U, upload_results().size());
434 EXPECT_EQ(AttachmentUploader::UPLOAD_SUCCESS, upload_results()[0]); 434 EXPECT_EQ(AttachmentUploader::UPLOAD_SUCCESS, upload_results()[0]);
435 ASSERT_EQ(1U, updated_attachment_ids().size()); 435 ASSERT_EQ(1U, attachment_ids().size());
436 EXPECT_EQ(attachment.GetId(), updated_attachment_ids()[0]); 436 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]);
437 437
438 // See that the HTTP server received one request. 438 // See that the HTTP server received one request.
439 ASSERT_EQ(1U, http_requests_received().size()); 439 ASSERT_EQ(1U, http_requests_received().size());
440 const HttpRequest& http_request = http_requests_received().front(); 440 const HttpRequest& http_request = http_requests_received().front();
441 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method); 441 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method);
442 std::string expected_relative_url(kAttachments + 442 std::string expected_relative_url(kAttachments +
443 attachment.GetId().GetProto().unique_id()); 443 attachment.GetId().GetProto().unique_id());
444 EXPECT_EQ(expected_relative_url, http_request.relative_url); 444 EXPECT_EQ(expected_relative_url, http_request.relative_url);
445 EXPECT_TRUE(http_request.has_content); 445 EXPECT_TRUE(http_request.has_content);
446 EXPECT_EQ(kAttachmentData, http_request.content); 446 EXPECT_EQ(kAttachmentData, http_request.content);
447 const std::string header_name(kAuthorization); 447 const std::string header_name(kAuthorization);
448 const std::string header_value(std::string("Bearer ") + kAccessToken); 448 const std::string header_value(std::string("Bearer ") + kAccessToken);
449 EXPECT_THAT(http_request.headers, 449 EXPECT_THAT(http_request.headers,
450 testing::Contains(testing::Pair(header_name, header_value))); 450 testing::Contains(testing::Pair(header_name, header_value)));
451
452 // TODO(maniscalco): Once AttachmentUploaderImpl is capable of updating the
453 // AttachmentId with server address information about the attachment, add some
454 // checks here to verify it works properly (bug 371522).
455 } 451 }
456 452
457 // Verify two overlapping calls to upload the same attachment result in only one 453 // Verify two overlapping calls to upload the same attachment result in only one
458 // HTTP request. 454 // HTTP request.
459 TEST_F(AttachmentUploaderImplTest, UploadAttachment_Collapse) { 455 TEST_F(AttachmentUploaderImplTest, UploadAttachment_Collapse) {
460 token_service().AddAccount(kAccountId); 456 token_service().AddAccount(kAccountId);
461 request_handler().SetStatusCode(net::HTTP_OK); 457 request_handler().SetStatusCode(net::HTTP_OK);
462 458
463 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString); 459 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
464 some_data->data() = kAttachmentData; 460 some_data->data() = kAttachmentData;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString); 502 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
507 some_data->data() = kAttachmentData; 503 some_data->data() = kAttachmentData;
508 Attachment attachment = Attachment::Create(some_data); 504 Attachment attachment = Attachment::Create(some_data);
509 uploader()->UploadAttachment(attachment, upload_callback()); 505 uploader()->UploadAttachment(attachment, upload_callback());
510 506
511 RunAndWaitFor(1); 507 RunAndWaitFor(1);
512 508
513 // See that the done callback was invoked. 509 // See that the done callback was invoked.
514 ASSERT_EQ(1U, upload_results().size()); 510 ASSERT_EQ(1U, upload_results().size());
515 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]); 511 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]);
516 ASSERT_EQ(1U, updated_attachment_ids().size()); 512 ASSERT_EQ(1U, attachment_ids().size());
517 EXPECT_EQ(attachment.GetId(), updated_attachment_ids()[0]); 513 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]);
518 514
519 // See that no HTTP request was received. 515 // See that no HTTP request was received.
520 ASSERT_EQ(0U, http_requests_received().size()); 516 ASSERT_EQ(0U, http_requests_received().size());
521 } 517 }
522 518
523 // Verify behavior when the server returns "503 Service Unavailable". 519 // Verify behavior when the server returns "503 Service Unavailable".
524 TEST_F(AttachmentUploaderImplTest, UploadAttachment_ServiceUnavilable) { 520 TEST_F(AttachmentUploaderImplTest, UploadAttachment_ServiceUnavilable) {
525 token_service().AddAccount(kAccountId); 521 token_service().AddAccount(kAccountId);
526 request_handler().SetStatusCode(net::HTTP_SERVICE_UNAVAILABLE); 522 request_handler().SetStatusCode(net::HTTP_SERVICE_UNAVAILABLE);
527 523
528 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString); 524 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
529 some_data->data() = kAttachmentData; 525 some_data->data() = kAttachmentData;
530 Attachment attachment = Attachment::Create(some_data); 526 Attachment attachment = Attachment::Create(some_data);
531 uploader()->UploadAttachment(attachment, upload_callback()); 527 uploader()->UploadAttachment(attachment, upload_callback());
532 528
533 RunAndWaitFor(1); 529 RunAndWaitFor(1);
534 530
535 // See that the done callback was invoked. 531 // See that the done callback was invoked.
536 ASSERT_EQ(1U, upload_results().size()); 532 ASSERT_EQ(1U, upload_results().size());
537 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]); 533 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]);
538 ASSERT_EQ(1U, updated_attachment_ids().size()); 534 ASSERT_EQ(1U, attachment_ids().size());
539 EXPECT_EQ(attachment.GetId(), updated_attachment_ids()[0]); 535 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]);
540 536
541 // See that the HTTP server received one request. 537 // See that the HTTP server received one request.
542 ASSERT_EQ(1U, http_requests_received().size()); 538 ASSERT_EQ(1U, http_requests_received().size());
543 const HttpRequest& http_request = http_requests_received().front(); 539 const HttpRequest& http_request = http_requests_received().front();
544 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method); 540 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method);
545 std::string expected_relative_url(kAttachments + 541 std::string expected_relative_url(kAttachments +
546 attachment.GetId().GetProto().unique_id()); 542 attachment.GetId().GetProto().unique_id());
547 EXPECT_EQ(expected_relative_url, http_request.relative_url); 543 EXPECT_EQ(expected_relative_url, http_request.relative_url);
548 EXPECT_TRUE(http_request.has_content); 544 EXPECT_TRUE(http_request.has_content);
549 EXPECT_EQ(kAttachmentData, http_request.content); 545 EXPECT_EQ(kAttachmentData, http_request.content);
(...skipping 16 matching lines...) Expand all
566 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString); 562 scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
567 some_data->data() = kAttachmentData; 563 some_data->data() = kAttachmentData;
568 Attachment attachment = Attachment::Create(some_data); 564 Attachment attachment = Attachment::Create(some_data);
569 uploader()->UploadAttachment(attachment, upload_callback()); 565 uploader()->UploadAttachment(attachment, upload_callback());
570 566
571 RunAndWaitFor(1); 567 RunAndWaitFor(1);
572 568
573 // See that the done callback was invoked. 569 // See that the done callback was invoked.
574 ASSERT_EQ(1U, upload_results().size()); 570 ASSERT_EQ(1U, upload_results().size());
575 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]); 571 EXPECT_EQ(AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR, upload_results()[0]);
576 ASSERT_EQ(1U, updated_attachment_ids().size()); 572 ASSERT_EQ(1U, attachment_ids().size());
577 EXPECT_EQ(attachment.GetId(), updated_attachment_ids()[0]); 573 EXPECT_EQ(attachment.GetId(), attachment_ids()[0]);
578 574
579 // See that the HTTP server received one request. 575 // See that the HTTP server received one request.
580 ASSERT_EQ(1U, http_requests_received().size()); 576 ASSERT_EQ(1U, http_requests_received().size());
581 const HttpRequest& http_request = http_requests_received().front(); 577 const HttpRequest& http_request = http_requests_received().front();
582 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method); 578 EXPECT_EQ(net::test_server::METHOD_POST, http_request.method);
583 std::string expected_relative_url(kAttachments + 579 std::string expected_relative_url(kAttachments +
584 attachment.GetId().GetProto().unique_id()); 580 attachment.GetId().GetProto().unique_id());
585 EXPECT_EQ(expected_relative_url, http_request.relative_url); 581 EXPECT_EQ(expected_relative_url, http_request.relative_url);
586 EXPECT_TRUE(http_request.has_content); 582 EXPECT_TRUE(http_request.has_content);
587 EXPECT_EQ(kAttachmentData, http_request.content); 583 EXPECT_EQ(kAttachmentData, http_request.content);
588 std::string expected_header(kAuthorization); 584 std::string expected_header(kAuthorization);
589 const std::string header_name(kAuthorization); 585 const std::string header_name(kAuthorization);
590 const std::string header_value(std::string("Bearer ") + kAccessToken); 586 const std::string header_value(std::string("Bearer ") + kAccessToken);
591 EXPECT_THAT(http_request.headers, 587 EXPECT_THAT(http_request.headers,
592 testing::Contains(testing::Pair(header_name, header_value))); 588 testing::Contains(testing::Pair(header_name, header_value)));
593 589
594 // See that we invalidated the token. 590 // See that we invalidated the token.
595 ASSERT_EQ(1, token_service().num_invalidate_token()); 591 ASSERT_EQ(1, token_service().num_invalidate_token());
596 } 592 }
597 593
598 // TODO(maniscalco): Add test case for when we are uploading an attachment that 594 // TODO(maniscalco): Add test case for when we are uploading an attachment that
599 // already exists. 409 Conflict? (bug 379825) 595 // already exists. 409 Conflict? (bug 379825)
600 596
601 } // namespace syncer 597 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/internal_api/attachments/attachment_uploader_impl.cc ('k') | sync/internal_api/attachments/fake_attachment_uploader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698