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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
172 | 172 |
173 // Force all remaining (store) tasks to execute so we don't leak memory. | 173 // Force all remaining (store) tasks to execute so we don't leak memory. |
174 base::RunLoop().RunUntilIdle(); | 174 base::RunLoop().RunUntilIdle(); |
175 } | 175 } |
176 | 176 |
177 void OnDeviceInfoChange() override { change_count_++; } | 177 void OnDeviceInfoChange() override { change_count_++; } |
178 | 178 |
179 std::unique_ptr<ModelTypeChangeProcessor> CreateModelTypeChangeProcessor( | 179 std::unique_ptr<ModelTypeChangeProcessor> CreateModelTypeChangeProcessor( |
180 ModelType type, | 180 ModelType type, |
181 ModelTypeService* service) { | 181 ModelTypeService* service) { |
182 processor_ = new RecordingModelTypeChangeProcessor(); | 182 std::unique_ptr<RecordingModelTypeChangeProcessor> processor = |
maxbogue
2016/10/12 23:40:35
You can just do "auto processor". That's being enc
skym
2016/10/13 19:21:38
Done.
| |
183 return base::WrapUnique(processor_); | 183 base::MakeUnique<RecordingModelTypeChangeProcessor>(); |
184 processor_ = processor.get(); | |
185 return processor; | |
184 } | 186 } |
185 | 187 |
186 // Initialized the service based on the current local device and store. Can | 188 // Initialized the service based on the current local device and store. Can |
187 // only be called once per run, as it passes |store_|. | 189 // only be called once per run, as it passes |store_|. |
188 void InitializeService() { | 190 void InitializeService() { |
189 ASSERT_TRUE(store_); | 191 ASSERT_TRUE(store_); |
190 service_.reset(new DeviceInfoService( | 192 service_.reset(new DeviceInfoService( |
191 local_device_.get(), | 193 local_device_.get(), |
192 base::Bind(&ModelTypeStoreTestUtil::MoveStoreToCallback, | 194 base::Bind(&ModelTypeStoreTestUtil::MoveStoreToCallback, |
193 base::Passed(&store_)), | 195 base::Passed(&store_)), |
194 base::Bind(&DeviceInfoServiceTest::CreateModelTypeChangeProcessor, | 196 base::Bind(&DeviceInfoServiceTest::CreateModelTypeChangeProcessor, |
195 base::Unretained(this)))); | 197 base::Unretained(this)))); |
196 service_->AddObserver(this); | 198 service_->AddObserver(this); |
197 } | 199 } |
198 | 200 |
199 void OnSyncStarting() { | |
200 service()->OnSyncStarting(base::MakeUnique<DataTypeErrorHandlerMock>(), | |
201 StartCallback()); | |
202 } | |
203 | |
204 // Creates the service and runs any outstanding tasks. This will typically | 201 // Creates the service and runs any outstanding tasks. This will typically |
205 // cause all initialization callbacks between the sevice and store to fire. | 202 // cause all initialization callbacks between the sevice and store to fire. |
206 void InitializeAndPump() { | 203 void InitializeAndPump() { |
207 InitializeService(); | 204 InitializeService(); |
208 base::RunLoop().RunUntilIdle(); | 205 base::RunLoop().RunUntilIdle(); |
209 } | 206 } |
210 | 207 |
211 // Creates the service, runs any outstanding tasks, and then indicates to the | |
212 // service that sync wants to start and forces the processor to be created. | |
213 void InitializeAndPumpAndStart() { | |
214 InitializeAndPump(); | |
215 OnSyncStarting(); | |
216 ASSERT_TRUE(processor_); | |
217 } | |
218 | |
219 // Generates a specifics object with slightly differing values. Will generate | 208 // Generates a specifics object with slightly differing values. Will generate |
220 // the same values on each run of a test because a simple counter is used to | 209 // the same values on each run of a test because a simple counter is used to |
221 // vary field values. | 210 // vary field values. |
222 DeviceInfoSpecifics GenerateTestSpecifics() { | 211 DeviceInfoSpecifics GenerateTestSpecifics() { |
223 int label = ++generated_count_; | 212 int label = ++generated_count_; |
224 DeviceInfoSpecifics specifics; | 213 DeviceInfoSpecifics specifics; |
225 specifics.set_cache_guid(base::StringPrintf("cache guid %d", label)); | 214 specifics.set_cache_guid(base::StringPrintf("cache guid %d", label)); |
226 specifics.set_client_name(base::StringPrintf("client name %d", label)); | 215 specifics.set_client_name(base::StringPrintf("client name %d", label)); |
227 specifics.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX); | 216 specifics.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX); |
228 specifics.set_sync_user_agent( | 217 specifics.set_sync_user_agent( |
229 base::StringPrintf("sync user agent %d", label)); | 218 base::StringPrintf("sync user agent %d", label)); |
230 specifics.set_chrome_version( | 219 specifics.set_chrome_version( |
231 base::StringPrintf("chrome version %d", label)); | 220 base::StringPrintf("chrome version %d", label)); |
232 specifics.set_signin_scoped_device_id( | 221 specifics.set_signin_scoped_device_id( |
233 base::StringPrintf("signin scoped device id %d", label)); | 222 base::StringPrintf("signin scoped device id %d", label)); |
234 return specifics; | 223 return specifics; |
235 } | 224 } |
236 | 225 |
237 std::unique_ptr<DeviceInfoSpecifics> CopyToSpecifics(const DeviceInfo& info) { | 226 std::unique_ptr<DeviceInfoSpecifics> CopyToSpecifics(const DeviceInfo& info) { |
238 return DeviceInfoService::CopyToSpecifics(info); | 227 return DeviceInfoService::CopyToSpecifics(info); |
239 } | 228 } |
240 | 229 |
241 // Override to allow specific cache guids. | 230 // Override to allow specific cache guids. |
242 DeviceInfoSpecifics GenerateTestSpecifics(const std::string& guid) { | 231 DeviceInfoSpecifics GenerateTestSpecifics(const std::string& guid) { |
243 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); | 232 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
244 specifics.set_cache_guid(guid); | 233 specifics.set_cache_guid(guid); |
245 return specifics; | 234 return specifics; |
246 } | 235 } |
247 | 236 |
248 // Allows access to the store before that will ultimately be used to | 237 // Allows access to the store before that will ultimately be used to |
249 // initialize the service. | 238 // initialize the service. |
250 ModelTypeStore* store() { | 239 ModelTypeStore* store() { |
251 EXPECT_TRUE(store_); | 240 EXPECT_TRUE(store_); |
252 return store_.get(); | 241 return store_.get(); |
253 } | 242 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
314 | 303 |
315 // A monotonically increasing label for generated specifics objects with data | 304 // A monotonically increasing label for generated specifics objects with data |
316 // that is slightly different from eachother. | 305 // that is slightly different from eachother. |
317 int generated_count_ = 0; | 306 int generated_count_ = 0; |
318 }; | 307 }; |
319 | 308 |
320 namespace { | 309 namespace { |
321 | 310 |
322 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { | 311 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { |
323 InitializeAndPump(); | 312 InitializeAndPump(); |
324 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 313 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
325 OnSyncStarting(); | 314 ASSERT_EQ(1u, devices.size()); |
326 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); | 315 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
327 ASSERT_EQ(1u, all_device_info.size()); | |
328 ASSERT_TRUE( | |
329 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | |
330 } | 316 } |
331 | 317 |
332 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) { | 318 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) { |
333 InitializeService(); | 319 InitializeService(); |
334 OnSyncStarting(); | |
335 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 320 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); |
336 base::RunLoop().RunUntilIdle(); | 321 base::RunLoop().RunUntilIdle(); |
337 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); | 322 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
338 ASSERT_EQ(1u, all_device_info.size()); | 323 ASSERT_EQ(1u, devices.size()); |
339 ASSERT_TRUE( | 324 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
340 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | |
341 } | 325 } |
342 | 326 |
343 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { | 327 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { |
344 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); | 328 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); |
345 InitializeAndPumpAndStart(); | 329 InitializeAndPump(); |
346 | 330 |
347 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 331 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); |
348 local_device()->Initialize(CreateDeviceInfo()); | 332 local_device()->Initialize(CreateDeviceInfo()); |
349 base::RunLoop().RunUntilIdle(); | 333 base::RunLoop().RunUntilIdle(); |
350 | 334 |
351 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); | 335 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
352 ASSERT_EQ(1u, all_device_info.size()); | 336 ASSERT_EQ(1u, devices.size()); |
353 ASSERT_TRUE( | 337 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
354 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | |
355 } | 338 } |
356 | 339 |
357 // Metadata shouldn't be loaded before the provider is initialized. | 340 // Metadata shouldn't be loaded before the provider is initialized. |
358 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) { | 341 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) { |
359 set_local_device(base::WrapUnique(new LocalDeviceInfoProviderMock())); | 342 set_local_device(base::WrapUnique(new LocalDeviceInfoProviderMock())); |
360 InitializeAndPump(); | 343 InitializeAndPump(); |
361 OnSyncStarting(); | |
362 EXPECT_FALSE(processor()->metadata()); | 344 EXPECT_FALSE(processor()->metadata()); |
363 | 345 |
364 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); | 346 ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); |
365 local_device()->Initialize(CreateDeviceInfo()); | 347 local_device()->Initialize(CreateDeviceInfo()); |
366 base::RunLoop().RunUntilIdle(); | 348 base::RunLoop().RunUntilIdle(); |
367 | 349 |
368 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); | 350 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
369 ASSERT_EQ(1u, all_device_info.size()); | 351 ASSERT_EQ(1u, devices.size()); |
370 ASSERT_TRUE( | 352 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
371 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | |
372 | 353 |
373 EXPECT_TRUE(processor()->metadata()); | 354 EXPECT_TRUE(processor()->metadata()); |
374 } | 355 } |
375 | 356 |
376 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { | 357 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { |
377 InitializeService(); | 358 InitializeService(); |
378 const std::string guid = "abc"; | 359 const std::string guid = "abc"; |
379 EntitySpecifics entity_specifics; | 360 EntitySpecifics entity_specifics; |
380 entity_specifics.mutable_device_info()->set_cache_guid(guid); | 361 entity_specifics.mutable_device_info()->set_cache_guid(guid); |
381 EntityData entity_data; | 362 EntityData entity_data; |
382 entity_data.specifics = entity_specifics; | 363 entity_data.specifics = entity_specifics; |
383 EXPECT_EQ(CacheGuidToTag(guid), service()->GetClientTag(entity_data)); | 364 EXPECT_EQ(CacheGuidToTag(guid), service()->GetClientTag(entity_data)); |
384 } | 365 } |
385 | 366 |
386 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { | 367 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { |
387 InitializeService(); | 368 InitializeService(); |
388 EntitySpecifics entity_specifics; | 369 EntitySpecifics entity_specifics; |
389 entity_specifics.mutable_device_info(); | 370 entity_specifics.mutable_device_info(); |
390 EntityData entity_data; | 371 EntityData entity_data; |
391 entity_data.specifics = entity_specifics; | 372 entity_data.specifics = entity_specifics; |
392 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data)); | 373 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data)); |
393 } | 374 } |
394 | 375 |
395 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { | 376 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { |
396 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 377 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
397 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); | 378 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
398 store()->WriteData(batch.get(), specifics.cache_guid(), | 379 store()->WriteData(batch.get(), specifics.cache_guid(), |
399 specifics.SerializeAsString()); | 380 specifics.SerializeAsString()); |
400 store()->CommitWriteBatch(std::move(batch), | 381 store()->CommitWriteBatch(std::move(batch), |
401 base::Bind(&AssertResultIsSuccess)); | 382 base::Bind(&AssertResultIsSuccess)); |
402 | 383 |
403 InitializeAndPump(); | 384 InitializeAndPump(); |
404 | 385 |
405 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); | 386 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); |
406 ASSERT_EQ(1u, all_device_info.size()); | |
407 AssertEqual(specifics, *all_device_info[0]); | |
408 AssertEqual(specifics, | 387 AssertEqual(specifics, |
409 *service()->GetDeviceInfo(specifics.cache_guid()).get()); | 388 *service()->GetDeviceInfo(specifics.cache_guid()).get()); |
410 } | 389 } |
411 | 390 |
412 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { | 391 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { |
413 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 392 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
414 ModelTypeState state; | 393 ModelTypeState state; |
415 state.set_encryption_key_name("ekn"); | 394 state.set_encryption_key_name("ekn"); |
416 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); | 395 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); |
417 store()->CommitWriteBatch(std::move(batch), | 396 store()->CommitWriteBatch(std::move(batch), |
418 base::Bind(&AssertResultIsSuccess)); | 397 base::Bind(&AssertResultIsSuccess)); |
419 InitializeAndPump(); | 398 InitializeAndPump(); |
420 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); | 399 DeviceInfoList devices = service()->GetAllDeviceInfo(); |
421 ASSERT_EQ(1u, all_device_info.size()); | 400 ASSERT_EQ(1u, devices.size()); |
422 ASSERT_TRUE( | 401 ASSERT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); |
423 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); | |
424 EXPECT_EQ(1u, processor()->put_map().size()); | 402 EXPECT_EQ(1u, processor()->put_map().size()); |
425 } | 403 } |
426 | 404 |
427 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { | 405 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { |
428 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 406 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
429 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); | 407 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
430 store()->WriteData(batch.get(), specifics.cache_guid(), | 408 store()->WriteData(batch.get(), specifics.cache_guid(), |
431 specifics.SerializeAsString()); | 409 specifics.SerializeAsString()); |
432 ModelTypeState state; | 410 ModelTypeState state; |
433 state.set_encryption_key_name("ekn"); | 411 state.set_encryption_key_name("ekn"); |
434 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); | 412 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); |
435 store()->CommitWriteBatch(std::move(batch), | 413 store()->CommitWriteBatch(std::move(batch), |
436 base::Bind(&AssertResultIsSuccess)); | 414 base::Bind(&AssertResultIsSuccess)); |
437 | 415 |
438 InitializeAndPump(); | 416 InitializeAndPump(); |
439 | 417 |
440 DeviceInfoList all_device_info(service()->GetAllDeviceInfo()); | 418 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); |
441 ASSERT_EQ(2u, all_device_info.size()); | |
442 AssertEqual(specifics, | 419 AssertEqual(specifics, |
443 *service()->GetDeviceInfo(specifics.cache_guid()).get()); | 420 *service()->GetDeviceInfo(specifics.cache_guid()).get()); |
444 ASSERT_TRUE(processor()->metadata()); | 421 ASSERT_TRUE(processor()->metadata()); |
445 ASSERT_EQ(state.encryption_key_name(), | 422 ASSERT_EQ(state.encryption_key_name(), |
446 processor()->metadata()->GetModelTypeState().encryption_key_name()); | 423 processor()->metadata()->GetModelTypeState().encryption_key_name()); |
447 } | 424 } |
448 | 425 |
449 TEST_F(DeviceInfoServiceTest, GetData) { | 426 TEST_F(DeviceInfoServiceTest, GetData) { |
450 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 427 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
451 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); | 428 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); |
452 DeviceInfoSpecifics specifics2(GenerateTestSpecifics()); | 429 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); |
453 DeviceInfoSpecifics specifics3(GenerateTestSpecifics()); | 430 DeviceInfoSpecifics specifics3 = GenerateTestSpecifics(); |
454 store()->WriteData(batch.get(), specifics1.cache_guid(), | 431 store()->WriteData(batch.get(), specifics1.cache_guid(), |
455 specifics1.SerializeAsString()); | 432 specifics1.SerializeAsString()); |
456 store()->WriteData(batch.get(), specifics2.cache_guid(), | 433 store()->WriteData(batch.get(), specifics2.cache_guid(), |
457 specifics2.SerializeAsString()); | 434 specifics2.SerializeAsString()); |
458 store()->WriteData(batch.get(), specifics3.cache_guid(), | 435 store()->WriteData(batch.get(), specifics3.cache_guid(), |
459 specifics3.SerializeAsString()); | 436 specifics3.SerializeAsString()); |
460 store()->CommitWriteBatch(std::move(batch), | 437 store()->CommitWriteBatch(std::move(batch), |
461 base::Bind(&AssertResultIsSuccess)); | 438 base::Bind(&AssertResultIsSuccess)); |
462 | 439 |
463 InitializeAndPump(); | 440 InitializeAndPump(); |
(...skipping 12 matching lines...) Expand all Loading... | |
476 InitializeAndPump(); | 453 InitializeAndPump(); |
477 std::map<std::string, DeviceInfoSpecifics> expected; | 454 std::map<std::string, DeviceInfoSpecifics> expected; |
478 StorageKeyList storage_keys; | 455 StorageKeyList storage_keys; |
479 storage_keys.push_back("does_not_exist"); | 456 storage_keys.push_back("does_not_exist"); |
480 service()->GetData(storage_keys, | 457 service()->GetData(storage_keys, |
481 base::Bind(&AssertExpectedFromDataBatch, expected)); | 458 base::Bind(&AssertExpectedFromDataBatch, expected)); |
482 } | 459 } |
483 | 460 |
484 TEST_F(DeviceInfoServiceTest, GetAllData) { | 461 TEST_F(DeviceInfoServiceTest, GetAllData) { |
485 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 462 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
486 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); | 463 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); |
487 DeviceInfoSpecifics specifics2(GenerateTestSpecifics()); | 464 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); |
488 const std::string& guid1 = specifics1.cache_guid(); | 465 const std::string& guid1 = specifics1.cache_guid(); |
489 const std::string& guid2 = specifics2.cache_guid(); | 466 const std::string& guid2 = specifics2.cache_guid(); |
490 store()->WriteData(batch.get(), specifics1.cache_guid(), | 467 store()->WriteData(batch.get(), specifics1.cache_guid(), |
491 specifics1.SerializeAsString()); | 468 specifics1.SerializeAsString()); |
492 store()->WriteData(batch.get(), specifics2.cache_guid(), | 469 store()->WriteData(batch.get(), specifics2.cache_guid(), |
493 specifics2.SerializeAsString()); | 470 specifics2.SerializeAsString()); |
494 store()->CommitWriteBatch(std::move(batch), | 471 store()->CommitWriteBatch(std::move(batch), |
495 base::Bind(&AssertResultIsSuccess)); | 472 base::Bind(&AssertResultIsSuccess)); |
496 | 473 |
497 InitializeAndPump(); | 474 InitializeAndPump(); |
498 | 475 |
499 std::map<std::string, DeviceInfoSpecifics> expected; | 476 std::map<std::string, DeviceInfoSpecifics> expected; |
500 expected[guid1] = specifics1; | 477 expected[guid1] = specifics1; |
501 expected[guid2] = specifics2; | 478 expected[guid2] = specifics2; |
502 StorageKeyList storage_keys; | 479 StorageKeyList storage_keys; |
503 storage_keys.push_back(guid1); | 480 storage_keys.push_back(guid1); |
504 storage_keys.push_back(guid2); | 481 storage_keys.push_back(guid2); |
505 service()->GetData(storage_keys, | 482 service()->GetData(storage_keys, |
506 base::Bind(&AssertExpectedFromDataBatch, expected)); | 483 base::Bind(&AssertExpectedFromDataBatch, expected)); |
507 } | 484 } |
508 | 485 |
509 TEST_F(DeviceInfoServiceTest, ApplySyncChangesEmpty) { | 486 TEST_F(DeviceInfoServiceTest, ApplySyncChangesEmpty) { |
510 InitializeAndPump(); | 487 InitializeAndPump(); |
488 EXPECT_EQ(1, change_count()); | |
511 const SyncError error = service()->ApplySyncChanges( | 489 const SyncError error = service()->ApplySyncChanges( |
512 service()->CreateMetadataChangeList(), EntityChangeList()); | 490 service()->CreateMetadataChangeList(), EntityChangeList()); |
513 EXPECT_FALSE(error.IsSet()); | 491 EXPECT_FALSE(error.IsSet()); |
514 EXPECT_EQ(0, change_count()); | 492 EXPECT_EQ(1, change_count()); |
maxbogue
2016/10/12 23:40:35
I'm confused... why did this change?
skym
2016/10/13 19:21:38
So what was happening originally was that the serv
| |
515 } | 493 } |
516 | 494 |
517 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { | 495 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { |
518 InitializeAndPump(); | 496 InitializeAndPump(); |
497 EXPECT_EQ(1, change_count()); | |
519 | 498 |
520 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 499 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
521 EntityChangeList add_changes; | 500 EntityChangeList add_changes; |
522 PushBackEntityChangeAdd(specifics, &add_changes); | 501 PushBackEntityChangeAdd(specifics, &add_changes); |
523 SyncError error = service()->ApplySyncChanges( | 502 SyncError error = service()->ApplySyncChanges( |
524 service()->CreateMetadataChangeList(), add_changes); | 503 service()->CreateMetadataChangeList(), add_changes); |
525 | 504 |
526 EXPECT_FALSE(error.IsSet()); | 505 EXPECT_FALSE(error.IsSet()); |
527 std::unique_ptr<DeviceInfo> info = | 506 std::unique_ptr<DeviceInfo> info = |
528 service()->GetDeviceInfo(specifics.cache_guid()); | 507 service()->GetDeviceInfo(specifics.cache_guid()); |
529 ASSERT_TRUE(info); | 508 ASSERT_TRUE(info); |
530 AssertEqual(specifics, *info.get()); | 509 AssertEqual(specifics, *info.get()); |
531 EXPECT_EQ(1, change_count()); | 510 EXPECT_EQ(2, change_count()); |
532 | 511 |
533 EntityChangeList delete_changes; | 512 EntityChangeList delete_changes; |
534 delete_changes.push_back(EntityChange::CreateDelete(specifics.cache_guid())); | 513 delete_changes.push_back(EntityChange::CreateDelete(specifics.cache_guid())); |
535 error = service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 514 error = service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
536 delete_changes); | 515 delete_changes); |
537 | 516 |
538 EXPECT_FALSE(error.IsSet()); | 517 EXPECT_FALSE(error.IsSet()); |
539 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid())); | 518 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid())); |
540 EXPECT_EQ(2, change_count()); | 519 EXPECT_EQ(3, change_count()); |
541 } | 520 } |
542 | 521 |
543 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { | 522 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { |
544 InitializeAndPump(); | 523 InitializeAndPump(); |
524 EXPECT_EQ(1, change_count()); | |
545 | 525 |
546 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); | 526 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); |
547 EntityChangeList data_changes; | 527 EntityChangeList data_changes; |
548 PushBackEntityChangeAdd(specifics, &data_changes); | 528 PushBackEntityChangeAdd(specifics, &data_changes); |
549 ModelTypeState state; | 529 ModelTypeState state; |
550 state.set_encryption_key_name("ekn"); | 530 state.set_encryption_key_name("ekn"); |
551 std::unique_ptr<MetadataChangeList> metadata_changes( | 531 std::unique_ptr<MetadataChangeList> metadata_changes = |
552 service()->CreateMetadataChangeList()); | 532 service()->CreateMetadataChangeList(); |
553 metadata_changes->UpdateModelTypeState(state); | 533 metadata_changes->UpdateModelTypeState(state); |
554 | 534 |
555 const SyncError error = | 535 const SyncError error = |
556 service()->ApplySyncChanges(std::move(metadata_changes), data_changes); | 536 service()->ApplySyncChanges(std::move(metadata_changes), data_changes); |
557 EXPECT_FALSE(error.IsSet()); | 537 EXPECT_FALSE(error.IsSet()); |
558 EXPECT_EQ(1, change_count()); | 538 EXPECT_EQ(2, change_count()); |
559 | 539 |
560 RestartService(); | 540 RestartService(); |
561 | 541 |
562 std::unique_ptr<DeviceInfo> info = | 542 std::unique_ptr<DeviceInfo> info = |
563 service()->GetDeviceInfo(specifics.cache_guid()); | 543 service()->GetDeviceInfo(specifics.cache_guid()); |
564 ASSERT_TRUE(info); | 544 ASSERT_TRUE(info); |
565 AssertEqual(specifics, *info.get()); | 545 AssertEqual(specifics, *info.get()); |
566 | 546 |
567 EXPECT_TRUE(processor()->metadata()); | 547 EXPECT_TRUE(processor()->metadata()); |
568 EXPECT_EQ(state.encryption_key_name(), | 548 EXPECT_EQ(state.encryption_key_name(), |
569 processor()->metadata()->GetModelTypeState().encryption_key_name()); | 549 processor()->metadata()->GetModelTypeState().encryption_key_name()); |
570 } | 550 } |
571 | 551 |
572 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { | 552 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { |
573 InitializeAndPumpAndStart(); | 553 InitializeAndPump(); |
574 | 554 |
575 // The point of this test is to try to apply remote changes that have the same | 555 // The point of this test is to try to apply remote changes that have the same |
576 // cache guid as the local device. The service should ignore these changes | 556 // cache guid as the local device. The service should ignore these changes |
577 // since only it should be performing writes on its data. | 557 // since only it should be performing writes on its data. |
578 DeviceInfoSpecifics specifics = | 558 DeviceInfoSpecifics specifics = |
579 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); | 559 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); |
580 EntityChangeList change_list; | 560 EntityChangeList change_list; |
581 PushBackEntityChangeAdd(specifics, &change_list); | 561 PushBackEntityChangeAdd(specifics, &change_list); |
582 | 562 |
583 // Should have a single change from reconciliation. | 563 // Should have a single change from reconciliation. |
(...skipping 18 matching lines...) Expand all Loading... | |
602 change_list.clear(); | 582 change_list.clear(); |
603 change_list.push_back(EntityChange::CreateDelete(specifics.cache_guid())); | 583 change_list.push_back(EntityChange::CreateDelete(specifics.cache_guid())); |
604 EXPECT_FALSE( | 584 EXPECT_FALSE( |
605 service() | 585 service() |
606 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) | 586 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) |
607 .IsSet()); | 587 .IsSet()); |
608 EXPECT_EQ(1, change_count()); | 588 EXPECT_EQ(1, change_count()); |
609 } | 589 } |
610 | 590 |
611 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) { | 591 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) { |
612 InitializeAndPumpAndStart(); | 592 InitializeAndPump(); |
613 EXPECT_EQ(1, change_count()); | 593 EXPECT_EQ(1, change_count()); |
614 EntityChangeList delete_changes; | 594 EntityChangeList delete_changes; |
615 delete_changes.push_back(EntityChange::CreateDelete("guid")); | 595 delete_changes.push_back(EntityChange::CreateDelete("guid")); |
616 const SyncError error = service()->ApplySyncChanges( | 596 const SyncError error = service()->ApplySyncChanges( |
617 service()->CreateMetadataChangeList(), delete_changes); | 597 service()->CreateMetadataChangeList(), delete_changes); |
618 EXPECT_FALSE(error.IsSet()); | 598 EXPECT_FALSE(error.IsSet()); |
619 EXPECT_EQ(1, change_count()); | 599 EXPECT_EQ(1, change_count()); |
620 } | 600 } |
621 | 601 |
622 TEST_F(DeviceInfoServiceTest, MergeEmpty) { | 602 TEST_F(DeviceInfoServiceTest, MergeEmpty) { |
623 InitializeAndPumpAndStart(); | 603 InitializeAndPump(); |
624 EXPECT_EQ(1, change_count()); | 604 EXPECT_EQ(1, change_count()); |
625 const SyncError error = service()->MergeSyncData( | 605 const SyncError error = service()->MergeSyncData( |
626 service()->CreateMetadataChangeList(), EntityDataMap()); | 606 service()->CreateMetadataChangeList(), EntityDataMap()); |
627 EXPECT_FALSE(error.IsSet()); | 607 EXPECT_FALSE(error.IsSet()); |
628 EXPECT_EQ(1, change_count()); | 608 EXPECT_EQ(1, change_count()); |
629 EXPECT_EQ(1u, processor()->put_map().size()); | 609 EXPECT_EQ(1u, processor()->put_map().size()); |
630 EXPECT_EQ(0u, processor()->delete_set().size()); | 610 EXPECT_EQ(0u, processor()->delete_set().size()); |
631 } | 611 } |
632 | 612 |
633 TEST_F(DeviceInfoServiceTest, MergeWithData) { | 613 TEST_F(DeviceInfoServiceTest, MergeWithData) { |
634 const std::string conflict_guid = "conflict_guid"; | 614 const std::string conflict_guid = "conflict_guid"; |
635 const DeviceInfoSpecifics unique_local( | 615 const DeviceInfoSpecifics unique_local = |
636 GenerateTestSpecifics("unique_local_guid")); | 616 GenerateTestSpecifics("unique_local_guid"); |
637 const DeviceInfoSpecifics conflict_local( | 617 const DeviceInfoSpecifics conflict_local = |
638 GenerateTestSpecifics(conflict_guid)); | 618 GenerateTestSpecifics(conflict_guid); |
639 const DeviceInfoSpecifics conflict_remote( | 619 const DeviceInfoSpecifics conflict_remote = |
640 GenerateTestSpecifics(conflict_guid)); | 620 GenerateTestSpecifics(conflict_guid); |
641 const DeviceInfoSpecifics unique_remote( | 621 const DeviceInfoSpecifics unique_remote = |
642 GenerateTestSpecifics("unique_remote_guid")); | 622 GenerateTestSpecifics("unique_remote_guid"); |
643 | 623 |
644 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 624 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
645 store()->WriteData(batch.get(), unique_local.cache_guid(), | 625 store()->WriteData(batch.get(), unique_local.cache_guid(), |
646 unique_local.SerializeAsString()); | 626 unique_local.SerializeAsString()); |
647 store()->WriteData(batch.get(), conflict_local.cache_guid(), | 627 store()->WriteData(batch.get(), conflict_local.cache_guid(), |
648 conflict_local.SerializeAsString()); | 628 conflict_local.SerializeAsString()); |
649 store()->CommitWriteBatch(std::move(batch), | 629 store()->CommitWriteBatch(std::move(batch), |
650 base::Bind(&AssertResultIsSuccess)); | 630 base::Bind(&AssertResultIsSuccess)); |
651 | 631 |
652 InitializeAndPumpAndStart(); | 632 InitializeAndPump(); |
653 EXPECT_EQ(1, change_count()); | 633 EXPECT_EQ(1, change_count()); |
654 | 634 |
655 EntityDataMap remote_input; | 635 EntityDataMap remote_input; |
656 remote_input[conflict_remote.cache_guid()] = | 636 remote_input[conflict_remote.cache_guid()] = |
657 SpecificsToEntity(conflict_remote); | 637 SpecificsToEntity(conflict_remote); |
658 remote_input[unique_remote.cache_guid()] = SpecificsToEntity(unique_remote); | 638 remote_input[unique_remote.cache_guid()] = SpecificsToEntity(unique_remote); |
659 | 639 |
660 ModelTypeState state; | 640 ModelTypeState state; |
661 state.set_encryption_key_name("ekn"); | 641 state.set_encryption_key_name("ekn"); |
662 std::unique_ptr<MetadataChangeList> metadata_changes( | 642 std::unique_ptr<MetadataChangeList> metadata_changes( |
(...skipping 20 matching lines...) Expand all Loading... | |
683 ASSERT_NE(processor()->put_map().end(), it); | 663 ASSERT_NE(processor()->put_map().end(), it); |
684 AssertEqual(unique_local, it->second->specifics.device_info()); | 664 AssertEqual(unique_local, it->second->specifics.device_info()); |
685 | 665 |
686 RestartService(); | 666 RestartService(); |
687 ASSERT_EQ(state.encryption_key_name(), | 667 ASSERT_EQ(state.encryption_key_name(), |
688 processor()->metadata()->GetModelTypeState().encryption_key_name()); | 668 processor()->metadata()->GetModelTypeState().encryption_key_name()); |
689 } | 669 } |
690 | 670 |
691 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { | 671 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { |
692 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo(); | 672 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo(); |
693 std::unique_ptr<DeviceInfoSpecifics> specifics( | 673 std::unique_ptr<DeviceInfoSpecifics> specifics = |
694 CopyToSpecifics(*local_device_info)); | 674 CopyToSpecifics(*local_device_info); |
695 specifics->set_last_updated_timestamp(TimeToProtoTime(Time::Now())); | 675 specifics->set_last_updated_timestamp(TimeToProtoTime(Time::Now())); |
696 const std::string guid = local_device_info->guid(); | 676 const std::string guid = local_device_info->guid(); |
697 | 677 |
698 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); | 678 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); |
699 store()->WriteData(batch.get(), guid, specifics->SerializeAsString()); | 679 store()->WriteData(batch.get(), guid, specifics->SerializeAsString()); |
700 store()->CommitWriteBatch(std::move(batch), | 680 store()->CommitWriteBatch(std::move(batch), |
701 base::Bind(&AssertResultIsSuccess)); | 681 base::Bind(&AssertResultIsSuccess)); |
702 | 682 |
703 InitializeAndPumpAndStart(); | 683 InitializeAndPump(); |
704 | 684 |
705 EntityDataMap remote_input; | 685 EntityDataMap remote_input; |
706 remote_input[guid] = SpecificsToEntity(*specifics); | 686 remote_input[guid] = SpecificsToEntity(*specifics); |
707 | 687 |
708 const SyncError error = service()->MergeSyncData( | 688 const SyncError error = service()->MergeSyncData( |
709 service()->CreateMetadataChangeList(), remote_input); | 689 service()->CreateMetadataChangeList(), remote_input); |
710 EXPECT_FALSE(error.IsSet()); | 690 EXPECT_FALSE(error.IsSet()); |
711 EXPECT_EQ(0, change_count()); | 691 EXPECT_EQ(0, change_count()); |
712 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); | 692 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); |
713 EXPECT_TRUE(processor()->delete_set().empty()); | 693 EXPECT_TRUE(processor()->delete_set().empty()); |
714 EXPECT_TRUE(processor()->put_map().empty()); | 694 EXPECT_TRUE(processor()->put_map().empty()); |
715 } | 695 } |
716 | 696 |
717 TEST_F(DeviceInfoServiceTest, GetLastUpdateTime) { | 697 TEST_F(DeviceInfoServiceTest, GetLastUpdateTime) { |
718 Time time1(Time() + TimeDelta::FromDays(1)); | 698 Time time1(Time() + TimeDelta::FromDays(1)); |
719 | 699 |
720 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); | 700 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); |
721 DeviceInfoSpecifics specifics2(GenerateTestSpecifics()); | 701 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); |
722 specifics2.set_last_updated_timestamp(TimeToProtoTime(time1)); | 702 specifics2.set_last_updated_timestamp(TimeToProtoTime(time1)); |
723 | 703 |
724 EXPECT_EQ(Time(), GetLastUpdateTime(specifics1)); | 704 EXPECT_EQ(Time(), GetLastUpdateTime(specifics1)); |
725 EXPECT_EQ(time1, GetLastUpdateTime(specifics2)); | 705 EXPECT_EQ(time1, GetLastUpdateTime(specifics2)); |
726 } | 706 } |
727 | 707 |
728 TEST_F(DeviceInfoServiceTest, CountActiveDevices) { | 708 TEST_F(DeviceInfoServiceTest, CountActiveDevices) { |
729 InitializeAndPump(); | 709 InitializeAndPump(); |
730 EXPECT_EQ(0, service()->CountActiveDevices()); | 710 EXPECT_EQ(1, service()->CountActiveDevices()); |
731 | 711 |
732 DeviceInfoSpecifics specifics = | 712 DeviceInfoSpecifics specifics = |
733 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); | 713 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); |
734 EntityChangeList change_list; | 714 EntityChangeList change_list; |
735 PushBackEntityChangeAdd(specifics, &change_list); | 715 PushBackEntityChangeAdd(specifics, &change_list); |
736 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 716 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
737 change_list); | 717 change_list); |
738 EXPECT_EQ(0, service()->CountActiveDevices()); | 718 EXPECT_EQ(1, service()->CountActiveDevices()); |
739 | 719 |
740 change_list.clear(); | 720 change_list.clear(); |
741 specifics.set_last_updated_timestamp(TimeToProtoTime(Time::Now())); | 721 specifics.set_last_updated_timestamp(TimeToProtoTime(Time::Now())); |
742 PushBackEntityChangeAdd(specifics, &change_list); | 722 PushBackEntityChangeAdd(specifics, &change_list); |
743 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 723 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
744 change_list); | 724 change_list); |
745 EXPECT_EQ(0, service()->CountActiveDevices()); | 725 EXPECT_EQ(1, service()->CountActiveDevices()); |
746 | 726 |
747 change_list.clear(); | 727 change_list.clear(); |
748 specifics.set_cache_guid("non-local"); | 728 specifics.set_cache_guid("non-local"); |
749 PushBackEntityChangeAdd(specifics, &change_list); | 729 PushBackEntityChangeAdd(specifics, &change_list); |
750 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), | 730 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), |
751 change_list); | 731 change_list); |
752 EXPECT_EQ(1, service()->CountActiveDevices()); | 732 EXPECT_EQ(2, service()->CountActiveDevices()); |
753 } | 733 } |
754 | 734 |
755 } // namespace | 735 } // namespace |
756 | 736 |
757 } // namespace syncer | 737 } // namespace syncer |
OLD | NEW |