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

Side by Side Diff: chrome/browser/sync/engine/syncer_thread_unittest.cc

Issue 6104003: sync: use progress markers instead of timestamps during GetUpdates (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tim's fixes Created 9 years, 11 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 <list> 5 #include <list>
6 #include <map> 6 #include <map>
7 7
8 #include "base/lock.h" 8 #include "base/lock.h"
9 #include "base/scoped_ptr.h" 9 #include "base/scoped_ptr.h"
10 #include "base/time.h" 10 #include "base/time.h"
(...skipping 24 matching lines...) Expand all
35 using sessions::SyncerStatus; 35 using sessions::SyncerStatus;
36 36
37 typedef testing::Test SyncerThreadTest; 37 typedef testing::Test SyncerThreadTest;
38 typedef SyncerThread::WaitInterval WaitInterval; 38 typedef SyncerThread::WaitInterval WaitInterval;
39 39
40 ACTION_P(SignalEvent, event) { 40 ACTION_P(SignalEvent, event) {
41 event->Signal(); 41 event->Signal();
42 } 42 }
43 43
44 SyncSessionSnapshot SessionSnapshotForTest( 44 SyncSessionSnapshot SessionSnapshotForTest(
45 int64 num_server_changes_remaining, int64 max_local_timestamp, 45 int64 num_server_changes_remaining,
46 int64 unsynced_count) { 46 int64 unsynced_count) {
47 std::string download_progress_markers[syncable::MODEL_TYPE_COUNT];
48 for (int i = syncable::FIRST_REAL_MODEL_TYPE;
49 i < syncable::MODEL_TYPE_COUNT;
50 ++i) {
51 syncable::ModelType type(syncable::ModelTypeFromInt(i));
52 sync_pb::DataTypeProgressMarker token;
53 token.set_data_type_id(
54 syncable::GetExtensionFieldNumberFromModelType(type));
55 token.set_token("foobar");
56 token.SerializeToString(&download_progress_markers[i]);
57 }
47 return SyncSessionSnapshot(SyncerStatus(), ErrorCounters(), 58 return SyncSessionSnapshot(SyncerStatus(), ErrorCounters(),
48 num_server_changes_remaining, max_local_timestamp, false, 59 num_server_changes_remaining, false,
49 syncable::ModelTypeBitSet(), false, false, unsynced_count, 0, false); 60 syncable::ModelTypeBitSet(), download_progress_markers,
61 false, false, unsynced_count, 0, false);
50 } 62 }
51 63
52 class ListenerMock : public SyncEngineEventListener { 64 class ListenerMock : public SyncEngineEventListener {
53 public: 65 public:
54 MOCK_METHOD1(OnSyncEngineEvent, void(const SyncEngineEvent&)); 66 MOCK_METHOD1(OnSyncEngineEvent, void(const SyncEngineEvent&));
55 }; 67 };
56 68
57 class SyncerThreadWithSyncerTest : public testing::Test, 69 class SyncerThreadWithSyncerTest : public testing::Test,
58 public ModelSafeWorkerRegistrar, 70 public ModelSafeWorkerRegistrar,
59 public SyncEngineEventListener { 71 public SyncEngineEventListener {
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 398 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
387 ASSERT_FALSE(interval.had_nudge_during_backoff); 399 ASSERT_FALSE(interval.had_nudge_during_backoff);
388 ASSERT_FALSE(continue_sync_cycle_param); 400 ASSERT_FALSE(continue_sync_cycle_param);
389 } 401 }
390 402
391 // There are two states which can cause a continuation, either the updates 403 // There are two states which can cause a continuation, either the updates
392 // available do not match the updates received, or the unsynced count is 404 // available do not match the updates received, or the unsynced count is
393 // non-zero. 405 // non-zero.
394 { 406 {
395 // More server changes remaining to download. 407 // More server changes remaining to download.
396 context->set_last_snapshot(SessionSnapshotForTest(1, 0, 0)); 408 context->set_last_snapshot(SessionSnapshotForTest(1, 0));
397 bool continue_sync_cycle_param = false; 409 bool continue_sync_cycle_param = false;
398 410
399 WaitInterval interval = syncer_thread->CalculatePollingWaitTime( 411 WaitInterval interval = syncer_thread->CalculatePollingWaitTime(
400 0, 412 0,
401 &user_idle_milliseconds_param, 413 &user_idle_milliseconds_param,
402 &continue_sync_cycle_param, 414 &continue_sync_cycle_param,
403 false); 415 false);
404 416
405 ASSERT_LE(0, interval.poll_delta.InSeconds()); 417 ASSERT_LE(0, interval.poll_delta.InSeconds());
406 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 418 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
(...skipping 27 matching lines...) Expand all
434 &user_idle_milliseconds_param, 446 &user_idle_milliseconds_param,
435 &continue_sync_cycle_param, 447 &continue_sync_cycle_param,
436 false); 448 false);
437 449
438 ASSERT_GE(2, interval.poll_delta.InSeconds()); 450 ASSERT_GE(2, interval.poll_delta.InSeconds());
439 ASSERT_EQ(WaitInterval::EXPONENTIAL_BACKOFF, interval.mode); 451 ASSERT_EQ(WaitInterval::EXPONENTIAL_BACKOFF, interval.mode);
440 ASSERT_FALSE(interval.had_nudge_during_backoff); 452 ASSERT_FALSE(interval.had_nudge_during_backoff);
441 ASSERT_TRUE(continue_sync_cycle_param); 453 ASSERT_TRUE(continue_sync_cycle_param);
442 454
443 // Now simulate no more server changes remaining. 455 // Now simulate no more server changes remaining.
444 context->set_last_snapshot(SessionSnapshotForTest(1, 1, 0)); 456 context->set_last_snapshot(SessionSnapshotForTest(0, 0));
445 interval = syncer_thread->CalculatePollingWaitTime( 457 interval = syncer_thread->CalculatePollingWaitTime(
446 0, 458 0,
447 &user_idle_milliseconds_param, 459 &user_idle_milliseconds_param,
448 &continue_sync_cycle_param, 460 &continue_sync_cycle_param,
449 false); 461 false);
450 462
451 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds, 463 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds,
452 interval.poll_delta.InSeconds()); 464 interval.poll_delta.InSeconds());
453 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 465 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
454 ASSERT_FALSE(interval.had_nudge_during_backoff); 466 ASSERT_FALSE(interval.had_nudge_during_backoff);
455 ASSERT_FALSE(continue_sync_cycle_param); 467 ASSERT_FALSE(continue_sync_cycle_param);
456 } 468 }
457 469
458 { 470 {
459 471
460 // Now try with unsynced local items. 472 // Now try with unsynced local items.
461 context->set_last_snapshot(SessionSnapshotForTest(0, 0, 1)); 473 context->set_last_snapshot(SessionSnapshotForTest(0, 1));
462 bool continue_sync_cycle_param = false; 474 bool continue_sync_cycle_param = false;
463 475
464 WaitInterval interval = syncer_thread->CalculatePollingWaitTime( 476 WaitInterval interval = syncer_thread->CalculatePollingWaitTime(
465 0, 477 0,
466 &user_idle_milliseconds_param, 478 &user_idle_milliseconds_param,
467 &continue_sync_cycle_param, 479 &continue_sync_cycle_param,
468 false); 480 false);
469 481
470 ASSERT_LE(0, interval.poll_delta.InSeconds()); 482 ASSERT_LE(0, interval.poll_delta.InSeconds());
471 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 483 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
472 ASSERT_FALSE(interval.had_nudge_during_backoff); 484 ASSERT_FALSE(interval.had_nudge_during_backoff);
473 ASSERT_TRUE(continue_sync_cycle_param); 485 ASSERT_TRUE(continue_sync_cycle_param);
474 486
475 continue_sync_cycle_param = false; 487 continue_sync_cycle_param = false;
476 interval = syncer_thread->CalculatePollingWaitTime( 488 interval = syncer_thread->CalculatePollingWaitTime(
477 0, 489 0,
478 &user_idle_milliseconds_param, 490 &user_idle_milliseconds_param,
479 &continue_sync_cycle_param, 491 &continue_sync_cycle_param,
480 false); 492 false);
481 493
482 ASSERT_GE(2, interval.poll_delta.InSeconds()); 494 ASSERT_GE(2, interval.poll_delta.InSeconds());
483 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 495 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
484 ASSERT_FALSE(interval.had_nudge_during_backoff); 496 ASSERT_FALSE(interval.had_nudge_during_backoff);
485 ASSERT_TRUE(continue_sync_cycle_param); 497 ASSERT_TRUE(continue_sync_cycle_param);
486 498
487 context->set_last_snapshot(SessionSnapshotForTest(0, 0, 0)); 499 context->set_last_snapshot(SessionSnapshotForTest(0, 0));
488 interval = syncer_thread->CalculatePollingWaitTime( 500 interval = syncer_thread->CalculatePollingWaitTime(
489 4, 501 4,
490 &user_idle_milliseconds_param, 502 &user_idle_milliseconds_param,
491 &continue_sync_cycle_param, 503 &continue_sync_cycle_param,
492 false); 504 false);
493 505
494 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds, 506 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds,
495 interval.poll_delta.InSeconds()); 507 interval.poll_delta.InSeconds());
496 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 508 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
497 ASSERT_FALSE(interval.had_nudge_during_backoff); 509 ASSERT_FALSE(interval.had_nudge_during_backoff);
498 ASSERT_FALSE(continue_sync_cycle_param); 510 ASSERT_FALSE(continue_sync_cycle_param);
499 } 511 }
500 512
501 // Regression for exponential backoff reset when the syncer is nudged. 513 // Regression for exponential backoff reset when the syncer is nudged.
502 { 514 {
503 515
504 context->set_last_snapshot(SessionSnapshotForTest(0, 0, 1)); 516 context->set_last_snapshot(SessionSnapshotForTest(0, 1));
505 bool continue_sync_cycle_param = false; 517 bool continue_sync_cycle_param = false;
506 518
507 // Expect move from default polling interval to exponential backoff due to 519 // Expect move from default polling interval to exponential backoff due to
508 // unsynced_count != 0. 520 // unsynced_count != 0.
509 WaitInterval interval = syncer_thread->CalculatePollingWaitTime( 521 WaitInterval interval = syncer_thread->CalculatePollingWaitTime(
510 3600, 522 3600,
511 &user_idle_milliseconds_param, 523 &user_idle_milliseconds_param,
512 &continue_sync_cycle_param, 524 &continue_sync_cycle_param,
513 false); 525 false);
514 526
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 &user_idle_milliseconds_param, 628 &user_idle_milliseconds_param,
617 &continue_sync_cycle_param, 629 &continue_sync_cycle_param,
618 true); 630 true);
619 631
620 ASSERT_GE(2, interval.poll_delta.InSeconds()); 632 ASSERT_GE(2, interval.poll_delta.InSeconds());
621 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 633 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
622 ASSERT_FALSE(interval.had_nudge_during_backoff); 634 ASSERT_FALSE(interval.had_nudge_during_backoff);
623 ASSERT_TRUE(continue_sync_cycle_param); 635 ASSERT_TRUE(continue_sync_cycle_param);
624 636
625 // Setting unsynced_count = 0 returns us to the default polling interval. 637 // Setting unsynced_count = 0 returns us to the default polling interval.
626 context->set_last_snapshot(SessionSnapshotForTest(0, 0, 0)); 638 context->set_last_snapshot(SessionSnapshotForTest(0, 0));
627 interval = syncer_thread->CalculatePollingWaitTime( 639 interval = syncer_thread->CalculatePollingWaitTime(
628 4, 640 4,
629 &user_idle_milliseconds_param, 641 &user_idle_milliseconds_param,
630 &continue_sync_cycle_param, 642 &continue_sync_cycle_param,
631 true); 643 true);
632 644
633 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds, 645 ASSERT_EQ(SyncerThread::kDefaultLongPollIntervalSeconds,
634 interval.poll_delta.InSeconds()); 646 interval.poll_delta.InSeconds());
635 ASSERT_EQ(WaitInterval::NORMAL, interval.mode); 647 ASSERT_EQ(WaitInterval::NORMAL, interval.mode);
636 ASSERT_FALSE(interval.had_nudge_during_backoff); 648 ASSERT_FALSE(interval.had_nudge_during_backoff);
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 EXPECT_CALL(listener, OnSyncEngineEvent( 1126 EXPECT_CALL(listener, OnSyncEngineEvent(
1115 Field(&SyncEngineEvent::what_happened, 1127 Field(&SyncEngineEvent::what_happened,
1116 SyncEngineEvent::SYNCER_THREAD_EXITING))); 1128 SyncEngineEvent::SYNCER_THREAD_EXITING)));
1117 1129
1118 ASSERT_TRUE(Resume(&listener)); 1130 ASSERT_TRUE(Resume(&listener));
1119 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_)); 1131 ASSERT_TRUE(sync_cycle_ended_event.TimedWait(max_wait_time_));
1120 EXPECT_TRUE(syncer_thread()->Stop(2000)); 1132 EXPECT_TRUE(syncer_thread()->Stop(2000));
1121 } 1133 }
1122 1134
1123 } // namespace browser_sync 1135 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/syncer_thread.cc ('k') | chrome/browser/sync/engine/syncer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698