| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/device_info_service.h" | 5 #include "components/sync_driver/device_info_service.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 EntityData data; | 106 EntityData data; |
| 107 // These tests do not care about the tag hash, but EntityData and friends | 107 // These tests do not care about the tag hash, but EntityData and friends |
| 108 // cannot differentiate between the default EntityData object if the hash | 108 // cannot differentiate between the default EntityData object if the hash |
| 109 // is unset, which causes pass/copy operations to no-op and things start to | 109 // is unset, which causes pass/copy operations to no-op and things start to |
| 110 // break, so we throw in a junk value and forget about it. | 110 // break, so we throw in a junk value and forget about it. |
| 111 data.client_tag_hash = "junk"; | 111 data.client_tag_hash = "junk"; |
| 112 *data.specifics.mutable_device_info() = specifics; | 112 *data.specifics.mutable_device_info() = specifics; |
| 113 return data.PassToPtr(); | 113 return data.PassToPtr(); |
| 114 } | 114 } |
| 115 | 115 |
| 116 std::string CacheGuidToTag(const std::string& guid) { |
| 117 return "DeviceInfo_" + guid; |
| 118 } |
| 119 |
| 116 // Instead of actually processing anything, simply accumulates all instructions | 120 // Instead of actually processing anything, simply accumulates all instructions |
| 117 // in members that can then be accessed. TODO(skym): If this ends up being | 121 // in members that can then be accessed. TODO(skym): If this ends up being |
| 118 // useful for other model type unittests it should be moved out to a shared | 122 // useful for other model type unittests it should be moved out to a shared |
| 119 // location. | 123 // location. |
| 120 class RecordingModelTypeChangeProcessor | 124 class RecordingModelTypeChangeProcessor |
| 121 : public syncer_v2::FakeModelTypeChangeProcessor { | 125 : public syncer_v2::FakeModelTypeChangeProcessor { |
| 122 public: | 126 public: |
| 123 RecordingModelTypeChangeProcessor() {} | 127 RecordingModelTypeChangeProcessor() {} |
| 124 ~RecordingModelTypeChangeProcessor() override {} | 128 ~RecordingModelTypeChangeProcessor() override {} |
| 125 | 129 |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | 360 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); |
| 357 } | 361 } |
| 358 | 362 |
| 359 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { | 363 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { |
| 360 InitializeService(); | 364 InitializeService(); |
| 361 const std::string guid = "abc"; | 365 const std::string guid = "abc"; |
| 362 EntitySpecifics entity_specifics; | 366 EntitySpecifics entity_specifics; |
| 363 entity_specifics.mutable_device_info()->set_cache_guid(guid); | 367 entity_specifics.mutable_device_info()->set_cache_guid(guid); |
| 364 EntityData entity_data; | 368 EntityData entity_data; |
| 365 entity_data.specifics = entity_specifics; | 369 entity_data.specifics = entity_specifics; |
| 366 EXPECT_EQ(guid, service()->GetClientTag(entity_data)); | 370 EXPECT_EQ(CacheGuidToTag(guid), service()->GetClientTag(entity_data)); |
| 367 } | 371 } |
| 368 | 372 |
| 369 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { | 373 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { |
| 370 InitializeService(); | 374 InitializeService(); |
| 371 EntitySpecifics entity_specifics; | 375 EntitySpecifics entity_specifics; |
| 372 entity_specifics.mutable_device_info(); | 376 entity_specifics.mutable_device_info(); |
| 373 EntityData entity_data; | 377 EntityData entity_data; |
| 374 entity_data.specifics = entity_specifics; | 378 entity_data.specifics = entity_specifics; |
| 375 EXPECT_EQ("", service()->GetClientTag(entity_data)); | 379 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data)); |
| 376 } | 380 } |
| 377 | 381 |
| 378 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { | 382 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { |
| 379 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 383 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 380 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); | 384 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); |
| 381 store()->WriteData(batch.get(), "tag", specifics.SerializeAsString()); | 385 store()->WriteData(batch.get(), specifics.cache_guid(), |
| 386 specifics.SerializeAsString()); |
| 382 store()->CommitWriteBatch(std::move(batch), | 387 store()->CommitWriteBatch(std::move(batch), |
| 383 base::Bind(&AssertResultIsSuccess)); | 388 base::Bind(&AssertResultIsSuccess)); |
| 384 | 389 |
| 385 InitializeAndPump(); | 390 InitializeAndPump(); |
| 386 | 391 |
| 387 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 392 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); |
| 388 ASSERT_EQ(1u, all_device_info.size()); | 393 ASSERT_EQ(1u, all_device_info.size()); |
| 389 AssertEqual(specifics, *all_device_info[0]); | 394 AssertEqual(specifics, *all_device_info[0]); |
| 390 AssertEqual(specifics, *service()->GetDeviceInfo("tag").get()); | 395 AssertEqual(specifics, |
| 396 *service()->GetDeviceInfo(specifics.cache_guid()).get()); |
| 391 } | 397 } |
| 392 | 398 |
| 393 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { | 399 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { |
| 394 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 400 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 395 DataTypeState state; | 401 DataTypeState state; |
| 396 state.set_encryption_key_name("ekn"); | 402 state.set_encryption_key_name("ekn"); |
| 397 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); | 403 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); |
| 398 store()->CommitWriteBatch(std::move(batch), | 404 store()->CommitWriteBatch(std::move(batch), |
| 399 base::Bind(&AssertResultIsSuccess)); | 405 base::Bind(&AssertResultIsSuccess)); |
| 400 InitializeAndPump(); | 406 InitializeAndPump(); |
| 401 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 407 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); |
| 402 ASSERT_EQ(1u, all_device_info.size()); | 408 ASSERT_EQ(1u, all_device_info.size()); |
| 403 ASSERT_TRUE( | 409 ASSERT_TRUE( |
| 404 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | 410 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); |
| 405 EXPECT_EQ(1u, processor()->put_map().size()); | 411 EXPECT_EQ(1u, processor()->put_map().size()); |
| 406 } | 412 } |
| 407 | 413 |
| 408 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { | 414 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { |
| 409 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 415 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 410 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); | 416 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); |
| 411 store()->WriteData(batch.get(), "tag", specifics.SerializeAsString()); | 417 store()->WriteData(batch.get(), specifics.cache_guid(), |
| 418 specifics.SerializeAsString()); |
| 412 DataTypeState state; | 419 DataTypeState state; |
| 413 state.set_encryption_key_name("ekn"); | 420 state.set_encryption_key_name("ekn"); |
| 414 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); | 421 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); |
| 415 store()->CommitWriteBatch(std::move(batch), | 422 store()->CommitWriteBatch(std::move(batch), |
| 416 base::Bind(&AssertResultIsSuccess)); | 423 base::Bind(&AssertResultIsSuccess)); |
| 417 | 424 |
| 418 InitializeAndPump(); | 425 InitializeAndPump(); |
| 419 | 426 |
| 420 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 427 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); |
| 421 ASSERT_EQ(2u, all_device_info.size()); | 428 ASSERT_EQ(2u, all_device_info.size()); |
| 422 AssertEqual(specifics, *service()->GetDeviceInfo("tag").get()); | 429 AssertEqual(specifics, |
| 430 *service()->GetDeviceInfo(specifics.cache_guid()).get()); |
| 423 ASSERT_TRUE(processor()->metadata()); | 431 ASSERT_TRUE(processor()->metadata()); |
| 424 ASSERT_EQ(state.encryption_key_name(), | 432 ASSERT_EQ(state.encryption_key_name(), |
| 425 processor()->metadata()->GetDataTypeState().encryption_key_name()); | 433 processor()->metadata()->GetDataTypeState().encryption_key_name()); |
| 426 } | 434 } |
| 427 | 435 |
| 428 TEST_F(DeviceInfoServiceTest, GetData) { | 436 TEST_F(DeviceInfoServiceTest, GetData) { |
| 429 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 437 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 430 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); | 438 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); |
| 439 DeviceInfoSpecifics specifics2(GenerateTestSpecifics()); |
| 431 DeviceInfoSpecifics specifics3(GenerateTestSpecifics()); | 440 DeviceInfoSpecifics specifics3(GenerateTestSpecifics()); |
| 432 store()->WriteData(batch.get(), "tag1", specifics1.SerializeAsString()); | 441 store()->WriteData(batch.get(), specifics1.cache_guid(), |
| 433 store()->WriteData(batch.get(), "tag2", | 442 specifics1.SerializeAsString()); |
| 434 GenerateTestSpecifics().SerializeAsString()); | 443 store()->WriteData(batch.get(), specifics2.cache_guid(), |
| 435 store()->WriteData(batch.get(), "tag3", specifics3.SerializeAsString()); | 444 specifics2.SerializeAsString()); |
| 445 store()->WriteData(batch.get(), specifics3.cache_guid(), |
| 446 specifics3.SerializeAsString()); |
| 436 store()->CommitWriteBatch(std::move(batch), | 447 store()->CommitWriteBatch(std::move(batch), |
| 437 base::Bind(&AssertResultIsSuccess)); | 448 base::Bind(&AssertResultIsSuccess)); |
| 438 | 449 |
| 439 InitializeAndPump(); | 450 InitializeAndPump(); |
| 440 | 451 |
| 441 std::map<std::string, DeviceInfoSpecifics> expected; | 452 std::map<std::string, DeviceInfoSpecifics> expected; |
| 442 expected["tag1"] = specifics1; | 453 expected[CacheGuidToTag(specifics1.cache_guid())] = specifics1; |
| 443 expected["tag3"] = specifics3; | 454 expected[CacheGuidToTag(specifics3.cache_guid())] = specifics3; |
| 444 ClientTagList client_tags; | 455 ClientTagList client_tags; |
| 445 client_tags.push_back("tag1"); | 456 client_tags.push_back(CacheGuidToTag(specifics1.cache_guid())); |
| 446 client_tags.push_back("tag3"); | 457 client_tags.push_back(CacheGuidToTag(specifics3.cache_guid())); |
| 447 service()->GetData(client_tags, | 458 service()->GetData(client_tags, |
| 448 base::Bind(&AssertExpectedFromDataBatch, expected)); | 459 base::Bind(&AssertExpectedFromDataBatch, expected)); |
| 449 } | 460 } |
| 450 | 461 |
| 451 TEST_F(DeviceInfoServiceTest, GetDataMissing) { | 462 TEST_F(DeviceInfoServiceTest, GetDataMissing) { |
| 452 InitializeAndPump(); | 463 InitializeAndPump(); |
| 453 std::map<std::string, DeviceInfoSpecifics> expected; | 464 std::map<std::string, DeviceInfoSpecifics> expected; |
| 454 ClientTagList client_tags; | 465 ClientTagList client_tags; |
| 455 client_tags.push_back("tag1"); | 466 client_tags.push_back(CacheGuidToTag("tag1")); |
| 456 service()->GetData(client_tags, | 467 service()->GetData(client_tags, |
| 457 base::Bind(&AssertExpectedFromDataBatch, expected)); | 468 base::Bind(&AssertExpectedFromDataBatch, expected)); |
| 458 } | 469 } |
| 459 | 470 |
| 460 TEST_F(DeviceInfoServiceTest, GetDataNotInitialized) { | 471 TEST_F(DeviceInfoServiceTest, GetDataNotInitialized) { |
| 461 InitializeService(); | 472 InitializeService(); |
| 462 ClientTagList client_tags; | 473 ClientTagList client_tags; |
| 463 service()->GetData(client_tags, base::Bind(&AssertErrorFromDataBatch)); | 474 service()->GetData(client_tags, base::Bind(&AssertErrorFromDataBatch)); |
| 464 } | 475 } |
| 465 | 476 |
| 466 TEST_F(DeviceInfoServiceTest, GetAllData) { | 477 TEST_F(DeviceInfoServiceTest, GetAllData) { |
| 467 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 478 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 468 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); | 479 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); |
| 469 DeviceInfoSpecifics specifics2(GenerateTestSpecifics()); | 480 DeviceInfoSpecifics specifics2(GenerateTestSpecifics()); |
| 470 store()->WriteData(batch.get(), "tag1", specifics1.SerializeAsString()); | 481 const std::string& tag1 = CacheGuidToTag(specifics1.cache_guid()); |
| 471 store()->WriteData(batch.get(), "tag2", specifics2.SerializeAsString()); | 482 const std::string& tag2 = CacheGuidToTag(specifics2.cache_guid()); |
| 483 store()->WriteData(batch.get(), specifics1.cache_guid(), |
| 484 specifics1.SerializeAsString()); |
| 485 store()->WriteData(batch.get(), specifics2.cache_guid(), |
| 486 specifics2.SerializeAsString()); |
| 472 store()->CommitWriteBatch(std::move(batch), | 487 store()->CommitWriteBatch(std::move(batch), |
| 473 base::Bind(&AssertResultIsSuccess)); | 488 base::Bind(&AssertResultIsSuccess)); |
| 474 | 489 |
| 475 InitializeAndPump(); | 490 InitializeAndPump(); |
| 476 | 491 |
| 477 std::map<std::string, DeviceInfoSpecifics> expected; | 492 std::map<std::string, DeviceInfoSpecifics> expected; |
| 478 expected["tag1"] = specifics1; | 493 expected[tag1] = specifics1; |
| 479 expected["tag2"] = specifics2; | 494 expected[tag2] = specifics2; |
| 480 ClientTagList client_tags; | 495 ClientTagList client_tags; |
| 481 client_tags.push_back("tag1"); | 496 client_tags.push_back(tag1); |
| 482 client_tags.push_back("tag2"); | 497 client_tags.push_back(tag2); |
| 483 service()->GetData(client_tags, | 498 service()->GetData(client_tags, |
| 484 base::Bind(&AssertExpectedFromDataBatch, expected)); | 499 base::Bind(&AssertExpectedFromDataBatch, expected)); |
| 485 } | 500 } |
| 486 | 501 |
| 487 TEST_F(DeviceInfoServiceTest, GetAllDataNotInitialized) { | 502 TEST_F(DeviceInfoServiceTest, GetAllDataNotInitialized) { |
| 488 InitializeService(); | 503 InitializeService(); |
| 489 service()->GetAllData(base::Bind(&AssertErrorFromDataBatch)); | 504 service()->GetAllData(base::Bind(&AssertErrorFromDataBatch)); |
| 490 } | 505 } |
| 491 | 506 |
| 492 TEST_F(DeviceInfoServiceTest, ApplySyncChangesBeforeInit) { | 507 TEST_F(DeviceInfoServiceTest, ApplySyncChangesBeforeInit) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 508 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { | 523 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { |
| 509 InitializeAndPump(); | 524 InitializeAndPump(); |
| 510 | 525 |
| 511 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 526 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
| 512 EntityChangeList add_changes; | 527 EntityChangeList add_changes; |
| 513 const std::string tag = PushBackEntityChangeAdd(specifics, &add_changes); | 528 const std::string tag = PushBackEntityChangeAdd(specifics, &add_changes); |
| 514 SyncError error = service()->ApplySyncChanges( | 529 SyncError error = service()->ApplySyncChanges( |
| 515 service()->CreateMetadataChangeList(), add_changes); | 530 service()->CreateMetadataChangeList(), add_changes); |
| 516 | 531 |
| 517 EXPECT_FALSE(error.IsSet()); | 532 EXPECT_FALSE(error.IsSet()); |
| 518 scoped_ptr<DeviceInfo> info = service()->GetDeviceInfo(tag); | 533 scoped_ptr<DeviceInfo> info = |
| 534 service()->GetDeviceInfo(specifics.cache_guid()); |
| 519 ASSERT_TRUE(info); | 535 ASSERT_TRUE(info); |
| 520 AssertEqual(specifics, *info.get()); | 536 AssertEqual(specifics, *info.get()); |
| 521 EXPECT_EQ(1, change_count()); | 537 EXPECT_EQ(1, change_count()); |
| 522 | 538 |
| 523 EntityChangeList delete_changes; | 539 EntityChangeList delete_changes; |
| 524 delete_changes.push_back(EntityChange::CreateDelete(tag)); | 540 delete_changes.push_back(EntityChange::CreateDelete(tag)); |
| 525 error = service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 541 error = service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
| 526 delete_changes); | 542 delete_changes); |
| 527 | 543 |
| 528 EXPECT_FALSE(error.IsSet()); | 544 EXPECT_FALSE(error.IsSet()); |
| 529 EXPECT_FALSE(service()->GetDeviceInfo(tag)); | 545 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid())); |
| 530 EXPECT_EQ(2, change_count()); | 546 EXPECT_EQ(2, change_count()); |
| 531 } | 547 } |
| 532 | 548 |
| 533 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { | 549 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { |
| 534 InitializeAndPump(); | 550 InitializeAndPump(); |
| 535 | 551 |
| 536 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 552 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
| 537 EntityChangeList data_changes; | 553 EntityChangeList data_changes; |
| 538 const std::string tag = PushBackEntityChangeAdd(specifics, &data_changes); | 554 const std::string tag = PushBackEntityChangeAdd(specifics, &data_changes); |
| 539 DataTypeState state; | 555 DataTypeState state; |
| 540 state.set_encryption_key_name("ekn"); | 556 state.set_encryption_key_name("ekn"); |
| 541 scoped_ptr<MetadataChangeList> metadata_changes( | 557 scoped_ptr<MetadataChangeList> metadata_changes( |
| 542 service()->CreateMetadataChangeList()); | 558 service()->CreateMetadataChangeList()); |
| 543 metadata_changes->UpdateDataTypeState(state); | 559 metadata_changes->UpdateDataTypeState(state); |
| 544 | 560 |
| 545 const SyncError error = | 561 const SyncError error = |
| 546 service()->ApplySyncChanges(std::move(metadata_changes), data_changes); | 562 service()->ApplySyncChanges(std::move(metadata_changes), data_changes); |
| 547 EXPECT_FALSE(error.IsSet()); | 563 EXPECT_FALSE(error.IsSet()); |
| 548 EXPECT_EQ(1, change_count()); | 564 EXPECT_EQ(1, change_count()); |
| 549 | 565 |
| 550 PumpAndShutdown(); | 566 PumpAndShutdown(); |
| 551 InitializeAndPump(); | 567 InitializeAndPump(); |
| 552 | 568 |
| 553 scoped_ptr<DeviceInfo> info = service()->GetDeviceInfo(tag); | 569 scoped_ptr<DeviceInfo> info = |
| 570 service()->GetDeviceInfo(specifics.cache_guid()); |
| 554 ASSERT_TRUE(info); | 571 ASSERT_TRUE(info); |
| 555 AssertEqual(specifics, *info.get()); | 572 AssertEqual(specifics, *info.get()); |
| 556 // TODO(skym): Uncomment once SimpleMetadataChangeList::TransferChanges is | 573 // TODO(skym): Uncomment once SimpleMetadataChangeList::TransferChanges is |
| 557 // implemented. | 574 // implemented. |
| 558 // EXPECT_TRUE(processor()->metadata()); | 575 // EXPECT_TRUE(processor()->metadata()); |
| 559 // EXPECT_EQ(state.encryption_key_name(), | 576 // EXPECT_EQ(state.encryption_key_name(), |
| 560 // processor()->metadata()->GetDataTypeState().encryption_key_name()); | 577 // processor()->metadata()->GetDataTypeState().encryption_key_name()); |
| 561 } | 578 } |
| 562 | 579 |
| 563 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { | 580 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { |
| 564 InitializeAndPumpAndStart(); | 581 InitializeAndPumpAndStart(); |
| 565 | 582 |
| 566 // The point of this test is to try to apply remote changes that have the same | 583 // The point of this test is to try to apply remote changes that have the same |
| 567 // cache guid as the local device. The service should ignore these changes | 584 // cache guid as the local device. The service should ignore these changes |
| 568 // since only it should be performing writes on its data. | 585 // since only it should be performing writes on its data. |
| 569 DeviceInfoSpecifics specifics = | 586 DeviceInfoSpecifics specifics = |
| 570 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); | 587 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); |
| 571 EntityChangeList change_list; | 588 EntityChangeList change_list; |
| 572 const std::string tag = PushBackEntityChangeAdd(specifics, &change_list); | 589 const std::string tag = PushBackEntityChangeAdd(specifics, &change_list); |
| 573 | 590 |
| 574 // Should have a single change from reconciliation. | 591 // Should have a single change from reconciliation. |
| 575 EXPECT_TRUE(service()->GetDeviceInfo(tag)); | 592 EXPECT_TRUE( |
| 593 service()->GetDeviceInfo(local_device()->GetLocalDeviceInfo()->guid())); |
| 576 EXPECT_EQ(1, change_count()); | 594 EXPECT_EQ(1, change_count()); |
| 577 | 595 |
| 578 EXPECT_FALSE( | 596 EXPECT_FALSE( |
| 579 service() | 597 service() |
| 580 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) | 598 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) |
| 581 .IsSet()); | 599 .IsSet()); |
| 582 EXPECT_EQ(1, change_count()); | 600 EXPECT_EQ(1, change_count()); |
| 583 | 601 |
| 584 change_list.clear(); | 602 change_list.clear(); |
| 585 change_list.push_back(EntityChange::CreateDelete(tag)); | 603 change_list.push_back(EntityChange::CreateDelete(tag)); |
| 586 EXPECT_FALSE( | 604 EXPECT_FALSE( |
| 587 service() | 605 service() |
| 588 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) | 606 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) |
| 589 .IsSet()); | 607 .IsSet()); |
| 590 EXPECT_EQ(1, change_count()); | 608 EXPECT_EQ(1, change_count()); |
| 591 } | 609 } |
| 592 | 610 |
| 593 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) { | 611 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) { |
| 594 InitializeAndPumpAndStart(); | 612 InitializeAndPumpAndStart(); |
| 595 EXPECT_EQ(1, change_count()); | 613 EXPECT_EQ(1, change_count()); |
| 596 EntityChangeList delete_changes; | 614 EntityChangeList delete_changes; |
| 597 delete_changes.push_back(EntityChange::CreateDelete("tag")); | 615 delete_changes.push_back(EntityChange::CreateDelete(CacheGuidToTag("tag"))); |
| 598 const SyncError error = service()->ApplySyncChanges( | 616 const SyncError error = service()->ApplySyncChanges( |
| 599 service()->CreateMetadataChangeList(), delete_changes); | 617 service()->CreateMetadataChangeList(), delete_changes); |
| 600 EXPECT_FALSE(error.IsSet()); | 618 EXPECT_FALSE(error.IsSet()); |
| 601 EXPECT_EQ(1, change_count()); | 619 EXPECT_EQ(1, change_count()); |
| 602 } | 620 } |
| 603 | 621 |
| 604 TEST_F(DeviceInfoServiceTest, MergeWithoutProcessor) { | 622 TEST_F(DeviceInfoServiceTest, MergeWithoutProcessor) { |
| 605 InitializeService(); | 623 InitializeService(); |
| 606 const SyncError error = service()->MergeSyncData( | 624 const SyncError error = service()->MergeSyncData( |
| 607 service()->CreateMetadataChangeList(), EntityDataMap()); | 625 service()->CreateMetadataChangeList(), EntityDataMap()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 631 unique_local.SerializeAsString()); | 649 unique_local.SerializeAsString()); |
| 632 store()->WriteData(batch.get(), conflict_local.cache_guid(), | 650 store()->WriteData(batch.get(), conflict_local.cache_guid(), |
| 633 conflict_local.SerializeAsString()); | 651 conflict_local.SerializeAsString()); |
| 634 store()->CommitWriteBatch(std::move(batch), | 652 store()->CommitWriteBatch(std::move(batch), |
| 635 base::Bind(&AssertResultIsSuccess)); | 653 base::Bind(&AssertResultIsSuccess)); |
| 636 | 654 |
| 637 InitializeAndPumpAndStart(); | 655 InitializeAndPumpAndStart(); |
| 638 EXPECT_EQ(1, change_count()); | 656 EXPECT_EQ(1, change_count()); |
| 639 | 657 |
| 640 EntityDataMap remote_input; | 658 EntityDataMap remote_input; |
| 641 remote_input[conflict_remote.cache_guid()] = | 659 remote_input[CacheGuidToTag(conflict_remote.cache_guid())] = |
| 642 SpecificsToEntity(conflict_remote); | 660 SpecificsToEntity(conflict_remote); |
| 643 remote_input[unique_remote.cache_guid()] = SpecificsToEntity(unique_remote); | 661 remote_input[CacheGuidToTag(unique_remote.cache_guid())] = |
| 662 SpecificsToEntity(unique_remote); |
| 644 | 663 |
| 645 DataTypeState state; | 664 DataTypeState state; |
| 646 state.set_encryption_key_name("ekn"); | 665 state.set_encryption_key_name("ekn"); |
| 647 scoped_ptr<MetadataChangeList> metadata_changes( | 666 scoped_ptr<MetadataChangeList> metadata_changes( |
| 648 service()->CreateMetadataChangeList()); | 667 service()->CreateMetadataChangeList()); |
| 649 metadata_changes->UpdateDataTypeState(state); | 668 metadata_changes->UpdateDataTypeState(state); |
| 650 | 669 |
| 651 const SyncError error = | 670 const SyncError error = |
| 652 service()->MergeSyncData(std::move(metadata_changes), remote_input); | 671 service()->MergeSyncData(std::move(metadata_changes), remote_input); |
| 653 EXPECT_FALSE(error.IsSet()); | 672 EXPECT_FALSE(error.IsSet()); |
| 654 EXPECT_EQ(2, change_count()); | 673 EXPECT_EQ(2, change_count()); |
| 655 | 674 |
| 656 // The remote should beat the local in conflict. | 675 // The remote should beat the local in conflict. |
| 657 EXPECT_EQ(4u, service()->GetAllDeviceInfo().size()); | 676 EXPECT_EQ(4u, service()->GetAllDeviceInfo().size()); |
| 658 AssertEqual(unique_local, *service()->GetDeviceInfo("unique_local").get()); | 677 AssertEqual(unique_local, *service()->GetDeviceInfo("unique_local").get()); |
| 659 AssertEqual(unique_remote, *service()->GetDeviceInfo("unique_remote").get()); | 678 AssertEqual(unique_remote, *service()->GetDeviceInfo("unique_remote").get()); |
| 660 AssertEqual(conflict_remote, *service()->GetDeviceInfo("conflict").get()); | 679 AssertEqual(conflict_remote, *service()->GetDeviceInfo("conflict").get()); |
| 661 | 680 |
| 662 // Service should have told the processor about the existance of unique_local. | 681 // Service should have told the processor about the existance of unique_local. |
| 663 EXPECT_TRUE(processor()->delete_set().empty()); | 682 EXPECT_TRUE(processor()->delete_set().empty()); |
| 664 EXPECT_EQ(2u, processor()->put_map().size()); | 683 EXPECT_EQ(2u, processor()->put_map().size()); |
| 665 const auto& it = processor()->put_map().find("unique_local"); | 684 const auto& it = processor()->put_map().find(CacheGuidToTag("unique_local")); |
| 666 ASSERT_NE(processor()->put_map().end(), it); | 685 ASSERT_NE(processor()->put_map().end(), it); |
| 667 AssertEqual(unique_local, it->second->specifics.device_info()); | 686 AssertEqual(unique_local, it->second->specifics.device_info()); |
| 668 | 687 |
| 669 // TODO(skym): Uncomment once SimpleMetadataChangeList::TransferChanges is | 688 // TODO(skym): Uncomment once SimpleMetadataChangeList::TransferChanges is |
| 670 // implemented. | 689 // implemented. |
| 671 // ASSERT_EQ(state.encryption_key_name(), | 690 // ASSERT_EQ(state.encryption_key_name(), |
| 672 // processor()->metadata()->GetDataTypeState().encryption_key_name()); | 691 // processor()->metadata()->GetDataTypeState().encryption_key_name()); |
| 673 } | 692 } |
| 674 | 693 |
| 675 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { | 694 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { |
| 676 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo(); | 695 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo(); |
| 677 scoped_ptr<DeviceInfoSpecifics> specifics( | 696 scoped_ptr<DeviceInfoSpecifics> specifics( |
| 678 CopyToSpecifics(*local_device_info)); | 697 CopyToSpecifics(*local_device_info)); |
| 679 const std::string tag = local_device_info->guid(); | 698 const std::string guid = local_device_info->guid(); |
| 680 | 699 |
| 681 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 700 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 682 store()->WriteData(batch.get(), tag, specifics->SerializeAsString()); | 701 store()->WriteData(batch.get(), guid, specifics->SerializeAsString()); |
| 683 store()->CommitWriteBatch(std::move(batch), | 702 store()->CommitWriteBatch(std::move(batch), |
| 684 base::Bind(&AssertResultIsSuccess)); | 703 base::Bind(&AssertResultIsSuccess)); |
| 685 | 704 |
| 686 InitializeAndPumpAndStart(); | 705 InitializeAndPumpAndStart(); |
| 687 | 706 |
| 688 EntityDataMap remote_input; | 707 EntityDataMap remote_input; |
| 689 remote_input[tag] = SpecificsToEntity(*specifics); | 708 remote_input[CacheGuidToTag(guid)] = SpecificsToEntity(*specifics); |
| 690 | 709 |
| 691 const SyncError error = service()->MergeSyncData( | 710 const SyncError error = service()->MergeSyncData( |
| 692 service()->CreateMetadataChangeList(), remote_input); | 711 service()->CreateMetadataChangeList(), remote_input); |
| 693 EXPECT_FALSE(error.IsSet()); | 712 EXPECT_FALSE(error.IsSet()); |
| 694 EXPECT_EQ(0, change_count()); | 713 EXPECT_EQ(0, change_count()); |
| 695 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); | 714 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); |
| 696 EXPECT_TRUE(processor()->delete_set().empty()); | 715 EXPECT_TRUE(processor()->delete_set().empty()); |
| 697 EXPECT_TRUE(processor()->put_map().empty()); | 716 EXPECT_TRUE(processor()->put_map().empty()); |
| 698 } | 717 } |
| 699 | 718 |
| 700 } // namespace | 719 } // namespace |
| 701 | 720 |
| 702 } // namespace sync_driver_v2 | 721 } // namespace sync_driver_v2 |
| OLD | NEW |