| 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/device_info/device_info_service.h" | 5 #include "components/sync/device_info/device_info_service.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 using WriteBatch = ModelTypeStore::WriteBatch; | 40 using WriteBatch = ModelTypeStore::WriteBatch; |
| 41 | 41 |
| 42 namespace { | 42 namespace { |
| 43 | 43 |
| 44 std::unique_ptr<DeviceInfo> CreateDeviceInfo() { | 44 std::unique_ptr<DeviceInfo> CreateDeviceInfo() { |
| 45 return base::MakeUnique<DeviceInfo>( | 45 return base::MakeUnique<DeviceInfo>( |
| 46 "guid_1", "client_1", "Chromium 10k", "Chrome 10k", | 46 "guid_1", "client_1", "Chromium 10k", "Chrome 10k", |
| 47 sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id"); | 47 sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id"); |
| 48 } | 48 } |
| 49 | 49 |
| 50 void AssertResultIsSuccess(Result result) { | 50 void VerifyResultIsSuccess(Result result) { |
| 51 ASSERT_EQ(Result::SUCCESS, result); | 51 EXPECT_EQ(Result::SUCCESS, result); |
| 52 } | 52 } |
| 53 | 53 |
| 54 void AssertEqual(const DeviceInfoSpecifics& s1, const DeviceInfoSpecifics& s2) { | 54 void VerifyEqual(const DeviceInfoSpecifics& s1, const DeviceInfoSpecifics& s2) { |
| 55 ASSERT_EQ(s1.cache_guid(), s2.cache_guid()); | 55 EXPECT_EQ(s1.cache_guid(), s2.cache_guid()); |
| 56 ASSERT_EQ(s1.client_name(), s2.client_name()); | 56 EXPECT_EQ(s1.client_name(), s2.client_name()); |
| 57 ASSERT_EQ(s1.device_type(), s2.device_type()); | 57 EXPECT_EQ(s1.device_type(), s2.device_type()); |
| 58 ASSERT_EQ(s1.sync_user_agent(), s2.sync_user_agent()); | 58 EXPECT_EQ(s1.sync_user_agent(), s2.sync_user_agent()); |
| 59 ASSERT_EQ(s1.chrome_version(), s2.chrome_version()); | 59 EXPECT_EQ(s1.chrome_version(), s2.chrome_version()); |
| 60 ASSERT_EQ(s1.signin_scoped_device_id(), s2.signin_scoped_device_id()); | 60 EXPECT_EQ(s1.signin_scoped_device_id(), s2.signin_scoped_device_id()); |
| 61 } | 61 } |
| 62 | 62 |
| 63 void AssertEqual(const DeviceInfoSpecifics& specifics, | 63 void VerifyEqual(const DeviceInfoSpecifics& specifics, |
| 64 const DeviceInfo& model) { | 64 const DeviceInfo& model) { |
| 65 ASSERT_EQ(specifics.cache_guid(), model.guid()); | 65 EXPECT_EQ(specifics.cache_guid(), model.guid()); |
| 66 ASSERT_EQ(specifics.client_name(), model.client_name()); | 66 EXPECT_EQ(specifics.client_name(), model.client_name()); |
| 67 ASSERT_EQ(specifics.device_type(), model.device_type()); | 67 EXPECT_EQ(specifics.device_type(), model.device_type()); |
| 68 ASSERT_EQ(specifics.sync_user_agent(), model.sync_user_agent()); | 68 EXPECT_EQ(specifics.sync_user_agent(), model.sync_user_agent()); |
| 69 ASSERT_EQ(specifics.chrome_version(), model.chrome_version()); | 69 EXPECT_EQ(specifics.chrome_version(), model.chrome_version()); |
| 70 ASSERT_EQ(specifics.signin_scoped_device_id(), | 70 EXPECT_EQ(specifics.signin_scoped_device_id(), |
| 71 model.signin_scoped_device_id()); | 71 model.signin_scoped_device_id()); |
| 72 } | 72 } |
| 73 | 73 |
| 74 void AssertExpectedFromDataBatch( | 74 void VerifyDataBatch(std::map<std::string, DeviceInfoSpecifics> expected, |
| 75 std::map<std::string, DeviceInfoSpecifics> expected, | 75 SyncError error, |
| 76 SyncError error, | 76 std::unique_ptr<DataBatch> batch) { |
| 77 std::unique_ptr<DataBatch> batch) { | 77 EXPECT_FALSE(error.IsSet()); |
| 78 ASSERT_FALSE(error.IsSet()); | |
| 79 while (batch->HasNext()) { | 78 while (batch->HasNext()) { |
| 80 const KeyAndData& pair = batch->Next(); | 79 const KeyAndData& pair = batch->Next(); |
| 81 std::map<std::string, DeviceInfoSpecifics>::iterator iter = | 80 auto iter = expected.find(pair.first); |
| 82 expected.find(pair.first); | |
| 83 ASSERT_NE(iter, expected.end()); | 81 ASSERT_NE(iter, expected.end()); |
| 84 AssertEqual(iter->second, pair.second->specifics.device_info()); | 82 VerifyEqual(iter->second, pair.second->specifics.device_info()); |
| 85 // Removing allows us to verify we don't see the same item multiple times, | 83 // Removing allows us to verify we don't see the same item multiple times, |
| 86 // and that we saw everything we expected. | 84 // and that we saw everything we expected. |
| 87 expected.erase(iter); | 85 expected.erase(iter); |
| 88 } | 86 } |
| 89 ASSERT_TRUE(expected.empty()); | 87 EXPECT_TRUE(expected.empty()); |
| 90 } | 88 } |
| 91 | 89 |
| 92 // Creates an EntityData/EntityDataPtr around a copy of the given specifics. | 90 // Creates an EntityData/EntityDataPtr around a copy of the given specifics. |
| 93 EntityDataPtr SpecificsToEntity(const DeviceInfoSpecifics& specifics) { | 91 EntityDataPtr SpecificsToEntity(const DeviceInfoSpecifics& specifics) { |
| 94 EntityData data; | 92 EntityData data; |
| 95 // These tests do not care about the tag hash, but EntityData and friends | 93 // These tests do not care about the tag hash, but EntityData and friends |
| 96 // cannot differentiate between the default EntityData object if the hash | 94 // cannot differentiate between the default EntityData object if the hash |
| 97 // is unset, which causes pass/copy operations to no-op and things start to | 95 // is unset, which causes pass/copy operations to no-op and things start to |
| 98 // break, so we throw in a junk value and forget about it. | 96 // break, so we throw in a junk value and forget about it. |
| 99 data.client_tag_hash = "junk"; | 97 data.client_tag_hash = "junk"; |
| 100 *data.specifics.mutable_device_info() = specifics; | 98 *data.specifics.mutable_device_info() = specifics; |
| 101 return data.PassToPtr(); | 99 return data.PassToPtr(); |
| 102 } | 100 } |
| 103 | 101 |
| 104 std::string CacheGuidToTag(const std::string& guid) { | 102 std::string CacheGuidToTag(const std::string& guid) { |
| 105 return "DeviceInfo_" + guid; | 103 return "DeviceInfo_" + guid; |
| 106 } | 104 } |
| 107 | 105 |
| 108 // Helper method to reduce duplicated code between tests. Wraps the given | 106 // Helper method to reduce duplicated code between tests. Wraps the given |
| 109 // specifics object in an EntityData and EntityChange of type ACTION_ADD, and | 107 // specifics objects in an EntityData and EntityChange of type ACTION_ADD, and |
| 110 // pushes them onto the given change list. The corresponding guid of the data | 108 // returns an EntityChangeList containing them all. Order is maintained. |
| 111 // is returned, which happens to be the storage key. | 109 EntityChangeList EntityAddList( |
| 112 std::string PushBackEntityChangeAdd(const DeviceInfoSpecifics& specifics, | 110 std::vector<DeviceInfoSpecifics> specifics_list) { |
| 113 EntityChangeList* changes) { | 111 EntityChangeList changes; |
| 114 EntityDataPtr ptr = SpecificsToEntity(specifics); | 112 for (const auto& specifics : specifics_list) { |
| 115 changes->push_back(EntityChange::CreateAdd(specifics.cache_guid(), ptr)); | 113 changes.push_back(EntityChange::CreateAdd(specifics.cache_guid(), |
| 116 return specifics.cache_guid(); | 114 SpecificsToEntity(specifics))); |
| 115 } |
| 116 return changes; |
| 117 } | 117 } |
| 118 | 118 |
| 119 // Instead of actually processing anything, simply accumulates all instructions | 119 // Instead of actually processing anything, simply accumulates all instructions |
| 120 // in members that can then be accessed. TODO(skym): If this ends up being | 120 // in members that can then be accessed. TODO(skym): If this ends up being |
| 121 // useful for other model type unittests it should be moved out to a shared | 121 // useful for other model type unittests it should be moved out to a shared |
| 122 // location. | 122 // location. |
| 123 class RecordingModelTypeChangeProcessor : public FakeModelTypeChangeProcessor { | 123 class RecordingModelTypeChangeProcessor : public FakeModelTypeChangeProcessor { |
| 124 public: | 124 public: |
| 125 RecordingModelTypeChangeProcessor() {} | 125 RecordingModelTypeChangeProcessor() {} |
| 126 ~RecordingModelTypeChangeProcessor() override {} | 126 ~RecordingModelTypeChangeProcessor() override {} |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 // that is slightly different from eachother. | 307 // that is slightly different from eachother. |
| 308 int generated_count_ = 0; | 308 int generated_count_ = 0; |
| 309 }; | 309 }; |
| 310 | 310 |
| 311 namespace { | 311 namespace { |
| 312 | 312 |
| 313 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { | 313 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { |
| 314 InitializeAndPump(); | 314 InitializeAndPump(); |
| 315 DeviceInfoList devices = service()->GetAllDeviceInfo(); | 315 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
| 316 ASSERT_EQ(1u, devices.size()); | 316 ASSERT_EQ(1u, devices.size()); |
| 317 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); | 317 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
| 318 } | 318 } |
| 319 | 319 |
| 320 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) { | 320 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) { |
| 321 InitializeService(); | 321 InitializeService(); |
| 322 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 322 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); |
| 323 base::RunLoop().RunUntilIdle(); | 323 base::RunLoop().RunUntilIdle(); |
| 324 DeviceInfoList devices = service()->GetAllDeviceInfo(); | 324 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
| 325 ASSERT_EQ(1u, devices.size()); | 325 ASSERT_EQ(1u, devices.size()); |
| 326 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); | 326 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
| 327 } | 327 } |
| 328 | 328 |
| 329 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { | 329 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { |
| 330 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); | 330 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); |
| 331 InitializeAndPump(); | 331 InitializeAndPump(); |
| 332 | 332 |
| 333 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 333 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); |
| 334 local_device()->Initialize(CreateDeviceInfo()); | 334 local_device()->Initialize(CreateDeviceInfo()); |
| 335 base::RunLoop().RunUntilIdle(); | 335 base::RunLoop().RunUntilIdle(); |
| 336 | 336 |
| 337 DeviceInfoList devices = service()->GetAllDeviceInfo(); | 337 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
| 338 ASSERT_EQ(1u, devices.size()); | 338 ASSERT_EQ(1u, devices.size()); |
| 339 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); | 339 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
| 340 } | 340 } |
| 341 | 341 |
| 342 // Metadata shouldn't be loaded before the provider is initialized. | 342 // Metadata shouldn't be loaded before the provider is initialized. |
| 343 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) { | 343 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) { |
| 344 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); | 344 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); |
| 345 InitializeAndPump(); | 345 InitializeAndPump(); |
| 346 EXPECT_FALSE(processor()->metadata()); | 346 EXPECT_FALSE(processor()->metadata()); |
| 347 | 347 |
| 348 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 348 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); |
| 349 local_device()->Initialize(CreateDeviceInfo()); | 349 local_device()->Initialize(CreateDeviceInfo()); |
| 350 base::RunLoop().RunUntilIdle(); | 350 base::RunLoop().RunUntilIdle(); |
| 351 | 351 |
| 352 DeviceInfoList devices = service()->GetAllDeviceInfo(); | 352 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
| 353 ASSERT_EQ(1u, devices.size()); | 353 ASSERT_EQ(1u, devices.size()); |
| 354 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); | 354 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
| 355 | 355 |
| 356 EXPECT_TRUE(processor()->metadata()); | 356 EXPECT_TRUE(processor()->metadata()); |
| 357 } | 357 } |
| 358 | 358 |
| 359 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { | 359 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { |
| 360 InitializeService(); | 360 InitializeService(); |
| 361 const std::string guid = "abc"; | 361 const std::string guid = "abc"; |
| 362 EntitySpecifics entity_specifics; | 362 EntitySpecifics entity_specifics; |
| 363 entity_specifics.mutable_device_info()->set_cache_guid(guid); | 363 entity_specifics.mutable_device_info()->set_cache_guid(guid); |
| 364 EntityData entity_data; | 364 EntityData entity_data; |
| 365 entity_data.specifics = entity_specifics; | 365 entity_data.specifics = entity_specifics; |
| 366 EXPECT_EQ(CacheGuidToTag(guid), service()->GetClientTag(entity_data)); | 366 EXPECT_EQ(CacheGuidToTag(guid), service()->GetClientTag(entity_data)); |
| 367 } | 367 } |
| 368 | 368 |
| 369 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { | 369 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { |
| 370 InitializeService(); | 370 InitializeService(); |
| 371 EntitySpecifics entity_specifics; | 371 EntitySpecifics entity_specifics; |
| 372 entity_specifics.mutable_device_info(); | 372 entity_specifics.mutable_device_info(); |
| 373 EntityData entity_data; | 373 EntityData entity_data; |
| 374 entity_data.specifics = entity_specifics; | 374 entity_data.specifics = entity_specifics; |
| 375 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data)); | 375 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data)); |
| 376 } | 376 } |
| 377 | 377 |
| 378 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { | 378 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { |
| 379 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 379 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 380 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 380 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
| 381 store()->WriteData(batch.get(), specifics.cache_guid(), | 381 store()->WriteData(batch.get(), specifics.cache_guid(), |
| 382 specifics.SerializeAsString()); | 382 specifics.SerializeAsString()); |
| 383 store()->CommitWriteBatch(std::move(batch), | 383 store()->CommitWriteBatch(std::move(batch), |
| 384 base::Bind(&AssertResultIsSuccess)); | 384 base::Bind(&VerifyResultIsSuccess)); |
| 385 | 385 |
| 386 InitializeAndPump(); | 386 InitializeAndPump(); |
| 387 | 387 |
| 388 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); | 388 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); |
| 389 AssertEqual(specifics, | 389 VerifyEqual(specifics, |
| 390 *service()->GetDeviceInfo(specifics.cache_guid()).get()); | 390 *service()->GetDeviceInfo(specifics.cache_guid()).get()); |
| 391 } | 391 } |
| 392 | 392 |
| 393 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { | 393 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { |
| 394 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 394 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 395 ModelTypeState state; | 395 ModelTypeState state; |
| 396 state.set_encryption_key_name("ekn"); | 396 state.set_encryption_key_name("ekn"); |
| 397 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); | 397 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); |
| 398 store()->CommitWriteBatch(std::move(batch), | 398 store()->CommitWriteBatch(std::move(batch), |
| 399 base::Bind(&AssertResultIsSuccess)); | 399 base::Bind(&VerifyResultIsSuccess)); |
| 400 InitializeAndPump(); | 400 InitializeAndPump(); |
| 401 DeviceInfoList devices = service()->GetAllDeviceInfo(); | 401 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
| 402 ASSERT_EQ(1u, devices.size()); | 402 ASSERT_EQ(1u, devices.size()); |
| 403 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); | 403 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
| 404 EXPECT_EQ(1u, processor()->put_multimap().size()); | 404 EXPECT_EQ(1u, processor()->put_multimap().size()); |
| 405 } | 405 } |
| 406 | 406 |
| 407 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { | 407 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { |
| 408 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 408 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 409 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 409 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
| 410 store()->WriteData(batch.get(), specifics.cache_guid(), | 410 store()->WriteData(batch.get(), specifics.cache_guid(), |
| 411 specifics.SerializeAsString()); | 411 specifics.SerializeAsString()); |
| 412 ModelTypeState state; | 412 ModelTypeState state; |
| 413 state.set_encryption_key_name("ekn"); | 413 state.set_encryption_key_name("ekn"); |
| 414 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); | 414 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); |
| 415 store()->CommitWriteBatch(std::move(batch), | 415 store()->CommitWriteBatch(std::move(batch), |
| 416 base::Bind(&AssertResultIsSuccess)); | 416 base::Bind(&VerifyResultIsSuccess)); |
| 417 | 417 |
| 418 InitializeAndPump(); | 418 InitializeAndPump(); |
| 419 | 419 |
| 420 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); | 420 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); |
| 421 AssertEqual(specifics, | 421 VerifyEqual(specifics, |
| 422 *service()->GetDeviceInfo(specifics.cache_guid()).get()); | 422 *service()->GetDeviceInfo(specifics.cache_guid()).get()); |
| 423 ASSERT_TRUE(processor()->metadata()); | 423 EXPECT_TRUE(processor()->metadata()); |
| 424 ASSERT_EQ(state.encryption_key_name(), | 424 EXPECT_EQ(state.encryption_key_name(), |
| 425 processor()->metadata()->GetModelTypeState().encryption_key_name()); | 425 processor()->metadata()->GetModelTypeState().encryption_key_name()); |
| 426 } | 426 } |
| 427 | 427 |
| 428 TEST_F(DeviceInfoServiceTest, GetData) { | 428 TEST_F(DeviceInfoServiceTest, GetData) { |
| 429 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 429 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 430 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); | 430 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); |
| 431 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); | 431 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); |
| 432 DeviceInfoSpecifics specifics3 = GenerateTestSpecifics(); | 432 DeviceInfoSpecifics specifics3 = GenerateTestSpecifics(); |
| 433 store()->WriteData(batch.get(), specifics1.cache_guid(), | 433 store()->WriteData(batch.get(), specifics1.cache_guid(), |
| 434 specifics1.SerializeAsString()); | 434 specifics1.SerializeAsString()); |
| 435 store()->WriteData(batch.get(), specifics2.cache_guid(), | 435 store()->WriteData(batch.get(), specifics2.cache_guid(), |
| 436 specifics2.SerializeAsString()); | 436 specifics2.SerializeAsString()); |
| 437 store()->WriteData(batch.get(), specifics3.cache_guid(), | 437 store()->WriteData(batch.get(), specifics3.cache_guid(), |
| 438 specifics3.SerializeAsString()); | 438 specifics3.SerializeAsString()); |
| 439 store()->CommitWriteBatch(std::move(batch), | 439 store()->CommitWriteBatch(std::move(batch), |
| 440 base::Bind(&AssertResultIsSuccess)); | 440 base::Bind(&VerifyResultIsSuccess)); |
| 441 | 441 |
| 442 InitializeAndPump(); | 442 InitializeAndPump(); |
| 443 | 443 |
| 444 std::map<std::string, DeviceInfoSpecifics> expected; | 444 std::map<std::string, DeviceInfoSpecifics> expected{ |
| 445 expected[specifics1.cache_guid()] = specifics1; | 445 {specifics1.cache_guid(), specifics1}, |
| 446 expected[specifics3.cache_guid()] = specifics3; | 446 {specifics3.cache_guid(), specifics3}}; |
| 447 StorageKeyList storage_keys; | 447 service()->GetData({specifics1.cache_guid(), specifics3.cache_guid()}, |
| 448 storage_keys.push_back(specifics1.cache_guid()); | 448 base::Bind(&VerifyDataBatch, expected)); |
| 449 storage_keys.push_back(specifics3.cache_guid()); | |
| 450 service()->GetData(storage_keys, | |
| 451 base::Bind(&AssertExpectedFromDataBatch, expected)); | |
| 452 } | 449 } |
| 453 | 450 |
| 454 TEST_F(DeviceInfoServiceTest, GetDataMissing) { | 451 TEST_F(DeviceInfoServiceTest, GetDataMissing) { |
| 455 InitializeAndPump(); | 452 InitializeAndPump(); |
| 456 std::map<std::string, DeviceInfoSpecifics> expected; | 453 service()->GetData({"does_not_exist"}, |
| 457 StorageKeyList storage_keys; | 454 base::Bind(&VerifyDataBatch, |
| 458 storage_keys.push_back("does_not_exist"); | 455 std::map<std::string, DeviceInfoSpecifics>())); |
| 459 service()->GetData(storage_keys, | |
| 460 base::Bind(&AssertExpectedFromDataBatch, expected)); | |
| 461 } | 456 } |
| 462 | 457 |
| 463 TEST_F(DeviceInfoServiceTest, GetAllData) { | 458 TEST_F(DeviceInfoServiceTest, GetAllData) { |
| 464 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 459 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 465 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); | 460 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); |
| 466 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); | 461 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); |
| 467 const std::string& guid1 = specifics1.cache_guid(); | 462 const std::string& guid1 = specifics1.cache_guid(); |
| 468 const std::string& guid2 = specifics2.cache_guid(); | 463 const std::string& guid2 = specifics2.cache_guid(); |
| 469 store()->WriteData(batch.get(), specifics1.cache_guid(), | 464 store()->WriteData(batch.get(), specifics1.cache_guid(), |
| 470 specifics1.SerializeAsString()); | 465 specifics1.SerializeAsString()); |
| 471 store()->WriteData(batch.get(), specifics2.cache_guid(), | 466 store()->WriteData(batch.get(), specifics2.cache_guid(), |
| 472 specifics2.SerializeAsString()); | 467 specifics2.SerializeAsString()); |
| 473 store()->CommitWriteBatch(std::move(batch), | 468 store()->CommitWriteBatch(std::move(batch), |
| 474 base::Bind(&AssertResultIsSuccess)); | 469 base::Bind(&VerifyResultIsSuccess)); |
| 475 | 470 |
| 476 InitializeAndPump(); | 471 InitializeAndPump(); |
| 477 | 472 |
| 478 std::map<std::string, DeviceInfoSpecifics> expected; | 473 std::map<std::string, DeviceInfoSpecifics> expected{{guid1, specifics1}, |
| 479 expected[guid1] = specifics1; | 474 {guid2, specifics2}}; |
| 480 expected[guid2] = specifics2; | 475 service()->GetData({guid1, guid2}, base::Bind(&VerifyDataBatch, expected)); |
| 481 StorageKeyList storage_keys; | |
| 482 storage_keys.push_back(guid1); | |
| 483 storage_keys.push_back(guid2); | |
| 484 service()->GetData(storage_keys, | |
| 485 base::Bind(&AssertExpectedFromDataBatch, expected)); | |
| 486 } | 476 } |
| 487 | 477 |
| 488 TEST_F(DeviceInfoServiceTest, ApplySyncChangesEmpty) { | 478 TEST_F(DeviceInfoServiceTest, ApplySyncChangesEmpty) { |
| 489 InitializeAndPump(); | 479 InitializeAndPump(); |
| 490 EXPECT_EQ(1, change_count()); | 480 EXPECT_EQ(1, change_count()); |
| 491 const SyncError error = service()->ApplySyncChanges( | 481 const SyncError error = service()->ApplySyncChanges( |
| 492 service()->CreateMetadataChangeList(), EntityChangeList()); | 482 service()->CreateMetadataChangeList(), EntityChangeList()); |
| 493 EXPECT_FALSE(error.IsSet()); | 483 EXPECT_FALSE(error.IsSet()); |
| 494 EXPECT_EQ(1, change_count()); | 484 EXPECT_EQ(1, change_count()); |
| 495 } | 485 } |
| 496 | 486 |
| 497 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { | 487 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { |
| 498 InitializeAndPump(); | 488 InitializeAndPump(); |
| 499 EXPECT_EQ(1, change_count()); | 489 EXPECT_EQ(1, change_count()); |
| 500 | 490 |
| 501 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 491 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
| 502 EntityChangeList add_changes; | 492 const SyncError error_on_add = service()->ApplySyncChanges( |
| 503 PushBackEntityChangeAdd(specifics, &add_changes); | 493 service()->CreateMetadataChangeList(), EntityAddList({specifics})); |
| 504 SyncError error = service()->ApplySyncChanges( | |
| 505 service()->CreateMetadataChangeList(), add_changes); | |
| 506 | 494 |
| 507 EXPECT_FALSE(error.IsSet()); | 495 EXPECT_FALSE(error_on_add.IsSet()); |
| 508 std::unique_ptr<DeviceInfo> info = | 496 std::unique_ptr<DeviceInfo> info = |
| 509 service()->GetDeviceInfo(specifics.cache_guid()); | 497 service()->GetDeviceInfo(specifics.cache_guid()); |
| 510 ASSERT_TRUE(info); | 498 ASSERT_TRUE(info); |
| 511 AssertEqual(specifics, *info.get()); | 499 VerifyEqual(specifics, *info.get()); |
| 512 EXPECT_EQ(2, change_count()); | 500 EXPECT_EQ(2, change_count()); |
| 513 | 501 |
| 514 EntityChangeList delete_changes; | 502 const SyncError error_on_delete = service()->ApplySyncChanges( |
| 515 delete_changes.push_back(EntityChange::CreateDelete(specifics.cache_guid())); | 503 service()->CreateMetadataChangeList(), |
| 516 error = service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 504 {EntityChange::CreateDelete(specifics.cache_guid())}); |
| 517 delete_changes); | |
| 518 | 505 |
| 519 EXPECT_FALSE(error.IsSet()); | 506 EXPECT_FALSE(error_on_delete.IsSet()); |
| 520 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid())); | 507 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid())); |
| 521 EXPECT_EQ(3, change_count()); | 508 EXPECT_EQ(3, change_count()); |
| 522 } | 509 } |
| 523 | 510 |
| 524 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { | 511 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { |
| 525 InitializeAndPump(); | 512 InitializeAndPump(); |
| 526 EXPECT_EQ(1, change_count()); | 513 EXPECT_EQ(1, change_count()); |
| 527 | 514 |
| 528 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 515 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
| 529 EntityChangeList data_changes; | |
| 530 PushBackEntityChangeAdd(specifics, &data_changes); | |
| 531 ModelTypeState state; | 516 ModelTypeState state; |
| 532 state.set_encryption_key_name("ekn"); | 517 state.set_encryption_key_name("ekn"); |
| 533 std::unique_ptr<MetadataChangeList> metadata_changes = | 518 std::unique_ptr<MetadataChangeList> metadata_changes = |
| 534 service()->CreateMetadataChangeList(); | 519 service()->CreateMetadataChangeList(); |
| 535 metadata_changes->UpdateModelTypeState(state); | 520 metadata_changes->UpdateModelTypeState(state); |
| 536 | 521 |
| 537 const SyncError error = | 522 const SyncError error = service()->ApplySyncChanges( |
| 538 service()->ApplySyncChanges(std::move(metadata_changes), data_changes); | 523 std::move(metadata_changes), EntityAddList({specifics})); |
| 539 EXPECT_FALSE(error.IsSet()); | 524 EXPECT_FALSE(error.IsSet()); |
| 540 EXPECT_EQ(2, change_count()); | 525 EXPECT_EQ(2, change_count()); |
| 541 | 526 |
| 542 RestartService(); | 527 RestartService(); |
| 543 | 528 |
| 544 std::unique_ptr<DeviceInfo> info = | 529 std::unique_ptr<DeviceInfo> info = |
| 545 service()->GetDeviceInfo(specifics.cache_guid()); | 530 service()->GetDeviceInfo(specifics.cache_guid()); |
| 546 ASSERT_TRUE(info); | 531 ASSERT_TRUE(info); |
| 547 AssertEqual(specifics, *info.get()); | 532 VerifyEqual(specifics, *info.get()); |
| 548 | 533 |
| 549 EXPECT_TRUE(processor()->metadata()); | 534 EXPECT_TRUE(processor()->metadata()); |
| 550 EXPECT_EQ(state.encryption_key_name(), | 535 EXPECT_EQ(state.encryption_key_name(), |
| 551 processor()->metadata()->GetModelTypeState().encryption_key_name()); | 536 processor()->metadata()->GetModelTypeState().encryption_key_name()); |
| 552 } | 537 } |
| 553 | 538 |
| 554 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { | 539 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { |
| 555 InitializeAndPump(); | 540 InitializeAndPump(); |
| 556 | 541 |
| 557 // The point of this test is to try to apply remote changes that have the same | 542 // The point of this test is to try to apply remote changes that have the same |
| 558 // cache guid as the local device. The service should ignore these changes | 543 // cache guid as the local device. The service should ignore these changes |
| 559 // since only it should be performing writes on its data. | 544 // since only it should be performing writes on its data. |
| 560 DeviceInfoSpecifics specifics = | 545 DeviceInfoSpecifics specifics = |
| 561 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); | 546 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); |
| 562 EntityChangeList change_list; | |
| 563 PushBackEntityChangeAdd(specifics, &change_list); | |
| 564 | 547 |
| 565 // Should have a single change from reconciliation. | 548 // Should have a single change from reconciliation. |
| 566 EXPECT_TRUE( | 549 EXPECT_TRUE( |
| 567 service()->GetDeviceInfo(local_device()->GetLocalDeviceInfo()->guid())); | 550 service()->GetDeviceInfo(local_device()->GetLocalDeviceInfo()->guid())); |
| 568 EXPECT_EQ(1, change_count()); | 551 EXPECT_EQ(1, change_count()); |
| 569 // Ensure |last_updated| is about now, plus or minus a little bit. | 552 // Ensure |last_updated| is about now, plus or minus a little bit. |
| 570 Time last_updated(ProtoTimeToTime(processor() | 553 Time last_updated(ProtoTimeToTime(processor() |
| 571 ->put_multimap() | 554 ->put_multimap() |
| 572 .begin() | 555 .begin() |
| 573 ->second->specifics.device_info() | 556 ->second->specifics.device_info() |
| 574 .last_updated_timestamp())); | 557 .last_updated_timestamp())); |
| 575 EXPECT_LT(Time::Now() - TimeDelta::FromMinutes(1), last_updated); | 558 EXPECT_LT(Time::Now() - TimeDelta::FromMinutes(1), last_updated); |
| 576 EXPECT_GT(Time::Now() + TimeDelta::FromMinutes(1), last_updated); | 559 EXPECT_GT(Time::Now() + TimeDelta::FromMinutes(1), last_updated); |
| 577 | 560 |
| 578 EXPECT_FALSE( | 561 const SyncError error_on_add = service()->ApplySyncChanges( |
| 579 service() | 562 service()->CreateMetadataChangeList(), EntityAddList({specifics})); |
| 580 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) | 563 EXPECT_FALSE(error_on_add.IsSet()); |
| 581 .IsSet()); | |
| 582 EXPECT_EQ(1, change_count()); | 564 EXPECT_EQ(1, change_count()); |
| 583 | 565 |
| 584 change_list.clear(); | 566 const SyncError error_on_delete = service()->ApplySyncChanges( |
| 585 change_list.push_back(EntityChange::CreateDelete(specifics.cache_guid())); | 567 service()->CreateMetadataChangeList(), |
| 586 EXPECT_FALSE( | 568 {EntityChange::CreateDelete(specifics.cache_guid())}); |
| 587 service() | 569 EXPECT_FALSE(error_on_delete.IsSet()); |
| 588 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) | |
| 589 .IsSet()); | |
| 590 EXPECT_EQ(1, change_count()); | 570 EXPECT_EQ(1, change_count()); |
| 591 } | 571 } |
| 592 | 572 |
| 593 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) { | 573 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) { |
| 594 InitializeAndPump(); | 574 InitializeAndPump(); |
| 595 EXPECT_EQ(1, change_count()); | 575 EXPECT_EQ(1, change_count()); |
| 596 EntityChangeList delete_changes; | 576 const SyncError error = |
| 597 delete_changes.push_back(EntityChange::CreateDelete("guid")); | 577 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
| 598 const SyncError error = service()->ApplySyncChanges( | 578 {EntityChange::CreateDelete("guid")}); |
| 599 service()->CreateMetadataChangeList(), delete_changes); | |
| 600 EXPECT_FALSE(error.IsSet()); | 579 EXPECT_FALSE(error.IsSet()); |
| 601 EXPECT_EQ(1, change_count()); | 580 EXPECT_EQ(1, change_count()); |
| 602 } | 581 } |
| 603 | 582 |
| 604 TEST_F(DeviceInfoServiceTest, MergeEmpty) { | 583 TEST_F(DeviceInfoServiceTest, MergeEmpty) { |
| 605 InitializeAndPump(); | 584 InitializeAndPump(); |
| 606 EXPECT_EQ(1, change_count()); | 585 EXPECT_EQ(1, change_count()); |
| 607 const SyncError error = service()->MergeSyncData( | 586 const SyncError error = service()->MergeSyncData( |
| 608 service()->CreateMetadataChangeList(), EntityDataMap()); | 587 service()->CreateMetadataChangeList(), EntityDataMap()); |
| 609 EXPECT_FALSE(error.IsSet()); | 588 EXPECT_FALSE(error.IsSet()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 627 GenerateTestSpecifics(conflict_guid); | 606 GenerateTestSpecifics(conflict_guid); |
| 628 const DeviceInfoSpecifics unique_remote = | 607 const DeviceInfoSpecifics unique_remote = |
| 629 GenerateTestSpecifics("unique_remote_guid"); | 608 GenerateTestSpecifics("unique_remote_guid"); |
| 630 | 609 |
| 631 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 610 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 632 store()->WriteData(batch.get(), unique_local.cache_guid(), | 611 store()->WriteData(batch.get(), unique_local.cache_guid(), |
| 633 unique_local.SerializeAsString()); | 612 unique_local.SerializeAsString()); |
| 634 store()->WriteData(batch.get(), conflict_local.cache_guid(), | 613 store()->WriteData(batch.get(), conflict_local.cache_guid(), |
| 635 conflict_local.SerializeAsString()); | 614 conflict_local.SerializeAsString()); |
| 636 store()->CommitWriteBatch(std::move(batch), | 615 store()->CommitWriteBatch(std::move(batch), |
| 637 base::Bind(&AssertResultIsSuccess)); | 616 base::Bind(&VerifyResultIsSuccess)); |
| 638 | 617 |
| 639 InitializeAndPump(); | 618 InitializeAndPump(); |
| 640 EXPECT_EQ(1, change_count()); | 619 EXPECT_EQ(1, change_count()); |
| 641 | 620 |
| 642 EntityDataMap remote_input; | 621 EntityDataMap remote_input; |
| 643 remote_input[conflict_remote.cache_guid()] = | 622 remote_input[conflict_remote.cache_guid()] = |
| 644 SpecificsToEntity(conflict_remote); | 623 SpecificsToEntity(conflict_remote); |
| 645 remote_input[unique_remote.cache_guid()] = SpecificsToEntity(unique_remote); | 624 remote_input[unique_remote.cache_guid()] = SpecificsToEntity(unique_remote); |
| 646 | 625 |
| 647 ModelTypeState state; | 626 ModelTypeState state; |
| 648 state.set_encryption_key_name("ekn"); | 627 state.set_encryption_key_name("ekn"); |
| 649 std::unique_ptr<MetadataChangeList> metadata_changes( | 628 std::unique_ptr<MetadataChangeList> metadata_changes( |
| 650 service()->CreateMetadataChangeList()); | 629 service()->CreateMetadataChangeList()); |
| 651 metadata_changes->UpdateModelTypeState(state); | 630 metadata_changes->UpdateModelTypeState(state); |
| 652 | 631 |
| 653 const SyncError error = | 632 const SyncError error = |
| 654 service()->MergeSyncData(std::move(metadata_changes), remote_input); | 633 service()->MergeSyncData(std::move(metadata_changes), remote_input); |
| 655 EXPECT_FALSE(error.IsSet()); | 634 EXPECT_FALSE(error.IsSet()); |
| 656 EXPECT_EQ(2, change_count()); | 635 EXPECT_EQ(2, change_count()); |
| 657 | 636 |
| 658 // The remote should beat the local in conflict. | 637 // The remote should beat the local in conflict. |
| 659 EXPECT_EQ(4u, service()->GetAllDeviceInfo().size()); | 638 EXPECT_EQ(4u, service()->GetAllDeviceInfo().size()); |
| 660 AssertEqual(unique_local, | 639 VerifyEqual(unique_local, |
| 661 *service()->GetDeviceInfo(unique_local.cache_guid()).get()); | 640 *service()->GetDeviceInfo(unique_local.cache_guid()).get()); |
| 662 AssertEqual(unique_remote, | 641 VerifyEqual(unique_remote, |
| 663 *service()->GetDeviceInfo(unique_remote.cache_guid()).get()); | 642 *service()->GetDeviceInfo(unique_remote.cache_guid()).get()); |
| 664 AssertEqual(conflict_remote, *service()->GetDeviceInfo(conflict_guid).get()); | 643 VerifyEqual(conflict_remote, *service()->GetDeviceInfo(conflict_guid).get()); |
| 665 | 644 |
| 666 // Service should have told the processor about the existance of unique_local. | 645 // Service should have told the processor about the existance of unique_local. |
| 667 EXPECT_TRUE(processor()->delete_set().empty()); | 646 EXPECT_TRUE(processor()->delete_set().empty()); |
| 668 EXPECT_EQ(3u, processor()->put_multimap().size()); | 647 EXPECT_EQ(3u, processor()->put_multimap().size()); |
| 669 EXPECT_EQ(1u, processor()->put_multimap().count(unique_local.cache_guid())); | 648 EXPECT_EQ(1u, processor()->put_multimap().count(unique_local.cache_guid())); |
| 670 const auto& it = processor()->put_multimap().find(unique_local.cache_guid()); | 649 const auto& it = processor()->put_multimap().find(unique_local.cache_guid()); |
| 671 ASSERT_NE(processor()->put_multimap().end(), it); | 650 ASSERT_NE(processor()->put_multimap().end(), it); |
| 672 AssertEqual(unique_local, it->second->specifics.device_info()); | 651 VerifyEqual(unique_local, it->second->specifics.device_info()); |
| 673 | 652 |
| 674 RestartService(); | 653 RestartService(); |
| 675 ASSERT_EQ(state.encryption_key_name(), | 654 EXPECT_EQ(state.encryption_key_name(), |
| 676 processor()->metadata()->GetModelTypeState().encryption_key_name()); | 655 processor()->metadata()->GetModelTypeState().encryption_key_name()); |
| 677 } | 656 } |
| 678 | 657 |
| 679 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { | 658 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { |
| 680 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo(); | 659 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo(); |
| 681 std::unique_ptr<DeviceInfoSpecifics> specifics = | 660 std::unique_ptr<DeviceInfoSpecifics> specifics = |
| 682 CopyToSpecifics(*local_device_info); | 661 CopyToSpecifics(*local_device_info); |
| 683 specifics->set_last_updated_timestamp(TimeToProtoTime(Time::Now())); | 662 specifics->set_last_updated_timestamp(TimeToProtoTime(Time::Now())); |
| 684 const std::string guid = local_device_info->guid(); | 663 const std::string guid = local_device_info->guid(); |
| 685 | 664 |
| 686 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 665 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 687 store()->WriteData(batch.get(), guid, specifics->SerializeAsString()); | 666 store()->WriteData(batch.get(), guid, specifics->SerializeAsString()); |
| 688 store()->CommitWriteBatch(std::move(batch), | 667 store()->CommitWriteBatch(std::move(batch), |
| 689 base::Bind(&AssertResultIsSuccess)); | 668 base::Bind(&VerifyResultIsSuccess)); |
| 690 | 669 |
| 691 InitializeAndPump(); | 670 InitializeAndPump(); |
| 692 | 671 |
| 693 EntityDataMap remote_input; | 672 EntityDataMap remote_input; |
| 694 remote_input[guid] = SpecificsToEntity(*specifics); | 673 remote_input[guid] = SpecificsToEntity(*specifics); |
| 695 | 674 |
| 696 const SyncError error = service()->MergeSyncData( | 675 const SyncError error = service()->MergeSyncData( |
| 697 service()->CreateMetadataChangeList(), remote_input); | 676 service()->CreateMetadataChangeList(), remote_input); |
| 698 EXPECT_FALSE(error.IsSet()); | 677 EXPECT_FALSE(error.IsSet()); |
| 699 EXPECT_EQ(0, change_count()); | 678 EXPECT_EQ(0, change_count()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 712 EXPECT_EQ(Time(), GetLastUpdateTime(specifics1)); | 691 EXPECT_EQ(Time(), GetLastUpdateTime(specifics1)); |
| 713 EXPECT_EQ(time1, GetLastUpdateTime(specifics2)); | 692 EXPECT_EQ(time1, GetLastUpdateTime(specifics2)); |
| 714 } | 693 } |
| 715 | 694 |
| 716 TEST_F(DeviceInfoServiceTest, CountActiveDevices) { | 695 TEST_F(DeviceInfoServiceTest, CountActiveDevices) { |
| 717 InitializeAndPump(); | 696 InitializeAndPump(); |
| 718 EXPECT_EQ(1, service()->CountActiveDevices()); | 697 EXPECT_EQ(1, service()->CountActiveDevices()); |
| 719 | 698 |
| 720 DeviceInfoSpecifics specifics = | 699 DeviceInfoSpecifics specifics = |
| 721 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); | 700 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); |
| 722 EntityChangeList change_list; | |
| 723 PushBackEntityChangeAdd(specifics, &change_list); | |
| 724 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 701 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
| 725 change_list); | 702 EntityAddList({specifics})); |
| 726 EXPECT_EQ(1, service()->CountActiveDevices()); | 703 EXPECT_EQ(1, service()->CountActiveDevices()); |
| 727 | 704 |
| 728 change_list.clear(); | |
| 729 specifics.set_last_updated_timestamp(TimeToProtoTime(Time::Now())); | 705 specifics.set_last_updated_timestamp(TimeToProtoTime(Time::Now())); |
| 730 PushBackEntityChangeAdd(specifics, &change_list); | |
| 731 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 706 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
| 732 change_list); | 707 EntityAddList({specifics})); |
| 733 EXPECT_EQ(1, service()->CountActiveDevices()); | 708 EXPECT_EQ(1, service()->CountActiveDevices()); |
| 734 | 709 |
| 735 change_list.clear(); | |
| 736 specifics.set_cache_guid("non-local"); | 710 specifics.set_cache_guid("non-local"); |
| 737 PushBackEntityChangeAdd(specifics, &change_list); | |
| 738 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 711 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
| 739 change_list); | 712 EntityAddList({specifics})); |
| 740 EXPECT_EQ(2, service()->CountActiveDevices()); | 713 EXPECT_EQ(2, service()->CountActiveDevices()); |
| 741 } | 714 } |
| 742 | 715 |
| 743 TEST_F(DeviceInfoServiceTest, MultipleOnProviderInitialized) { | 716 TEST_F(DeviceInfoServiceTest, MultipleOnProviderInitialized) { |
| 744 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); | 717 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); |
| 745 InitializeAndPump(); | 718 InitializeAndPump(); |
| 746 EXPECT_EQ(nullptr, processor()->metadata()); | 719 EXPECT_EQ(nullptr, processor()->metadata()); |
| 747 | 720 |
| 748 // Verify the processor was given metadata. | 721 // Verify the processor was given metadata. |
| 749 local_device()->Initialize(CreateDeviceInfo()); | 722 local_device()->Initialize(CreateDeviceInfo()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 774 EXPECT_EQ(2, change_count()); | 747 EXPECT_EQ(2, change_count()); |
| 775 EXPECT_EQ(2u, processor()->put_multimap().size()); | 748 EXPECT_EQ(2u, processor()->put_multimap().size()); |
| 776 } | 749 } |
| 777 | 750 |
| 778 TEST_F(DeviceInfoServiceTest, DisableSync) { | 751 TEST_F(DeviceInfoServiceTest, DisableSync) { |
| 779 InitializeAndPump(); | 752 InitializeAndPump(); |
| 780 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); | 753 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); |
| 781 EXPECT_EQ(1, change_count()); | 754 EXPECT_EQ(1, change_count()); |
| 782 | 755 |
| 783 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 756 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
| 784 EntityChangeList add_changes; | |
| 785 PushBackEntityChangeAdd(specifics, &add_changes); | |
| 786 const SyncError error = service()->ApplySyncChanges( | 757 const SyncError error = service()->ApplySyncChanges( |
| 787 service()->CreateMetadataChangeList(), add_changes); | 758 service()->CreateMetadataChangeList(), EntityAddList({specifics})); |
| 788 | 759 |
| 789 EXPECT_FALSE(error.IsSet()); | 760 EXPECT_FALSE(error.IsSet()); |
| 790 EXPECT_EQ(2u, service()->GetAllDeviceInfo().size()); | 761 EXPECT_EQ(2u, service()->GetAllDeviceInfo().size()); |
| 791 EXPECT_EQ(2, change_count()); | 762 EXPECT_EQ(2, change_count()); |
| 792 | 763 |
| 793 // Should clear out all local data and notify observers. | 764 // Should clear out all local data and notify observers. |
| 794 service()->DisableSync(); | 765 service()->DisableSync(); |
| 795 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); | 766 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); |
| 796 EXPECT_EQ(3, change_count()); | 767 EXPECT_EQ(3, change_count()); |
| 797 | 768 |
| 798 // Reloading from storage shouldn't contain remote data. | 769 // Reloading from storage shouldn't contain remote data. |
| 799 RestartService(); | 770 RestartService(); |
| 800 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); | 771 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); |
| 801 EXPECT_EQ(4, change_count()); | 772 EXPECT_EQ(4, change_count()); |
| 802 } | 773 } |
| 803 | 774 |
| 804 } // namespace | 775 } // namespace |
| 805 | 776 |
| 806 } // namespace syncer | 777 } // namespace syncer |
| OLD | NEW |