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

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

Powered by Google App Engine
This is Rietveld 408576698