OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/sync_file_system/drive_backend/sync_engine.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" |
6 | 6 |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/strings/stringprintf.h" | |
10 #include "chrome/browser/drive/drive_uploader.h" | 9 #include "chrome/browser/drive/drive_uploader.h" |
11 #include "chrome/browser/drive/fake_drive_service.h" | 10 #include "chrome/browser/drive/fake_drive_service.h" |
12 #include "chrome/browser/extensions/test_extension_service.h" | 11 #include "chrome/browser/sync_file_system/drive_backend/callback_helper.h" |
13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 12 #include "chrome/browser/sync_file_system/drive_backend/fake_sync_worker.h" |
14 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 13 #include "chrome/browser/sync_file_system/drive_backend/sync_worker_interface.h" |
15 #include "chrome/browser/sync_file_system/drive_backend/sync_task.h" | 14 #include "chrome/browser/sync_file_system/remote_file_sync_service.h" |
16 #include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h" | |
17 #include "chrome/browser/sync_file_system/drive_backend/sync_worker.h" | |
18 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" | 15 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" |
16 #include "content/public/browser/browser_thread.h" | |
19 #include "content/public/test/test_browser_thread_bundle.h" | 17 #include "content/public/test/test_browser_thread_bundle.h" |
20 #include "extensions/common/extension.h" | |
21 #include "extensions/common/extension_builder.h" | |
22 #include "extensions/common/extension_set.h" | |
23 #include "extensions/common/value_builder.h" | |
24 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
25 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" | |
26 #include "third_party/leveldatabase/src/include/leveldb/env.h" | |
27 | 19 |
28 namespace sync_file_system { | 20 namespace sync_file_system { |
29 namespace drive_backend { | 21 namespace drive_backend { |
30 | 22 |
31 namespace { | 23 class SyncEngineTest : public testing::Test, |
32 | 24 public base::SupportsWeakPtr<SyncEngineTest> { |
33 const char kAppID[] = "app_id"; | |
34 | |
35 void EmptyTask(SyncStatusCode status, const SyncStatusCallback& callback) { | |
36 base::MessageLoop::current()->PostTask( | |
37 FROM_HERE, base::Bind(callback, status)); | |
38 } | |
39 | |
40 } // namespace | |
41 | |
42 class MockSyncTask : public ExclusiveTask { | |
43 public: | 25 public: |
44 explicit MockSyncTask(bool used_network) { | 26 typedef RemoteFileSyncService::OriginStatusMap RemoteOriginStatusMap; |
45 set_used_network(used_network); | 27 |
46 } | |
47 virtual ~MockSyncTask() {} | |
48 | |
49 virtual void RunExclusive(const SyncStatusCallback& callback) OVERRIDE { | |
50 callback.Run(SYNC_STATUS_OK); | |
51 } | |
52 | |
53 private: | |
54 DISALLOW_COPY_AND_ASSIGN(MockSyncTask); | |
55 }; | |
56 | |
57 class MockExtensionService : public TestExtensionService { | |
58 public: | |
59 MockExtensionService() {} | |
60 virtual ~MockExtensionService() {} | |
61 | |
62 virtual const extensions::ExtensionSet* extensions() const OVERRIDE { | |
63 return &extensions_; | |
64 } | |
65 | |
66 virtual void AddExtension(const extensions::Extension* extension) OVERRIDE { | |
67 extensions_.Insert(make_scoped_refptr(extension)); | |
68 } | |
69 | |
70 virtual const extensions::Extension* GetInstalledExtension( | |
71 const std::string& extension_id) const OVERRIDE { | |
72 return extensions_.GetByID(extension_id); | |
73 } | |
74 | |
75 virtual bool IsExtensionEnabled( | |
76 const std::string& extension_id) const OVERRIDE { | |
77 return extensions_.Contains(extension_id) && | |
78 !disabled_extensions_.Contains(extension_id); | |
79 } | |
80 | |
81 void UninstallExtension(const std::string& extension_id) { | |
82 extensions_.Remove(extension_id); | |
83 disabled_extensions_.Remove(extension_id); | |
84 } | |
85 | |
86 void DisableExtension(const std::string& extension_id) { | |
87 if (!IsExtensionEnabled(extension_id)) | |
88 return; | |
89 const extensions::Extension* extension = extensions_.GetByID(extension_id); | |
90 disabled_extensions_.Insert(make_scoped_refptr(extension)); | |
91 } | |
92 | |
93 private: | |
94 extensions::ExtensionSet extensions_; | |
95 extensions::ExtensionSet disabled_extensions_; | |
96 | |
97 DISALLOW_COPY_AND_ASSIGN(MockExtensionService); | |
98 }; | |
99 | |
100 class SyncEngineTest | |
101 : public testing::Test, | |
102 public base::SupportsWeakPtr<SyncEngineTest> { | |
103 public: | |
104 SyncEngineTest() {} | 28 SyncEngineTest() {} |
105 virtual ~SyncEngineTest() {} | 29 virtual ~SyncEngineTest() {} |
106 | 30 |
107 virtual void SetUp() OVERRIDE { | 31 virtual void SetUp() OVERRIDE { |
108 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); | 32 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); |
109 in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); | 33 |
110 | |
111 extension_service_.reset(new MockExtensionService); | |
112 scoped_ptr<drive::DriveServiceInterface> | 34 scoped_ptr<drive::DriveServiceInterface> |
113 fake_drive_service(new drive::FakeDriveService); | 35 fake_drive_service(new drive::FakeDriveService); |
114 | 36 |
37 scoped_refptr<base::SequencedWorkerPool> worker_pool = | |
38 content::BrowserThread::GetBlockingPool(); | |
39 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner = | |
40 base::MessageLoopProxy::current(); | |
41 scoped_refptr<base::SequencedTaskRunner> worker_task_runner = | |
42 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( | |
43 worker_pool->GetSequenceToken(), | |
44 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); | |
45 | |
115 sync_engine_.reset(new drive_backend::SyncEngine( | 46 sync_engine_.reset(new drive_backend::SyncEngine( |
116 base::MessageLoopProxy::current(), // ui_task_runner | 47 ui_task_runner, |
117 base::MessageLoopProxy::current(), // worker_task_runner | 48 worker_task_runner, |
118 base::MessageLoopProxy::current(), // file_task_runner | 49 NULL /* file_task_runner */, |
119 base::MessageLoopProxy::current(), // drive_task_runner | 50 NULL /* drive_task_runner */, |
120 profile_dir_.path(), | 51 profile_dir_.path(), |
121 NULL, // task_logger | 52 NULL /* task_logger */, |
122 NULL, // notification_manager | 53 NULL /* notification_manager */, |
123 extension_service_.get(), | 54 NULL /* extension_service */, |
124 NULL, // signin_manager | 55 NULL /* signin_manager */, |
125 NULL, // token_service | 56 NULL /* token_service */, |
126 NULL, // request_context | 57 NULL /* request_context */, |
127 in_memory_env_.get())); | 58 NULL /* in_memory_env */)); |
128 | 59 |
129 sync_engine_->InitializeForTesting( | 60 sync_engine_->InitializeForTesting( |
130 fake_drive_service.Pass(), | 61 fake_drive_service.Pass(), |
131 scoped_ptr<drive::DriveUploaderInterface>(), | 62 scoped_ptr<drive::DriveUploaderInterface>(), |
132 scoped_ptr<SyncWorkerInterface>()); | 63 scoped_ptr<SyncWorkerInterface>(new FakeSyncWorker)); |
133 sync_engine_->SetSyncEnabled(true); | 64 sync_engine_->SetSyncEnabled(true); |
65 | |
66 WaitWorkerTaskRunner(); | |
134 base::RunLoop().RunUntilIdle(); | 67 base::RunLoop().RunUntilIdle(); |
tzik
2014/06/18 12:08:58
Can we drop RunUntilIdle()?
This will not work wel
peria
2014/06/19 03:19:03
Done.
| |
135 } | 68 } |
136 | 69 |
137 virtual void TearDown() OVERRIDE { | 70 virtual void TearDown() OVERRIDE { |
138 sync_engine_.reset(); | 71 sync_engine_.reset(); |
139 extension_service_.reset(); | |
140 base::RunLoop().RunUntilIdle(); | 72 base::RunLoop().RunUntilIdle(); |
tzik
2014/06/18 12:08:58
Could you keep |worker_pool| and call its Shutdown
peria
2014/06/19 03:19:03
Done.
| |
141 } | 73 } |
142 | 74 |
143 MockExtensionService* extension_service() { return extension_service_.get(); } | 75 bool FindOriginStatus(const GURL& origin, std::string* status) { |
76 scoped_ptr<RemoteOriginStatusMap> status_map; | |
77 sync_engine()->GetOriginStatusMap(CreateResultReceiver(&status_map)); | |
78 WaitWorkerTaskRunner(); | |
79 | |
80 RemoteOriginStatusMap::const_iterator itr = status_map->find(origin); | |
81 if (itr == status_map->end()) | |
82 return false; | |
83 | |
84 *status = itr->second; | |
85 // If an origin is uninstalled, it should not be found actually. | |
86 if (*status == "Uninstalled") | |
87 return false; | |
88 return true; | |
89 } | |
90 | |
91 void PostUpdateServiceState(RemoteServiceState state, | |
92 const std::string& description) { | |
93 worker_task_runner()->PostTask( | |
94 FROM_HERE, | |
95 base::Bind(&FakeSyncWorker::UpdateServiceState, | |
96 base::Unretained(fake_sync_worker()), | |
97 state, | |
98 description)); | |
99 WaitWorkerTaskRunner(); | |
100 } | |
101 | |
102 void WaitWorkerTaskRunner() { | |
tzik
2014/06/18 12:08:58
WaitForWorkerTaskRunner or FlushWorkerTaskRunner?
peria
2014/06/19 03:19:03
Done.
| |
103 DCHECK(worker_task_runner()); | |
104 | |
105 base::RunLoop run_loop; | |
106 worker_task_runner()->PostTask( | |
107 FROM_HERE, | |
108 RelayCallbackToCurrentThread( | |
109 FROM_HERE, run_loop.QuitClosure())); | |
110 run_loop.Run(); | |
111 } | |
112 | |
113 // Accessors | |
144 SyncEngine* sync_engine() { return sync_engine_.get(); } | 114 SyncEngine* sync_engine() { return sync_engine_.get(); } |
145 | 115 FakeSyncWorker* fake_sync_worker() { |
146 SyncTaskManager* GetSyncTaskManager() { | 116 return static_cast<FakeSyncWorker*>(sync_engine_->sync_worker_.get()); |
147 return sync_engine_->sync_worker_->GetSyncTaskManager(); | 117 } |
148 } | 118 base::SequencedTaskRunner* worker_task_runner() { |
149 | 119 return sync_engine_->worker_task_runner_.get(); |
150 void CheckServiceState(SyncStatusCode expected_sync_status, | |
151 RemoteServiceState expected_service_status, | |
152 SyncStatusCode sync_status) { | |
153 EXPECT_EQ(expected_sync_status, sync_status); | |
154 EXPECT_EQ(expected_service_status, sync_engine_->GetCurrentState()); | |
155 } | |
156 | |
157 MetadataDatabase* metadata_database() { | |
158 return sync_engine_->sync_worker_->GetMetadataDatabase(); | |
159 } | |
160 | |
161 void SetHasRefreshToken(bool has_refresh_token) { | |
162 sync_engine_->sync_worker_->SetHasRefreshToken(has_refresh_token); | |
163 } | 120 } |
164 | 121 |
165 private: | 122 private: |
166 content::TestBrowserThreadBundle browser_threads_; | 123 content::TestBrowserThreadBundle browser_threads_; |
167 base::ScopedTempDir profile_dir_; | 124 base::ScopedTempDir profile_dir_; |
168 scoped_ptr<leveldb::Env> in_memory_env_; | |
169 | |
170 scoped_ptr<MockExtensionService> extension_service_; | |
171 scoped_ptr<drive_backend::SyncEngine> sync_engine_; | 125 scoped_ptr<drive_backend::SyncEngine> sync_engine_; |
172 | 126 |
173 DISALLOW_COPY_AND_ASSIGN(SyncEngineTest); | 127 DISALLOW_COPY_AND_ASSIGN(SyncEngineTest); |
174 }; | 128 }; |
175 | 129 |
176 TEST_F(SyncEngineTest, EnableOrigin) { | 130 TEST_F(SyncEngineTest, OriginTest) { |
177 FileTracker tracker; | 131 GURL origin("chrome-extension://app_0"); |
132 | |
133 SyncStatusCode sync_status; | |
134 std::string status; | |
135 | |
136 sync_engine()->RegisterOrigin( | |
137 origin, | |
138 CreateResultReceiver(&sync_status)); | |
139 WaitWorkerTaskRunner(); | |
140 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
141 ASSERT_TRUE(FindOriginStatus(origin, &status)); | |
142 EXPECT_EQ("Registered", status); | |
143 | |
144 sync_engine()->DisableOrigin( | |
145 origin, | |
146 CreateResultReceiver(&sync_status)); | |
147 WaitWorkerTaskRunner(); | |
148 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
149 ASSERT_TRUE(FindOriginStatus(origin, &status)); | |
150 EXPECT_EQ("Disabled", status); | |
151 | |
152 sync_engine()->EnableOrigin( | |
153 origin, | |
154 CreateResultReceiver(&sync_status)); | |
155 WaitWorkerTaskRunner(); | |
156 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
157 ASSERT_TRUE(FindOriginStatus(origin, &status)); | |
158 EXPECT_EQ("Enabled", status); | |
159 | |
160 sync_engine()->UninstallOrigin( | |
161 origin, | |
162 RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE, | |
163 CreateResultReceiver(&sync_status)); | |
164 WaitWorkerTaskRunner(); | |
165 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
166 EXPECT_FALSE(FindOriginStatus(origin, &status)); | |
167 EXPECT_EQ("Uninstalled", status); | |
168 } | |
169 | |
170 TEST_F(SyncEngineTest, GetOriginStatusMap) { | |
178 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; | 171 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; |
179 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); | |
180 | |
181 sync_engine()->RegisterOrigin(origin, CreateResultReceiver(&sync_status)); | |
182 base::RunLoop().RunUntilIdle(); | |
183 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
184 ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); | |
185 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); | |
186 | |
187 sync_engine()->DisableOrigin(origin, CreateResultReceiver(&sync_status)); | |
188 base::RunLoop().RunUntilIdle(); | |
189 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
190 ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); | |
191 EXPECT_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker.tracker_kind()); | |
192 | |
193 sync_engine()->EnableOrigin(origin, CreateResultReceiver(&sync_status)); | |
194 base::RunLoop().RunUntilIdle(); | |
195 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
196 ASSERT_TRUE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); | |
197 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); | |
198 | |
199 sync_engine()->UninstallOrigin( | |
200 origin, | |
201 RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE, | |
202 CreateResultReceiver(&sync_status)); | |
203 base::RunLoop().RunUntilIdle(); | |
204 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
205 ASSERT_FALSE(metadata_database()->FindAppRootTracker(kAppID, &tracker)); | |
206 } | |
207 | |
208 TEST_F(SyncEngineTest, GetOriginStatusMap) { | |
209 FileTracker tracker; | |
210 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; | |
211 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); | |
212 | 172 |
213 sync_engine()->RegisterOrigin(GURL("chrome-extension://app_0"), | 173 sync_engine()->RegisterOrigin(GURL("chrome-extension://app_0"), |
214 CreateResultReceiver(&sync_status)); | 174 CreateResultReceiver(&sync_status)); |
215 base::RunLoop().RunUntilIdle(); | 175 WaitWorkerTaskRunner(); |
216 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | 176 EXPECT_EQ(SYNC_STATUS_OK, sync_status); |
217 | 177 |
218 sync_engine()->RegisterOrigin(GURL("chrome-extension://app_1"), | 178 sync_engine()->RegisterOrigin(GURL("chrome-extension://app_1"), |
219 CreateResultReceiver(&sync_status)); | 179 CreateResultReceiver(&sync_status)); |
220 base::RunLoop().RunUntilIdle(); | 180 WaitWorkerTaskRunner(); |
221 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | 181 EXPECT_EQ(SYNC_STATUS_OK, sync_status); |
222 | 182 |
223 scoped_ptr<RemoteFileSyncService::OriginStatusMap> status_map; | 183 scoped_ptr<RemoteOriginStatusMap> status_map; |
224 sync_engine()->GetOriginStatusMap(CreateResultReceiver(&status_map)); | 184 sync_engine()->GetOriginStatusMap(CreateResultReceiver(&status_map)); |
225 base::RunLoop().RunUntilIdle(); | 185 WaitWorkerTaskRunner(); |
226 ASSERT_EQ(2u, status_map->size()); | 186 ASSERT_EQ(2u, status_map->size()); |
227 EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_0")]); | 187 EXPECT_EQ("Registered", (*status_map)[GURL("chrome-extension://app_0")]); |
228 EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_1")]); | 188 EXPECT_EQ("Registered", (*status_map)[GURL("chrome-extension://app_1")]); |
229 | 189 |
230 sync_engine()->DisableOrigin(GURL("chrome-extension://app_1"), | 190 sync_engine()->DisableOrigin(GURL("chrome-extension://app_1"), |
231 CreateResultReceiver(&sync_status)); | 191 CreateResultReceiver(&sync_status)); |
232 base::RunLoop().RunUntilIdle(); | 192 WaitWorkerTaskRunner(); |
233 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | 193 EXPECT_EQ(SYNC_STATUS_OK, sync_status); |
234 | 194 |
235 sync_engine()->GetOriginStatusMap(CreateResultReceiver(&status_map)); | 195 sync_engine()->GetOriginStatusMap(CreateResultReceiver(&status_map)); |
236 base::RunLoop().RunUntilIdle(); | 196 WaitWorkerTaskRunner(); |
237 ASSERT_EQ(2u, status_map->size()); | 197 ASSERT_EQ(2u, status_map->size()); |
238 EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_0")]); | 198 EXPECT_EQ("Registered", (*status_map)[GURL("chrome-extension://app_0")]); |
239 EXPECT_EQ("Disabled", (*status_map)[GURL("chrome-extension://app_1")]); | 199 EXPECT_EQ("Disabled", (*status_map)[GURL("chrome-extension://app_1")]); |
240 } | 200 } |
241 | 201 |
242 TEST_F(SyncEngineTest, UpdateServiceState) { | 202 TEST_F(SyncEngineTest, UpdateServiceState) { |
243 EXPECT_EQ(REMOTE_SERVICE_OK, sync_engine()->GetCurrentState()); | 203 struct { |
244 | 204 RemoteServiceState state; |
245 // Assume an user is in login state. | 205 const char* description; |
246 sync_engine()->OnReadyToSendRequests(); | 206 } test_data[] = { |
247 | 207 {REMOTE_SERVICE_OK, "OK"}, |
248 GetSyncTaskManager()->ScheduleTask( | 208 {REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, "TEMPORARY_UNAVAILABLE"}, |
249 FROM_HERE, | 209 {REMOTE_SERVICE_AUTHENTICATION_REQUIRED, "AUTHENTICATION_REQUIRED"}, |
250 base::Bind(&EmptyTask, SYNC_STATUS_AUTHENTICATION_FAILED), | 210 {REMOTE_SERVICE_DISABLED, "DISABLED"}, |
251 SyncTaskManager::PRIORITY_MED, | 211 |
252 base::Bind(&SyncEngineTest::CheckServiceState, | 212 {REMOTE_SERVICE_STATE_MAX, "STATE_MAX"}, // Will not be tested |
253 AsWeakPtr(), | 213 }; |
254 SYNC_STATUS_AUTHENTICATION_FAILED, | 214 |
255 REMOTE_SERVICE_AUTHENTICATION_REQUIRED)); | 215 for (int i = 0; test_data[i].state != REMOTE_SERVICE_STATE_MAX; ++i) { |
tzik
2014/06/18 12:08:58
i < arraysize(test_data)?
peria
2014/06/19 03:19:03
Done.
| |
256 | 216 PostUpdateServiceState(test_data[i].state, test_data[i].description); |
257 GetSyncTaskManager()->ScheduleTask( | 217 EXPECT_EQ(test_data[i].state, sync_engine()->GetCurrentState()) |
258 FROM_HERE, | 218 << "Expected state: REMOTE_SERVICE_" << test_data[i].description; |
259 base::Bind(&EmptyTask, SYNC_STATUS_ACCESS_FORBIDDEN), | 219 } |
260 SyncTaskManager::PRIORITY_MED, | 220 } |
261 base::Bind(&SyncEngineTest::CheckServiceState, | 221 |
262 AsWeakPtr(), | 222 TEST_F(SyncEngineTest, ProcessRemoteChange) { |
263 SYNC_STATUS_ACCESS_FORBIDDEN, | 223 SyncStatusCode sync_status; |
264 REMOTE_SERVICE_AUTHENTICATION_REQUIRED)); | 224 fileapi::FileSystemURL url; |
265 | 225 sync_engine()->ProcessRemoteChange(CreateResultReceiver(&sync_status, &url)); |
266 GetSyncTaskManager()->ScheduleTask( | 226 WaitWorkerTaskRunner(); |
267 FROM_HERE, | 227 EXPECT_EQ(SYNC_STATUS_OK, sync_status); |
268 base::Bind(&EmptyTask, SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE), | |
269 SyncTaskManager::PRIORITY_MED, | |
270 base::Bind(&SyncEngineTest::CheckServiceState, | |
271 AsWeakPtr(), | |
272 SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE, | |
273 REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); | |
274 | |
275 GetSyncTaskManager()->ScheduleTask( | |
276 FROM_HERE, | |
277 base::Bind(&EmptyTask, SYNC_STATUS_NETWORK_ERROR), | |
278 SyncTaskManager::PRIORITY_MED, | |
279 base::Bind(&SyncEngineTest::CheckServiceState, | |
280 AsWeakPtr(), | |
281 SYNC_STATUS_NETWORK_ERROR, | |
282 REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); | |
283 | |
284 GetSyncTaskManager()->ScheduleTask( | |
285 FROM_HERE, | |
286 base::Bind(&EmptyTask, SYNC_STATUS_ABORT), | |
287 SyncTaskManager::PRIORITY_MED, | |
288 base::Bind(&SyncEngineTest::CheckServiceState, | |
289 AsWeakPtr(), | |
290 SYNC_STATUS_ABORT, | |
291 REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); | |
292 | |
293 GetSyncTaskManager()->ScheduleTask( | |
294 FROM_HERE, | |
295 base::Bind(&EmptyTask, SYNC_STATUS_FAILED), | |
296 SyncTaskManager::PRIORITY_MED, | |
297 base::Bind(&SyncEngineTest::CheckServiceState, | |
298 AsWeakPtr(), | |
299 SYNC_STATUS_FAILED, | |
300 REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)); | |
301 | |
302 GetSyncTaskManager()->ScheduleTask( | |
303 FROM_HERE, | |
304 base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_CORRUPTION), | |
305 SyncTaskManager::PRIORITY_MED, | |
306 base::Bind(&SyncEngineTest::CheckServiceState, | |
307 AsWeakPtr(), | |
308 SYNC_DATABASE_ERROR_CORRUPTION, | |
309 REMOTE_SERVICE_DISABLED)); | |
310 | |
311 GetSyncTaskManager()->ScheduleTask( | |
312 FROM_HERE, | |
313 base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_IO_ERROR), | |
314 SyncTaskManager::PRIORITY_MED, | |
315 base::Bind(&SyncEngineTest::CheckServiceState, | |
316 AsWeakPtr(), | |
317 SYNC_DATABASE_ERROR_IO_ERROR, | |
318 REMOTE_SERVICE_DISABLED)); | |
319 | |
320 GetSyncTaskManager()->ScheduleTask( | |
321 FROM_HERE, | |
322 base::Bind(&EmptyTask, SYNC_DATABASE_ERROR_FAILED), | |
323 SyncTaskManager::PRIORITY_MED, | |
324 base::Bind(&SyncEngineTest::CheckServiceState, | |
325 AsWeakPtr(), | |
326 SYNC_DATABASE_ERROR_FAILED, | |
327 REMOTE_SERVICE_DISABLED)); | |
328 | |
329 GetSyncTaskManager()->ScheduleSyncTask( | |
330 FROM_HERE, | |
331 scoped_ptr<SyncTask>(new MockSyncTask(false)), | |
332 SyncTaskManager::PRIORITY_MED, | |
333 base::Bind(&SyncEngineTest::CheckServiceState, | |
334 AsWeakPtr(), | |
335 SYNC_STATUS_OK, | |
336 REMOTE_SERVICE_DISABLED)); | |
337 | |
338 GetSyncTaskManager()->ScheduleSyncTask( | |
339 FROM_HERE, | |
340 scoped_ptr<SyncTask>(new MockSyncTask(true)), | |
341 SyncTaskManager::PRIORITY_MED, | |
342 base::Bind(&SyncEngineTest::CheckServiceState, | |
343 AsWeakPtr(), | |
344 SYNC_STATUS_OK, | |
345 REMOTE_SERVICE_OK)); | |
346 | |
347 base::RunLoop().RunUntilIdle(); | |
348 } | 228 } |
349 | 229 |
350 } // namespace drive_backend | 230 } // namespace drive_backend |
351 } // namespace sync_file_system | 231 } // namespace sync_file_system |
OLD | NEW |