Index: sync/engine/syncer_unittest.cc |
diff --git a/sync/engine/syncer_unittest.cc b/sync/engine/syncer_unittest.cc |
index e4755b6a4f32a070a9ec05e4788b95696eaab9d5..684b404240ed4f28bc4c25c3b4fc054e94ddf6c8 100644 |
--- a/sync/engine/syncer_unittest.cc |
+++ b/sync/engine/syncer_unittest.cc |
@@ -461,6 +461,18 @@ class SyncerTest : public testing::Test, |
return directory()->GetCryptographer(trans); |
} |
+ // Configures SyncSessionContext and NudgeTracker so Syncer won't call |
+ // GetUpdates prior to Commit. This method can be used to ensure a Commit is |
+ // not preceeded by GetUpdates. |
+ void ConfigureNoGetUpdatesRequired() { |
+ context_->set_server_enabled_pre_commit_update_avoidance(true); |
+ nudge_tracker_.OnInvalidationsEnabled(); |
+ nudge_tracker_.RecordSuccessfulSyncCycle(); |
+ |
+ ASSERT_FALSE(context_->ShouldFetchUpdatesBeforeCommit()); |
+ ASSERT_FALSE(nudge_tracker_.IsGetUpdatesRequired()); |
+ } |
+ |
base::MessageLoop message_loop_; |
// Some ids to aid tests. Only the root one's value is specific. The rest |
@@ -2520,55 +2532,128 @@ TEST_F(SyncerTest, CommitManyItemsInOneGo_CommitConflict) { |
} |
// Tests that sending debug info events works. |
-TEST_F(SyncerTest, SendDebugInfoEvents_HappyCase) { |
+TEST_F(SyncerTest, SendDebugInfoEventsOnGetUpdates_HappyCase) { |
debug_info_getter_->AddDebugEvent(); |
debug_info_getter_->AddDebugEvent(); |
SyncShareNudge(); |
- // Verify we received one request with two debug info events. |
+ // Verify we received one GetUpdates request with two debug info events. |
EXPECT_EQ(1U, mock_server_->requests().size()); |
- EXPECT_EQ(2, mock_server_->requests().back().debug_info().events_size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_get_updates()); |
+ EXPECT_EQ(2, mock_server_->last_request().debug_info().events_size()); |
SyncShareNudge(); |
- // See that we received another request, but that it contains no debug info |
- // events. |
+ // See that we received another GetUpdates request, but that it contains no |
+ // debug info events. |
EXPECT_EQ(2U, mock_server_->requests().size()); |
- EXPECT_EQ(0, mock_server_->requests().back().debug_info().events_size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_get_updates()); |
+ EXPECT_EQ(0, mock_server_->last_request().debug_info().events_size()); |
debug_info_getter_->AddDebugEvent(); |
SyncShareNudge(); |
- // See that we received another request and it contains one debug info event. |
+ // See that we received another GetUpdates request and it contains one debug |
+ // info event. |
EXPECT_EQ(3U, mock_server_->requests().size()); |
- EXPECT_EQ(1, mock_server_->requests().back().debug_info().events_size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_get_updates()); |
+ EXPECT_EQ(1, mock_server_->last_request().debug_info().events_size()); |
} |
// Tests that debug info events are dropped on server error. |
-TEST_F(SyncerTest, SendDebugInfoEvents_PostFailsDontDrop) { |
+TEST_F(SyncerTest, SendDebugInfoEventsOnGetUpdates_PostFailsDontDrop) { |
debug_info_getter_->AddDebugEvent(); |
debug_info_getter_->AddDebugEvent(); |
mock_server_->FailNextPostBufferToPathCall(); |
SyncShareNudge(); |
- // Verify we attempted to send one request with two debug info events. |
+ // Verify we attempted to send one GetUpdates request with two debug info |
+ // events. |
EXPECT_EQ(1U, mock_server_->requests().size()); |
- EXPECT_EQ(2, mock_server_->requests().back().debug_info().events_size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_get_updates()); |
+ EXPECT_EQ(2, mock_server_->last_request().debug_info().events_size()); |
SyncShareNudge(); |
// See that the client resent the two debug info events. |
EXPECT_EQ(2U, mock_server_->requests().size()); |
- EXPECT_EQ(2, mock_server_->requests().back().debug_info().events_size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_get_updates()); |
+ EXPECT_EQ(2, mock_server_->last_request().debug_info().events_size()); |
// The previous send was successful so this next one shouldn't generate any |
// debug info events. |
SyncShareNudge(); |
EXPECT_EQ(3U, mock_server_->requests().size()); |
- EXPECT_EQ(0, mock_server_->requests().back().debug_info().events_size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_get_updates()); |
+ EXPECT_EQ(0, mock_server_->last_request().debug_info().events_size()); |
+} |
+ |
+// Tests that sending debug info events on Commit works. |
+TEST_F(SyncerTest, SendDebugInfoEventsOnCommit_HappyCase) { |
+ // Make sure GetUpdate isn't call as it would "steal" debug info events before |
+ // Commit has a chance to send them. |
+ ConfigureNoGetUpdatesRequired(); |
+ |
+ // Generate a debug info event and trigger a commit. |
+ debug_info_getter_->AddDebugEvent(); |
+ CreateUnsyncedDirectory("X", "id_X"); |
+ SyncShareNudge(); |
+ |
+ // Verify that the last request received is a Commit and that it contains a |
+ // debug info event. |
+ EXPECT_EQ(1U, mock_server_->requests().size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_commit()); |
+ EXPECT_EQ(1, mock_server_->last_request().debug_info().events_size()); |
+ |
+ // Generate another commit, but no debug info event. |
+ CreateUnsyncedDirectory("Y", "id_Y"); |
+ SyncShareNudge(); |
+ |
+ // See that it was received and contains no debug info events. |
+ EXPECT_EQ(2U, mock_server_->requests().size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_commit()); |
+ EXPECT_EQ(0, mock_server_->last_request().debug_info().events_size()); |
+} |
+ |
+// Tests that debug info events are not dropped on server error. |
+TEST_F(SyncerTest, SendDebugInfoEventsOnCommit_PostFailsDontDrop) { |
+ // Make sure GetUpdate isn't call as it would "steal" debug info events before |
+ // Commit has a chance to send them. |
+ ConfigureNoGetUpdatesRequired(); |
+ |
+ mock_server_->FailNextPostBufferToPathCall(); |
+ |
+ // Generate a debug info event and trigger a commit. |
+ debug_info_getter_->AddDebugEvent(); |
+ CreateUnsyncedDirectory("X", "id_X"); |
+ SyncShareNudge(); |
+ |
+ // Verify that the last request sent is a Commit and that it contains a debug |
+ // info event. |
+ EXPECT_EQ(1U, mock_server_->requests().size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_commit()); |
+ EXPECT_EQ(1, mock_server_->last_request().debug_info().events_size()); |
+ |
+ // Try again. |
+ SyncShareNudge(); |
+ |
+ // Verify that we've received another Commit and that it contains a debug info |
+ // event (just like the previous one). |
+ EXPECT_EQ(2U, mock_server_->requests().size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_commit()); |
+ EXPECT_EQ(1, mock_server_->last_request().debug_info().events_size()); |
+ |
+ // Generate another commit and try again. |
+ CreateUnsyncedDirectory("Y", "id_Y"); |
+ SyncShareNudge(); |
+ |
+ // See that it was received and contains no debug info events. |
+ EXPECT_EQ(3U, mock_server_->requests().size()); |
+ ASSERT_TRUE(mock_server_->last_request().has_commit()); |
+ EXPECT_EQ(0, mock_server_->last_request().debug_info().events_size()); |
} |
TEST_F(SyncerTest, HugeConflict) { |