OLD | NEW |
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_service_impl.h" | 5 #include "sync/internal_api/public/attachments/attachment_service_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/weak_ptr.h" | 8 #include "base/memory/weak_ptr.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 AttachmentIdList ids = read_ids.back(); | 61 AttachmentIdList ids = read_ids.back(); |
62 read_callbacks.pop_back(); | 62 read_callbacks.pop_back(); |
63 read_ids.pop_back(); | 63 read_ids.pop_back(); |
64 | 64 |
65 scoped_ptr<AttachmentMap> attachments(new AttachmentMap()); | 65 scoped_ptr<AttachmentMap> attachments(new AttachmentMap()); |
66 scoped_ptr<AttachmentIdList> unavailable_attachments( | 66 scoped_ptr<AttachmentIdList> unavailable_attachments( |
67 new AttachmentIdList()); | 67 new AttachmentIdList()); |
68 for (AttachmentIdList::const_iterator iter = ids.begin(); iter != ids.end(); | 68 for (AttachmentIdList::const_iterator iter = ids.begin(); iter != ids.end(); |
69 ++iter) { | 69 ++iter) { |
70 if (local_attachments.find(*iter) != local_attachments.end()) { | 70 if (local_attachments.find(*iter) != local_attachments.end()) { |
71 uint32_t crc32c = ComputeCrc32c(data); | 71 Attachment attachment = Attachment::CreateFromParts(*iter, data); |
72 Attachment attachment = | |
73 Attachment::CreateFromParts(*iter, data, crc32c); | |
74 attachments->insert(std::make_pair(*iter, attachment)); | 72 attachments->insert(std::make_pair(*iter, attachment)); |
75 } else { | 73 } else { |
76 unavailable_attachments->push_back(*iter); | 74 unavailable_attachments->push_back(*iter); |
77 } | 75 } |
78 } | 76 } |
79 Result result = | 77 Result result = |
80 unavailable_attachments->empty() ? SUCCESS : UNSPECIFIED_ERROR; | 78 unavailable_attachments->empty() ? SUCCESS : UNSPECIFIED_ERROR; |
81 | 79 |
82 base::MessageLoop::current()->PostTask( | 80 base::MessageLoop::current()->PostTask( |
83 FROM_HERE, | 81 FROM_HERE, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 download_requests.insert(std::make_pair(id, callback)); | 118 download_requests.insert(std::make_pair(id, callback)); |
121 } | 119 } |
122 | 120 |
123 // Multiple requests to download will be active at the same time. | 121 // Multiple requests to download will be active at the same time. |
124 // RespondToDownload should respond to only one of them. | 122 // RespondToDownload should respond to only one of them. |
125 void RespondToDownload(const AttachmentId& id, const DownloadResult& result) { | 123 void RespondToDownload(const AttachmentId& id, const DownloadResult& result) { |
126 ASSERT_TRUE(download_requests.find(id) != download_requests.end()); | 124 ASSERT_TRUE(download_requests.find(id) != download_requests.end()); |
127 scoped_ptr<Attachment> attachment; | 125 scoped_ptr<Attachment> attachment; |
128 if (result == DOWNLOAD_SUCCESS) { | 126 if (result == DOWNLOAD_SUCCESS) { |
129 scoped_refptr<base::RefCountedString> data = new base::RefCountedString(); | 127 scoped_refptr<base::RefCountedString> data = new base::RefCountedString(); |
130 uint32_t crc32c = ComputeCrc32c(data); | 128 attachment.reset(new Attachment(Attachment::CreateFromParts(id, data))); |
131 attachment.reset( | |
132 new Attachment(Attachment::CreateFromParts(id, data, crc32c))); | |
133 } | 129 } |
134 base::MessageLoop::current()->PostTask( | 130 base::MessageLoop::current()->PostTask( |
135 FROM_HERE, | 131 FROM_HERE, |
136 base::Bind(download_requests[id], result, base::Passed(&attachment))); | 132 base::Bind(download_requests[id], result, base::Passed(&attachment))); |
137 | 133 |
138 download_requests.erase(id); | 134 download_requests.erase(id); |
139 } | 135 } |
140 | 136 |
141 std::map<AttachmentId, DownloadCallback> download_requests; | 137 std::map<AttachmentId, DownloadCallback> download_requests; |
142 | 138 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 download_callback()); | 298 download_callback()); |
303 store()->RespondToRead(AttachmentIdSet()); | 299 store()->RespondToRead(AttachmentIdSet()); |
304 | 300 |
305 RunLoop(); | 301 RunLoop(); |
306 EXPECT_EQ(1U, download_results().size()); | 302 EXPECT_EQ(1U, download_results().size()); |
307 EXPECT_EQ(0U, last_download_attachments().size()); | 303 EXPECT_EQ(0U, last_download_attachments().size()); |
308 } | 304 } |
309 | 305 |
310 TEST_F(AttachmentServiceImplTest, GetOrDownload_Local) { | 306 TEST_F(AttachmentServiceImplTest, GetOrDownload_Local) { |
311 AttachmentIdList attachment_ids; | 307 AttachmentIdList attachment_ids; |
312 attachment_ids.push_back(AttachmentId::Create()); | 308 attachment_ids.push_back(AttachmentId::Create(0, 0)); |
313 attachment_service()->GetOrDownloadAttachments(attachment_ids, | 309 attachment_service()->GetOrDownloadAttachments(attachment_ids, |
314 download_callback()); | 310 download_callback()); |
315 AttachmentIdSet local_attachments; | 311 AttachmentIdSet local_attachments; |
316 local_attachments.insert(attachment_ids[0]); | 312 local_attachments.insert(attachment_ids[0]); |
317 store()->RespondToRead(local_attachments); | 313 store()->RespondToRead(local_attachments); |
318 | 314 |
319 RunLoop(); | 315 RunLoop(); |
320 EXPECT_EQ(1U, download_results().size()); | 316 EXPECT_EQ(1U, download_results().size()); |
321 EXPECT_EQ(1U, last_download_attachments().size()); | 317 EXPECT_EQ(1U, last_download_attachments().size()); |
322 EXPECT_TRUE(last_download_attachments().find(attachment_ids[0]) != | 318 EXPECT_TRUE(last_download_attachments().find(attachment_ids[0]) != |
323 last_download_attachments().end()); | 319 last_download_attachments().end()); |
324 } | 320 } |
325 | 321 |
326 TEST_F(AttachmentServiceImplTest, GetOrDownload_LocalRemoteUnavailable) { | 322 TEST_F(AttachmentServiceImplTest, GetOrDownload_LocalRemoteUnavailable) { |
327 // Create attachment list with 4 ids. | 323 // Create attachment list with 4 ids. |
328 AttachmentIdList attachment_ids; | 324 AttachmentIdList attachment_ids; |
329 attachment_ids.push_back(AttachmentId::Create()); | 325 attachment_ids.push_back(AttachmentId::Create(0, 0)); |
330 attachment_ids.push_back(AttachmentId::Create()); | 326 attachment_ids.push_back(AttachmentId::Create(0, 0)); |
331 attachment_ids.push_back(AttachmentId::Create()); | 327 attachment_ids.push_back(AttachmentId::Create(0, 0)); |
332 attachment_ids.push_back(AttachmentId::Create()); | 328 attachment_ids.push_back(AttachmentId::Create(0, 0)); |
333 // Call attachment service. | 329 // Call attachment service. |
334 attachment_service()->GetOrDownloadAttachments(attachment_ids, | 330 attachment_service()->GetOrDownloadAttachments(attachment_ids, |
335 download_callback()); | 331 download_callback()); |
336 // Ensure AttachmentStore is called. | 332 // Ensure AttachmentStore is called. |
337 EXPECT_FALSE(store()->read_ids.empty()); | 333 EXPECT_FALSE(store()->read_ids.empty()); |
338 | 334 |
339 // Make AttachmentStore return only attachment 0. | 335 // Make AttachmentStore return only attachment 0. |
340 AttachmentIdSet local_attachments; | 336 AttachmentIdSet local_attachments; |
341 local_attachments.insert(attachment_ids[0]); | 337 local_attachments.insert(attachment_ids[0]); |
342 store()->RespondToRead(local_attachments); | 338 store()->RespondToRead(local_attachments); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 } | 384 } |
389 | 385 |
390 TEST_F(AttachmentServiceImplTest, GetOrDownload_NoDownloader) { | 386 TEST_F(AttachmentServiceImplTest, GetOrDownload_NoDownloader) { |
391 // No downloader. | 387 // No downloader. |
392 InitializeAttachmentService( | 388 InitializeAttachmentService( |
393 make_scoped_ptr<MockAttachmentUploader>(new MockAttachmentUploader()), | 389 make_scoped_ptr<MockAttachmentUploader>(new MockAttachmentUploader()), |
394 make_scoped_ptr<MockAttachmentDownloader>(NULL), | 390 make_scoped_ptr<MockAttachmentDownloader>(NULL), |
395 this); | 391 this); |
396 | 392 |
397 AttachmentIdList attachment_ids; | 393 AttachmentIdList attachment_ids; |
398 attachment_ids.push_back(AttachmentId::Create()); | 394 attachment_ids.push_back(AttachmentId::Create(0, 0)); |
399 attachment_service()->GetOrDownloadAttachments(attachment_ids, | 395 attachment_service()->GetOrDownloadAttachments(attachment_ids, |
400 download_callback()); | 396 download_callback()); |
401 EXPECT_FALSE(store()->read_ids.empty()); | 397 EXPECT_FALSE(store()->read_ids.empty()); |
402 | 398 |
403 AttachmentIdSet local_attachments; | 399 AttachmentIdSet local_attachments; |
404 store()->RespondToRead(local_attachments); | 400 store()->RespondToRead(local_attachments); |
405 RunLoop(); | 401 RunLoop(); |
406 ASSERT_EQ(1U, download_results().size()); | 402 ASSERT_EQ(1U, download_results().size()); |
407 EXPECT_EQ(AttachmentService::GET_UNSPECIFIED_ERROR, download_results()[0]); | 403 EXPECT_EQ(AttachmentService::GET_UNSPECIFIED_ERROR, download_results()[0]); |
408 EXPECT_TRUE(last_download_attachments().empty()); | 404 EXPECT_TRUE(last_download_attachments().empty()); |
409 } | 405 } |
410 | 406 |
411 TEST_F(AttachmentServiceImplTest, UploadAttachments_Success) { | 407 TEST_F(AttachmentServiceImplTest, UploadAttachments_Success) { |
412 AttachmentIdSet attachment_ids; | 408 AttachmentIdSet attachment_ids; |
413 const unsigned num_attachments = 3; | 409 const unsigned num_attachments = 3; |
414 for (unsigned i = 0; i < num_attachments; ++i) { | 410 for (unsigned i = 0; i < num_attachments; ++i) { |
415 attachment_ids.insert(AttachmentId::Create()); | 411 attachment_ids.insert(AttachmentId::Create(0, 0)); |
416 } | 412 } |
417 attachment_service()->UploadAttachments(attachment_ids); | 413 attachment_service()->UploadAttachments(attachment_ids); |
418 | 414 |
419 for (unsigned i = 0; i < num_attachments; ++i) { | 415 for (unsigned i = 0; i < num_attachments; ++i) { |
420 RunLoopAndFireTimer(); | 416 RunLoopAndFireTimer(); |
421 // See that the service has issued a read for at least one of the | 417 // See that the service has issued a read for at least one of the |
422 // attachments. | 418 // attachments. |
423 ASSERT_GE(store()->read_ids.size(), 1U); | 419 ASSERT_GE(store()->read_ids.size(), 1U); |
424 store()->RespondToRead(attachment_ids); | 420 store()->RespondToRead(attachment_ids); |
425 RunLoop(); | 421 RunLoop(); |
(...skipping 13 matching lines...) Expand all Loading... |
439 EXPECT_THAT(on_attachment_uploaded_list(), testing::Contains(*iter)); | 435 EXPECT_THAT(on_attachment_uploaded_list(), testing::Contains(*iter)); |
440 } | 436 } |
441 } | 437 } |
442 | 438 |
443 TEST_F(AttachmentServiceImplTest, UploadAttachments_Success_NoDelegate) { | 439 TEST_F(AttachmentServiceImplTest, UploadAttachments_Success_NoDelegate) { |
444 InitializeAttachmentService(make_scoped_ptr(new MockAttachmentUploader()), | 440 InitializeAttachmentService(make_scoped_ptr(new MockAttachmentUploader()), |
445 make_scoped_ptr(new MockAttachmentDownloader()), | 441 make_scoped_ptr(new MockAttachmentDownloader()), |
446 NULL); // No delegate. | 442 NULL); // No delegate. |
447 | 443 |
448 AttachmentIdSet attachment_ids; | 444 AttachmentIdSet attachment_ids; |
449 attachment_ids.insert(AttachmentId::Create()); | 445 attachment_ids.insert(AttachmentId::Create(0, 0)); |
450 attachment_service()->UploadAttachments(attachment_ids); | 446 attachment_service()->UploadAttachments(attachment_ids); |
451 RunLoopAndFireTimer(); | 447 RunLoopAndFireTimer(); |
452 ASSERT_EQ(1U, store()->read_ids.size()); | 448 ASSERT_EQ(1U, store()->read_ids.size()); |
453 ASSERT_EQ(0U, uploader()->upload_requests.size()); | 449 ASSERT_EQ(0U, uploader()->upload_requests.size()); |
454 store()->RespondToRead(attachment_ids); | 450 store()->RespondToRead(attachment_ids); |
455 RunLoop(); | 451 RunLoop(); |
456 ASSERT_EQ(0U, store()->read_ids.size()); | 452 ASSERT_EQ(0U, store()->read_ids.size()); |
457 ASSERT_EQ(1U, uploader()->upload_requests.size()); | 453 ASSERT_EQ(1U, uploader()->upload_requests.size()); |
458 uploader()->RespondToUpload(*attachment_ids.begin(), | 454 uploader()->RespondToUpload(*attachment_ids.begin(), |
459 AttachmentUploader::UPLOAD_SUCCESS); | 455 AttachmentUploader::UPLOAD_SUCCESS); |
460 RunLoop(); | 456 RunLoop(); |
461 ASSERT_TRUE(on_attachment_uploaded_list().empty()); | 457 ASSERT_TRUE(on_attachment_uploaded_list().empty()); |
462 } | 458 } |
463 | 459 |
464 TEST_F(AttachmentServiceImplTest, UploadAttachments_SomeMissingFromStore) { | 460 TEST_F(AttachmentServiceImplTest, UploadAttachments_SomeMissingFromStore) { |
465 AttachmentIdSet attachment_ids; | 461 AttachmentIdSet attachment_ids; |
466 attachment_ids.insert(AttachmentId::Create()); | 462 attachment_ids.insert(AttachmentId::Create(0, 0)); |
467 attachment_ids.insert(AttachmentId::Create()); | 463 attachment_ids.insert(AttachmentId::Create(0, 0)); |
468 attachment_service()->UploadAttachments(attachment_ids); | 464 attachment_service()->UploadAttachments(attachment_ids); |
469 RunLoopAndFireTimer(); | 465 RunLoopAndFireTimer(); |
470 ASSERT_GE(store()->read_ids.size(), 1U); | 466 ASSERT_GE(store()->read_ids.size(), 1U); |
471 | 467 |
472 ASSERT_EQ(0U, uploader()->upload_requests.size()); | 468 ASSERT_EQ(0U, uploader()->upload_requests.size()); |
473 store()->RespondToRead(attachment_ids); | 469 store()->RespondToRead(attachment_ids); |
474 RunLoop(); | 470 RunLoop(); |
475 ASSERT_EQ(1U, uploader()->upload_requests.size()); | 471 ASSERT_EQ(1U, uploader()->upload_requests.size()); |
476 | 472 |
477 uploader()->RespondToUpload(uploader()->upload_requests.begin()->first, | 473 uploader()->RespondToUpload(uploader()->upload_requests.begin()->first, |
478 AttachmentUploader::UPLOAD_SUCCESS); | 474 AttachmentUploader::UPLOAD_SUCCESS); |
479 RunLoopAndFireTimer(); | 475 RunLoopAndFireTimer(); |
480 ASSERT_EQ(1U, on_attachment_uploaded_list().size()); | 476 ASSERT_EQ(1U, on_attachment_uploaded_list().size()); |
481 ASSERT_GE(store()->read_ids.size(), 1U); | 477 ASSERT_GE(store()->read_ids.size(), 1U); |
482 // Not found! | 478 // Not found! |
483 store()->RespondToRead(AttachmentIdSet()); | 479 store()->RespondToRead(AttachmentIdSet()); |
484 RunLoop(); | 480 RunLoop(); |
485 // No upload requests since the read failed. | 481 // No upload requests since the read failed. |
486 ASSERT_EQ(0U, uploader()->upload_requests.size()); | 482 ASSERT_EQ(0U, uploader()->upload_requests.size()); |
487 } | 483 } |
488 | 484 |
489 TEST_F(AttachmentServiceImplTest, UploadAttachments_AllMissingFromStore) { | 485 TEST_F(AttachmentServiceImplTest, UploadAttachments_AllMissingFromStore) { |
490 AttachmentIdSet attachment_ids; | 486 AttachmentIdSet attachment_ids; |
491 const unsigned num_attachments = 2; | 487 const unsigned num_attachments = 2; |
492 for (unsigned i = 0; i < num_attachments; ++i) { | 488 for (unsigned i = 0; i < num_attachments; ++i) { |
493 attachment_ids.insert(AttachmentId::Create()); | 489 attachment_ids.insert(AttachmentId::Create(0, 0)); |
494 } | 490 } |
495 attachment_service()->UploadAttachments(attachment_ids); | 491 attachment_service()->UploadAttachments(attachment_ids); |
496 | 492 |
497 for (unsigned i = 0; i < num_attachments; ++i) { | 493 for (unsigned i = 0; i < num_attachments; ++i) { |
498 RunLoopAndFireTimer(); | 494 RunLoopAndFireTimer(); |
499 ASSERT_GE(store()->read_ids.size(), 1U); | 495 ASSERT_GE(store()->read_ids.size(), 1U); |
500 // None found! | 496 // None found! |
501 store()->RespondToRead(AttachmentIdSet()); | 497 store()->RespondToRead(AttachmentIdSet()); |
502 } | 498 } |
503 RunLoop(); | 499 RunLoop(); |
504 | 500 |
505 // Nothing uploaded. | 501 // Nothing uploaded. |
506 EXPECT_EQ(0U, uploader()->upload_requests.size()); | 502 EXPECT_EQ(0U, uploader()->upload_requests.size()); |
507 // See that the delegate was never called. | 503 // See that the delegate was never called. |
508 ASSERT_EQ(0U, on_attachment_uploaded_list().size()); | 504 ASSERT_EQ(0U, on_attachment_uploaded_list().size()); |
509 } | 505 } |
510 | 506 |
511 TEST_F(AttachmentServiceImplTest, UploadAttachments_NoUploader) { | 507 TEST_F(AttachmentServiceImplTest, UploadAttachments_NoUploader) { |
512 InitializeAttachmentService(make_scoped_ptr<MockAttachmentUploader>(NULL), | 508 InitializeAttachmentService(make_scoped_ptr<MockAttachmentUploader>(NULL), |
513 make_scoped_ptr(new MockAttachmentDownloader()), | 509 make_scoped_ptr(new MockAttachmentDownloader()), |
514 this); | 510 this); |
515 | 511 |
516 AttachmentIdSet attachment_ids; | 512 AttachmentIdSet attachment_ids; |
517 attachment_ids.insert(AttachmentId::Create()); | 513 attachment_ids.insert(AttachmentId::Create(0, 0)); |
518 attachment_service()->UploadAttachments(attachment_ids); | 514 attachment_service()->UploadAttachments(attachment_ids); |
519 RunLoop(); | 515 RunLoop(); |
520 EXPECT_EQ(0U, store()->read_ids.size()); | 516 EXPECT_EQ(0U, store()->read_ids.size()); |
521 ASSERT_EQ(0U, on_attachment_uploaded_list().size()); | 517 ASSERT_EQ(0U, on_attachment_uploaded_list().size()); |
522 } | 518 } |
523 | 519 |
524 // Upload three attachments. For one of them, server responds with error. | 520 // Upload three attachments. For one of them, server responds with error. |
525 TEST_F(AttachmentServiceImplTest, UploadAttachments_OneUploadFails) { | 521 TEST_F(AttachmentServiceImplTest, UploadAttachments_OneUploadFails) { |
526 AttachmentIdSet attachment_ids; | 522 AttachmentIdSet attachment_ids; |
527 const unsigned num_attachments = 3; | 523 const unsigned num_attachments = 3; |
528 for (unsigned i = 0; i < num_attachments; ++i) { | 524 for (unsigned i = 0; i < num_attachments; ++i) { |
529 attachment_ids.insert(AttachmentId::Create()); | 525 attachment_ids.insert(AttachmentId::Create(0, 0)); |
530 } | 526 } |
531 attachment_service()->UploadAttachments(attachment_ids); | 527 attachment_service()->UploadAttachments(attachment_ids); |
532 | 528 |
533 for (unsigned i = 0; i < 3; ++i) { | 529 for (unsigned i = 0; i < 3; ++i) { |
534 RunLoopAndFireTimer(); | 530 RunLoopAndFireTimer(); |
535 ASSERT_GE(store()->read_ids.size(), 1U); | 531 ASSERT_GE(store()->read_ids.size(), 1U); |
536 store()->RespondToRead(attachment_ids); | 532 store()->RespondToRead(attachment_ids); |
537 RunLoop(); | 533 RunLoop(); |
538 ASSERT_EQ(1U, uploader()->upload_requests.size()); | 534 ASSERT_EQ(1U, uploader()->upload_requests.size()); |
539 AttachmentUploader::UploadResult result = | 535 AttachmentUploader::UploadResult result = |
540 AttachmentUploader::UPLOAD_SUCCESS; | 536 AttachmentUploader::UPLOAD_SUCCESS; |
541 // Fail the 2nd one. | 537 // Fail the 2nd one. |
542 if (i == 2U) { | 538 if (i == 2U) { |
543 result = AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR; | 539 result = AttachmentUploader::UPLOAD_UNSPECIFIED_ERROR; |
544 } else { | 540 } else { |
545 result = AttachmentUploader::UPLOAD_SUCCESS; | 541 result = AttachmentUploader::UPLOAD_SUCCESS; |
546 } | 542 } |
547 uploader()->RespondToUpload(uploader()->upload_requests.begin()->first, | 543 uploader()->RespondToUpload(uploader()->upload_requests.begin()->first, |
548 result); | 544 result); |
549 RunLoop(); | 545 RunLoop(); |
550 } | 546 } |
551 ASSERT_EQ(2U, on_attachment_uploaded_list().size()); | 547 ASSERT_EQ(2U, on_attachment_uploaded_list().size()); |
552 } | 548 } |
553 | 549 |
554 // Attempt an upload, respond with transient error to trigger backoff, issue | 550 // Attempt an upload, respond with transient error to trigger backoff, issue |
555 // network disconnect/connect events and see that backoff is cleared. | 551 // network disconnect/connect events and see that backoff is cleared. |
556 TEST_F(AttachmentServiceImplTest, | 552 TEST_F(AttachmentServiceImplTest, |
557 UploadAttachments_ResetBackoffAfterNetworkChange) { | 553 UploadAttachments_ResetBackoffAfterNetworkChange) { |
558 AttachmentIdSet attachment_ids; | 554 AttachmentIdSet attachment_ids; |
559 attachment_ids.insert(AttachmentId::Create()); | 555 attachment_ids.insert(AttachmentId::Create(0, 0)); |
560 attachment_service()->UploadAttachments(attachment_ids); | 556 attachment_service()->UploadAttachments(attachment_ids); |
561 | 557 |
562 RunLoopAndFireTimer(); | 558 RunLoopAndFireTimer(); |
563 ASSERT_EQ(1U, store()->read_ids.size()); | 559 ASSERT_EQ(1U, store()->read_ids.size()); |
564 store()->RespondToRead(attachment_ids); | 560 store()->RespondToRead(attachment_ids); |
565 RunLoop(); | 561 RunLoop(); |
566 ASSERT_EQ(1U, uploader()->upload_requests.size()); | 562 ASSERT_EQ(1U, uploader()->upload_requests.size()); |
567 | 563 |
568 uploader()->RespondToUpload(uploader()->upload_requests.begin()->first, | 564 uploader()->RespondToUpload(uploader()->upload_requests.begin()->first, |
569 AttachmentUploader::UPLOAD_TRANSIENT_ERROR); | 565 AttachmentUploader::UPLOAD_TRANSIENT_ERROR); |
(...skipping 16 matching lines...) Expand all Loading... |
586 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( | 582 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( |
587 net::NetworkChangeNotifier::CONNECTION_WIFI); | 583 net::NetworkChangeNotifier::CONNECTION_WIFI); |
588 RunLoop(); | 584 RunLoop(); |
589 | 585 |
590 // No longer in backoff. | 586 // No longer in backoff. |
591 ASSERT_TRUE(mock_timer()->IsRunning()); | 587 ASSERT_TRUE(mock_timer()->IsRunning()); |
592 ASSERT_EQ(base::TimeDelta(), mock_timer()->GetCurrentDelay()); | 588 ASSERT_EQ(base::TimeDelta(), mock_timer()->GetCurrentDelay()); |
593 } | 589 } |
594 | 590 |
595 } // namespace syncer | 591 } // namespace syncer |
OLD | NEW |