Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: components/sync/device_info/device_info_service_unittest.cc

Issue 2458473002: [Sync] Cleanup of device_info_service_unittest.cc (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698