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

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

Issue 2406163006: [Sync] Services can now always assume processor exists. (Closed)
Patch Set: IWYU Created 4 years, 2 months 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
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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698