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

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

Issue 2461723002: [Sync] DeviceInfoService static method and error cleanup. (Closed)
Patch Set: Moved local suffix into a constant. 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_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 23 matching lines...) Expand all
34 34
35 using DeviceInfoList = std::vector<std::unique_ptr<DeviceInfo>>; 35 using DeviceInfoList = std::vector<std::unique_ptr<DeviceInfo>>;
36 using StorageKeyList = ModelTypeService::StorageKeyList; 36 using StorageKeyList = ModelTypeService::StorageKeyList;
37 using RecordList = ModelTypeStore::RecordList; 37 using RecordList = ModelTypeStore::RecordList;
38 using Result = ModelTypeStore::Result; 38 using Result = ModelTypeStore::Result;
39 using StartCallback = ModelTypeChangeProcessor::StartCallback; 39 using StartCallback = ModelTypeChangeProcessor::StartCallback;
40 using WriteBatch = ModelTypeStore::WriteBatch; 40 using WriteBatch = ModelTypeStore::WriteBatch;
41 41
42 namespace { 42 namespace {
43 43
44 std::unique_ptr<DeviceInfo> CreateDeviceInfo() { 44 const char kGuidFormat[] = "cache guid %d";
45 const char kClientNameFormat[] = "client name %d";
46 const char kChromeVersionFormat[] = "chrome version %d";
47 const char kSyncUserAgentFormat[] = "sync user agent %d";
48 const char kSigninScopedDeviceIdFormat[] = "signin scoped device id %d";
49 const sync_pb::SyncEnums::DeviceType kDeviceType =
50 sync_pb::SyncEnums_DeviceType_TYPE_LINUX;
51
52 // The |provider_| is first initialized with a model object created with this
53 // suffix. Local suffix can be changed by setting the provider and then
54 // initializing. Remote data should use other suffixes.
55 const int kDefaultLocalSuffix = 0;
56
57 DeviceInfoSpecifics CreateSpecifics(int suffix) {
58 DeviceInfoSpecifics specifics;
59 specifics.set_cache_guid(base::StringPrintf(kGuidFormat, suffix));
60 specifics.set_client_name(base::StringPrintf(kClientNameFormat, suffix));
61 specifics.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
62 specifics.set_sync_user_agent(
63 base::StringPrintf(kSyncUserAgentFormat, suffix));
64 specifics.set_chrome_version(
65 base::StringPrintf(kChromeVersionFormat, suffix));
66 specifics.set_signin_scoped_device_id(
67 base::StringPrintf(kSigninScopedDeviceIdFormat, suffix));
68 return specifics;
69 }
70
71 std::unique_ptr<DeviceInfo> CreateModel(int suffix) {
maxbogue 2016/10/28 20:20:02 I find CreateModel to be a confusingly vague term.
skym 2016/10/28 20:46:16 Why do you find create model to be confusing? Ther
45 return base::MakeUnique<DeviceInfo>( 72 return base::MakeUnique<DeviceInfo>(
46 "guid_1", "client_1", "Chromium 10k", "Chrome 10k", 73 base::StringPrintf(kGuidFormat, suffix),
47 sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id"); 74 base::StringPrintf(kClientNameFormat, suffix),
75 base::StringPrintf(kChromeVersionFormat, suffix),
76 base::StringPrintf(kSyncUserAgentFormat, suffix), kDeviceType,
77 base::StringPrintf(kSigninScopedDeviceIdFormat, suffix));
48 } 78 }
49 79
50 void VerifyResultIsSuccess(Result result) { 80 void VerifyResultIsSuccess(Result result) {
51 EXPECT_EQ(Result::SUCCESS, result); 81 EXPECT_EQ(Result::SUCCESS, result);
52 } 82 }
53 83
54 void VerifyEqual(const DeviceInfoSpecifics& s1, const DeviceInfoSpecifics& s2) { 84 void VerifyEqual(const DeviceInfoSpecifics& s1, const DeviceInfoSpecifics& s2) {
55 EXPECT_EQ(s1.cache_guid(), s2.cache_guid()); 85 EXPECT_EQ(s1.cache_guid(), s2.cache_guid());
56 EXPECT_EQ(s1.client_name(), s2.client_name()); 86 EXPECT_EQ(s1.client_name(), s2.client_name());
57 EXPECT_EQ(s1.device_type(), s2.device_type()); 87 EXPECT_EQ(s1.device_type(), s2.device_type());
58 EXPECT_EQ(s1.sync_user_agent(), s2.sync_user_agent()); 88 EXPECT_EQ(s1.sync_user_agent(), s2.sync_user_agent());
59 EXPECT_EQ(s1.chrome_version(), s2.chrome_version()); 89 EXPECT_EQ(s1.chrome_version(), s2.chrome_version());
60 EXPECT_EQ(s1.signin_scoped_device_id(), s2.signin_scoped_device_id()); 90 EXPECT_EQ(s1.signin_scoped_device_id(), s2.signin_scoped_device_id());
61 } 91 }
62 92
63 void VerifyEqual(const DeviceInfoSpecifics& specifics, 93 void VerifyEqual(const DeviceInfoSpecifics& specifics,
64 const DeviceInfo& model) { 94 const DeviceInfo& model) {
65 EXPECT_EQ(specifics.cache_guid(), model.guid()); 95 EXPECT_EQ(specifics.cache_guid(), model.guid());
66 EXPECT_EQ(specifics.client_name(), model.client_name()); 96 EXPECT_EQ(specifics.client_name(), model.client_name());
67 EXPECT_EQ(specifics.device_type(), model.device_type()); 97 EXPECT_EQ(specifics.device_type(), model.device_type());
68 EXPECT_EQ(specifics.sync_user_agent(), model.sync_user_agent()); 98 EXPECT_EQ(specifics.sync_user_agent(), model.sync_user_agent());
69 EXPECT_EQ(specifics.chrome_version(), model.chrome_version()); 99 EXPECT_EQ(specifics.chrome_version(), model.chrome_version());
70 EXPECT_EQ(specifics.signin_scoped_device_id(), 100 EXPECT_EQ(specifics.signin_scoped_device_id(),
71 model.signin_scoped_device_id()); 101 model.signin_scoped_device_id());
72 } 102 }
73 103
104 void VerifyEqual(const DeviceInfo& model,
105 const DeviceInfoSpecifics& specifics) {
106 return VerifyEqual(specifics, model);
107 }
108
74 void VerifyDataBatch(std::map<std::string, DeviceInfoSpecifics> expected, 109 void VerifyDataBatch(std::map<std::string, DeviceInfoSpecifics> expected,
75 SyncError error, 110 SyncError error,
76 std::unique_ptr<DataBatch> batch) { 111 std::unique_ptr<DataBatch> batch) {
77 EXPECT_FALSE(error.IsSet()); 112 EXPECT_FALSE(error.IsSet());
78 while (batch->HasNext()) { 113 while (batch->HasNext()) {
79 const KeyAndData& pair = batch->Next(); 114 const KeyAndData& pair = batch->Next();
80 auto iter = expected.find(pair.first); 115 auto iter = expected.find(pair.first);
81 ASSERT_NE(iter, expected.end()); 116 ASSERT_NE(iter, expected.end());
82 VerifyEqual(iter->second, pair.second->specifics.device_info()); 117 VerifyEqual(iter->second, pair.second->specifics.device_info());
83 // Removing allows us to verify we don't see the same item multiple times, 118 // Removing allows us to verify we don't see the same item multiple times,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 std::set<std::string> delete_set_; 188 std::set<std::string> delete_set_;
154 std::unique_ptr<MetadataBatch> metadata_; 189 std::unique_ptr<MetadataBatch> metadata_;
155 }; 190 };
156 191
157 } // namespace 192 } // namespace
158 193
159 class DeviceInfoServiceTest : public testing::Test, 194 class DeviceInfoServiceTest : public testing::Test,
160 public DeviceInfoTracker::Observer { 195 public DeviceInfoTracker::Observer {
161 protected: 196 protected:
162 DeviceInfoServiceTest() 197 DeviceInfoServiceTest()
163 : change_count_(0), 198 : store_(ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()),
164 store_(ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()), 199 provider_(new LocalDeviceInfoProviderMock()) {
165 local_device_(new LocalDeviceInfoProviderMock()) { 200 provider_->Initialize(CreateModel(kDefaultLocalSuffix));
166 local_device_->Initialize(CreateDeviceInfo());
167 } 201 }
168 202
169 ~DeviceInfoServiceTest() override { 203 ~DeviceInfoServiceTest() override {
170 // Some tests may never initialize the service. 204 // Some tests may never initialize the service.
171 if (service_) 205 if (service_)
172 service_->RemoveObserver(this); 206 service_->RemoveObserver(this);
173 207
174 // Force all remaining (store) tasks to execute so we don't leak memory. 208 // Force all remaining (store) tasks to execute so we don't leak memory.
175 base::RunLoop().RunUntilIdle(); 209 base::RunLoop().RunUntilIdle();
176 } 210 }
177 211
178 void OnDeviceInfoChange() override { change_count_++; } 212 void OnDeviceInfoChange() override { change_count_++; }
179 213
180 std::unique_ptr<ModelTypeChangeProcessor> CreateModelTypeChangeProcessor( 214 std::unique_ptr<ModelTypeChangeProcessor> CreateModelTypeChangeProcessor(
181 ModelType type, 215 ModelType type,
182 ModelTypeService* service) { 216 ModelTypeService* service) {
183 auto processor = base::MakeUnique<RecordingModelTypeChangeProcessor>(); 217 auto processor = base::MakeUnique<RecordingModelTypeChangeProcessor>();
184 processor_ = processor.get(); 218 processor_ = processor.get();
185 return std::move(processor); 219 return std::move(processor);
186 } 220 }
187 221
188 // Initialized the service based on the current local device and store. Can 222 // Initialized the service based on the current local device and store. Can
189 // only be called once per run, as it passes |store_|. 223 // only be called once per run, as it passes |store_|.
190 void InitializeService() { 224 void InitializeService() {
191 ASSERT_TRUE(store_); 225 ASSERT_TRUE(store_);
192 service_ = base::MakeUnique<DeviceInfoService>( 226 service_ = base::MakeUnique<DeviceInfoService>(
193 local_device_.get(), 227 provider_.get(),
194 base::Bind(&ModelTypeStoreTestUtil::MoveStoreToCallback, 228 base::Bind(&ModelTypeStoreTestUtil::MoveStoreToCallback,
195 base::Passed(&store_)), 229 base::Passed(&store_)),
196 base::Bind(&DeviceInfoServiceTest::CreateModelTypeChangeProcessor, 230 base::Bind(&DeviceInfoServiceTest::CreateModelTypeChangeProcessor,
197 base::Unretained(this))); 231 base::Unretained(this)));
198 service_->AddObserver(this); 232 service_->AddObserver(this);
199 } 233 }
200 234
201 // Creates the service and runs any outstanding tasks. This will typically 235 // Creates the service and runs any outstanding tasks. This will typically
202 // cause all initialization callbacks between the sevice and store to fire. 236 // cause all initialization callbacks between the sevice and store to fire.
203 void InitializeAndPump() { 237 void InitializeAndPump() {
204 InitializeService(); 238 InitializeService();
205 base::RunLoop().RunUntilIdle(); 239 base::RunLoop().RunUntilIdle();
206 } 240 }
207 241
208 // Generates a specifics object with slightly differing values. Will generate
209 // the same values on each run of a test because a simple counter is used to
210 // vary field values.
211 DeviceInfoSpecifics GenerateTestSpecifics() {
212 int label = ++generated_count_;
213 DeviceInfoSpecifics specifics;
214 specifics.set_cache_guid(base::StringPrintf("cache guid %d", label));
215 specifics.set_client_name(base::StringPrintf("client name %d", label));
216 specifics.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
217 specifics.set_sync_user_agent(
218 base::StringPrintf("sync user agent %d", label));
219 specifics.set_chrome_version(
220 base::StringPrintf("chrome version %d", label));
221 specifics.set_signin_scoped_device_id(
222 base::StringPrintf("signin scoped device id %d", label));
223 return specifics;
224 }
225
226 std::unique_ptr<DeviceInfoSpecifics> CopyToSpecifics(const DeviceInfo& info) {
227 return DeviceInfoService::CopyToSpecifics(info);
228 }
229
230 // Override to allow specific cache guids.
231 DeviceInfoSpecifics GenerateTestSpecifics(const std::string& guid) {
232 DeviceInfoSpecifics specifics = GenerateTestSpecifics();
233 specifics.set_cache_guid(guid);
234 return specifics;
235 }
236
237 // Allows access to the store before that will ultimately be used to 242 // Allows access to the store before that will ultimately be used to
238 // initialize the service. 243 // initialize the service.
239 ModelTypeStore* store() { 244 ModelTypeStore* store() {
240 EXPECT_TRUE(store_); 245 EXPECT_TRUE(store_);
241 return store_.get(); 246 return store_.get();
242 } 247 }
243 248
244 // Get the number of times the service notifies observers of changes. 249 // Get the number of times the service notifies observers of changes.
245 int change_count() { return change_count_; } 250 int change_count() { return change_count_; }
246 251
247 // Allows overriding the provider before the service is initialized. 252 // Allows overriding the provider before the service is initialized.
248 void set_local_device(std::unique_ptr<LocalDeviceInfoProviderMock> provider) { 253 void set_provider(std::unique_ptr<LocalDeviceInfoProviderMock> provider) {
249 ASSERT_FALSE(service_); 254 ASSERT_FALSE(service_);
250 std::swap(local_device_, provider); 255 std::swap(provider_, provider);
251 } 256 }
252 LocalDeviceInfoProviderMock* local_device() { return local_device_.get(); } 257 LocalDeviceInfoProviderMock* local_device() { return provider_.get(); }
253 258
254 // Allows access to the service after InitializeService() is called. 259 // Allows access to the service after InitializeService() is called.
255 DeviceInfoService* service() { 260 DeviceInfoService* service() {
256 EXPECT_TRUE(service_); 261 EXPECT_TRUE(service_);
257 return service_.get(); 262 return service_.get();
258 } 263 }
259 264
260 RecordingModelTypeChangeProcessor* processor() { 265 RecordingModelTypeChangeProcessor* processor() {
261 EXPECT_TRUE(processor_); 266 EXPECT_TRUE(processor_);
262 return processor_; 267 return processor_;
(...skipping 10 matching lines...) Expand all
273 service_.reset(); 278 service_.reset();
274 } 279 }
275 280
276 void RestartService() { 281 void RestartService() {
277 PumpAndShutdown(); 282 PumpAndShutdown();
278 InitializeAndPump(); 283 InitializeAndPump();
279 } 284 }
280 285
281 void ForcePulse() { service()->SendLocalData(); } 286 void ForcePulse() { service()->SendLocalData(); }
282 287
283 Time GetLastUpdateTime(const DeviceInfoSpecifics& specifics) {
284 return DeviceInfoService::GetLastUpdateTime(specifics);
285 }
286
287 private: 288 private:
288 int change_count_; 289 int change_count_ = 0;
289 290
290 // In memory model type store needs a MessageLoop. 291 // In memory model type store needs a MessageLoop.
291 base::MessageLoop message_loop_; 292 base::MessageLoop message_loop_;
292 293
293 // Holds the store while the service is not initialized. 294 // Holds the store while the service is not initialized.
294 std::unique_ptr<ModelTypeStore> store_; 295 std::unique_ptr<ModelTypeStore> store_;
295 296
296 std::unique_ptr<LocalDeviceInfoProviderMock> local_device_; 297 // Provides information about the local device. Is initialized in each case's
298 // constructor with a model object created from |kDefaultLocalSuffix|.
299 std::unique_ptr<LocalDeviceInfoProviderMock> provider_;
297 300
298 // Not initialized immediately (upon test's constructor). This allows each 301 // Not initialized immediately (upon test's constructor). This allows each
299 // test case to modify the dependencies the service will be constructed with. 302 // test case to modify the dependencies the service will be constructed with.
300 std::unique_ptr<DeviceInfoService> service_; 303 std::unique_ptr<DeviceInfoService> service_;
301 304
302 // A non-owning pointer to the processor given to the service. Will be nullptr 305 // A non-owning pointer to the processor given to the service. Will be nullptr
303 // before being given to the service, to make ownership easier. 306 // before being given to the service, to make ownership easier.
304 RecordingModelTypeChangeProcessor* processor_ = nullptr; 307 RecordingModelTypeChangeProcessor* processor_ = nullptr;
305
306 // A monotonically increasing label for generated specifics objects with data
307 // that is slightly different from eachother.
308 int generated_count_ = 0;
309 }; 308 };
310 309
311 namespace { 310 namespace {
312 311
313 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { 312 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) {
314 InitializeAndPump(); 313 InitializeAndPump();
315 DeviceInfoList devices = service()->GetAllDeviceInfo(); 314 DeviceInfoList devices = service()->GetAllDeviceInfo();
316 ASSERT_EQ(1u, devices.size()); 315 ASSERT_EQ(1u, devices.size());
317 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 316 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
318 } 317 }
319 318
320 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) { 319 TEST_F(DeviceInfoServiceTest, EmptyDataReconciliationSlowLoad) {
321 InitializeService(); 320 InitializeService();
322 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); 321 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size());
323 base::RunLoop().RunUntilIdle(); 322 base::RunLoop().RunUntilIdle();
324 DeviceInfoList devices = service()->GetAllDeviceInfo(); 323 DeviceInfoList devices = service()->GetAllDeviceInfo();
325 ASSERT_EQ(1u, devices.size()); 324 ASSERT_EQ(1u, devices.size());
326 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 325 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
327 } 326 }
328 327
329 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { 328 TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) {
330 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); 329 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>());
331 InitializeAndPump(); 330 InitializeAndPump();
332 331
333 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); 332 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size());
334 local_device()->Initialize(CreateDeviceInfo()); 333 local_device()->Initialize(CreateModel(1));
335 base::RunLoop().RunUntilIdle(); 334 base::RunLoop().RunUntilIdle();
336 335
337 DeviceInfoList devices = service()->GetAllDeviceInfo(); 336 DeviceInfoList devices = service()->GetAllDeviceInfo();
338 ASSERT_EQ(1u, devices.size()); 337 ASSERT_EQ(1u, devices.size());
339 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 338 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
340 } 339 }
341 340
342 // Metadata shouldn't be loaded before the provider is initialized. 341 // Metadata shouldn't be loaded before the provider is initialized.
343 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) { 342 TEST_F(DeviceInfoServiceTest, LocalProviderInitRace) {
344 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); 343 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>());
345 InitializeAndPump(); 344 InitializeAndPump();
346 EXPECT_FALSE(processor()->metadata()); 345 EXPECT_FALSE(processor()->metadata());
347 346
348 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); 347 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size());
349 local_device()->Initialize(CreateDeviceInfo()); 348 local_device()->Initialize(CreateModel(1));
350 base::RunLoop().RunUntilIdle(); 349 base::RunLoop().RunUntilIdle();
351 350
352 DeviceInfoList devices = service()->GetAllDeviceInfo(); 351 DeviceInfoList devices = service()->GetAllDeviceInfo();
353 ASSERT_EQ(1u, devices.size()); 352 ASSERT_EQ(1u, devices.size());
354 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 353 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
355 354
356 EXPECT_TRUE(processor()->metadata()); 355 EXPECT_TRUE(processor()->metadata());
357 } 356 }
358 357
359 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { 358 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) {
(...skipping 10 matching lines...) Expand all
370 InitializeService(); 369 InitializeService();
371 EntitySpecifics entity_specifics; 370 EntitySpecifics entity_specifics;
372 entity_specifics.mutable_device_info(); 371 entity_specifics.mutable_device_info();
373 EntityData entity_data; 372 EntityData entity_data;
374 entity_data.specifics = entity_specifics; 373 entity_data.specifics = entity_specifics;
375 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data)); 374 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data));
376 } 375 }
377 376
378 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { 377 TEST_F(DeviceInfoServiceTest, TestWithLocalData) {
379 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 378 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
380 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); 379 DeviceInfoSpecifics specifics = CreateSpecifics(1);
381 store()->WriteData(batch.get(), specifics.cache_guid(), 380 store()->WriteData(batch.get(), specifics.cache_guid(),
382 specifics.SerializeAsString()); 381 specifics.SerializeAsString());
383 store()->CommitWriteBatch(std::move(batch), 382 store()->CommitWriteBatch(std::move(batch),
384 base::Bind(&VerifyResultIsSuccess)); 383 base::Bind(&VerifyResultIsSuccess));
385 384
386 InitializeAndPump(); 385 InitializeAndPump();
387 386
388 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); 387 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size());
389 VerifyEqual(specifics, 388 VerifyEqual(specifics,
390 *service()->GetDeviceInfo(specifics.cache_guid()).get()); 389 *service()->GetDeviceInfo(specifics.cache_guid()).get());
391 } 390 }
392 391
393 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { 392 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) {
394 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 393 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
395 ModelTypeState state; 394 ModelTypeState state;
396 state.set_encryption_key_name("ekn"); 395 state.set_encryption_key_name("ekn");
397 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); 396 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString());
398 store()->CommitWriteBatch(std::move(batch), 397 store()->CommitWriteBatch(std::move(batch),
399 base::Bind(&VerifyResultIsSuccess)); 398 base::Bind(&VerifyResultIsSuccess));
400 InitializeAndPump(); 399 InitializeAndPump();
401 DeviceInfoList devices = service()->GetAllDeviceInfo(); 400 DeviceInfoList devices = service()->GetAllDeviceInfo();
402 ASSERT_EQ(1u, devices.size()); 401 ASSERT_EQ(1u, devices.size());
403 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0])); 402 EXPECT_TRUE(local_device()->GetLocalDeviceInfo()->Equals(*devices[0]));
404 EXPECT_EQ(1u, processor()->put_multimap().size()); 403 EXPECT_EQ(1u, processor()->put_multimap().size());
405 } 404 }
406 405
407 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { 406 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) {
408 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 407 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
409 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); 408 DeviceInfoSpecifics specifics = CreateSpecifics(1);
410 store()->WriteData(batch.get(), specifics.cache_guid(), 409 store()->WriteData(batch.get(), specifics.cache_guid(),
411 specifics.SerializeAsString()); 410 specifics.SerializeAsString());
412 ModelTypeState state; 411 ModelTypeState state;
413 state.set_encryption_key_name("ekn"); 412 state.set_encryption_key_name("ekn");
414 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); 413 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString());
415 store()->CommitWriteBatch(std::move(batch), 414 store()->CommitWriteBatch(std::move(batch),
416 base::Bind(&VerifyResultIsSuccess)); 415 base::Bind(&VerifyResultIsSuccess));
417 416
418 InitializeAndPump(); 417 InitializeAndPump();
419 418
420 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size()); 419 ASSERT_EQ(2u, service()->GetAllDeviceInfo().size());
421 VerifyEqual(specifics, 420 VerifyEqual(specifics,
422 *service()->GetDeviceInfo(specifics.cache_guid()).get()); 421 *service()->GetDeviceInfo(specifics.cache_guid()).get());
423 EXPECT_TRUE(processor()->metadata()); 422 EXPECT_TRUE(processor()->metadata());
424 EXPECT_EQ(state.encryption_key_name(), 423 EXPECT_EQ(state.encryption_key_name(),
425 processor()->metadata()->GetModelTypeState().encryption_key_name()); 424 processor()->metadata()->GetModelTypeState().encryption_key_name());
426 } 425 }
427 426
428 TEST_F(DeviceInfoServiceTest, GetData) { 427 TEST_F(DeviceInfoServiceTest, GetData) {
429 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 428 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
430 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); 429 DeviceInfoSpecifics specifics1 = CreateSpecifics(1);
431 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); 430 DeviceInfoSpecifics specifics2 = CreateSpecifics(2);
432 DeviceInfoSpecifics specifics3 = GenerateTestSpecifics(); 431 DeviceInfoSpecifics specifics3 = CreateSpecifics(3);
433 store()->WriteData(batch.get(), specifics1.cache_guid(), 432 store()->WriteData(batch.get(), specifics1.cache_guid(),
434 specifics1.SerializeAsString()); 433 specifics1.SerializeAsString());
435 store()->WriteData(batch.get(), specifics2.cache_guid(), 434 store()->WriteData(batch.get(), specifics2.cache_guid(),
436 specifics2.SerializeAsString()); 435 specifics2.SerializeAsString());
437 store()->WriteData(batch.get(), specifics3.cache_guid(), 436 store()->WriteData(batch.get(), specifics3.cache_guid(),
438 specifics3.SerializeAsString()); 437 specifics3.SerializeAsString());
439 store()->CommitWriteBatch(std::move(batch), 438 store()->CommitWriteBatch(std::move(batch),
440 base::Bind(&VerifyResultIsSuccess)); 439 base::Bind(&VerifyResultIsSuccess));
441 440
442 InitializeAndPump(); 441 InitializeAndPump();
443 442
444 std::map<std::string, DeviceInfoSpecifics> expected{ 443 std::map<std::string, DeviceInfoSpecifics> expected{
445 {specifics1.cache_guid(), specifics1}, 444 {specifics1.cache_guid(), specifics1},
446 {specifics3.cache_guid(), specifics3}}; 445 {specifics3.cache_guid(), specifics3}};
447 service()->GetData({specifics1.cache_guid(), specifics3.cache_guid()}, 446 service()->GetData({specifics1.cache_guid(), specifics3.cache_guid()},
448 base::Bind(&VerifyDataBatch, expected)); 447 base::Bind(&VerifyDataBatch, expected));
449 } 448 }
450 449
451 TEST_F(DeviceInfoServiceTest, GetDataMissing) { 450 TEST_F(DeviceInfoServiceTest, GetDataMissing) {
452 InitializeAndPump(); 451 InitializeAndPump();
453 service()->GetData({"does_not_exist"}, 452 service()->GetData({"does_not_exist"},
454 base::Bind(&VerifyDataBatch, 453 base::Bind(&VerifyDataBatch,
455 std::map<std::string, DeviceInfoSpecifics>())); 454 std::map<std::string, DeviceInfoSpecifics>()));
456 } 455 }
457 456
458 TEST_F(DeviceInfoServiceTest, GetAllData) { 457 TEST_F(DeviceInfoServiceTest, GetAllData) {
459 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 458 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
460 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics(); 459 DeviceInfoSpecifics specifics1 = CreateSpecifics(1);
461 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics(); 460 DeviceInfoSpecifics specifics2 = CreateSpecifics(2);
462 const std::string& guid1 = specifics1.cache_guid(); 461 const std::string& guid1 = specifics1.cache_guid();
463 const std::string& guid2 = specifics2.cache_guid(); 462 const std::string& guid2 = specifics2.cache_guid();
464 store()->WriteData(batch.get(), specifics1.cache_guid(), 463 store()->WriteData(batch.get(), specifics1.cache_guid(),
465 specifics1.SerializeAsString()); 464 specifics1.SerializeAsString());
466 store()->WriteData(batch.get(), specifics2.cache_guid(), 465 store()->WriteData(batch.get(), specifics2.cache_guid(),
467 specifics2.SerializeAsString()); 466 specifics2.SerializeAsString());
468 store()->CommitWriteBatch(std::move(batch), 467 store()->CommitWriteBatch(std::move(batch),
469 base::Bind(&VerifyResultIsSuccess)); 468 base::Bind(&VerifyResultIsSuccess));
470 469
471 InitializeAndPump(); 470 InitializeAndPump();
472 471
473 std::map<std::string, DeviceInfoSpecifics> expected{{guid1, specifics1}, 472 std::map<std::string, DeviceInfoSpecifics> expected{{guid1, specifics1},
474 {guid2, specifics2}}; 473 {guid2, specifics2}};
475 service()->GetData({guid1, guid2}, base::Bind(&VerifyDataBatch, expected)); 474 service()->GetData({guid1, guid2}, base::Bind(&VerifyDataBatch, expected));
476 } 475 }
477 476
478 TEST_F(DeviceInfoServiceTest, ApplySyncChangesEmpty) { 477 TEST_F(DeviceInfoServiceTest, ApplySyncChangesEmpty) {
479 InitializeAndPump(); 478 InitializeAndPump();
480 EXPECT_EQ(1, change_count()); 479 EXPECT_EQ(1, change_count());
481 const SyncError error = service()->ApplySyncChanges( 480 const SyncError error = service()->ApplySyncChanges(
482 service()->CreateMetadataChangeList(), EntityChangeList()); 481 service()->CreateMetadataChangeList(), EntityChangeList());
483 EXPECT_FALSE(error.IsSet()); 482 EXPECT_FALSE(error.IsSet());
484 EXPECT_EQ(1, change_count()); 483 EXPECT_EQ(1, change_count());
485 } 484 }
486 485
487 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { 486 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) {
488 InitializeAndPump(); 487 InitializeAndPump();
489 EXPECT_EQ(1, change_count()); 488 EXPECT_EQ(1, change_count());
490 489
491 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); 490 DeviceInfoSpecifics specifics = CreateSpecifics(1);
492 const SyncError error_on_add = service()->ApplySyncChanges( 491 const SyncError error_on_add = service()->ApplySyncChanges(
493 service()->CreateMetadataChangeList(), EntityAddList({specifics})); 492 service()->CreateMetadataChangeList(), EntityAddList({specifics}));
494 493
495 EXPECT_FALSE(error_on_add.IsSet()); 494 EXPECT_FALSE(error_on_add.IsSet());
496 std::unique_ptr<DeviceInfo> info = 495 std::unique_ptr<DeviceInfo> info =
497 service()->GetDeviceInfo(specifics.cache_guid()); 496 service()->GetDeviceInfo(specifics.cache_guid());
498 ASSERT_TRUE(info); 497 ASSERT_TRUE(info);
499 VerifyEqual(specifics, *info.get()); 498 VerifyEqual(specifics, *info.get());
500 EXPECT_EQ(2, change_count()); 499 EXPECT_EQ(2, change_count());
501 500
502 const SyncError error_on_delete = service()->ApplySyncChanges( 501 const SyncError error_on_delete = service()->ApplySyncChanges(
503 service()->CreateMetadataChangeList(), 502 service()->CreateMetadataChangeList(),
504 {EntityChange::CreateDelete(specifics.cache_guid())}); 503 {EntityChange::CreateDelete(specifics.cache_guid())});
505 504
506 EXPECT_FALSE(error_on_delete.IsSet()); 505 EXPECT_FALSE(error_on_delete.IsSet());
507 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid())); 506 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid()));
508 EXPECT_EQ(3, change_count()); 507 EXPECT_EQ(3, change_count());
509 } 508 }
510 509
511 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { 510 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) {
512 InitializeAndPump(); 511 InitializeAndPump();
513 EXPECT_EQ(1, change_count()); 512 EXPECT_EQ(1, change_count());
514 513
515 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); 514 DeviceInfoSpecifics specifics = CreateSpecifics(1);
516 ModelTypeState state; 515 ModelTypeState state;
517 state.set_encryption_key_name("ekn"); 516 state.set_encryption_key_name("ekn");
518 std::unique_ptr<MetadataChangeList> metadata_changes = 517 std::unique_ptr<MetadataChangeList> metadata_changes =
519 service()->CreateMetadataChangeList(); 518 service()->CreateMetadataChangeList();
520 metadata_changes->UpdateModelTypeState(state); 519 metadata_changes->UpdateModelTypeState(state);
521 520
522 const SyncError error = service()->ApplySyncChanges( 521 const SyncError error = service()->ApplySyncChanges(
523 std::move(metadata_changes), EntityAddList({specifics})); 522 std::move(metadata_changes), EntityAddList({specifics}));
524 EXPECT_FALSE(error.IsSet()); 523 EXPECT_FALSE(error.IsSet());
525 EXPECT_EQ(2, change_count()); 524 EXPECT_EQ(2, change_count());
526 525
527 RestartService(); 526 RestartService();
528 527
529 std::unique_ptr<DeviceInfo> info = 528 std::unique_ptr<DeviceInfo> info =
530 service()->GetDeviceInfo(specifics.cache_guid()); 529 service()->GetDeviceInfo(specifics.cache_guid());
531 ASSERT_TRUE(info); 530 ASSERT_TRUE(info);
532 VerifyEqual(specifics, *info.get()); 531 VerifyEqual(specifics, *info.get());
533 532
534 EXPECT_TRUE(processor()->metadata()); 533 EXPECT_TRUE(processor()->metadata());
535 EXPECT_EQ(state.encryption_key_name(), 534 EXPECT_EQ(state.encryption_key_name(),
536 processor()->metadata()->GetModelTypeState().encryption_key_name()); 535 processor()->metadata()->GetModelTypeState().encryption_key_name());
537 } 536 }
538 537
539 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { 538 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) {
540 InitializeAndPump(); 539 InitializeAndPump();
541 540
542 // The point of this test is to try to apply remote changes that have the same 541 // The service should ignore these changes using this specifics because its
543 // cache guid as the local device. The service should ignore these changes 542 // guid will match the local device.
544 // since only it should be performing writes on its data. 543 DeviceInfoSpecifics specifics = CreateSpecifics(kDefaultLocalSuffix);
545 DeviceInfoSpecifics specifics =
546 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid());
547 544
548 // Should have a single change from reconciliation. 545 // Should have a single change from reconciliation.
549 EXPECT_TRUE( 546 EXPECT_TRUE(
550 service()->GetDeviceInfo(local_device()->GetLocalDeviceInfo()->guid())); 547 service()->GetDeviceInfo(local_device()->GetLocalDeviceInfo()->guid()));
551 EXPECT_EQ(1, change_count()); 548 EXPECT_EQ(1, change_count());
552 // Ensure |last_updated| is about now, plus or minus a little bit. 549 // Ensure |last_updated| is about now, plus or minus a little bit.
553 Time last_updated(ProtoTimeToTime(processor() 550 Time last_updated(ProtoTimeToTime(processor()
554 ->put_multimap() 551 ->put_multimap()
555 .begin() 552 .begin()
556 ->second->specifics.device_info() 553 ->second->specifics.device_info()
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 // TODO(skym): Stop sending local twice. The first of the two puts will 587 // TODO(skym): Stop sending local twice. The first of the two puts will
591 // probably happen before the processor is tracking metadata yet, and so there 588 // probably happen before the processor is tracking metadata yet, and so there
592 // should not be much overhead. 589 // should not be much overhead.
593 EXPECT_EQ(2u, processor()->put_multimap().size()); 590 EXPECT_EQ(2u, processor()->put_multimap().size());
594 EXPECT_EQ(2u, processor()->put_multimap().count( 591 EXPECT_EQ(2u, processor()->put_multimap().count(
595 local_device()->GetLocalDeviceInfo()->guid())); 592 local_device()->GetLocalDeviceInfo()->guid()));
596 EXPECT_EQ(0u, processor()->delete_set().size()); 593 EXPECT_EQ(0u, processor()->delete_set().size());
597 } 594 }
598 595
599 TEST_F(DeviceInfoServiceTest, MergeWithData) { 596 TEST_F(DeviceInfoServiceTest, MergeWithData) {
597 const DeviceInfoSpecifics unique_local = CreateSpecifics(1);
598 DeviceInfoSpecifics conflict_local = CreateSpecifics(2);
599 DeviceInfoSpecifics conflict_remote = CreateSpecifics(3);
600 const DeviceInfoSpecifics unique_remote = CreateSpecifics(4);
601
600 const std::string conflict_guid = "conflict_guid"; 602 const std::string conflict_guid = "conflict_guid";
601 const DeviceInfoSpecifics unique_local = 603 conflict_local.set_cache_guid(conflict_guid);
602 GenerateTestSpecifics("unique_local_guid"); 604 conflict_remote.set_cache_guid(conflict_guid);
603 const DeviceInfoSpecifics conflict_local =
604 GenerateTestSpecifics(conflict_guid);
605 const DeviceInfoSpecifics conflict_remote =
606 GenerateTestSpecifics(conflict_guid);
607 const DeviceInfoSpecifics unique_remote =
608 GenerateTestSpecifics("unique_remote_guid");
609 605
610 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 606 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
611 store()->WriteData(batch.get(), unique_local.cache_guid(), 607 store()->WriteData(batch.get(), unique_local.cache_guid(),
612 unique_local.SerializeAsString()); 608 unique_local.SerializeAsString());
613 store()->WriteData(batch.get(), conflict_local.cache_guid(), 609 store()->WriteData(batch.get(), conflict_local.cache_guid(),
614 conflict_local.SerializeAsString()); 610 conflict_local.SerializeAsString());
615 store()->CommitWriteBatch(std::move(batch), 611 store()->CommitWriteBatch(std::move(batch),
616 base::Bind(&VerifyResultIsSuccess)); 612 base::Bind(&VerifyResultIsSuccess));
617 613
618 InitializeAndPump(); 614 InitializeAndPump();
(...skipping 30 matching lines...) Expand all
649 const auto& it = processor()->put_multimap().find(unique_local.cache_guid()); 645 const auto& it = processor()->put_multimap().find(unique_local.cache_guid());
650 ASSERT_NE(processor()->put_multimap().end(), it); 646 ASSERT_NE(processor()->put_multimap().end(), it);
651 VerifyEqual(unique_local, it->second->specifics.device_info()); 647 VerifyEqual(unique_local, it->second->specifics.device_info());
652 648
653 RestartService(); 649 RestartService();
654 EXPECT_EQ(state.encryption_key_name(), 650 EXPECT_EQ(state.encryption_key_name(),
655 processor()->metadata()->GetModelTypeState().encryption_key_name()); 651 processor()->metadata()->GetModelTypeState().encryption_key_name());
656 } 652 }
657 653
658 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { 654 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) {
659 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo(); 655 const DeviceInfo* provider_info = local_device()->GetLocalDeviceInfo();
660 std::unique_ptr<DeviceInfoSpecifics> specifics = 656 std::unique_ptr<DeviceInfoSpecifics> specifics =
maxbogue 2016/10/28 20:20:02 auto
skym 2016/10/28 20:46:16 Done.
661 CopyToSpecifics(*local_device_info); 657 base::MakeUnique<DeviceInfoSpecifics>(CreateSpecifics(0));
662 specifics->set_last_updated_timestamp(TimeToProtoTime(Time::Now())); 658 specifics->set_last_updated_timestamp(TimeToProtoTime(Time::Now()));
663 const std::string guid = local_device_info->guid(); 659 const std::string guid = provider_info->guid();
664 660
665 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 661 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
666 store()->WriteData(batch.get(), guid, specifics->SerializeAsString()); 662 store()->WriteData(batch.get(), guid, specifics->SerializeAsString());
667 store()->CommitWriteBatch(std::move(batch), 663 store()->CommitWriteBatch(std::move(batch),
668 base::Bind(&VerifyResultIsSuccess)); 664 base::Bind(&VerifyResultIsSuccess));
669 665
670 InitializeAndPump(); 666 InitializeAndPump();
671 667
672 EntityDataMap remote_input; 668 EntityDataMap remote_input;
673 remote_input[guid] = SpecificsToEntity(*specifics); 669 remote_input[guid] = SpecificsToEntity(*specifics);
674 670
675 const SyncError error = service()->MergeSyncData( 671 const SyncError error = service()->MergeSyncData(
676 service()->CreateMetadataChangeList(), remote_input); 672 service()->CreateMetadataChangeList(), remote_input);
677 EXPECT_FALSE(error.IsSet()); 673 EXPECT_FALSE(error.IsSet());
678 EXPECT_EQ(0, change_count()); 674 EXPECT_EQ(0, change_count());
679 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); 675 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size());
680 EXPECT_TRUE(processor()->delete_set().empty()); 676 EXPECT_TRUE(processor()->delete_set().empty());
681 EXPECT_TRUE(processor()->put_multimap().empty()); 677 EXPECT_TRUE(processor()->put_multimap().empty());
682 } 678 }
683 679
684 TEST_F(DeviceInfoServiceTest, GetLastUpdateTime) {
685 Time time1(Time() + TimeDelta::FromDays(1));
686
687 DeviceInfoSpecifics specifics1 = GenerateTestSpecifics();
688 DeviceInfoSpecifics specifics2 = GenerateTestSpecifics();
689 specifics2.set_last_updated_timestamp(TimeToProtoTime(time1));
690
691 EXPECT_EQ(Time(), GetLastUpdateTime(specifics1));
692 EXPECT_EQ(time1, GetLastUpdateTime(specifics2));
693 }
694
695 TEST_F(DeviceInfoServiceTest, CountActiveDevices) { 680 TEST_F(DeviceInfoServiceTest, CountActiveDevices) {
696 InitializeAndPump(); 681 InitializeAndPump();
697 EXPECT_EQ(1, service()->CountActiveDevices()); 682 EXPECT_EQ(1, service()->CountActiveDevices());
698 683
699 DeviceInfoSpecifics specifics = 684 DeviceInfoSpecifics specifics = CreateSpecifics(0);
700 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid());
701 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 685 service()->ApplySyncChanges(service()->CreateMetadataChangeList(),
702 EntityAddList({specifics})); 686 EntityAddList({specifics}));
703 EXPECT_EQ(1, service()->CountActiveDevices()); 687 EXPECT_EQ(1, service()->CountActiveDevices());
704 688
705 specifics.set_last_updated_timestamp(TimeToProtoTime(Time::Now())); 689 specifics.set_last_updated_timestamp(TimeToProtoTime(Time::Now()));
706 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 690 service()->ApplySyncChanges(service()->CreateMetadataChangeList(),
707 EntityAddList({specifics})); 691 EntityAddList({specifics}));
708 EXPECT_EQ(1, service()->CountActiveDevices()); 692 EXPECT_EQ(1, service()->CountActiveDevices());
709 693
710 specifics.set_cache_guid("non-local"); 694 specifics.set_cache_guid("non-local");
711 service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 695 service()->ApplySyncChanges(service()->CreateMetadataChangeList(),
712 EntityAddList({specifics})); 696 EntityAddList({specifics}));
713 EXPECT_EQ(2, service()->CountActiveDevices()); 697 EXPECT_EQ(2, service()->CountActiveDevices());
698
699 // Now set time to long ago in the past, it should not be active anymore.
700 specifics.set_last_updated_timestamp(TimeToProtoTime(Time()));
701 service()->ApplySyncChanges(service()->CreateMetadataChangeList(),
702 EntityAddList({specifics}));
703 EXPECT_EQ(1, service()->CountActiveDevices());
714 } 704 }
715 705
716 TEST_F(DeviceInfoServiceTest, MultipleOnProviderInitialized) { 706 TEST_F(DeviceInfoServiceTest, MultipleOnProviderInitialized) {
717 set_local_device(base::MakeUnique<LocalDeviceInfoProviderMock>()); 707 set_provider(base::MakeUnique<LocalDeviceInfoProviderMock>());
718 InitializeAndPump(); 708 InitializeAndPump();
719 EXPECT_EQ(nullptr, processor()->metadata()); 709 EXPECT_EQ(nullptr, processor()->metadata());
720 710
721 // Verify the processor was given metadata. 711 // Verify the processor was given metadata.
722 local_device()->Initialize(CreateDeviceInfo()); 712 local_device()->Initialize(CreateModel(0));
723 base::RunLoop().RunUntilIdle(); 713 base::RunLoop().RunUntilIdle();
724 const MetadataBatch* metadata = processor()->metadata(); 714 const MetadataBatch* metadata = processor()->metadata();
725 EXPECT_NE(nullptr, metadata); 715 EXPECT_NE(nullptr, metadata);
726 716
727 // Pointer address of metadata should remain constant because the processor 717 // Pointer address of metadata should remain constant because the processor
728 // should not have been given new metadata. 718 // should not have been given new metadata.
729 local_device()->Initialize(CreateDeviceInfo()); 719 local_device()->Initialize(CreateModel(0));
730 base::RunLoop().RunUntilIdle(); 720 base::RunLoop().RunUntilIdle();
731 EXPECT_EQ(metadata, processor()->metadata()); 721 EXPECT_EQ(metadata, processor()->metadata());
732 } 722 }
733 723
734 TEST_F(DeviceInfoServiceTest, SendLocalData) { 724 TEST_F(DeviceInfoServiceTest, SendLocalData) {
735 InitializeAndPump(); 725 InitializeAndPump();
736 EXPECT_EQ(1, change_count()); 726 EXPECT_EQ(1, change_count());
737 EXPECT_EQ(1u, processor()->put_multimap().size()); 727 EXPECT_EQ(1u, processor()->put_multimap().size());
738 728
739 ForcePulse(); 729 ForcePulse();
740 EXPECT_EQ(2, change_count()); 730 EXPECT_EQ(2, change_count());
741 EXPECT_EQ(2u, processor()->put_multimap().size()); 731 EXPECT_EQ(2u, processor()->put_multimap().size());
742 732
743 // After clearing, pulsing should no-op and not result in a processor put or 733 // After clearing, pulsing should no-op and not result in a processor put or
744 // a notification to observers. 734 // a notification to observers.
745 local_device()->Clear(); 735 local_device()->Clear();
746 ForcePulse(); 736 ForcePulse();
747 EXPECT_EQ(2, change_count()); 737 EXPECT_EQ(2, change_count());
748 EXPECT_EQ(2u, processor()->put_multimap().size()); 738 EXPECT_EQ(2u, processor()->put_multimap().size());
749 } 739 }
750 740
751 TEST_F(DeviceInfoServiceTest, DisableSync) { 741 TEST_F(DeviceInfoServiceTest, DisableSync) {
752 InitializeAndPump(); 742 InitializeAndPump();
753 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); 743 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size());
754 EXPECT_EQ(1, change_count()); 744 EXPECT_EQ(1, change_count());
755 745
756 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); 746 DeviceInfoSpecifics specifics = CreateSpecifics(1);
757 const SyncError error = service()->ApplySyncChanges( 747 const SyncError error = service()->ApplySyncChanges(
758 service()->CreateMetadataChangeList(), EntityAddList({specifics})); 748 service()->CreateMetadataChangeList(), EntityAddList({specifics}));
759 749
760 EXPECT_FALSE(error.IsSet()); 750 EXPECT_FALSE(error.IsSet());
761 EXPECT_EQ(2u, service()->GetAllDeviceInfo().size()); 751 EXPECT_EQ(2u, service()->GetAllDeviceInfo().size());
762 EXPECT_EQ(2, change_count()); 752 EXPECT_EQ(2, change_count());
763 753
764 // Should clear out all local data and notify observers. 754 // Should clear out all local data and notify observers.
765 service()->DisableSync(); 755 service()->DisableSync();
766 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size()); 756 EXPECT_EQ(0u, service()->GetAllDeviceInfo().size());
767 EXPECT_EQ(3, change_count()); 757 EXPECT_EQ(3, change_count());
768 758
769 // Reloading from storage shouldn't contain remote data. 759 // Reloading from storage shouldn't contain remote data.
770 RestartService(); 760 RestartService();
771 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); 761 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size());
772 EXPECT_EQ(4, change_count()); 762 EXPECT_EQ(4, change_count());
773 } 763 }
774 764
775 } // namespace 765 } // namespace
776 766
777 } // namespace syncer 767 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698