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

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

Issue 2460903003: [Sync] Rename DeviceInfoService to DeviceInfoSyncBridge. (Closed)
Patch Set: Updating nullptr to null in comment. 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
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_sync_bridge.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 const MetadataBatch* metadata() const { return metadata_.get(); } 179 const MetadataBatch* metadata() const { return metadata_.get(); }
180 180
181 private: 181 private:
182 std::multimap<std::string, std::unique_ptr<EntityData>> put_multimap_; 182 std::multimap<std::string, std::unique_ptr<EntityData>> put_multimap_;
183 std::set<std::string> delete_set_; 183 std::set<std::string> delete_set_;
184 std::unique_ptr<MetadataBatch> metadata_; 184 std::unique_ptr<MetadataBatch> metadata_;
185 }; 185 };
186 186
187 } // namespace 187 } // namespace
188 188
189 class DeviceInfoServiceTest : public testing::Test, 189 class DeviceInfoSyncBridgeTest : public testing::Test,
190 public DeviceInfoTracker::Observer { 190 public DeviceInfoTracker::Observer {
191 protected: 191 protected:
192 DeviceInfoServiceTest() 192 DeviceInfoSyncBridgeTest()
193 : store_(ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()), 193 : store_(ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()),
194 provider_(new LocalDeviceInfoProviderMock()) { 194 provider_(new LocalDeviceInfoProviderMock()) {
195 provider_->Initialize(CreateModel(kDefaultLocalSuffix)); 195 provider_->Initialize(CreateModel(kDefaultLocalSuffix));
196 } 196 }
197 197
198 ~DeviceInfoServiceTest() override { 198 ~DeviceInfoSyncBridgeTest() override {
199 // Some tests may never initialize the service. 199 // Some tests may never initialize the bridge.
200 if (service_) 200 if (bridge_)
201 service_->RemoveObserver(this); 201 bridge_->RemoveObserver(this);
202 202
203 // Force all remaining (store) tasks to execute so we don't leak memory. 203 // Force all remaining (store) tasks to execute so we don't leak memory.
204 base::RunLoop().RunUntilIdle(); 204 base::RunLoop().RunUntilIdle();
205 } 205 }
206 206
207 void OnDeviceInfoChange() override { change_count_++; } 207 void OnDeviceInfoChange() override { change_count_++; }
208 208
209 std::unique_ptr<ModelTypeChangeProcessor> CreateModelTypeChangeProcessor( 209 std::unique_ptr<ModelTypeChangeProcessor> CreateModelTypeChangeProcessor(
210 ModelType type, 210 ModelType type,
211 ModelTypeSyncBridge* bridge) { 211 ModelTypeSyncBridge* bridge) {
212 auto processor = base::MakeUnique<RecordingModelTypeChangeProcessor>(); 212 auto processor = base::MakeUnique<RecordingModelTypeChangeProcessor>();
213 processor_ = processor.get(); 213 processor_ = processor.get();
214 return std::move(processor); 214 return std::move(processor);
215 } 215 }
216 216
217 // Initialized the service based on the current local device and store. Can 217 // Initialized the bridge based on the current local device and store. Can
218 // only be called once per run, as it passes |store_|. 218 // only be called once per run, as it passes |store_|.
219 void InitializeService() { 219 void InitializeBridge() {
220 ASSERT_TRUE(store_); 220 ASSERT_TRUE(store_);
221 service_ = base::MakeUnique<DeviceInfoService>( 221 bridge_ = base::MakeUnique<DeviceInfoSyncBridge>(
222 provider_.get(), 222 provider_.get(),
223 base::Bind(&ModelTypeStoreTestUtil::MoveStoreToCallback, 223 base::Bind(&ModelTypeStoreTestUtil::MoveStoreToCallback,
224 base::Passed(&store_)), 224 base::Passed(&store_)),
225 base::Bind(&DeviceInfoServiceTest::CreateModelTypeChangeProcessor, 225 base::Bind(&DeviceInfoSyncBridgeTest::CreateModelTypeChangeProcessor,
226 base::Unretained(this))); 226 base::Unretained(this)));
227 service_->AddObserver(this); 227 bridge_->AddObserver(this);
228 } 228 }
229 229
230 // Creates the service and runs any outstanding tasks. This will typically 230 // Creates the bridge and runs any outstanding tasks. This will typically
231 // cause all initialization callbacks between the sevice and store to fire. 231 // cause all initialization callbacks between the sevice and store to fire.
232 void InitializeAndPump() { 232 void InitializeAndPump() {
233 InitializeService(); 233 InitializeBridge();
234 base::RunLoop().RunUntilIdle(); 234 base::RunLoop().RunUntilIdle();
235 } 235 }
236 236
237 // 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
238 // initialize the service. 238 // initialize the bridge.
239 ModelTypeStore* store() { 239 ModelTypeStore* store() {
240 EXPECT_TRUE(store_); 240 EXPECT_TRUE(store_);
241 return store_.get(); 241 return store_.get();
242 } 242 }
243 243
244 // Get the number of times the service notifies observers of changes. 244 // Get the number of times the bridge notifies observers of changes.
245 int change_count() { return change_count_; } 245 int change_count() { return change_count_; }
246 246
247 // Allows overriding the provider before the service is initialized. 247 // Allows overriding the provider before the bridge is initialized.
248 void set_provider(std::unique_ptr<LocalDeviceInfoProviderMock> provider) { 248 void set_provider(std::unique_ptr<LocalDeviceInfoProviderMock> provider) {
249 ASSERT_FALSE(service_); 249 ASSERT_FALSE(bridge_);
250 std::swap(provider_, provider); 250 std::swap(provider_, provider);
251 } 251 }
252 LocalDeviceInfoProviderMock* local_device() { return provider_.get(); } 252 LocalDeviceInfoProviderMock* local_device() { return provider_.get(); }
253 253
254 // Allows access to the service after InitializeService() is called. 254 // Allows access to the bridge after InitializeBridge() is called.
255 DeviceInfoService* service() { 255 DeviceInfoSyncBridge* bridge() {
256 EXPECT_TRUE(service_); 256 EXPECT_TRUE(bridge_);
257 return service_.get(); 257 return bridge_.get();
258 } 258 }
259 259
260 RecordingModelTypeChangeProcessor* processor() { 260 RecordingModelTypeChangeProcessor* processor() {
261 EXPECT_TRUE(processor_); 261 EXPECT_TRUE(processor_);
262 return processor_; 262 return processor_;
263 } 263 }
264 264
265 // Should only be called after the service has been initialized. Will first 265 // Should only be called after the bridge has been initialized. Will first
266 // recover the service's store, so another can be initialized later, and then 266 // recover the bridge's store, so another can be initialized later, and then
267 // deletes the service. 267 // deletes the bridge.
268 void PumpAndShutdown() { 268 void PumpAndShutdown() {
269 ASSERT_TRUE(service_); 269 ASSERT_TRUE(bridge_);
270 base::RunLoop().RunUntilIdle(); 270 base::RunLoop().RunUntilIdle();
271 std::swap(store_, service_->store_); 271 std::swap(store_, bridge_->store_);
272 service_->RemoveObserver(this); 272 bridge_->RemoveObserver(this);
273 service_.reset(); 273 bridge_.reset();
274 } 274 }
275 275
276 void RestartService() { 276 void RestartBridge() {
277 PumpAndShutdown(); 277 PumpAndShutdown();
278 InitializeAndPump(); 278 InitializeAndPump();
279 } 279 }
280 280
281 void ForcePulse() { service()->SendLocalData(); } 281 void ForcePulse() { bridge()->SendLocalData(); }
282 282
283 private: 283 private:
284 int change_count_ = 0; 284 int change_count_ = 0;
285 285
286 // In memory model type store needs a MessageLoop. 286 // In memory model type store needs a MessageLoop.
287 base::MessageLoop message_loop_; 287 base::MessageLoop message_loop_;
288 288
289 // Holds the store while the service is not initialized. 289 // Holds the store while the bridge is not initialized.
290 std::unique_ptr<ModelTypeStore> store_; 290 std::unique_ptr<ModelTypeStore> store_;
291 291
292 // Provides information about the local device. Is initialized in each case's 292 // Provides information about the local device. Is initialized in each case's
293 // constructor with a model object created from |kDefaultLocalSuffix|. 293 // constructor with a model object created from |kDefaultLocalSuffix|.
294 std::unique_ptr<LocalDeviceInfoProviderMock> provider_; 294 std::unique_ptr<LocalDeviceInfoProviderMock> provider_;
295 295
296 // Not initialized immediately (upon test's constructor). This allows each 296 // Not initialized immediately (upon test's constructor). This allows each
297 // test case to modify the dependencies the service will be constructed with. 297 // test case to modify the dependencies the bridge will be constructed with.
298 std::unique_ptr<DeviceInfoService> service_; 298 std::unique_ptr<DeviceInfoSyncBridge> bridge_;
299 299
300 // A non-owning pointer to the processor given to the service. Will be nullptr 300 // A non-owning pointer to the processor given to the bridge. Will be null
301 // before being given to the service, to make ownership easier. 301 // before being given to the bridge, to make ownership easier.
302 RecordingModelTypeChangeProcessor* processor_ = nullptr; 302 RecordingModelTypeChangeProcessor* processor_ = nullptr;
303 }; 303 };
304 304
305 namespace { 305 namespace {
306 306
307 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { 307 TEST_F(DeviceInfoSyncBridgeTest, EmptyDataReconciliation) {
308 InitializeAndPump(); 308 InitializeAndPump();
309 DeviceInfoList devices = service()->GetAllDeviceInfo(); 309 DeviceInfoList devices = bridge()->GetAllDeviceInfo();
310 ASSERT_EQ(1u, devices.size()); 310 ASSERT_EQ(1u, devices.size());
311 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 311 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
312 } 312 }
313 313
314 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) { 314 TEST_F(DeviceInfoSyncBridgeTest, EmptyDataReconciliationSlowLoad) {
315 InitializeService(); 315 InitializeBridge();
316 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); 316 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size());
317 base::RunLoop().RunUntilIdle(); 317 base::RunLoop().RunUntilIdle();
318 DeviceInfoList devices = service()->GetAllDeviceInfo(); 318 DeviceInfoList devices = bridge()->GetAllDeviceInfo();
319 ASSERT_EQ(1u, devices.size()); 319 ASSERT_EQ(1u, devices.size());
320 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 320 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
321 } 321 }
322 322
323 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { 323 TEST_F(DeviceInfoSyncBridgeTest, LocalProviderSubscription) {
324 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>()); 324 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>());
325 InitializeAndPump(); 325 InitializeAndPump();
326 326
327 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); 327 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size());
328 local_device()->Initialize(CreateModel(1)); 328 local_device()->Initialize(CreateModel(1));
329 base::RunLoop().RunUntilIdle(); 329 base::RunLoop().RunUntilIdle();
330 330
331 DeviceInfoList devices = service()->GetAllDeviceInfo(); 331 DeviceInfoList devices = bridge()->GetAllDeviceInfo();
332 ASSERT_EQ(1u, devices.size()); 332 ASSERT_EQ(1u, devices.size());
333 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 333 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
334 } 334 }
335 335
336 // Metadata shouldn't be loaded before the provider is initialized. 336 // Metadata shouldn't be loaded before the provider is initialized.
337 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) { 337 TEST_F(DeviceInfoSyncBridgeTest, LocalProviderInitRace) {
338 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>()); 338 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>());
339 InitializeAndPump(); 339 InitializeAndPump();
340 EXPECT_FALSE(processor()->metadata()); 340 EXPECT_FALSE(processor()->metadata());
341 341
342 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); 342 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size());
343 local_device()->Initialize(CreateModel(1)); 343 local_device()->Initialize(CreateModel(1));
344 base::RunLoop().RunUntilIdle(); 344 base::RunLoop().RunUntilIdle();
345 345
346 DeviceInfoList devices = service()->GetAllDeviceInfo(); 346 DeviceInfoList devices = bridge()->GetAllDeviceInfo();
347 ASSERT_EQ(1u, devices.size()); 347 ASSERT_EQ(1u, devices.size());
348 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 348 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
349 349
350 EXPECT_TRUE(processor()->metadata()); 350 EXPECT_TRUE(processor()->metadata());
351 } 351 }
352 352
353 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { 353 TEST_F(DeviceInfoSyncBridgeTest, GetClientTagNormal) {
354 InitializeService(); 354 InitializeBridge();
355 const std::string guid = "abc"; 355 const std::string guid = "abc";
356 EntitySpecifics entity_specifics; 356 EntitySpecifics entity_specifics;
357 entity_specifics.mutable_device_info()->set_cache_guid(guid); 357 entity_specifics.mutable_device_info()->set_cache_guid(guid);
358 EntityData entity_data; 358 EntityData entity_data;
359 entity_data.specifics = entity_specifics; 359 entity_data.specifics = entity_specifics;
360 EXPECT_EQ(CacheGuidToTag(guid), service()->GetClientTag(entity_data)); 360 EXPECT_EQ(CacheGuidToTag(guid), bridge()->GetClientTag(entity_data));
361 } 361 }
362 362
363 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { 363 TEST_F(DeviceInfoSyncBridgeTest, GetClientTagEmpty) {
364 InitializeService(); 364 InitializeBridge();
365 EntitySpecifics entity_specifics; 365 EntitySpecifics entity_specifics;
366 entity_specifics.mutable_device_info(); 366 entity_specifics.mutable_device_info();
367 EntityData entity_data; 367 EntityData entity_data;
368 entity_data.specifics = entity_specifics; 368 entity_data.specifics = entity_specifics;
369 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data)); 369 EXPECT_EQ(CacheGuidToTag(""), bridge()->GetClientTag(entity_data));
370 } 370 }
371 371
372 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { 372 TEST_F(DeviceInfoSyncBridgeTest, TestWithLocalData) {
373 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 373 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
374 DeviceInfoSpecifics specifics = CreateSpecifics(1); 374 DeviceInfoSpecifics specifics = CreateSpecifics(1);
375 store()->WriteData(batch.get(), specifics.cache_guid(), 375 store()->WriteData(batch.get(), specifics.cache_guid(),
376 specifics.SerializeAsString()); 376 specifics.SerializeAsString());
377 store()->CommitWriteBatch(std::move(batch), 377 store()->CommitWriteBatch(std::move(batch),
378 base::Bind(&VerifyResultIsSuccess)); 378 base::Bind(&VerifyResultIsSuccess));
379 379
380 InitializeAndPump(); 380 InitializeAndPump();
381 381
382 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); 382 ASSERT_EQ(2u, bridge()->GetAllDeviceInfo().size());
383 VerifyEqual(specifics, 383 VerifyEqual(specifics,
384 *service()->GetDeviceInfo(specifics.cache_guid()).get()); 384 *bridge()->GetDeviceInfo(specifics.cache_guid()).get());
385 } 385 }
386 386
387 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { 387 TEST_F(DeviceInfoSyncBridgeTest, TestWithLocalMetadata) {
388 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 388 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
389 ModelTypeState state; 389 ModelTypeState state;
390 state.set_encryption_key_name("ekn"); 390 state.set_encryption_key_name("ekn");
391 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); 391 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString());
392 store()->CommitWriteBatch(std::move(batch), 392 store()->CommitWriteBatch(std::move(batch),
393 base::Bind(&VerifyResultIsSuccess)); 393 base::Bind(&VerifyResultIsSuccess));
394 InitializeAndPump(); 394 InitializeAndPump();
395 DeviceInfoList devices = service()->GetAllDeviceInfo(); 395 DeviceInfoList devices = bridge()->GetAllDeviceInfo();
396 ASSERT_EQ(1u, devices.size()); 396 ASSERT_EQ(1u, devices.size());
397 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 397 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
398 EXPECT_EQ(1u, processor()->put_multimap().size()); 398 EXPECT_EQ(1u, processor()->put_multimap().size());
399 } 399 }
400 400
401 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { 401 TEST_F(DeviceInfoSyncBridgeTest, TestWithLocalDataAndMetadata) {
402 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 402 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
403 DeviceInfoSpecifics specifics = CreateSpecifics(1); 403 DeviceInfoSpecifics specifics = CreateSpecifics(1);
404 store()->WriteData(batch.get(), specifics.cache_guid(), 404 store()->WriteData(batch.get(), specifics.cache_guid(),
405 specifics.SerializeAsString()); 405 specifics.SerializeAsString());
406 ModelTypeState state; 406 ModelTypeState state;
407 state.set_encryption_key_name("ekn"); 407 state.set_encryption_key_name("ekn");
408 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); 408 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString());
409 store()->CommitWriteBatch(std::move(batch), 409 store()->CommitWriteBatch(std::move(batch),
410 base::Bind(&VerifyResultIsSuccess)); 410 base::Bind(&VerifyResultIsSuccess));
411 411
412 InitializeAndPump(); 412 InitializeAndPump();
413 413
414 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); 414 ASSERT_EQ(2u, bridge()->GetAllDeviceInfo().size());
415 VerifyEqual(specifics, 415 VerifyEqual(specifics,
416 *service()->GetDeviceInfo(specifics.cache_guid()).get()); 416 *bridge()->GetDeviceInfo(specifics.cache_guid()).get());
417 EXPECT_TRUE(processor()->metadata()); 417 EXPECT_TRUE(processor()->metadata());
418 EXPECT_EQ(state.encryption_key_name(), 418 EXPECT_EQ(state.encryption_key_name(),
419 processor()->metadata()->GetModelTypeState().encryption_key_name()); 419 processor()->metadata()->GetModelTypeState().encryption_key_name());
420 } 420 }
421 421
422 TEST_F(DeviceInfoServiceTest, GetData) { 422 TEST_F(DeviceInfoSyncBridgeTest, GetData) {
423 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 423 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
424 DeviceInfoSpecifics specifics1 = CreateSpecifics(1); 424 DeviceInfoSpecifics specifics1 = CreateSpecifics(1);
425 DeviceInfoSpecifics specifics2 = CreateSpecifics(2); 425 DeviceInfoSpecifics specifics2 = CreateSpecifics(2);
426 DeviceInfoSpecifics specifics3 = CreateSpecifics(3); 426 DeviceInfoSpecifics specifics3 = CreateSpecifics(3);
427 store()->WriteData(batch.get(), specifics1.cache_guid(), 427 store()->WriteData(batch.get(), specifics1.cache_guid(),
428 specifics1.SerializeAsString()); 428 specifics1.SerializeAsString());
429 store()->WriteData(batch.get(), specifics2.cache_guid(), 429 store()->WriteData(batch.get(), specifics2.cache_guid(),
430 specifics2.SerializeAsString()); 430 specifics2.SerializeAsString());
431 store()->WriteData(batch.get(), specifics3.cache_guid(), 431 store()->WriteData(batch.get(), specifics3.cache_guid(),
432 specifics3.SerializeAsString()); 432 specifics3.SerializeAsString());
433 store()->CommitWriteBatch(std::move(batch), 433 store()->CommitWriteBatch(std::move(batch),
434 base::Bind(&VerifyResultIsSuccess)); 434 base::Bind(&VerifyResultIsSuccess));
435 435
436 InitializeAndPump(); 436 InitializeAndPump();
437 437
438 std::map<std::string, DeviceInfoSpecifics> expected{ 438 std::map<std::string, DeviceInfoSpecifics> expected{
439 {specifics1.cache_guid(), specifics1}, 439 {specifics1.cache_guid(), specifics1},
440 {specifics3.cache_guid(), specifics3}}; 440 {specifics3.cache_guid(), specifics3}};
441 service()->GetData({specifics1.cache_guid(), specifics3.cache_guid()}, 441 bridge()->GetData({specifics1.cache_guid(), specifics3.cache_guid()},
442 base::Bind(&VerifyDataBatch, expected)); 442 base::Bind(&VerifyDataBatch, expected));
443 } 443 }
444 444
445 TEST_F(DeviceInfoServiceTest, GetDataMissing) { 445 TEST_F(DeviceInfoSyncBridgeTest, GetDataMissing) {
446 InitializeAndPump(); 446 InitializeAndPump();
447 service()->GetData({"does_not_exist"}, 447 bridge()->GetData({"does_not_exist"},
448 base::Bind(&VerifyDataBatch, 448 base::Bind(&VerifyDataBatch,
449 std::map<std::string, DeviceInfoSpecifics>())); 449 std::map<std::string, DeviceInfoSpecifics>()));
450 } 450 }
451 451
452 TEST_F(DeviceInfoServiceTest, GetAllData) { 452 TEST_F(DeviceInfoSyncBridgeTest, GetAllData) {
453 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 453 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
454 DeviceInfoSpecifics specifics1 = CreateSpecifics(1); 454 DeviceInfoSpecifics specifics1 = CreateSpecifics(1);
455 DeviceInfoSpecifics specifics2 = CreateSpecifics(2); 455 DeviceInfoSpecifics specifics2 = CreateSpecifics(2);
456 const std::string& guid1 = specifics1.cache_guid(); 456 const std::string& guid1 = specifics1.cache_guid();
457 const std::string& guid2 = specifics2.cache_guid(); 457 const std::string& guid2 = specifics2.cache_guid();
458 store()->WriteData(batch.get(), specifics1.cache_guid(), 458 store()->WriteData(batch.get(), specifics1.cache_guid(),
459 specifics1.SerializeAsString()); 459 specifics1.SerializeAsString());
460 store()->WriteData(batch.get(), specifics2.cache_guid(), 460 store()->WriteData(batch.get(), specifics2.cache_guid(),
461 specifics2.SerializeAsString()); 461 specifics2.SerializeAsString());
462 store()->CommitWriteBatch(std::move(batch), 462 store()->CommitWriteBatch(std::move(batch),
463 base::Bind(&VerifyResultIsSuccess)); 463 base::Bind(&VerifyResultIsSuccess));
464 464
465 InitializeAndPump(); 465 InitializeAndPump();
466 466
467 std::map<std::string, DeviceInfoSpecifics> expected{{guid1, specifics1}, 467 std::map<std::string, DeviceInfoSpecifics> expected{{guid1, specifics1},
468 {guid2, specifics2}}; 468 {guid2, specifics2}};
469 service()->GetData({guid1, guid2}, base::Bind(&VerifyDataBatch, expected)); 469 bridge()->GetData({guid1, guid2}, base::Bind(&VerifyDataBatch, expected));
470 } 470 }
471 471
472 TEST_F(DeviceInfoServiceTest, ApplySyncChangesEmpty) { 472 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesEmpty) {
473 InitializeAndPump(); 473 InitializeAndPump();
474 EXPECT_EQ(1, change_count()); 474 EXPECT_EQ(1, change_count());
475 const SyncError error = service()->ApplySyncChanges( 475 const SyncError error = bridge()->ApplySyncChanges(
476 service()->CreateMetadataChangeList(), EntityChangeList()); 476 bridge()->CreateMetadataChangeList(), EntityChangeList());
477 EXPECT_FALSE(error.IsSet()); 477 EXPECT_FALSE(error.IsSet());
478 EXPECT_EQ(1, change_count()); 478 EXPECT_EQ(1, change_count());
479 } 479 }
480 480
481 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { 481 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesInMemory) {
482 InitializeAndPump(); 482 InitializeAndPump();
483 EXPECT_EQ(1, change_count()); 483 EXPECT_EQ(1, change_count());
484 484
485 DeviceInfoSpecifics specifics = CreateSpecifics(1); 485 DeviceInfoSpecifics specifics = CreateSpecifics(1);
486 const SyncError error_on_add = service()->ApplySyncChanges( 486 const SyncError error_on_add = bridge()->ApplySyncChanges(
487 service()->CreateMetadataChangeList(), EntityAddList({specifics})); 487 bridge()->CreateMetadataChangeList(), EntityAddList({specifics}));
488 488
489 EXPECT_FALSE(error_on_add.IsSet()); 489 EXPECT_FALSE(error_on_add.IsSet());
490 std::unique_ptr<DeviceInfo> info = 490 std::unique_ptr<DeviceInfo> info =
491 service()->GetDeviceInfo(specifics.cache_guid()); 491 bridge()->GetDeviceInfo(specifics.cache_guid());
492 ASSERT_TRUE(info); 492 ASSERT_TRUE(info);
493 VerifyEqual(specifics, *info.get()); 493 VerifyEqual(specifics, *info.get());
494 EXPECT_EQ(2, change_count()); 494 EXPECT_EQ(2, change_count());
495 495
496 const SyncError error_on_delete = service()->ApplySyncChanges( 496 const SyncError error_on_delete = bridge()->ApplySyncChanges(
497 service()->CreateMetadataChangeList(), 497 bridge()->CreateMetadataChangeList(),
498 {EntityChange::CreateDelete(specifics.cache_guid())}); 498 {EntityChange::CreateDelete(specifics.cache_guid())});
499 499
500 EXPECT_FALSE(error_on_delete.IsSet()); 500 EXPECT_FALSE(error_on_delete.IsSet());
501 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid())); 501 EXPECT_FALSE(bridge()->GetDeviceInfo(specifics.cache_guid()));
502 EXPECT_EQ(3, change_count()); 502 EXPECT_EQ(3, change_count());
503 } 503 }
504 504
505 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { 505 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesStore) {
506 InitializeAndPump(); 506 InitializeAndPump();
507 EXPECT_EQ(1, change_count()); 507 EXPECT_EQ(1, change_count());
508 508
509 DeviceInfoSpecifics specifics = CreateSpecifics(1); 509 DeviceInfoSpecifics specifics = CreateSpecifics(1);
510 ModelTypeState state; 510 ModelTypeState state;
511 state.set_encryption_key_name("ekn"); 511 state.set_encryption_key_name("ekn");
512 std::unique_ptr<MetadataChangeList> metadata_changes = 512 std::unique_ptr<MetadataChangeList> metadata_changes =
513 service()->CreateMetadataChangeList(); 513 bridge()->CreateMetadataChangeList();
514 metadata_changes->UpdateModelTypeState(state); 514 metadata_changes->UpdateModelTypeState(state);
515 515
516 const SyncError error = service()->ApplySyncChanges( 516 const SyncError error = bridge()->ApplySyncChanges(
517 std::move(metadata_changes), EntityAddList({specifics})); 517 std::move(metadata_changes), EntityAddList({specifics}));
518 EXPECT_FALSE(error.IsSet()); 518 EXPECT_FALSE(error.IsSet());
519 EXPECT_EQ(2, change_count()); 519 EXPECT_EQ(2, change_count());
520 520
521 RestartService(); 521 RestartBridge();
522 522
523 std::unique_ptr<DeviceInfo> info = 523 std::unique_ptr<DeviceInfo> info =
524 service()->GetDeviceInfo(specifics.cache_guid()); 524 bridge()->GetDeviceInfo(specifics.cache_guid());
525 ASSERT_TRUE(info); 525 ASSERT_TRUE(info);
526 VerifyEqual(specifics, *info.get()); 526 VerifyEqual(specifics, *info.get());
527 527
528 EXPECT_TRUE(processor()->metadata()); 528 EXPECT_TRUE(processor()->metadata());
529 EXPECT_EQ(state.encryption_key_name(), 529 EXPECT_EQ(state.encryption_key_name(),
530 processor()->metadata()->GetModelTypeState().encryption_key_name()); 530 processor()->metadata()->GetModelTypeState().encryption_key_name());
531 } 531 }
532 532
533 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { 533 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesWithLocalGuid) {
534 InitializeAndPump(); 534 InitializeAndPump();
535 535
536 // The service should ignore these changes using this specifics because its 536 // The bridge should ignore these changes using this specifics because its
537 // guid will match the local device. 537 // guid will match the local device.
538 DeviceInfoSpecifics specifics = CreateSpecifics(kDefaultLocalSuffix); 538 DeviceInfoSpecifics specifics = CreateSpecifics(kDefaultLocalSuffix);
539 539
540 // Should have a single change from reconciliation. 540 // Should have a single change from reconciliation.
541 EXPECT_TRUE( 541 EXPECT_TRUE(
542 service()->GetDeviceInfo(local_device()->GetLocalDeviceInfo()->guid())); 542 bridge()->GetDeviceInfo(local_device()->GetLocalDeviceInfo()->guid()));
543 EXPECT_EQ(1, change_count()); 543 EXPECT_EQ(1, change_count());
544 // Ensure |last_updated| is about now, plus or minus a little bit. 544 // Ensure |last_updated| is about now, plus or minus a little bit.
545 Time last_updated(ProtoTimeToTime(processor() 545 Time last_updated(ProtoTimeToTime(processor()
546 ->put_multimap() 546 ->put_multimap()
547 .begin() 547 .begin()
548 ->second->specifics.device_info() 548 ->second->specifics.device_info()
549 .last_updated_timestamp())); 549 .last_updated_timestamp()));
550 EXPECT_LT(Time::Now() - TimeDelta::FromMinutes(1), last_updated); 550 EXPECT_LT(Time::Now() - TimeDelta::FromMinutes(1), last_updated);
551 EXPECT_GT(Time::Now() + TimeDelta::FromMinutes(1), last_updated); 551 EXPECT_GT(Time::Now() + TimeDelta::FromMinutes(1), last_updated);
552 552
553 const SyncError error_on_add = service()->ApplySyncChanges( 553 const SyncError error_on_add = bridge()->ApplySyncChanges(
554 service()->CreateMetadataChangeList(), EntityAddList({specifics})); 554 bridge()->CreateMetadataChangeList(), EntityAddList({specifics}));
555 EXPECT_FALSE(error_on_add.IsSet()); 555 EXPECT_FALSE(error_on_add.IsSet());
556 EXPECT_EQ(1, change_count()); 556 EXPECT_EQ(1, change_count());
557 557
558 const SyncError error_on_delete = service()->ApplySyncChanges( 558 const SyncError error_on_delete = bridge()->ApplySyncChanges(
559 service()->CreateMetadataChangeList(), 559 bridge()->CreateMetadataChangeList(),
560 {EntityChange::CreateDelete(specifics.cache_guid())}); 560 {EntityChange::CreateDelete(specifics.cache_guid())});
561 EXPECT_FALSE(error_on_delete.IsSet()); 561 EXPECT_FALSE(error_on_delete.IsSet());
562 EXPECT_EQ(1, change_count()); 562 EXPECT_EQ(1, change_count());
563 } 563 }
564 564
565 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) { 565 TEST_F(DeviceInfoSyncBridgeTest, ApplyDeleteNonexistent) {
566 InitializeAndPump(); 566 InitializeAndPump();
567 EXPECT_EQ(1, change_count()); 567 EXPECT_EQ(1, change_count());
568 const SyncError error = 568 const SyncError error =
569 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 569 bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(),
570 {EntityChange::CreateDelete("guid")}); 570 {EntityChange::CreateDelete("guid")});
571 EXPECT_FALSE(error.IsSet()); 571 EXPECT_FALSE(error.IsSet());
572 EXPECT_EQ(1, change_count()); 572 EXPECT_EQ(1, change_count());
573 } 573 }
574 574
575 TEST_F(DeviceInfoServiceTest, MergeEmpty) { 575 TEST_F(DeviceInfoSyncBridgeTest, MergeEmpty) {
576 InitializeAndPump(); 576 InitializeAndPump();
577 EXPECT_EQ(1, change_count()); 577 EXPECT_EQ(1, change_count());
578 const SyncError error = service()->MergeSyncData( 578 const SyncError error = bridge()->MergeSyncData(
579 service()->CreateMetadataChangeList(), EntityDataMap()); 579 bridge()->CreateMetadataChangeList(), EntityDataMap());
580 EXPECT_FALSE(error.IsSet()); 580 EXPECT_FALSE(error.IsSet());
581 EXPECT_EQ(1, change_count()); 581 EXPECT_EQ(1, change_count());
582 // TODO(skym): Stop sending local twice. The first of the two puts will 582 // TODO(skym): Stop sending local twice. The first of the two puts will
583 // probably happen before the processor is tracking metadata yet, and so there 583 // probably happen before the processor is tracking metadata yet, and so there
584 // should not be much overhead. 584 // should not be much overhead.
585 EXPECT_EQ(2u, processor()->put_multimap().size()); 585 EXPECT_EQ(2u, processor()->put_multimap().size());
586 EXPECT_EQ(2u, processor()->put_multimap().count( 586 EXPECT_EQ(2u, processor()->put_multimap().count(
587 local_device()->GetLocalDeviceInfo()->guid())); 587 local_device()->GetLocalDeviceInfo()->guid()));
588 EXPECT_EQ(0u, processor()->delete_set().size()); 588 EXPECT_EQ(0u, processor()->delete_set().size());
589 } 589 }
590 590
591 TEST_F(DeviceInfoServiceTest, MergeWithData) { 591 TEST_F(DeviceInfoSyncBridgeTest, MergeWithData) {
592 const DeviceInfoSpecifics unique_local = CreateSpecifics(1); 592 const DeviceInfoSpecifics unique_local = CreateSpecifics(1);
593 DeviceInfoSpecifics conflict_local = CreateSpecifics(2); 593 DeviceInfoSpecifics conflict_local = CreateSpecifics(2);
594 DeviceInfoSpecifics conflict_remote = CreateSpecifics(3); 594 DeviceInfoSpecifics conflict_remote = CreateSpecifics(3);
595 const DeviceInfoSpecifics unique_remote = CreateSpecifics(4); 595 const DeviceInfoSpecifics unique_remote = CreateSpecifics(4);
596 596
597 const std::string conflict_guid = "conflict_guid"; 597 const std::string conflict_guid = "conflict_guid";
598 conflict_local.set_cache_guid(conflict_guid); 598 conflict_local.set_cache_guid(conflict_guid);
599 conflict_remote.set_cache_guid(conflict_guid); 599 conflict_remote.set_cache_guid(conflict_guid);
600 600
601 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 601 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
602 store()->WriteData(batch.get(), unique_local.cache_guid(), 602 store()->WriteData(batch.get(), unique_local.cache_guid(),
603 unique_local.SerializeAsString()); 603 unique_local.SerializeAsString());
604 store()->WriteData(batch.get(), conflict_local.cache_guid(), 604 store()->WriteData(batch.get(), conflict_local.cache_guid(),
605 conflict_local.SerializeAsString()); 605 conflict_local.SerializeAsString());
606 store()->CommitWriteBatch(std::move(batch), 606 store()->CommitWriteBatch(std::move(batch),
607 base::Bind(&VerifyResultIsSuccess)); 607 base::Bind(&VerifyResultIsSuccess));
608 608
609 InitializeAndPump(); 609 InitializeAndPump();
610 EXPECT_EQ(1, change_count()); 610 EXPECT_EQ(1, change_count());
611 611
612 EntityDataMap remote_input; 612 EntityDataMap remote_input;
613 remote_input[conflict_remote.cache_guid()] = 613 remote_input[conflict_remote.cache_guid()] =
614 SpecificsToEntity(conflict_remote); 614 SpecificsToEntity(conflict_remote);
615 remote_input[unique_remote.cache_guid()] = SpecificsToEntity(unique_remote); 615 remote_input[unique_remote.cache_guid()] = SpecificsToEntity(unique_remote);
616 616
617 ModelTypeState state; 617 ModelTypeState state;
618 state.set_encryption_key_name("ekn"); 618 state.set_encryption_key_name("ekn");
619 std::unique_ptr<MetadataChangeList> metadata_changes = 619 std::unique_ptr<MetadataChangeList> metadata_changes =
620 service()->CreateMetadataChangeList(); 620 bridge()->CreateMetadataChangeList();
621 metadata_changes->UpdateModelTypeState(state); 621 metadata_changes->UpdateModelTypeState(state);
622 622
623 const SyncError error = 623 const SyncError error =
624 service()->MergeSyncData(std::move(metadata_changes), remote_input); 624 bridge()->MergeSyncData(std::move(metadata_changes), remote_input);
625 EXPECT_FALSE(error.IsSet()); 625 EXPECT_FALSE(error.IsSet());
626 EXPECT_EQ(2, change_count()); 626 EXPECT_EQ(2, change_count());
627 627
628 // The remote should beat the local in conflict. 628 // The remote should beat the local in conflict.
629 EXPECT_EQ(4u, service()->GetAllDeviceInfo().size()); 629 EXPECT_EQ(4u, bridge()->GetAllDeviceInfo().size());
630 VerifyEqual(unique_local, 630 VerifyEqual(unique_local,
631 *service()->GetDeviceInfo(unique_local.cache_guid()).get()); 631 *bridge()->GetDeviceInfo(unique_local.cache_guid()).get());
632 VerifyEqual(unique_remote, 632 VerifyEqual(unique_remote,
633 *service()->GetDeviceInfo(unique_remote.cache_guid()).get()); 633 *bridge()->GetDeviceInfo(unique_remote.cache_guid()).get());
634 VerifyEqual(conflict_remote, *service()->GetDeviceInfo(conflict_guid).get()); 634 VerifyEqual(conflict_remote, *bridge()->GetDeviceInfo(conflict_guid).get());
635 635
636 // Service should have told the processor about the existance of unique_local. 636 // bridge should have told the processor about the existance of unique_local.
637 EXPECT_TRUE(processor()->delete_set().empty()); 637 EXPECT_TRUE(processor()->delete_set().empty());
638 EXPECT_EQ(3u, processor()->put_multimap().size()); 638 EXPECT_EQ(3u, processor()->put_multimap().size());
639 EXPECT_EQ(1u, processor()->put_multimap().count(unique_local.cache_guid())); 639 EXPECT_EQ(1u, processor()->put_multimap().count(unique_local.cache_guid()));
640 const auto& it = processor()->put_multimap().find(unique_local.cache_guid()); 640 const auto& it = processor()->put_multimap().find(unique_local.cache_guid());
641 ASSERT_NE(processor()->put_multimap().end(), it); 641 ASSERT_NE(processor()->put_multimap().end(), it);
642 VerifyEqual(unique_local, it->second->specifics.device_info()); 642 VerifyEqual(unique_local, it->second->specifics.device_info());
643 643
644 RestartService(); 644 RestartBridge();
645 EXPECT_EQ(state.encryption_key_name(), 645 EXPECT_EQ(state.encryption_key_name(),
646 processor()->metadata()->GetModelTypeState().encryption_key_name()); 646 processor()->metadata()->GetModelTypeState().encryption_key_name());
647 } 647 }
648 648
649 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { 649 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuid) {
650 const DeviceInfo* provider_info = local_device()->GetLocalDeviceInfo(); 650 const DeviceInfo* provider_info = local_device()->GetLocalDeviceInfo();
651 auto specifics = base::MakeUnique<DeviceInfoSpecifics>(CreateSpecifics(0)); 651 auto specifics = base::MakeUnique<DeviceInfoSpecifics>(CreateSpecifics(0));
652 specifics->set_last_updated_timestamp(TimeToProtoTime(Time::Now())); 652 specifics->set_last_updated_timestamp(TimeToProtoTime(Time::Now()));
653 const std::string guid = provider_info->guid(); 653 const std::string guid = provider_info->guid();
654 654
655 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 655 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
656 store()->WriteData(batch.get(), guid, specifics->SerializeAsString()); 656 store()->WriteData(batch.get(), guid, specifics->SerializeAsString());
657 store()->CommitWriteBatch(std::move(batch), 657 store()->CommitWriteBatch(std::move(batch),
658 base::Bind(&VerifyResultIsSuccess)); 658 base::Bind(&VerifyResultIsSuccess));
659 659
660 InitializeAndPump(); 660 InitializeAndPump();
661 661
662 EntityDataMap remote_input; 662 EntityDataMap remote_input;
663 remote_input[guid] = SpecificsToEntity(*specifics); 663 remote_input[guid] = SpecificsToEntity(*specifics);
664 664
665 const SyncError error = service()->MergeSyncData( 665 const SyncError error = bridge()->MergeSyncData(
666 service()->CreateMetadataChangeList(), remote_input); 666 bridge()->CreateMetadataChangeList(), remote_input);
667 EXPECT_FALSE(error.IsSet()); 667 EXPECT_FALSE(error.IsSet());
668 EXPECT_EQ(0, change_count()); 668 EXPECT_EQ(0, change_count());
669 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); 669 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size());
670 EXPECT_TRUE(processor()->delete_set().empty()); 670 EXPECT_TRUE(processor()->delete_set().empty());
671 EXPECT_TRUE(processor()->put_multimap().empty()); 671 EXPECT_TRUE(processor()->put_multimap().empty());
672 } 672 }
673 673
674 TEST_F(DeviceInfoServiceTest, CountActiveDevices) { 674 TEST_F(DeviceInfoSyncBridgeTest, CountActiveDevices) {
675 InitializeAndPump(); 675 InitializeAndPump();
676 EXPECT_EQ(1, service()->CountActiveDevices()); 676 EXPECT_EQ(1, bridge()->CountActiveDevices());
677 677
678 DeviceInfoSpecifics specifics = CreateSpecifics(0); 678 DeviceInfoSpecifics specifics = CreateSpecifics(0);
679 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 679 bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(),
680 EntityAddList({specifics})); 680 EntityAddList({specifics}));
681 EXPECT_EQ(1, service()->CountActiveDevices()); 681 EXPECT_EQ(1, bridge()->CountActiveDevices());
682 682
683 specifics.set_last_updated_timestamp(TimeToProtoTime(Time::Now())); 683 specifics.set_last_updated_timestamp(TimeToProtoTime(Time::Now()));
684 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 684 bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(),
685 EntityAddList({specifics})); 685 EntityAddList({specifics}));
686 EXPECT_EQ(1, service()->CountActiveDevices()); 686 EXPECT_EQ(1, bridge()->CountActiveDevices());
687 687
688 specifics.set_cache_guid("non-local"); 688 specifics.set_cache_guid("non-local");
689 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 689 bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(),
690 EntityAddList({specifics})); 690 EntityAddList({specifics}));
691 EXPECT_EQ(2, service()->CountActiveDevices()); 691 EXPECT_EQ(2, bridge()->CountActiveDevices());
692 692
693 // Now set time to long ago in the past, it should not be active anymore. 693 // Now set time to long ago in the past, it should not be active anymore.
694 specifics.set_last_updated_timestamp(TimeToProtoTime(Time())); 694 specifics.set_last_updated_timestamp(TimeToProtoTime(Time()));
695 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 695 bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(),
696 EntityAddList({specifics})); 696 EntityAddList({specifics}));
697 EXPECT_EQ(1, service()->CountActiveDevices()); 697 EXPECT_EQ(1, bridge()->CountActiveDevices());
698 } 698 }
699 699
700 TEST_F(DeviceInfoServiceTest, MultipleOnProviderInitialized) { 700 TEST_F(DeviceInfoSyncBridgeTest, MultipleOnProviderInitialized) {
701 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>()); 701 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>());
702 InitializeAndPump(); 702 InitializeAndPump();
703 EXPECT_EQ(nullptr, processor()->metadata()); 703 EXPECT_EQ(nullptr, processor()->metadata());
704 704
705 // Verify the processor was given metadata. 705 // Verify the processor was given metadata.
706 local_device()->Initialize(CreateModel(0)); 706 local_device()->Initialize(CreateModel(0));
707 base::RunLoop().RunUntilIdle(); 707 base::RunLoop().RunUntilIdle();
708 const MetadataBatch* metadata = processor()->metadata(); 708 const MetadataBatch* metadata = processor()->metadata();
709 EXPECT_NE(nullptr, metadata); 709 EXPECT_NE(nullptr, metadata);
710 710
711 // Pointer address of metadata should remain constant because the processor 711 // Pointer address of metadata should remain constant because the processor
712 // should not have been given new metadata. 712 // should not have been given new metadata.
713 local_device()->Initialize(CreateModel(0)); 713 local_device()->Initialize(CreateModel(0));
714 base::RunLoop().RunUntilIdle(); 714 base::RunLoop().RunUntilIdle();
715 EXPECT_EQ(metadata, processor()->metadata()); 715 EXPECT_EQ(metadata, processor()->metadata());
716 } 716 }
717 717
718 TEST_F(DeviceInfoServiceTest, SendLocalData) { 718 TEST_F(DeviceInfoSyncBridgeTest, SendLocalData) {
719 InitializeAndPump(); 719 InitializeAndPump();
720 EXPECT_EQ(1, change_count()); 720 EXPECT_EQ(1, change_count());
721 EXPECT_EQ(1u, processor()->put_multimap().size()); 721 EXPECT_EQ(1u, processor()->put_multimap().size());
722 722
723 ForcePulse(); 723 ForcePulse();
724 EXPECT_EQ(2, change_count()); 724 EXPECT_EQ(2, change_count());
725 EXPECT_EQ(2u, processor()->put_multimap().size()); 725 EXPECT_EQ(2u, processor()->put_multimap().size());
726 726
727 // After clearing, pulsing should no-op and not result in a processor put or 727 // After clearing, pulsing should no-op and not result in a processor put or
728 // a notification to observers. 728 // a notification to observers.
729 local_device()->Clear(); 729 local_device()->Clear();
730 ForcePulse(); 730 ForcePulse();
731 EXPECT_EQ(2, change_count()); 731 EXPECT_EQ(2, change_count());
732 EXPECT_EQ(2u, processor()->put_multimap().size()); 732 EXPECT_EQ(2u, processor()->put_multimap().size());
733 } 733 }
734 734
735 TEST_F(DeviceInfoServiceTest, DisableSync) { 735 TEST_F(DeviceInfoSyncBridgeTest, DisableSync) {
736 InitializeAndPump(); 736 InitializeAndPump();
737 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); 737 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size());
738 EXPECT_EQ(1, change_count()); 738 EXPECT_EQ(1, change_count());
739 739
740 DeviceInfoSpecifics specifics = CreateSpecifics(1); 740 DeviceInfoSpecifics specifics = CreateSpecifics(1);
741 const SyncError error = service()->ApplySyncChanges( 741 const SyncError error = bridge()->ApplySyncChanges(
742 service()->CreateMetadataChangeList(), EntityAddList({specifics})); 742 bridge()->CreateMetadataChangeList(), EntityAddList({specifics}));
743 743
744 EXPECT_FALSE(error.IsSet()); 744 EXPECT_FALSE(error.IsSet());
745 EXPECT_EQ(2u, service()->GetAllDeviceInfo().size()); 745 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size());
746 EXPECT_EQ(2, change_count()); 746 EXPECT_EQ(2, change_count());
747 747
748 // Should clear out all local data and notify observers. 748 // Should clear out all local data and notify observers.
749 service()->DisableSync(); 749 bridge()->DisableSync();
750 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); 750 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size());
751 EXPECT_EQ(3, change_count()); 751 EXPECT_EQ(3, change_count());
752 752
753 // Reloading from storage shouldn't contain remote data. 753 // Reloading from storage shouldn't contain remote data.
754 RestartService(); 754 RestartBridge();
755 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); 755 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size());
756 EXPECT_EQ(4, change_count()); 756 EXPECT_EQ(4, change_count());
757 } 757 }
758 758
759 } // namespace 759 } // namespace
760 760
761 } // namespace syncer 761 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/device_info/device_info_sync_bridge.cc ('k') | components/sync/device_info/device_info_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698