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

Side by Side Diff: sync/engine/sync_scheduler_unittest.cc

Issue 11052007: Rename ModelType/ObjectIdStateMap to InvalidationMap. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sync/engine/sync_scheduler_impl.cc ('k') | sync/engine/sync_scheduler_whitebox_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/callback.h" 6 #include "base/callback.h"
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/memory/weak_ptr.h" 8 #include "base/memory/weak_ptr.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/test/test_timeouts.h" 10 #include "base/test/test_timeouts.h"
11 #include "sync/engine/backoff_delay_provider.h" 11 #include "sync/engine/backoff_delay_provider.h"
12 #include "sync/engine/sync_scheduler_impl.h" 12 #include "sync/engine/sync_scheduler_impl.h"
13 #include "sync/engine/syncer.h" 13 #include "sync/engine/syncer.h"
14 #include "sync/engine/throttled_data_type_tracker.h" 14 #include "sync/engine/throttled_data_type_tracker.h"
15 #include "sync/internal_api/public/base/model_type_state_map_test_util.h" 15 #include "sync/internal_api/public/base/model_type_invalidation_map_test_util.h"
16 #include "sync/sessions/test_util.h" 16 #include "sync/sessions/test_util.h"
17 #include "sync/test/callback_counter.h" 17 #include "sync/test/callback_counter.h"
18 #include "sync/test/engine/fake_model_worker.h" 18 #include "sync/test/engine/fake_model_worker.h"
19 #include "sync/test/engine/mock_connection_manager.h" 19 #include "sync/test/engine/mock_connection_manager.h"
20 #include "sync/test/engine/test_directory_setter_upper.h" 20 #include "sync/test/engine/test_directory_setter_upper.h"
21 #include "sync/test/fake_extensions_activity_monitor.h" 21 #include "sync/test/fake_extensions_activity_monitor.h"
22 #include "testing/gmock/include/gmock/gmock.h" 22 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 using base::TimeDelta; 25 using base::TimeDelta;
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 RunLoop(); 192 RunLoop();
193 193
194 return scheduler()->IsBackingOff(); 194 return scheduler()->IsBackingOff();
195 } 195 }
196 196
197 void UseMockDelayProvider() { 197 void UseMockDelayProvider() {
198 delay_ = new MockDelayProvider(); 198 delay_ = new MockDelayProvider();
199 scheduler_->delay_provider_.reset(delay_); 199 scheduler_->delay_provider_.reset(delay_);
200 } 200 }
201 201
202 // Compare a ModelTypeSet to a ModelTypeStateMap, ignoring 202 // Compare a ModelTypeSet to a ModelTypeInvalidationMap, ignoring
203 // state values. 203 // state values.
204 bool CompareModelTypeSetToModelTypeStateMap( 204 bool CompareModelTypeSetToModelTypeInvalidationMap(
205 ModelTypeSet lhs, 205 ModelTypeSet lhs,
206 const ModelTypeStateMap& rhs) { 206 const ModelTypeInvalidationMap& rhs) {
207 size_t count = 0; 207 size_t count = 0;
208 for (ModelTypeStateMap::const_iterator i = rhs.begin(); 208 for (ModelTypeInvalidationMap::const_iterator i = rhs.begin();
209 i != rhs.end(); ++i, ++count) { 209 i != rhs.end(); ++i, ++count) {
210 if (!lhs.Has(i->first)) 210 if (!lhs.Has(i->first))
211 return false; 211 return false;
212 } 212 }
213 if (lhs.Size() != count) 213 if (lhs.Size() != count)
214 return false; 214 return false;
215 return true; 215 return true;
216 } 216 }
217 217
218 SyncSessionContext* context() { return context_.get(); } 218 SyncSessionContext* context() { return context_.get(); }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 WithArg<0>(RecordSyncShare(&records)))) 275 WithArg<0>(RecordSyncShare(&records))))
276 .RetiresOnSaturation(); 276 .RetiresOnSaturation();
277 277
278 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 278 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
279 279
280 scheduler()->ScheduleNudgeAsync( 280 scheduler()->ScheduleNudgeAsync(
281 zero(), NUDGE_SOURCE_LOCAL, model_types, FROM_HERE); 281 zero(), NUDGE_SOURCE_LOCAL, model_types, FROM_HERE);
282 RunLoop(); 282 RunLoop();
283 283
284 ASSERT_EQ(1U, records.snapshots.size()); 284 ASSERT_EQ(1U, records.snapshots.size());
285 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(model_types, 285 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(model_types,
286 records.snapshots[0].source().types)); 286 records.snapshots[0].source().types));
287 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 287 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
288 records.snapshots[0].source().updates_source); 288 records.snapshots[0].source().updates_source);
289 289
290 Mock::VerifyAndClearExpectations(syncer()); 290 Mock::VerifyAndClearExpectations(syncer());
291 291
292 // Make sure a second, later, nudge is unaffected by first (no coalescing). 292 // Make sure a second, later, nudge is unaffected by first (no coalescing).
293 SyncShareRecords records2; 293 SyncShareRecords records2;
294 model_types.Remove(BOOKMARKS); 294 model_types.Remove(BOOKMARKS);
295 model_types.Put(AUTOFILL); 295 model_types.Put(AUTOFILL);
296 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 296 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
297 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), 297 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
298 WithArg<0>(RecordSyncShare(&records2)))); 298 WithArg<0>(RecordSyncShare(&records2))));
299 scheduler()->ScheduleNudgeAsync( 299 scheduler()->ScheduleNudgeAsync(
300 zero(), NUDGE_SOURCE_LOCAL, model_types, FROM_HERE); 300 zero(), NUDGE_SOURCE_LOCAL, model_types, FROM_HERE);
301 RunLoop(); 301 RunLoop();
302 302
303 ASSERT_EQ(1U, records2.snapshots.size()); 303 ASSERT_EQ(1U, records2.snapshots.size());
304 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(model_types, 304 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(model_types,
305 records2.snapshots[0].source().types)); 305 records2.snapshots[0].source().types));
306 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 306 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
307 records2.snapshots[0].source().updates_source); 307 records2.snapshots[0].source().updates_source);
308 } 308 }
309 309
310 // Make sure a regular config command is scheduled fine in the absence of any 310 // Make sure a regular config command is scheduled fine in the absence of any
311 // errors. 311 // errors.
312 TEST_F(SyncSchedulerTest, Config) { 312 TEST_F(SyncSchedulerTest, Config) {
313 SyncShareRecords records; 313 SyncShareRecords records;
314 const ModelTypeSet model_types(BOOKMARKS); 314 const ModelTypeSet model_types(BOOKMARKS);
315 315
316 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 316 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
317 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), 317 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
318 WithArg<0>(RecordSyncShare(&records)))); 318 WithArg<0>(RecordSyncShare(&records))));
319 319
320 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); 320 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE);
321 321
322 CallbackCounter counter; 322 CallbackCounter counter;
323 ConfigurationParams params( 323 ConfigurationParams params(
324 GetUpdatesCallerInfo::RECONFIGURATION, 324 GetUpdatesCallerInfo::RECONFIGURATION,
325 model_types, 325 model_types,
326 TypesToRoutingInfo(model_types), 326 TypesToRoutingInfo(model_types),
327 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); 327 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter)));
328 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); 328 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params));
329 ASSERT_EQ(1, counter.times_called()); 329 ASSERT_EQ(1, counter.times_called());
330 330
331 ASSERT_EQ(1U, records.snapshots.size()); 331 ASSERT_EQ(1U, records.snapshots.size());
332 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(model_types, 332 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(model_types,
333 records.snapshots[0].source().types)); 333 records.snapshots[0].source().types));
334 EXPECT_EQ(GetUpdatesCallerInfo::RECONFIGURATION, 334 EXPECT_EQ(GetUpdatesCallerInfo::RECONFIGURATION,
335 records.snapshots[0].source().updates_source); 335 records.snapshots[0].source().updates_source);
336 } 336 }
337 337
338 // Simulate a failure and make sure the config request is retried. 338 // Simulate a failure and make sure the config request is retried.
339 TEST_F(SyncSchedulerTest, ConfigWithBackingOff) { 339 TEST_F(SyncSchedulerTest, ConfigWithBackingOff) {
340 UseMockDelayProvider(); 340 UseMockDelayProvider();
341 EXPECT_CALL(*delay(), GetDelay(_)) 341 EXPECT_CALL(*delay(), GetDelay(_))
342 .WillRepeatedly(Return(TimeDelta::FromMilliseconds(1))); 342 .WillRepeatedly(Return(TimeDelta::FromMilliseconds(1)));
(...skipping 16 matching lines...) Expand all
359 TypesToRoutingInfo(model_types), 359 TypesToRoutingInfo(model_types),
360 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); 360 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter)));
361 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); 361 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params));
362 ASSERT_EQ(0, counter.times_called()); 362 ASSERT_EQ(0, counter.times_called());
363 363
364 ASSERT_EQ(1U, records.snapshots.size()); 364 ASSERT_EQ(1U, records.snapshots.size());
365 RunLoop(); 365 RunLoop();
366 366
367 ASSERT_EQ(2U, records.snapshots.size()); 367 ASSERT_EQ(2U, records.snapshots.size());
368 ASSERT_EQ(1, counter.times_called()); 368 ASSERT_EQ(1, counter.times_called());
369 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(model_types, 369 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(model_types,
370 records.snapshots[1].source().types)); 370 records.snapshots[1].source().types));
371 EXPECT_EQ(GetUpdatesCallerInfo::RECONFIGURATION, 371 EXPECT_EQ(GetUpdatesCallerInfo::RECONFIGURATION,
372 records.snapshots[1].source().updates_source); 372 records.snapshots[1].source().updates_source);
373 } 373 }
374 374
375 // Issue a nudge when the config has failed. Make sure both the config and 375 // Issue a nudge when the config has failed. Make sure both the config and
376 // nudge are executed. 376 // nudge are executed.
377 TEST_F(SyncSchedulerTest, NudgeWithConfigWithBackingOff) { 377 TEST_F(SyncSchedulerTest, NudgeWithConfigWithBackingOff) {
378 const ModelTypeSet model_types(BOOKMARKS); 378 const ModelTypeSet model_types(BOOKMARKS);
379 UseMockDelayProvider(); 379 UseMockDelayProvider();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 RunLoop(); 418 RunLoop();
419 // This is the 3rd attempt, which we've set up to SimulateSuccess. 419 // This is the 3rd attempt, which we've set up to SimulateSuccess.
420 ASSERT_EQ(3U, records.snapshots.size()); 420 ASSERT_EQ(3U, records.snapshots.size());
421 ASSERT_EQ(1, counter.times_called()); 421 ASSERT_EQ(1, counter.times_called());
422 422
423 // Now change the mode so nudge can execute. 423 // Now change the mode so nudge can execute.
424 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 424 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
425 425
426 ASSERT_EQ(4U, records.snapshots.size()); 426 ASSERT_EQ(4U, records.snapshots.size());
427 427
428 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(model_types, 428 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(model_types,
429 records.snapshots[2].source().types)); 429 records.snapshots[2].source().types));
430 EXPECT_EQ(GetUpdatesCallerInfo::RECONFIGURATION, 430 EXPECT_EQ(GetUpdatesCallerInfo::RECONFIGURATION,
431 records.snapshots[2].source().updates_source); 431 records.snapshots[2].source().updates_source);
432 432
433 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(model_types, 433 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(model_types,
434 records.snapshots[3].source().types)); 434 records.snapshots[3].source().types));
435 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 435 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
436 records.snapshots[3].source().updates_source); 436 records.snapshots[3].source().updates_source);
437 437
438 } 438 }
439 439
440 // Test that nudges are coalesced. 440 // Test that nudges are coalesced.
441 TEST_F(SyncSchedulerTest, NudgeCoalescing) { 441 TEST_F(SyncSchedulerTest, NudgeCoalescing) {
442 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 442 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
443 443
444 SyncShareRecords r; 444 SyncShareRecords r;
445 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 445 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
446 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), 446 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
447 WithArg<0>(RecordSyncShare(&r)))); 447 WithArg<0>(RecordSyncShare(&r))));
448 const ModelTypeSet types1(BOOKMARKS), types2(AUTOFILL), types3(THEMES); 448 const ModelTypeSet types1(BOOKMARKS), types2(AUTOFILL), types3(THEMES);
449 TimeDelta delay = zero(); 449 TimeDelta delay = zero();
450 TimeTicks optimal_time = TimeTicks::Now() + delay; 450 TimeTicks optimal_time = TimeTicks::Now() + delay;
451 scheduler()->ScheduleNudgeAsync( 451 scheduler()->ScheduleNudgeAsync(
452 delay, NUDGE_SOURCE_UNKNOWN, types1, FROM_HERE); 452 delay, NUDGE_SOURCE_UNKNOWN, types1, FROM_HERE);
453 scheduler()->ScheduleNudgeAsync( 453 scheduler()->ScheduleNudgeAsync(
454 zero(), NUDGE_SOURCE_LOCAL, types2, FROM_HERE); 454 zero(), NUDGE_SOURCE_LOCAL, types2, FROM_HERE);
455 RunLoop(); 455 RunLoop();
456 456
457 ASSERT_EQ(1U, r.snapshots.size()); 457 ASSERT_EQ(1U, r.snapshots.size());
458 EXPECT_GE(r.times[0], optimal_time); 458 EXPECT_GE(r.times[0], optimal_time);
459 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap( 459 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(
460 Union(types1, types2), r.snapshots[0].source().types)); 460 Union(types1, types2), r.snapshots[0].source().types));
461 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 461 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
462 r.snapshots[0].source().updates_source); 462 r.snapshots[0].source().updates_source);
463 463
464 Mock::VerifyAndClearExpectations(syncer()); 464 Mock::VerifyAndClearExpectations(syncer());
465 465
466 SyncShareRecords r2; 466 SyncShareRecords r2;
467 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 467 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
468 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), 468 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
469 WithArg<0>(RecordSyncShare(&r2)))); 469 WithArg<0>(RecordSyncShare(&r2))));
470 scheduler()->ScheduleNudgeAsync( 470 scheduler()->ScheduleNudgeAsync(
471 zero(), NUDGE_SOURCE_NOTIFICATION, types3, FROM_HERE); 471 zero(), NUDGE_SOURCE_NOTIFICATION, types3, FROM_HERE);
472 RunLoop(); 472 RunLoop();
473 473
474 ASSERT_EQ(1U, r2.snapshots.size()); 474 ASSERT_EQ(1U, r2.snapshots.size());
475 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(types3, 475 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(types3,
476 r2.snapshots[0].source().types)); 476 r2.snapshots[0].source().types));
477 EXPECT_EQ(GetUpdatesCallerInfo::NOTIFICATION, 477 EXPECT_EQ(GetUpdatesCallerInfo::NOTIFICATION,
478 r2.snapshots[0].source().updates_source); 478 r2.snapshots[0].source().updates_source);
479 } 479 }
480 480
481 // Test that nudges are coalesced. 481 // Test that nudges are coalesced.
482 TEST_F(SyncSchedulerTest, NudgeCoalescingWithDifferentTimings) { 482 TEST_F(SyncSchedulerTest, NudgeCoalescingWithDifferentTimings) {
483 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 483 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
484 484
485 SyncShareRecords r; 485 SyncShareRecords r;
(...skipping 11 matching lines...) Expand all
497 scheduler()->ScheduleNudgeAsync( 497 scheduler()->ScheduleNudgeAsync(
498 zero(), NUDGE_SOURCE_UNKNOWN, types2, FROM_HERE); 498 zero(), NUDGE_SOURCE_UNKNOWN, types2, FROM_HERE);
499 499
500 TimeTicks min_time = TimeTicks::Now(); 500 TimeTicks min_time = TimeTicks::Now();
501 TimeTicks max_time = TimeTicks::Now() + delay; 501 TimeTicks max_time = TimeTicks::Now() + delay;
502 502
503 RunLoop(); 503 RunLoop();
504 504
505 // Make sure the sync has happened. 505 // Make sure the sync has happened.
506 ASSERT_EQ(1U, r.snapshots.size()); 506 ASSERT_EQ(1U, r.snapshots.size());
507 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap( 507 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(
508 Union(types1, types2), r.snapshots[0].source().types)); 508 Union(types1, types2), r.snapshots[0].source().types));
509 509
510 // Make sure the sync happened at the right time. 510 // Make sure the sync happened at the right time.
511 EXPECT_GE(r.times[0], min_time); 511 EXPECT_GE(r.times[0], min_time);
512 EXPECT_LE(r.times[0], max_time); 512 EXPECT_LE(r.times[0], max_time);
513 } 513 }
514 514
515 // Test nudge scheduling. 515 // Test nudge scheduling.
516 TEST_F(SyncSchedulerTest, NudgeWithStates) { 516 TEST_F(SyncSchedulerTest, NudgeWithStates) {
517 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 517 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
518 518
519 SyncShareRecords records; 519 SyncShareRecords records;
520 ModelTypeStateMap type_state_map; 520 const ModelTypeSet types(BOOKMARKS);
521 type_state_map[BOOKMARKS].payload = "test"; 521 ModelTypeInvalidationMap invalidation_map =
522 ModelTypeSetToInvalidationMap(types, "test");
522 523
523 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 524 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
524 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), 525 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
525 WithArg<0>(RecordSyncShare(&records)))) 526 WithArg<0>(RecordSyncShare(&records))))
526 .RetiresOnSaturation(); 527 .RetiresOnSaturation();
527 scheduler()->ScheduleNudgeWithStatesAsync( 528 scheduler()->ScheduleNudgeWithStatesAsync(
528 zero(), NUDGE_SOURCE_LOCAL, type_state_map, FROM_HERE); 529 zero(), NUDGE_SOURCE_LOCAL, invalidation_map, FROM_HERE);
529 RunLoop(); 530 RunLoop();
530 531
531 ASSERT_EQ(1U, records.snapshots.size()); 532 ASSERT_EQ(1U, records.snapshots.size());
532 EXPECT_THAT(type_state_map, Eq(records.snapshots[0].source().types)); 533 EXPECT_THAT(invalidation_map, Eq(records.snapshots[0].source().types));
533 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 534 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
534 records.snapshots[0].source().updates_source); 535 records.snapshots[0].source().updates_source);
535 536
536 Mock::VerifyAndClearExpectations(syncer()); 537 Mock::VerifyAndClearExpectations(syncer());
537 538
538 // Make sure a second, later, nudge is unaffected by first (no coalescing). 539 // Make sure a second, later, nudge is unaffected by first (no coalescing).
539 SyncShareRecords records2; 540 SyncShareRecords records2;
540 type_state_map.erase(BOOKMARKS); 541 invalidation_map.erase(BOOKMARKS);
541 type_state_map[AUTOFILL].payload = "test2"; 542 invalidation_map[AUTOFILL].payload = "test2";
542 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 543 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
543 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), 544 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
544 WithArg<0>(RecordSyncShare(&records2)))); 545 WithArg<0>(RecordSyncShare(&records2))));
545 scheduler()->ScheduleNudgeWithStatesAsync( 546 scheduler()->ScheduleNudgeWithStatesAsync(
546 zero(), NUDGE_SOURCE_LOCAL, type_state_map, FROM_HERE); 547 zero(), NUDGE_SOURCE_LOCAL, invalidation_map, FROM_HERE);
547 RunLoop(); 548 RunLoop();
548 549
549 ASSERT_EQ(1U, records2.snapshots.size()); 550 ASSERT_EQ(1U, records2.snapshots.size());
550 EXPECT_THAT(type_state_map, Eq(records2.snapshots[0].source().types)); 551 EXPECT_THAT(invalidation_map, Eq(records2.snapshots[0].source().types));
551 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 552 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
552 records2.snapshots[0].source().updates_source); 553 records2.snapshots[0].source().updates_source);
553 } 554 }
554 555
555 // Test that nudges are coalesced. 556 // Test that nudges are coalesced.
556 TEST_F(SyncSchedulerTest, NudgeWithStatesCoalescing) { 557 TEST_F(SyncSchedulerTest, NudgeWithStatesCoalescing) {
557 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 558 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
558 559
559 SyncShareRecords r; 560 SyncShareRecords r;
560 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 561 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
561 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), 562 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
562 WithArg<0>(RecordSyncShare(&r)))); 563 WithArg<0>(RecordSyncShare(&r))));
563 ModelTypeStateMap types1, types2, types3; 564 ModelTypeInvalidationMap types1, types2, types3;
564 types1[BOOKMARKS].payload = "test1"; 565 types1[BOOKMARKS].payload = "test1";
565 types2[AUTOFILL].payload = "test2"; 566 types2[AUTOFILL].payload = "test2";
566 types3[THEMES].payload = "test3"; 567 types3[THEMES].payload = "test3";
567 TimeDelta delay = zero(); 568 TimeDelta delay = zero();
568 TimeTicks optimal_time = TimeTicks::Now() + delay; 569 TimeTicks optimal_time = TimeTicks::Now() + delay;
569 scheduler()->ScheduleNudgeWithStatesAsync( 570 scheduler()->ScheduleNudgeWithStatesAsync(
570 delay, NUDGE_SOURCE_UNKNOWN, types1, FROM_HERE); 571 delay, NUDGE_SOURCE_UNKNOWN, types1, FROM_HERE);
571 scheduler()->ScheduleNudgeWithStatesAsync( 572 scheduler()->ScheduleNudgeWithStatesAsync(
572 zero(), NUDGE_SOURCE_LOCAL, types2, FROM_HERE); 573 zero(), NUDGE_SOURCE_LOCAL, types2, FROM_HERE);
573 RunLoop(); 574 RunLoop();
574 575
575 ASSERT_EQ(1U, r.snapshots.size()); 576 ASSERT_EQ(1U, r.snapshots.size());
576 EXPECT_GE(r.times[0], optimal_time); 577 EXPECT_GE(r.times[0], optimal_time);
577 ModelTypeStateMap coalesced_types; 578 ModelTypeInvalidationMap coalesced_types;
578 CoalesceStates(&coalesced_types, types1); 579 CoalesceStates(&coalesced_types, types1);
579 CoalesceStates(&coalesced_types, types2); 580 CoalesceStates(&coalesced_types, types2);
580 EXPECT_THAT(coalesced_types, Eq(r.snapshots[0].source().types)); 581 EXPECT_THAT(coalesced_types, Eq(r.snapshots[0].source().types));
581 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 582 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
582 r.snapshots[0].source().updates_source); 583 r.snapshots[0].source().updates_source);
583 584
584 Mock::VerifyAndClearExpectations(syncer()); 585 Mock::VerifyAndClearExpectations(syncer());
585 586
586 SyncShareRecords r2; 587 SyncShareRecords r2;
587 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 588 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 CallbackCounter counter; 798 CallbackCounter counter;
798 ConfigurationParams params( 799 ConfigurationParams params(
799 GetUpdatesCallerInfo::RECONFIGURATION, 800 GetUpdatesCallerInfo::RECONFIGURATION,
800 config_types, 801 config_types,
801 TypesToRoutingInfo(config_types), 802 TypesToRoutingInfo(config_types),
802 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); 803 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter)));
803 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); 804 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params));
804 ASSERT_EQ(1, counter.times_called()); 805 ASSERT_EQ(1, counter.times_called());
805 806
806 ASSERT_EQ(1U, records.snapshots.size()); 807 ASSERT_EQ(1U, records.snapshots.size());
807 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(config_types, 808 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(config_types,
808 records.snapshots[0].source().types)); 809 records.snapshots[0].source().types));
809 810
810 // Switch to NORMAL_MODE to ensure NUDGES were properly saved and run. 811 // Switch to NORMAL_MODE to ensure NUDGES were properly saved and run.
811 // SyncSchedulerWhiteboxTest also provides coverage for this, but much 812 // SyncSchedulerWhiteboxTest also provides coverage for this, but much
812 // more targeted ('whitebox' style). 813 // more targeted ('whitebox' style).
813 scheduler()->OnReceivedLongPollIntervalUpdate(TimeDelta::FromDays(1)); 814 scheduler()->OnReceivedLongPollIntervalUpdate(TimeDelta::FromDays(1));
814 SyncShareRecords records2; 815 SyncShareRecords records2;
815 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 816 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
816 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), 817 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess),
817 WithArg<0>(RecordSyncShare(&records2)))); 818 WithArg<0>(RecordSyncShare(&records2))));
818 819
819 // TODO(tim): Figure out how to remove this dangerous need to reset 820 // TODO(tim): Figure out how to remove this dangerous need to reset
820 // routing info between mode switches. 821 // routing info between mode switches.
821 context()->set_routing_info(routing_info()); 822 context()->set_routing_info(routing_info());
822 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 823 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
823 824
824 ASSERT_EQ(1U, records2.snapshots.size()); 825 ASSERT_EQ(1U, records2.snapshots.size());
825 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 826 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
826 records2.snapshots[0].source().updates_source); 827 records2.snapshots[0].source().updates_source);
827 EXPECT_TRUE(CompareModelTypeSetToModelTypeStateMap(nudge_types, 828 EXPECT_TRUE(CompareModelTypeSetToModelTypeInvalidationMap(nudge_types,
828 records2.snapshots[0].source().types)); 829 records2.snapshots[0].source().types));
829 PumpLoop(); 830 PumpLoop();
830 } 831 }
831 832
832 class BackoffTriggersSyncSchedulerTest : public SyncSchedulerTest { 833 class BackoffTriggersSyncSchedulerTest : public SyncSchedulerTest {
833 void SetUp() { 834 void SetUp() {
834 SyncSchedulerTest::SetUp(); 835 SyncSchedulerTest::SetUp();
835 UseMockDelayProvider(); 836 UseMockDelayProvider();
836 EXPECT_CALL(*delay(), GetDelay(_)) 837 EXPECT_CALL(*delay(), GetDelay(_))
837 .WillRepeatedly(Return(TimeDelta::FromMilliseconds(1))); 838 .WillRepeatedly(Return(TimeDelta::FromMilliseconds(1)));
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 // Should save the nudge for until after the server is reachable. 1134 // Should save the nudge for until after the server is reachable.
1134 MessageLoop::current()->RunAllPending(); 1135 MessageLoop::current()->RunAllPending();
1135 1136
1136 connection()->SetServerReachable(); 1137 connection()->SetServerReachable();
1137 connection()->UpdateConnectionStatus(); 1138 connection()->UpdateConnectionStatus();
1138 scheduler()->OnConnectionStatusChange(); 1139 scheduler()->OnConnectionStatusChange();
1139 MessageLoop::current()->RunAllPending(); 1140 MessageLoop::current()->RunAllPending();
1140 } 1141 }
1141 1142
1142 } // namespace syncer 1143 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/engine/sync_scheduler_impl.cc ('k') | sync/engine/sync_scheduler_whitebox_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698