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

Side by Side Diff: chrome/test/live_sync/profile_sync_service_test_harness.cc

Issue 2876029: Refactor the wait code in ProfileSyncServiceTestHarness. (Closed)
Patch Set: Making test timeout a const int. Created 10 years, 5 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
« no previous file with comments | « chrome/test/live_sync/profile_sync_service_test_harness.h ('k') | no next file » | 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/message_loop.h" 5 #include "base/message_loop.h"
6 #include "chrome/browser/browser.h" 6 #include "chrome/browser/browser.h"
7 #include "chrome/browser/pref_service.h" 7 #include "chrome/browser/pref_service.h"
8 #include "chrome/browser/profile.h" 8 #include "chrome/browser/profile.h"
9 #include "chrome/browser/sync/glue/sync_backend_host.h" 9 #include "chrome/browser/sync/glue/sync_backend_host.h"
10 #include "chrome/browser/sync/sessions/session_state.h" 10 #include "chrome/browser/sync/sessions/session_state.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 } 77 }
78 78
79 bool StateChangeTimeoutEvent::Abort() { 79 bool StateChangeTimeoutEvent::Abort() {
80 aborted_ = true; 80 aborted_ = true;
81 caller_ = NULL; 81 caller_ = NULL;
82 return !did_timeout_; 82 return !did_timeout_;
83 } 83 }
84 84
85 ProfileSyncServiceTestHarness::ProfileSyncServiceTestHarness( 85 ProfileSyncServiceTestHarness::ProfileSyncServiceTestHarness(
86 Profile* p, const std::string& username, const std::string& password) 86 Profile* p, const std::string& username, const std::string& password)
87 : wait_state_(WAITING_FOR_INITIAL_CALLBACK), profile_(p), service_(NULL), 87 : wait_state_(WAITING_FOR_ON_AUTH_ERROR), profile_(p), service_(NULL),
88 last_status_(kInvalidStatus), 88 last_status_(kInvalidStatus),
89 last_timestamp_(0), 89 last_timestamp_(0),
90 min_timestamp_needed_(kMinTimestampNeededNone), 90 min_timestamp_needed_(kMinTimestampNeededNone),
91 username_(username), password_(password) { 91 username_(username), password_(password) {
92 // Ensure the profile has enough prefs registered for use by sync. 92 // Ensure the profile has enough prefs registered for use by sync.
93 if (!p->GetPrefs()->FindPreference(prefs::kAcceptLanguages)) 93 if (!p->GetPrefs()->FindPreference(prefs::kAcceptLanguages))
94 TabContents::RegisterUserPrefs(p->GetPrefs()); 94 TabContents::RegisterUserPrefs(p->GetPrefs());
95 } 95 }
96 96
97 bool ProfileSyncServiceTestHarness::SetupSync() { 97 bool ProfileSyncServiceTestHarness::SetupSync() {
98 syncable::ModelTypeSet set;
99 for (int i = syncable::FIRST_REAL_MODEL_TYPE;
100 i < syncable::MODEL_TYPE_COUNT; ++i) {
101 set.insert(syncable::ModelTypeFromInt(i));
102 }
103
98 service_ = profile_->GetProfileSyncService(); 104 service_ = profile_->GetProfileSyncService();
99 service_->SetSyncSetupCompleted(); 105 service_->StartUp();
100 service_->EnableForUser(); 106 service_->OnUserChoseDatatypes(true, set);
101
102 // Needed to avoid showing the login dialog. Well aware this is egregious.
103 service_->expecting_first_run_auth_needed_event_ = false;
104 service_->AddObserver(this); 107 service_->AddObserver(this);
105 return WaitForServiceInit(); 108 return WaitForServiceInit();
106 } 109 }
107 110
108 void ProfileSyncServiceTestHarness::SignalStateCompleteWithNextState( 111 void ProfileSyncServiceTestHarness::SignalStateCompleteWithNextState(
109 WaitState next_state) { 112 WaitState next_state) {
110 113
111 wait_state_ = next_state; 114 wait_state_ = next_state;
112 SignalStateComplete(); 115 SignalStateComplete();
113 } 116 }
114 117
115 void ProfileSyncServiceTestHarness::SignalStateComplete() { 118 void ProfileSyncServiceTestHarness::SignalStateComplete() {
116 MessageLoopForUI::current()->Quit(); 119 MessageLoopForUI::current()->Quit();
117 } 120 }
118 121
119 bool ProfileSyncServiceTestHarness::RunStateChangeMachine() { 122 bool ProfileSyncServiceTestHarness::RunStateChangeMachine() {
120 WaitState state = wait_state_; 123 WaitState state = wait_state_;
121 ProfileSyncService::Status status(service_->QueryDetailedSyncStatus()); 124 ProfileSyncService::Status status(service_->QueryDetailedSyncStatus());
122 switch (wait_state_) { 125 switch (wait_state_) {
123 case WAITING_FOR_INITIAL_CALLBACK: 126 case WAITING_FOR_ON_AUTH_ERROR: {
124 SignalStateCompleteWithNextState(WAITING_FOR_READY_TO_PROCESS_CHANGES); 127 SignalStateCompleteWithNextState(WAITING_FOR_NOTIFICATIONS_ENABLED);
125 break; 128 break;
126 case WAITING_FOR_READY_TO_PROCESS_CHANGES: 129 }
127 if (service_->ShouldPushChanges()) { 130 case WAITING_FOR_NOTIFICATIONS_ENABLED: {
128 SignalStateCompleteWithNextState(WAITING_FOR_NOTHING); 131 if (status.notifications_enabled) {
132 SignalStateCompleteWithNextState(FULLY_SYNCED);
129 } 133 }
130 break; 134 break;
135 }
131 case WAITING_FOR_SYNC_TO_FINISH: { 136 case WAITING_FOR_SYNC_TO_FINISH: {
132 const SyncSessionSnapshot* snap = 137 const SyncSessionSnapshot* snap =
133 service_->backend()->GetLastSessionSnapshot(); 138 service_->backend()->GetLastSessionSnapshot();
134 DCHECK(snap) << "Should have been at least one sync session by now"; 139 DCHECK(snap) << "Should have been at least one sync session by now";
135 if (snap->has_more_to_sync) 140 if (snap->has_more_to_sync)
136 break; 141 break;
137 142
138 EXPECT_LE(last_timestamp_, snap->max_local_timestamp); 143 EXPECT_LE(last_timestamp_, snap->max_local_timestamp);
139 last_timestamp_ = snap->max_local_timestamp; 144 last_timestamp_ = snap->max_local_timestamp;
140 SignalStateCompleteWithNextState(WAITING_FOR_NOTHING); 145 SignalStateCompleteWithNextState(FULLY_SYNCED);
141 break; 146 break;
142 } 147 }
143 case WAITING_FOR_UPDATES: { 148 case WAITING_FOR_UPDATES: {
144 const SyncSessionSnapshot* snap = 149 const SyncSessionSnapshot* snap =
145 service_->backend()->GetLastSessionSnapshot(); 150 service_->backend()->GetLastSessionSnapshot();
146 DCHECK(snap) << "Should have been at least one sync session by now"; 151 DCHECK(snap) << "Should have been at least one sync session by now";
147 if (snap->max_local_timestamp < min_timestamp_needed_) 152 if (snap->max_local_timestamp < min_timestamp_needed_)
148 break; 153 break;
149 154
150 SignalStateCompleteWithNextState(WAITING_FOR_NOTHING); 155 SignalStateCompleteWithNextState(FULLY_SYNCED);
151 break; 156 break;
152 } 157 }
153 case WAITING_FOR_NOTHING: 158 case FULLY_SYNCED:
154 default: 159 default:
155 // Invalid state during observer callback which may be triggered by other 160 // Invalid state during observer callback which may be triggered by other
156 // classes using the the UI message loop. Defer to their handling. 161 // classes using the the UI message loop. Defer to their handling.
157 break; 162 break;
158 } 163 }
159 last_status_ = status; 164 last_status_ = status;
160 return state != wait_state_; 165 return state != wait_state_;
161 } 166 }
162 167
163 void ProfileSyncServiceTestHarness::OnStateChanged() { 168 void ProfileSyncServiceTestHarness::OnStateChanged() {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 loop->PostDelayedTask( 201 loop->PostDelayedTask(
197 FROM_HERE, 202 FROM_HERE,
198 NewRunnableMethod(timeout_signal.get(), 203 NewRunnableMethod(timeout_signal.get(),
199 &StateChangeTimeoutEvent::Callback), 204 &StateChangeTimeoutEvent::Callback),
200 1000 * timeout_seconds); 205 1000 * timeout_seconds);
201 ui_test_utils::RunMessageLoop(); 206 ui_test_utils::RunMessageLoop();
202 return timeout_signal->Abort(); 207 return timeout_signal->Abort();
203 } 208 }
204 209
205 bool ProfileSyncServiceTestHarness::WaitForServiceInit() { 210 bool ProfileSyncServiceTestHarness::WaitForServiceInit() {
206 // Wait for the initial (auth needed) callback. 211 // Wait for the OnAuthError() callback.
207 EXPECT_EQ(wait_state_, WAITING_FOR_INITIAL_CALLBACK); 212 EXPECT_EQ(wait_state_, WAITING_FOR_ON_AUTH_ERROR);
208 if (!AwaitStatusChangeWithTimeout(30, "Waiting for authwatcher calback.")) { 213 if (!AwaitStatusChangeWithTimeout(30,
214 "Waiting for the OnAuthError() callback.")) {
209 return false; 215 return false;
210 } 216 }
211 217
212 // Wait for the OnBackendInitialized callback. 218 // Enter GAIA credentials and wait for notifications_enabled to be set to
219 // true.
213 service_->backend()->Authenticate(username_, password_, std::string()); 220 service_->backend()->Authenticate(username_, password_, std::string());
214 EXPECT_EQ(wait_state_, WAITING_FOR_READY_TO_PROCESS_CHANGES); 221 EXPECT_EQ(wait_state_, WAITING_FOR_NOTIFICATIONS_ENABLED);
215 if (!AwaitStatusChangeWithTimeout(30, "Waiting on backend initialization.")) { 222 if (!AwaitStatusChangeWithTimeout(30,
223 "Waiting for notifications_enabled to be set to true.")) {
216 return false; 224 return false;
217 } 225 }
226
218 return service_->sync_initialized(); 227 return service_->sync_initialized();
219 } 228 }
OLDNEW
« no previous file with comments | « chrome/test/live_sync/profile_sync_service_test_harness.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698