| 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 <map> | 7 #include <map> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 using syncer_v2::ModelTypeStore; | 45 using syncer_v2::ModelTypeStore; |
| 46 using syncer_v2::ModelTypeStoreTestUtil; | 46 using syncer_v2::ModelTypeStoreTestUtil; |
| 47 using syncer_v2::KeyAndData; | 47 using syncer_v2::KeyAndData; |
| 48 using sync_driver::DeviceInfo; | 48 using sync_driver::DeviceInfo; |
| 49 using sync_driver::DeviceInfoTracker; | 49 using sync_driver::DeviceInfoTracker; |
| 50 using sync_driver::LocalDeviceInfoProviderMock; | 50 using sync_driver::LocalDeviceInfoProviderMock; |
| 51 using sync_pb::DataTypeState; | 51 using sync_pb::DataTypeState; |
| 52 using sync_pb::DeviceInfoSpecifics; | 52 using sync_pb::DeviceInfoSpecifics; |
| 53 using sync_pb::EntitySpecifics; | 53 using sync_pb::EntitySpecifics; |
| 54 | 54 |
| 55 using DeviceInfoList = std::vector<std::unique_ptr<DeviceInfo>>; |
| 55 using StorageKeyList = ModelTypeService::StorageKeyList; | 56 using StorageKeyList = ModelTypeService::StorageKeyList; |
| 56 using RecordList = ModelTypeStore::RecordList; | 57 using RecordList = ModelTypeStore::RecordList; |
| 57 using Result = ModelTypeStore::Result; | 58 using Result = ModelTypeStore::Result; |
| 58 using StartCallback = ModelTypeChangeProcessor::StartCallback; | 59 using StartCallback = ModelTypeChangeProcessor::StartCallback; |
| 59 using WriteBatch = ModelTypeStore::WriteBatch; | 60 using WriteBatch = ModelTypeStore::WriteBatch; |
| 60 | 61 |
| 61 namespace { | 62 namespace { |
| 62 | 63 |
| 63 std::unique_ptr<DeviceInfo> CreateDeviceInfo() { | 64 std::unique_ptr<DeviceInfo> CreateDeviceInfo() { |
| 64 return base::MakeUnique<DeviceInfo>( | 65 return base::MakeUnique<DeviceInfo>( |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 // that is slightly different from eachother. | 339 // that is slightly different from eachother. |
| 339 int generated_count_ = 0; | 340 int generated_count_ = 0; |
| 340 }; | 341 }; |
| 341 | 342 |
| 342 namespace { | 343 namespace { |
| 343 | 344 |
| 344 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { | 345 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { |
| 345 InitializeAndPump(); | 346 InitializeAndPump(); |
| 346 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 347 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); |
| 347 OnSyncStarting(); | 348 OnSyncStarting(); |
| 348 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 349 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); |
| 349 ASSERT_EQ(1u, all_device_info.size()); | 350 ASSERT_EQ(1u, all_device_info.size()); |
| 350 ASSERT_TRUE( | 351 ASSERT_TRUE( |
| 351 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | 352 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); |
| 352 } | 353 } |
| 353 | 354 |
| 354 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) { | 355 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) { |
| 355 InitializeService(); | 356 InitializeService(); |
| 356 OnSyncStarting(); | 357 OnSyncStarting(); |
| 357 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 358 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); |
| 358 base::RunLoop().RunUntilIdle(); | 359 base::RunLoop().RunUntilIdle(); |
| 359 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 360 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); |
| 360 ASSERT_EQ(1u, all_device_info.size()); | 361 ASSERT_EQ(1u, all_device_info.size()); |
| 361 ASSERT_TRUE( | 362 ASSERT_TRUE( |
| 362 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | 363 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); |
| 363 } | 364 } |
| 364 | 365 |
| 365 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { | 366 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { |
| 366 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); | 367 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); |
| 367 InitializeAndPumpAndStart(); | 368 InitializeAndPumpAndStart(); |
| 368 | 369 |
| 369 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 370 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); |
| 370 local_device()->Initialize(CreateDeviceInfo()); | 371 local_device()->Initialize(CreateDeviceInfo()); |
| 371 base::RunLoop().RunUntilIdle(); | 372 base::RunLoop().RunUntilIdle(); |
| 372 | 373 |
| 373 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 374 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); |
| 374 ASSERT_EQ(1u, all_device_info.size()); | 375 ASSERT_EQ(1u, all_device_info.size()); |
| 375 ASSERT_TRUE( | 376 ASSERT_TRUE( |
| 376 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | 377 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); |
| 377 } | 378 } |
| 378 | 379 |
| 379 // Metadata shouldn't be loaded before the provider is initialized. | 380 // Metadata shouldn't be loaded before the provider is initialized. |
| 380 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) { | 381 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) { |
| 381 set_local_device(base::WrapUnique(new LocalDeviceInfoProviderMock())); | 382 set_local_device(base::WrapUnique(new LocalDeviceInfoProviderMock())); |
| 382 InitializeAndPump(); | 383 InitializeAndPump(); |
| 383 OnSyncStarting(); | 384 OnSyncStarting(); |
| 384 EXPECT_FALSE(processor()->metadata()); | 385 EXPECT_FALSE(processor()->metadata()); |
| 385 | 386 |
| 386 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 387 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); |
| 387 local_device()->Initialize(CreateDeviceInfo()); | 388 local_device()->Initialize(CreateDeviceInfo()); |
| 388 base::RunLoop().RunUntilIdle(); | 389 base::RunLoop().RunUntilIdle(); |
| 389 | 390 |
| 390 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 391 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); |
| 391 ASSERT_EQ(1u, all_device_info.size()); | 392 ASSERT_EQ(1u, all_device_info.size()); |
| 392 ASSERT_TRUE( | 393 ASSERT_TRUE( |
| 393 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | 394 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); |
| 394 | 395 |
| 395 EXPECT_TRUE(processor()->metadata()); | 396 EXPECT_TRUE(processor()->metadata()); |
| 396 } | 397 } |
| 397 | 398 |
| 398 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { | 399 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { |
| 399 InitializeService(); | 400 InitializeService(); |
| 400 const std::string guid = "abc"; | 401 const std::string guid = "abc"; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 417 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { | 418 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { |
| 418 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 419 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 419 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); | 420 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); |
| 420 store()->WriteData(batch.get(), specifics.cache_guid(), | 421 store()->WriteData(batch.get(), specifics.cache_guid(), |
| 421 specifics.SerializeAsString()); | 422 specifics.SerializeAsString()); |
| 422 store()->CommitWriteBatch(std::move(batch), | 423 store()->CommitWriteBatch(std::move(batch), |
| 423 base::Bind(&AssertResultIsSuccess)); | 424 base::Bind(&AssertResultIsSuccess)); |
| 424 | 425 |
| 425 InitializeAndPump(); | 426 InitializeAndPump(); |
| 426 | 427 |
| 427 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 428 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); |
| 428 ASSERT_EQ(1u, all_device_info.size()); | 429 ASSERT_EQ(1u, all_device_info.size()); |
| 429 AssertEqual(specifics, *all_device_info[0]); | 430 AssertEqual(specifics, *all_device_info[0]); |
| 430 AssertEqual(specifics, | 431 AssertEqual(specifics, |
| 431 *service()->GetDeviceInfo(specifics.cache_guid()).get()); | 432 *service()->GetDeviceInfo(specifics.cache_guid()).get()); |
| 432 } | 433 } |
| 433 | 434 |
| 434 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { | 435 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { |
| 435 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 436 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 436 DataTypeState state; | 437 DataTypeState state; |
| 437 state.set_encryption_key_name("ekn"); | 438 state.set_encryption_key_name("ekn"); |
| 438 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); | 439 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); |
| 439 store()->CommitWriteBatch(std::move(batch), | 440 store()->CommitWriteBatch(std::move(batch), |
| 440 base::Bind(&AssertResultIsSuccess)); | 441 base::Bind(&AssertResultIsSuccess)); |
| 441 InitializeAndPump(); | 442 InitializeAndPump(); |
| 442 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 443 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); |
| 443 ASSERT_EQ(1u, all_device_info.size()); | 444 ASSERT_EQ(1u, all_device_info.size()); |
| 444 ASSERT_TRUE( | 445 ASSERT_TRUE( |
| 445 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | 446 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); |
| 446 EXPECT_EQ(1u, processor()->put_map().size()); | 447 EXPECT_EQ(1u, processor()->put_map().size()); |
| 447 } | 448 } |
| 448 | 449 |
| 449 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { | 450 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { |
| 450 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 451 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| 451 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); | 452 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); |
| 452 store()->WriteData(batch.get(), specifics.cache_guid(), | 453 store()->WriteData(batch.get(), specifics.cache_guid(), |
| 453 specifics.SerializeAsString()); | 454 specifics.SerializeAsString()); |
| 454 DataTypeState state; | 455 DataTypeState state; |
| 455 state.set_encryption_key_name("ekn"); | 456 state.set_encryption_key_name("ekn"); |
| 456 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); | 457 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); |
| 457 store()->CommitWriteBatch(std::move(batch), | 458 store()->CommitWriteBatch(std::move(batch), |
| 458 base::Bind(&AssertResultIsSuccess)); | 459 base::Bind(&AssertResultIsSuccess)); |
| 459 | 460 |
| 460 InitializeAndPump(); | 461 InitializeAndPump(); |
| 461 | 462 |
| 462 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); | 463 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); |
| 463 ASSERT_EQ(2u, all_device_info.size()); | 464 ASSERT_EQ(2u, all_device_info.size()); |
| 464 AssertEqual(specifics, | 465 AssertEqual(specifics, |
| 465 *service()->GetDeviceInfo(specifics.cache_guid()).get()); | 466 *service()->GetDeviceInfo(specifics.cache_guid()).get()); |
| 466 ASSERT_TRUE(processor()->metadata()); | 467 ASSERT_TRUE(processor()->metadata()); |
| 467 ASSERT_EQ(state.encryption_key_name(), | 468 ASSERT_EQ(state.encryption_key_name(), |
| 468 processor()->metadata()->GetDataTypeState().encryption_key_name()); | 469 processor()->metadata()->GetDataTypeState().encryption_key_name()); |
| 469 } | 470 } |
| 470 | 471 |
| 471 TEST_F(DeviceInfoServiceTest, GetData) { | 472 TEST_F(DeviceInfoServiceTest, GetData) { |
| 472 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 473 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 specifics.set_cache_guid("non-local"); | 772 specifics.set_cache_guid("non-local"); |
| 772 PushBackEntityChangeAdd(specifics, &change_list); | 773 PushBackEntityChangeAdd(specifics, &change_list); |
| 773 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 774 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
| 774 change_list); | 775 change_list); |
| 775 EXPECT_EQ(1, service()->CountActiveDevices()); | 776 EXPECT_EQ(1, service()->CountActiveDevices()); |
| 776 } | 777 } |
| 777 | 778 |
| 778 } // namespace | 779 } // namespace |
| 779 | 780 |
| 780 } // namespace sync_driver_v2 | 781 } // namespace sync_driver_v2 |
| OLD | NEW |