OLD | NEW |
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/macros.h" | 5 #include "base/macros.h" |
6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
8 #include "chrome/browser/sync/test/integration/bookmarks_helper.h" | 8 #include "chrome/browser/sync/test/integration/bookmarks_helper.h" |
9 #include "chrome/browser/sync/test/integration/passwords_helper.h" | 9 #include "chrome/browser/sync/test/integration/passwords_helper.h" |
10 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" | 10 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" |
11 #include "chrome/browser/sync/test/integration/single_client_status_change_check
er.h" | 11 #include "chrome/browser/sync/test/integration/single_client_status_change_check
er.h" |
12 #include "chrome/browser/sync/test/integration/sync_integration_test_util.h" | |
13 #include "chrome/browser/sync/test/integration/sync_test.h" | 12 #include "chrome/browser/sync/test/integration/sync_test.h" |
| 13 #include "chrome/browser/sync/test/integration/updated_progress_marker_checker.h
" |
14 #include "chrome/common/pref_names.h" | 14 #include "chrome/common/pref_names.h" |
15 #include "components/browser_sync/profile_sync_service.h" | 15 #include "components/browser_sync/profile_sync_service.h" |
16 #include "components/prefs/pref_member.h" | 16 #include "components/prefs/pref_member.h" |
17 #include "components/prefs/pref_service.h" | 17 #include "components/prefs/pref_service.h" |
18 #include "components/sync/protocol/sync_protocol_error.h" | 18 #include "components/sync/protocol/sync_protocol_error.h" |
19 #include "google_apis/gaia/google_service_auth_error.h" | 19 #include "google_apis/gaia/google_service_auth_error.h" |
20 | 20 |
21 using bookmarks::BookmarkNode; | 21 using bookmarks::BookmarkNode; |
22 using bookmarks_helper::AddFolder; | 22 using bookmarks_helper::AddFolder; |
23 using bookmarks_helper::SetTitle; | 23 using bookmarks_helper::SetTitle; |
24 using browser_sync::ProfileSyncService; | 24 using browser_sync::ProfileSyncService; |
25 using sync_integration_test_util::AwaitCommitActivityCompletion; | |
26 | 25 |
27 namespace { | 26 namespace { |
28 | 27 |
29 class SyncDisabledChecker : public SingleClientStatusChangeChecker { | 28 class SyncDisabledChecker : public SingleClientStatusChangeChecker { |
30 public: | 29 public: |
31 explicit SyncDisabledChecker(ProfileSyncService* service) | 30 explicit SyncDisabledChecker(ProfileSyncService* service) |
32 : SingleClientStatusChangeChecker(service) {} | 31 : SingleClientStatusChangeChecker(service) {} |
33 | 32 |
34 bool IsExitConditionSatisfied() override { | 33 bool IsExitConditionSatisfied() override { |
35 return !service()->IsSetupInProgress() && | 34 return !service()->IsSetupInProgress() && |
36 !service()->IsFirstSetupComplete(); | 35 !service()->IsFirstSetupComplete(); |
37 } | 36 } |
38 | 37 |
39 std::string GetDebugMessage() const override { return "Sync Disabled"; } | 38 std::string GetDebugMessage() const override { return "Sync Disabled"; } |
40 }; | 39 }; |
41 | 40 |
42 class SyncBackendStoppedChecker : public SingleClientStatusChangeChecker { | 41 class SyncBackendStoppedChecker : public SingleClientStatusChangeChecker { |
43 public: | 42 public: |
44 explicit SyncBackendStoppedChecker(ProfileSyncService* service) | 43 explicit SyncBackendStoppedChecker(ProfileSyncService* service) |
45 : SingleClientStatusChangeChecker(service) {} | 44 : SingleClientStatusChangeChecker(service) {} |
46 | 45 |
| 46 // StatusChangeChecker implementation. |
47 bool IsExitConditionSatisfied() override { | 47 bool IsExitConditionSatisfied() override { |
48 return !service()->IsBackendInitialized(); | 48 return !service()->IsBackendInitialized(); |
49 } | 49 } |
50 | |
51 std::string GetDebugMessage() const override { return "Sync stopped"; } | 50 std::string GetDebugMessage() const override { return "Sync stopped"; } |
52 }; | 51 }; |
53 | 52 |
54 class TypeDisabledChecker : public SingleClientStatusChangeChecker { | 53 class TypeDisabledChecker : public SingleClientStatusChangeChecker { |
55 public: | 54 public: |
56 explicit TypeDisabledChecker(ProfileSyncService* service, | 55 explicit TypeDisabledChecker(ProfileSyncService* service, |
57 syncer::ModelType type) | 56 syncer::ModelType type) |
58 : SingleClientStatusChangeChecker(service), type_(type) {} | 57 : SingleClientStatusChangeChecker(service), type_(type) {} |
59 | 58 |
| 59 // StatusChangeChecker implementation. |
60 bool IsExitConditionSatisfied() override { | 60 bool IsExitConditionSatisfied() override { |
61 return !service()->GetActiveDataTypes().Has(type_); | 61 return !service()->GetActiveDataTypes().Has(type_); |
62 } | 62 } |
| 63 std::string GetDebugMessage() const override { return "Type disabled"; } |
63 | 64 |
64 std::string GetDebugMessage() const override { return "Type disabled"; } | |
65 private: | 65 private: |
66 syncer::ModelType type_; | 66 syncer::ModelType type_; |
67 }; | 67 }; |
68 | 68 |
69 bool AwaitSyncDisabled(ProfileSyncService* service) { | |
70 SyncDisabledChecker checker(service); | |
71 checker.Wait(); | |
72 return !checker.TimedOut(); | |
73 } | |
74 | |
75 bool AwaitSyncBackendStopped(ProfileSyncService* service) { | |
76 SyncBackendStoppedChecker checker(service); | |
77 checker.Wait(); | |
78 return !checker.TimedOut(); | |
79 } | |
80 | |
81 bool AwaitTypeDisabled(ProfileSyncService* service, | |
82 syncer::ModelType type) { | |
83 TypeDisabledChecker checker(service, type); | |
84 checker.Wait(); | |
85 return !checker.TimedOut(); | |
86 } | |
87 | |
88 class SyncErrorTest : public SyncTest { | 69 class SyncErrorTest : public SyncTest { |
89 public: | 70 public: |
90 SyncErrorTest() : SyncTest(SINGLE_CLIENT) {} | 71 SyncErrorTest() : SyncTest(SINGLE_CLIENT) {} |
91 ~SyncErrorTest() override {} | 72 ~SyncErrorTest() override {} |
92 | 73 |
93 private: | 74 private: |
94 DISALLOW_COPY_AND_ASSIGN(SyncErrorTest); | 75 DISALLOW_COPY_AND_ASSIGN(SyncErrorTest); |
95 }; | 76 }; |
96 | 77 |
97 // Helper class that waits until the sync engine has hit an actionable error. | 78 // Helper class that waits until the sync engine has hit an actionable error. |
(...skipping 20 matching lines...) Expand all Loading... |
118 private: | 99 private: |
119 DISALLOW_COPY_AND_ASSIGN(ActionableErrorChecker); | 100 DISALLOW_COPY_AND_ASSIGN(ActionableErrorChecker); |
120 }; | 101 }; |
121 | 102 |
122 IN_PROC_BROWSER_TEST_F(SyncErrorTest, BirthdayErrorTest) { | 103 IN_PROC_BROWSER_TEST_F(SyncErrorTest, BirthdayErrorTest) { |
123 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; | 104 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
124 | 105 |
125 // Add an item, wait for sync, and trigger a birthday error on the server. | 106 // Add an item, wait for sync, and trigger a birthday error on the server. |
126 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); | 107 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); |
127 SetTitle(0, node1, "new_title1"); | 108 SetTitle(0, node1, "new_title1"); |
128 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); | 109 ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); |
129 GetFakeServer()->ClearServerData(); | 110 GetFakeServer()->ClearServerData(); |
130 | 111 |
131 // Now make one more change so we will do another sync. | 112 // Now make one more change so we will do another sync. |
132 const BookmarkNode* node2 = AddFolder(0, 0, "title2"); | 113 const BookmarkNode* node2 = AddFolder(0, 0, "title2"); |
133 SetTitle(0, node2, "new_title2"); | 114 SetTitle(0, node2, "new_title2"); |
134 ASSERT_TRUE(AwaitSyncDisabled(GetSyncService(0))); | 115 ASSERT_TRUE(SyncDisabledChecker(GetSyncService(0)).Wait()); |
135 } | 116 } |
136 | 117 |
137 IN_PROC_BROWSER_TEST_F(SyncErrorTest, ActionableErrorTest) { | 118 IN_PROC_BROWSER_TEST_F(SyncErrorTest, ActionableErrorTest) { |
138 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; | 119 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
139 | 120 |
140 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); | 121 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); |
141 SetTitle(0, node1, "new_title1"); | 122 SetTitle(0, node1, "new_title1"); |
142 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); | 123 ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); |
143 | 124 |
144 std::string description = "Not My Fault"; | 125 std::string description = "Not My Fault"; |
145 std::string url = "www.google.com"; | 126 std::string url = "www.google.com"; |
146 EXPECT_TRUE(GetFakeServer()->TriggerActionableError( | 127 EXPECT_TRUE(GetFakeServer()->TriggerActionableError( |
147 sync_pb::SyncEnums::TRANSIENT_ERROR, | 128 sync_pb::SyncEnums::TRANSIENT_ERROR, |
148 description, | 129 description, |
149 url, | 130 url, |
150 sync_pb::SyncEnums::UPGRADE_CLIENT)); | 131 sync_pb::SyncEnums::UPGRADE_CLIENT)); |
151 | 132 |
152 // Now make one more change so we will do another sync. | 133 // Now make one more change so we will do another sync. |
153 const BookmarkNode* node2 = AddFolder(0, 0, "title2"); | 134 const BookmarkNode* node2 = AddFolder(0, 0, "title2"); |
154 SetTitle(0, node2, "new_title2"); | 135 SetTitle(0, node2, "new_title2"); |
155 | 136 |
156 // Wait until an actionable error is encountered. | 137 // Wait until an actionable error is encountered. |
157 ActionableErrorChecker actionable_error_checker(GetSyncService(0)); | 138 ASSERT_TRUE(ActionableErrorChecker(GetSyncService(0)).Wait()); |
158 actionable_error_checker.Wait(); | |
159 ASSERT_FALSE(actionable_error_checker.TimedOut()); | |
160 | 139 |
161 ProfileSyncService::Status status; | 140 ProfileSyncService::Status status; |
162 GetSyncService(0)->QueryDetailedSyncStatus(&status); | 141 GetSyncService(0)->QueryDetailedSyncStatus(&status); |
163 ASSERT_EQ(status.sync_protocol_error.error_type, syncer::TRANSIENT_ERROR); | 142 ASSERT_EQ(status.sync_protocol_error.error_type, syncer::TRANSIENT_ERROR); |
164 ASSERT_EQ(status.sync_protocol_error.action, syncer::UPGRADE_CLIENT); | 143 ASSERT_EQ(status.sync_protocol_error.action, syncer::UPGRADE_CLIENT); |
165 ASSERT_EQ(status.sync_protocol_error.url, url); | 144 ASSERT_EQ(status.sync_protocol_error.url, url); |
166 ASSERT_EQ(status.sync_protocol_error.error_description, description); | 145 ASSERT_EQ(status.sync_protocol_error.error_description, description); |
167 } | 146 } |
168 | 147 |
169 // This test verifies that sync keeps retrying if it encounters error during | 148 // This test verifies that sync keeps retrying if it encounters error during |
(...skipping 22 matching lines...) Expand all Loading... |
192 // recover and setup succesfully on the third attempt. | 171 // recover and setup succesfully on the third attempt. |
193 ASSERT_TRUE(GetClient(0)->EnableSyncForDatatype(syncer::AUTOFILL)); | 172 ASSERT_TRUE(GetClient(0)->EnableSyncForDatatype(syncer::AUTOFILL)); |
194 #endif | 173 #endif |
195 } | 174 } |
196 | 175 |
197 IN_PROC_BROWSER_TEST_F(SyncErrorTest, BirthdayErrorUsingActionableErrorTest) { | 176 IN_PROC_BROWSER_TEST_F(SyncErrorTest, BirthdayErrorUsingActionableErrorTest) { |
198 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; | 177 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
199 | 178 |
200 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); | 179 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); |
201 SetTitle(0, node1, "new_title1"); | 180 SetTitle(0, node1, "new_title1"); |
202 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); | 181 ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); |
203 | 182 |
204 std::string description = "Not My Fault"; | 183 std::string description = "Not My Fault"; |
205 std::string url = "www.google.com"; | 184 std::string url = "www.google.com"; |
206 EXPECT_TRUE(GetFakeServer()->TriggerActionableError( | 185 EXPECT_TRUE(GetFakeServer()->TriggerActionableError( |
207 sync_pb::SyncEnums::NOT_MY_BIRTHDAY, | 186 sync_pb::SyncEnums::NOT_MY_BIRTHDAY, |
208 description, | 187 description, |
209 url, | 188 url, |
210 sync_pb::SyncEnums::DISABLE_SYNC_ON_CLIENT)); | 189 sync_pb::SyncEnums::DISABLE_SYNC_ON_CLIENT)); |
211 | 190 |
212 // Now make one more change so we will do another sync. | 191 // Now make one more change so we will do another sync. |
213 const BookmarkNode* node2 = AddFolder(0, 0, "title2"); | 192 const BookmarkNode* node2 = AddFolder(0, 0, "title2"); |
214 SetTitle(0, node2, "new_title2"); | 193 SetTitle(0, node2, "new_title2"); |
215 ASSERT_TRUE(AwaitSyncDisabled(GetSyncService(0))); | 194 ASSERT_TRUE(SyncDisabledChecker(GetSyncService(0)).Wait()); |
216 ProfileSyncService::Status status; | 195 ProfileSyncService::Status status; |
217 GetSyncService(0)->QueryDetailedSyncStatus(&status); | 196 GetSyncService(0)->QueryDetailedSyncStatus(&status); |
218 ASSERT_EQ(status.sync_protocol_error.error_type, syncer::NOT_MY_BIRTHDAY); | 197 ASSERT_EQ(status.sync_protocol_error.error_type, syncer::NOT_MY_BIRTHDAY); |
219 ASSERT_EQ(status.sync_protocol_error.action, syncer::DISABLE_SYNC_ON_CLIENT); | 198 ASSERT_EQ(status.sync_protocol_error.action, syncer::DISABLE_SYNC_ON_CLIENT); |
220 ASSERT_EQ(status.sync_protocol_error.url, url); | 199 ASSERT_EQ(status.sync_protocol_error.url, url); |
221 ASSERT_EQ(status.sync_protocol_error.error_description, description); | 200 ASSERT_EQ(status.sync_protocol_error.error_description, description); |
222 } | 201 } |
223 | 202 |
224 // Tests that on receiving CLIENT_DATA_OBSOLETE sync backend gets restarted and | 203 // Tests that on receiving CLIENT_DATA_OBSOLETE sync backend gets restarted and |
225 // initialized with different cache_guld. | 204 // initialized with different cache_guld. |
226 IN_PROC_BROWSER_TEST_F(SyncErrorTest, ClientDataObsoleteTest) { | 205 IN_PROC_BROWSER_TEST_F(SyncErrorTest, ClientDataObsoleteTest) { |
227 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; | 206 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
228 | 207 |
229 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); | 208 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); |
230 SetTitle(0, node1, "new_title1"); | 209 SetTitle(0, node1, "new_title1"); |
231 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); | 210 ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); |
232 | 211 |
233 std::string description = "Not My Fault"; | 212 std::string description = "Not My Fault"; |
234 std::string url = "www.google.com"; | 213 std::string url = "www.google.com"; |
235 | 214 |
236 // Remember cache_guid before actionable error. | 215 // Remember cache_guid before actionable error. |
237 ProfileSyncService::Status status; | 216 ProfileSyncService::Status status; |
238 GetSyncService(0)->QueryDetailedSyncStatus(&status); | 217 GetSyncService(0)->QueryDetailedSyncStatus(&status); |
239 std::string old_cache_guid = status.sync_id; | 218 std::string old_cache_guid = status.sync_id; |
240 | 219 |
241 EXPECT_TRUE( | 220 EXPECT_TRUE( |
242 GetFakeServer()->TriggerError(sync_pb::SyncEnums::CLIENT_DATA_OBSOLETE)); | 221 GetFakeServer()->TriggerError(sync_pb::SyncEnums::CLIENT_DATA_OBSOLETE)); |
243 | 222 |
244 // Trigger sync by making one more change. | 223 // Trigger sync by making one more change. |
245 const BookmarkNode* node2 = AddFolder(0, 0, "title2"); | 224 const BookmarkNode* node2 = AddFolder(0, 0, "title2"); |
246 SetTitle(0, node2, "new_title2"); | 225 SetTitle(0, node2, "new_title2"); |
247 | 226 |
248 ASSERT_TRUE(AwaitSyncBackendStopped(GetSyncService(0))); | 227 ASSERT_TRUE(SyncBackendStoppedChecker(GetSyncService(0)).Wait()); |
249 | 228 |
250 // Make server return SUCCESS so that sync can initialize. | 229 // Make server return SUCCESS so that sync can initialize. |
251 EXPECT_TRUE(GetFakeServer()->TriggerError(sync_pb::SyncEnums::SUCCESS)); | 230 EXPECT_TRUE(GetFakeServer()->TriggerError(sync_pb::SyncEnums::SUCCESS)); |
252 | 231 |
253 ASSERT_TRUE(GetClient(0)->AwaitBackendInitialization()); | 232 ASSERT_TRUE(GetClient(0)->AwaitBackendInitialization()); |
254 | 233 |
255 // Ensure cache_guid changed. | 234 // Ensure cache_guid changed. |
256 GetSyncService(0)->QueryDetailedSyncStatus(&status); | 235 GetSyncService(0)->QueryDetailedSyncStatus(&status); |
257 ASSERT_NE(old_cache_guid, status.sync_id); | 236 ASSERT_NE(old_cache_guid, status.sync_id); |
258 } | 237 } |
259 | 238 |
260 IN_PROC_BROWSER_TEST_F(SyncErrorTest, DisableDatatypeWhileRunning) { | 239 IN_PROC_BROWSER_TEST_F(SyncErrorTest, DisableDatatypeWhileRunning) { |
261 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; | 240 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; |
262 syncer::ModelTypeSet synced_datatypes = | 241 syncer::ModelTypeSet synced_datatypes = |
263 GetSyncService(0)->GetActiveDataTypes(); | 242 GetSyncService(0)->GetActiveDataTypes(); |
264 ASSERT_TRUE(synced_datatypes.Has(syncer::TYPED_URLS)); | 243 ASSERT_TRUE(synced_datatypes.Has(syncer::TYPED_URLS)); |
265 ASSERT_TRUE(synced_datatypes.Has(syncer::SESSIONS)); | 244 ASSERT_TRUE(synced_datatypes.Has(syncer::SESSIONS)); |
266 GetProfile(0)->GetPrefs()->SetBoolean( | 245 GetProfile(0)->GetPrefs()->SetBoolean( |
267 prefs::kSavingBrowserHistoryDisabled, true); | 246 prefs::kSavingBrowserHistoryDisabled, true); |
268 | 247 |
269 // Wait for reconfigurations. | 248 // Wait for reconfigurations. |
270 ASSERT_TRUE(AwaitTypeDisabled(GetSyncService(0), syncer::TYPED_URLS)); | 249 ASSERT_TRUE( |
271 ASSERT_TRUE(AwaitTypeDisabled(GetSyncService(0), syncer::SESSIONS)); | 250 TypeDisabledChecker(GetSyncService(0), syncer::TYPED_URLS).Wait()); |
| 251 ASSERT_TRUE(TypeDisabledChecker(GetSyncService(0), syncer::SESSIONS).Wait()); |
272 | 252 |
273 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); | 253 const BookmarkNode* node1 = AddFolder(0, 0, "title1"); |
274 SetTitle(0, node1, "new_title1"); | 254 SetTitle(0, node1, "new_title1"); |
275 ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService(0))); | 255 ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); |
276 // TODO(lipalani)" Verify initial sync ended for typed url is false. | 256 // TODO(lipalani): Verify initial sync ended for typed url is false. |
277 } | 257 } |
278 | 258 |
279 } // namespace | 259 } // namespace |
OLD | NEW |