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 "components/sync_driver/generic_change_processor.h" | 5 #include "components/sync_driver/generic_change_processor.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.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 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 // AttachmentService. | 367 // AttachmentService. |
368 TEST_F(SyncGenericChangeProcessorTest, | 368 TEST_F(SyncGenericChangeProcessorTest, |
369 ProcessSyncChanges_AddUpdateWithAttachment) { | 369 ProcessSyncChanges_AddUpdateWithAttachment) { |
370 std::string tag = "client_tag"; | 370 std::string tag = "client_tag"; |
371 std::string title = "client_title"; | 371 std::string title = "client_title"; |
372 sync_pb::EntitySpecifics specifics; | 372 sync_pb::EntitySpecifics specifics; |
373 sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference(); | 373 sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference(); |
374 pref_specifics->set_name("test"); | 374 pref_specifics->set_name("test"); |
375 | 375 |
376 syncer::AttachmentIdList attachment_ids; | 376 syncer::AttachmentIdList attachment_ids; |
377 attachment_ids.push_back(syncer::AttachmentId::Create()); | 377 attachment_ids.push_back(syncer::AttachmentId::Create(0, 0)); |
378 attachment_ids.push_back(syncer::AttachmentId::Create()); | 378 attachment_ids.push_back(syncer::AttachmentId::Create(0, 0)); |
379 | 379 |
380 // Add a SyncData with two attachments. | 380 // Add a SyncData with two attachments. |
381 syncer::SyncChangeList change_list; | 381 syncer::SyncChangeList change_list; |
382 change_list.push_back( | 382 change_list.push_back( |
383 syncer::SyncChange(FROM_HERE, | 383 syncer::SyncChange(FROM_HERE, |
384 syncer::SyncChange::ACTION_ADD, | 384 syncer::SyncChange::ACTION_ADD, |
385 syncer::SyncData::CreateLocalDataWithAttachments( | 385 syncer::SyncData::CreateLocalDataWithAttachments( |
386 tag, title, specifics, attachment_ids))); | 386 tag, title, specifics, attachment_ids))); |
387 ASSERT_FALSE( | 387 ASSERT_FALSE( |
388 change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet()); | 388 change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet()); |
389 RunLoop(); | 389 RunLoop(); |
390 | 390 |
391 // Check that the AttachmentService received the new attachments. | 391 // Check that the AttachmentService received the new attachments. |
392 ASSERT_EQ(mock_attachment_service()->attachment_id_sets()->size(), 1U); | 392 ASSERT_EQ(mock_attachment_service()->attachment_id_sets()->size(), 1U); |
393 const syncer::AttachmentIdSet& attachments_added = | 393 const syncer::AttachmentIdSet& attachments_added = |
394 mock_attachment_service()->attachment_id_sets()->front(); | 394 mock_attachment_service()->attachment_id_sets()->front(); |
395 ASSERT_THAT( | 395 ASSERT_THAT( |
396 attachments_added, | 396 attachments_added, |
397 testing::UnorderedElementsAre(attachment_ids[0], attachment_ids[1])); | 397 testing::UnorderedElementsAre(attachment_ids[0], attachment_ids[1])); |
398 | 398 |
399 // Update the SyncData, replacing its two attachments with one new attachment. | 399 // Update the SyncData, replacing its two attachments with one new attachment. |
400 syncer::AttachmentIdList new_attachment_ids; | 400 syncer::AttachmentIdList new_attachment_ids; |
401 new_attachment_ids.push_back(syncer::AttachmentId::Create()); | 401 new_attachment_ids.push_back(syncer::AttachmentId::Create(0, 0)); |
402 mock_attachment_service()->attachment_id_sets()->clear(); | 402 mock_attachment_service()->attachment_id_sets()->clear(); |
403 change_list.clear(); | 403 change_list.clear(); |
404 change_list.push_back( | 404 change_list.push_back( |
405 syncer::SyncChange(FROM_HERE, | 405 syncer::SyncChange(FROM_HERE, |
406 syncer::SyncChange::ACTION_UPDATE, | 406 syncer::SyncChange::ACTION_UPDATE, |
407 syncer::SyncData::CreateLocalDataWithAttachments( | 407 syncer::SyncData::CreateLocalDataWithAttachments( |
408 tag, title, specifics, new_attachment_ids))); | 408 tag, title, specifics, new_attachment_ids))); |
409 ASSERT_FALSE( | 409 ASSERT_FALSE( |
410 change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet()); | 410 change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet()); |
411 RunLoop(); | 411 RunLoop(); |
412 | 412 |
413 // Check that the AttachmentService received it. | 413 // Check that the AttachmentService received it. |
414 ASSERT_EQ(mock_attachment_service()->attachment_id_sets()->size(), 1U); | 414 ASSERT_EQ(mock_attachment_service()->attachment_id_sets()->size(), 1U); |
415 const syncer::AttachmentIdSet& new_attachments_added = | 415 const syncer::AttachmentIdSet& new_attachments_added = |
416 mock_attachment_service()->attachment_id_sets()->front(); | 416 mock_attachment_service()->attachment_id_sets()->front(); |
417 ASSERT_THAT(new_attachments_added, | 417 ASSERT_THAT(new_attachments_added, |
418 testing::UnorderedElementsAre(new_attachment_ids[0])); | 418 testing::UnorderedElementsAre(new_attachment_ids[0])); |
419 } | 419 } |
420 | 420 |
421 // Verify that after attachment is uploaded GenericChangeProcessor updates | 421 // Verify that after attachment is uploaded GenericChangeProcessor updates |
422 // corresponding entries | 422 // corresponding entries |
423 TEST_F(SyncGenericChangeProcessorTest, AttachmentUploaded) { | 423 TEST_F(SyncGenericChangeProcessorTest, AttachmentUploaded) { |
424 std::string tag = "client_tag"; | 424 std::string tag = "client_tag"; |
425 std::string title = "client_title"; | 425 std::string title = "client_title"; |
426 sync_pb::EntitySpecifics specifics; | 426 sync_pb::EntitySpecifics specifics; |
427 sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference(); | 427 sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference(); |
428 pref_specifics->set_name("test"); | 428 pref_specifics->set_name("test"); |
429 | 429 |
430 syncer::AttachmentIdList attachment_ids; | 430 syncer::AttachmentIdList attachment_ids; |
431 attachment_ids.push_back(syncer::AttachmentId::Create()); | 431 attachment_ids.push_back(syncer::AttachmentId::Create(0, 0)); |
432 | 432 |
433 // Add a SyncData with two attachments. | 433 // Add a SyncData with two attachments. |
434 syncer::SyncChangeList change_list; | 434 syncer::SyncChangeList change_list; |
435 change_list.push_back( | 435 change_list.push_back( |
436 syncer::SyncChange(FROM_HERE, | 436 syncer::SyncChange(FROM_HERE, |
437 syncer::SyncChange::ACTION_ADD, | 437 syncer::SyncChange::ACTION_ADD, |
438 syncer::SyncData::CreateLocalDataWithAttachments( | 438 syncer::SyncData::CreateLocalDataWithAttachments( |
439 tag, title, specifics, attachment_ids))); | 439 tag, title, specifics, attachment_ids))); |
440 ASSERT_FALSE( | 440 ASSERT_FALSE( |
441 change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet()); | 441 change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet()); |
442 | 442 |
443 sync_pb::AttachmentIdProto attachment_id_proto = attachment_ids[0].GetProto(); | 443 sync_pb::AttachmentIdProto attachment_id_proto = attachment_ids[0].GetProto(); |
444 syncer::AttachmentId attachment_id = | 444 syncer::AttachmentId attachment_id = |
445 syncer::AttachmentId::CreateFromProto(attachment_id_proto); | 445 syncer::AttachmentId::CreateFromProto(attachment_id_proto); |
446 | 446 |
447 change_processor()->OnAttachmentUploaded(attachment_id); | 447 change_processor()->OnAttachmentUploaded(attachment_id); |
448 syncer::ReadTransaction read_transaction(FROM_HERE, user_share()); | 448 syncer::ReadTransaction read_transaction(FROM_HERE, user_share()); |
449 syncer::ReadNode node(&read_transaction); | 449 syncer::ReadNode node(&read_transaction); |
450 ASSERT_EQ(node.InitByClientTagLookup(kType, tag), syncer::BaseNode::INIT_OK); | 450 ASSERT_EQ(node.InitByClientTagLookup(kType, tag), syncer::BaseNode::INIT_OK); |
451 attachment_ids = node.GetAttachmentIds(); | 451 attachment_ids = node.GetAttachmentIds(); |
452 EXPECT_EQ(1U, attachment_ids.size()); | 452 EXPECT_EQ(1U, attachment_ids.size()); |
453 } | 453 } |
454 | 454 |
455 // Verify that upon construction, all attachments not yet on the server are | 455 // Verify that upon construction, all attachments not yet on the server are |
456 // scheduled for upload. | 456 // scheduled for upload. |
457 TEST_F(SyncGenericChangeProcessorTest, UploadAllAttachmentsNotOnServer) { | 457 TEST_F(SyncGenericChangeProcessorTest, UploadAllAttachmentsNotOnServer) { |
458 // Create two attachment ids. id2 will be marked as "on server". | 458 // Create two attachment ids. id2 will be marked as "on server". |
459 syncer::AttachmentId id1 = syncer::AttachmentId::Create(); | 459 syncer::AttachmentId id1 = syncer::AttachmentId::Create(0, 0); |
460 syncer::AttachmentId id2 = syncer::AttachmentId::Create(); | 460 syncer::AttachmentId id2 = syncer::AttachmentId::Create(0, 0); |
461 { | 461 { |
462 // Write an entry containing these two attachment ids. | 462 // Write an entry containing these two attachment ids. |
463 syncer::WriteTransaction trans(FROM_HERE, user_share()); | 463 syncer::WriteTransaction trans(FROM_HERE, user_share()); |
464 syncer::ReadNode root(&trans); | 464 syncer::ReadNode root(&trans); |
465 ASSERT_EQ(syncer::BaseNode::INIT_OK, root.InitTypeRoot(kType)); | 465 ASSERT_EQ(syncer::BaseNode::INIT_OK, root.InitTypeRoot(kType)); |
466 syncer::WriteNode node(&trans); | 466 syncer::WriteNode node(&trans); |
467 node.InitUniqueByCreation(kType, root, "some node"); | 467 node.InitUniqueByCreation(kType, root, "some node"); |
468 sync_pb::AttachmentMetadata metadata; | 468 sync_pb::AttachmentMetadata metadata; |
469 sync_pb::AttachmentMetadataRecord* record1 = metadata.add_record(); | 469 sync_pb::AttachmentMetadataRecord* record1 = metadata.add_record(); |
470 *record1->mutable_id() = id1.GetProto(); | 470 *record1->mutable_id() = id1.GetProto(); |
471 sync_pb::AttachmentMetadataRecord* record2 = metadata.add_record(); | 471 sync_pb::AttachmentMetadataRecord* record2 = metadata.add_record(); |
472 *record2->mutable_id() = id2.GetProto(); | 472 *record2->mutable_id() = id2.GetProto(); |
473 record2->set_is_on_server(true); | 473 record2->set_is_on_server(true); |
474 node.SetAttachmentMetadata(metadata); | 474 node.SetAttachmentMetadata(metadata); |
475 } | 475 } |
476 | 476 |
477 // Construct the GenericChangeProcessor and see that it asks the | 477 // Construct the GenericChangeProcessor and see that it asks the |
478 // AttachmentService to upload id1 only. | 478 // AttachmentService to upload id1 only. |
479 ConstructGenericChangeProcessor(kType); | 479 ConstructGenericChangeProcessor(kType); |
480 ASSERT_EQ(1U, mock_attachment_service()->attachment_id_sets()->size()); | 480 ASSERT_EQ(1U, mock_attachment_service()->attachment_id_sets()->size()); |
481 ASSERT_THAT(mock_attachment_service()->attachment_id_sets()->front(), | 481 ASSERT_THAT(mock_attachment_service()->attachment_id_sets()->front(), |
482 testing::UnorderedElementsAre(id1)); | 482 testing::UnorderedElementsAre(id1)); |
483 } | 483 } |
484 | 484 |
485 } // namespace | 485 } // namespace |
486 | 486 |
487 } // namespace sync_driver | 487 } // namespace sync_driver |
OLD | NEW |