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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc

Issue 335473004: [SyncFS] Make SyncEngineTest multi-threaded test (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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
« no previous file with comments | « no previous file | 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 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/fake_sync_worker.h"
13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 12 #include "chrome/browser/sync_file_system/drive_backend/sync_worker_interface.h"
14 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 13 #include "chrome/browser/sync_file_system/remote_file_sync_service.h"
15 #include "chrome/browser/sync_file_system/drive_backend/sync_task.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" 14 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
15 #include "content/public/browser/browser_thread.h"
19 #include "content/public/test/test_browser_thread_bundle.h" 16 #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" 17 #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 18
28 namespace sync_file_system { 19 namespace sync_file_system {
29 namespace drive_backend { 20 namespace drive_backend {
30 21
31 namespace { 22 namespace {
32 23
33 const char kAppID[] = "app_id"; 24 template <typename T>
34 25 void SetValueAndCallClosure(const base::Closure& closure,
35 void EmptyTask(SyncStatusCode status, const SyncStatusCallback& callback) { 26 T* arg_out,
36 base::MessageLoop::current()->PostTask( 27 T arg) {
37 FROM_HERE, base::Bind(callback, status)); 28 *arg_out = base::internal::CallbackForward(arg);
29 closure.Run();
38 } 30 }
39 31
32 void SyncStatusFileURL(const base::Closure& closure,
33 SyncStatusCode,
34 const fileapi::FileSystemURL&) {
35 closure.Run();
36 }
37
40 } // namespace 38 } // namespace
41 39
42 class MockSyncTask : public ExclusiveTask { 40 class SyncEngineTest : public testing::Test,
41 public RemoteFileSyncService::Observer,
nhiroki 2014/06/18 06:58:10 Although you ignore the result in OnRemoteXXX(), d
nhiroki 2014/06/18 07:11:30 Ah, I just got what you mean. You check the status
peria 2014/06/18 08:05:01 Due to a discussion with Tsuiki-san, yes, we can r
42 public base::SupportsWeakPtr<SyncEngineTest> {
43 public: 43 public:
44 explicit MockSyncTask(bool used_network) { 44 typedef RemoteFileSyncService::OriginStatusMap RemoteOriginStatusMap;
45 set_used_network(used_network); 45
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() {} 46 SyncEngineTest() {}
105 virtual ~SyncEngineTest() {} 47 virtual ~SyncEngineTest() {}
106 48
107 virtual void SetUp() OVERRIDE { 49 virtual void SetUp() OVERRIDE {
108 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); 50 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir());
109 in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); 51
110
111 extension_service_.reset(new MockExtensionService);
112 scoped_ptr<drive::DriveServiceInterface> 52 scoped_ptr<drive::DriveServiceInterface>
113 fake_drive_service(new drive::FakeDriveService); 53 fake_drive_service(new drive::FakeDriveService);
114 54
55 scoped_refptr<base::SequencedWorkerPool> worker_pool =
56 content::BrowserThread::GetBlockingPool();
57 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner =
58 base::MessageLoopProxy::current();
59 scoped_refptr<base::SequencedTaskRunner> worker_task_runner =
60 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
61 worker_pool->GetSequenceToken(),
62 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
63 scoped_refptr<base::SequencedTaskRunner> file_task_runner =
64 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
65 worker_pool->GetSequenceToken(),
66 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
67 scoped_refptr<base::SequencedTaskRunner> drive_task_runner =
68 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
69 worker_pool->GetSequenceToken(),
70 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
tzik 2014/06/18 07:39:55 I think we can pass NULL to file_task_runner and d
peria 2014/06/18 08:05:01 Done.
71
72 run_loop_.reset();
73
115 sync_engine_.reset(new drive_backend::SyncEngine( 74 sync_engine_.reset(new drive_backend::SyncEngine(
116 base::MessageLoopProxy::current(), // ui_task_runner 75 ui_task_runner,
117 base::MessageLoopProxy::current(), // worker_task_runner 76 worker_task_runner,
118 base::MessageLoopProxy::current(), // file_task_runner 77 file_task_runner,
119 base::MessageLoopProxy::current(), // drive_task_runner 78 drive_task_runner,
120 profile_dir_.path(), 79 profile_dir_.path(),
121 NULL, // task_logger 80 NULL /* task_logger */,
122 NULL, // notification_manager 81 NULL /* notification_manager */,
123 extension_service_.get(), 82 NULL /* extension_service */,
124 NULL, // signin_manager 83 NULL /* signin_manager */,
125 NULL, // token_service 84 NULL /* token_service */,
126 NULL, // request_context 85 NULL /* request_context */,
127 in_memory_env_.get())); 86 NULL /* in_memory_env */));
87
88 sync_engine_->AddServiceObserver(this);
128 89
129 sync_engine_->InitializeForTesting( 90 sync_engine_->InitializeForTesting(
130 fake_drive_service.Pass(), 91 fake_drive_service.Pass(),
131 scoped_ptr<drive::DriveUploaderInterface>(), 92 scoped_ptr<drive::DriveUploaderInterface>(),
132 scoped_ptr<SyncWorkerInterface>()); 93 scoped_ptr<SyncWorkerInterface>(new FakeSyncWorker));
94 WaitAsyncCall();
95
133 sync_engine_->SetSyncEnabled(true); 96 sync_engine_->SetSyncEnabled(true);
97 WaitAsyncCall();
98
134 base::RunLoop().RunUntilIdle(); 99 base::RunLoop().RunUntilIdle();
135 } 100 }
136 101
137 virtual void TearDown() OVERRIDE { 102 virtual void TearDown() OVERRIDE {
138 sync_engine_.reset(); 103 sync_engine_.reset();
139 extension_service_.reset(); 104
105 run_loop_.reset();
140 base::RunLoop().RunUntilIdle(); 106 base::RunLoop().RunUntilIdle();
141 } 107 }
142 108
143 MockExtensionService* extension_service() { return extension_service_.get(); } 109 // RemoteFileSyncService::Observer overrides
110 virtual void OnRemoteChangeQueueUpdated(int64) OVERRIDE {
111 if (run_loop_)
112 run_loop_->Quit();
113 }
114
115 virtual void OnRemoteServiceStateUpdated(
116 RemoteServiceState state, const std::string& description) OVERRIDE {
117 if (run_loop_)
118 run_loop_->Quit();
119 }
120
121 bool FindOriginStatus(const GURL& origin, std::string* status) {
122 scoped_ptr<RemoteOriginStatusMap> status_map;
123
124 base::RunLoop run_loop;
125 sync_engine()->GetOriginStatusMap(
126 base::Bind(&SetValueAndCallClosure<scoped_ptr<RemoteOriginStatusMap> >,
127 run_loop.QuitClosure(),
128 &status_map));
129 run_loop.Run();
130 RemoteOriginStatusMap::const_iterator itr = status_map->find(origin);
131 if (itr == status_map->end())
132 return false;
133
134 *status = itr->second;
135 // If an origin is uninstalled, it should not be found actually.
136 if (*status == "Uninstalled")
137 return false;
138 return true;
139 }
140
141 void PostUpdateServiceState(RemoteServiceState state,
142 const std::string& description) {
143 worker_task_runner()->PostTask(
144 FROM_HERE,
145 base::Bind(&FakeSyncWorker::UpdateServiceState,
146 base::Unretained(fake_sync_worker()),
147 state,
148 description));
149 // Call tree from FakeSyncWorker will call OnRemoteServiceStateUpdated().
150 WaitAsyncCall();
151 }
152
153 void WaitAsyncCall() {
154 run_loop_.reset(new base::RunLoop);
155 run_loop_->Run();
156 run_loop_.reset();
157 }
158
159 // Accessors
144 SyncEngine* sync_engine() { return sync_engine_.get(); } 160 SyncEngine* sync_engine() { return sync_engine_.get(); }
145 161 FakeSyncWorker* fake_sync_worker() {
146 SyncTaskManager* GetSyncTaskManager() { 162 return static_cast<FakeSyncWorker*>(sync_engine_->sync_worker_.get());
147 return sync_engine_->sync_worker_->GetSyncTaskManager(); 163 }
148 } 164 base::SequencedTaskRunner* worker_task_runner() {
149 165 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 } 166 }
164 167
165 private: 168 private:
166 content::TestBrowserThreadBundle browser_threads_; 169 content::TestBrowserThreadBundle browser_threads_;
167 base::ScopedTempDir profile_dir_; 170 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_; 171 scoped_ptr<drive_backend::SyncEngine> sync_engine_;
172 scoped_ptr<base::RunLoop> run_loop_;
172 173
173 DISALLOW_COPY_AND_ASSIGN(SyncEngineTest); 174 DISALLOW_COPY_AND_ASSIGN(SyncEngineTest);
174 }; 175 };
175 176
176 TEST_F(SyncEngineTest, EnableOrigin) { 177 TEST_F(SyncEngineTest, OriginTest) {
177 FileTracker tracker; 178 GURL origin("chrome-extension://app_0");
179
180 SyncStatusCode sync_status;
181 std::string status;
182 {
183 base::RunLoop run_loop;
184 sync_engine()->RegisterOrigin(
185 origin,
186 base::Bind(&SetValueAndCallClosure<SyncStatusCode>,
187 run_loop.QuitClosure(),
188 &sync_status));
189 run_loop.Run();
190 EXPECT_EQ(SYNC_STATUS_OK, sync_status);
191 ASSERT_TRUE(FindOriginStatus(origin, &status));
192 EXPECT_EQ("Registered", status);
193 }
194 {
195 base::RunLoop run_loop;
196 sync_engine()->DisableOrigin(
197 origin,
198 base::Bind(&SetValueAndCallClosure<SyncStatusCode>,
199 run_loop.QuitClosure(),
200 &sync_status));
201 run_loop.Run();
202 EXPECT_EQ(SYNC_STATUS_OK, sync_status);
203 ASSERT_TRUE(FindOriginStatus(origin, &status));
204 EXPECT_EQ("Disabled", status);
205 }
206 {
207 base::RunLoop run_loop;
208 sync_engine()->EnableOrigin(
209 origin,
210 base::Bind(&SetValueAndCallClosure<SyncStatusCode>,
211 run_loop.QuitClosure(),
212 &sync_status));
213 run_loop.Run();
214 EXPECT_EQ(SYNC_STATUS_OK, sync_status);
215 ASSERT_TRUE(FindOriginStatus(origin, &status));
216 EXPECT_EQ("Enabled", status);
217 }
218 {
219 base::RunLoop run_loop;
220 sync_engine()->UninstallOrigin(
221 origin,
222 RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE,
223 base::Bind(&SetValueAndCallClosure<SyncStatusCode>,
224 run_loop.QuitClosure(),
225 &sync_status));
226 run_loop.Run();
227 EXPECT_EQ(SYNC_STATUS_OK, sync_status);
228 EXPECT_FALSE(FindOriginStatus(origin, &status));
229 EXPECT_EQ("Uninstalled", status);
230 }
231 }
232
233 TEST_F(SyncEngineTest, GetOriginStatusMap) {
178 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; 234 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN;
179 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); 235
180 236 {
181 sync_engine()->RegisterOrigin(origin, CreateResultReceiver(&sync_status)); 237 base::RunLoop run_loop;
182 base::RunLoop().RunUntilIdle(); 238 sync_engine()->RegisterOrigin(
239 GURL("chrome-extension://app_0"),
240 base::Bind(&SetValueAndCallClosure<SyncStatusCode>,
241 run_loop.QuitClosure(),
242 &sync_status));
243 run_loop.Run();
244 }
183 EXPECT_EQ(SYNC_STATUS_OK, sync_status); 245 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
213 sync_engine()->RegisterOrigin(GURL("chrome-extension://app_0"),
214 CreateResultReceiver(&sync_status));
215 base::RunLoop().RunUntilIdle();
216 EXPECT_EQ(SYNC_STATUS_OK, sync_status);
217 246
218 sync_engine()->RegisterOrigin(GURL("chrome-extension://app_1"), 247 sync_engine()->RegisterOrigin(GURL("chrome-extension://app_1"),
219 CreateResultReceiver(&sync_status)); 248 CreateResultReceiver(&sync_status));
220 base::RunLoop().RunUntilIdle(); 249 base::RunLoop().RunUntilIdle();
221 EXPECT_EQ(SYNC_STATUS_OK, sync_status); 250 EXPECT_EQ(SYNC_STATUS_OK, sync_status);
222 251
223 scoped_ptr<RemoteFileSyncService::OriginStatusMap> status_map; 252 scoped_ptr<RemoteOriginStatusMap> status_map;
224 sync_engine()->GetOriginStatusMap(CreateResultReceiver(&status_map)); 253 {
225 base::RunLoop().RunUntilIdle(); 254 base::RunLoop run_loop;
255 sync_engine()->GetOriginStatusMap(
256 base::Bind(&SetValueAndCallClosure<scoped_ptr<RemoteOriginStatusMap> >,
257 run_loop.QuitClosure(),
258 &status_map));
259 run_loop.Run();
260 }
226 ASSERT_EQ(2u, status_map->size()); 261 ASSERT_EQ(2u, status_map->size());
227 EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_0")]); 262 EXPECT_EQ("Registered", (*status_map)[GURL("chrome-extension://app_0")]);
228 EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_1")]); 263 EXPECT_EQ("Registered", (*status_map)[GURL("chrome-extension://app_1")]);
229 264
230 sync_engine()->DisableOrigin(GURL("chrome-extension://app_1"), 265 {
231 CreateResultReceiver(&sync_status)); 266 base::RunLoop run_loop;
232 base::RunLoop().RunUntilIdle(); 267 sync_engine()->DisableOrigin(
268 GURL("chrome-extension://app_1"),
269 base::Bind(&SetValueAndCallClosure<SyncStatusCode>,
270 run_loop.QuitClosure(),
271 &sync_status));
272 run_loop.Run();
273 }
233 EXPECT_EQ(SYNC_STATUS_OK, sync_status); 274 EXPECT_EQ(SYNC_STATUS_OK, sync_status);
234 275
235 sync_engine()->GetOriginStatusMap(CreateResultReceiver(&status_map)); 276 {
236 base::RunLoop().RunUntilIdle(); 277 base::RunLoop run_loop;
278 sync_engine()->GetOriginStatusMap(
279 base::Bind(&SetValueAndCallClosure<scoped_ptr<RemoteOriginStatusMap> >,
280 run_loop.QuitClosure(),
281 &status_map));
282 run_loop.Run();
283 }
237 ASSERT_EQ(2u, status_map->size()); 284 ASSERT_EQ(2u, status_map->size());
238 EXPECT_EQ("Enabled", (*status_map)[GURL("chrome-extension://app_0")]); 285 EXPECT_EQ("Registered", (*status_map)[GURL("chrome-extension://app_0")]);
239 EXPECT_EQ("Disabled", (*status_map)[GURL("chrome-extension://app_1")]); 286 EXPECT_EQ("Disabled", (*status_map)[GURL("chrome-extension://app_1")]);
240 } 287 }
241 288
242 TEST_F(SyncEngineTest, UpdateServiceState) { 289 TEST_F(SyncEngineTest, UpdateServiceState) {
243 EXPECT_EQ(REMOTE_SERVICE_OK, sync_engine()->GetCurrentState()); 290 struct {
291 RemoteServiceState state;
292 const char* description;
293 } test_data[] = {
294 {REMOTE_SERVICE_OK, "OK"},
295 {REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, "TEMPORARY_UNAVAILABLE"},
296 {REMOTE_SERVICE_AUTHENTICATION_REQUIRED, "AUTHENTICATION_REQUIRED"},
297 {REMOTE_SERVICE_DISABLED, "DISABLED"},
244 298
245 // Assume an user is in login state. 299 {REMOTE_SERVICE_STATE_MAX, "STATE_MAX"}, // Will not be tested
246 sync_engine()->OnReadyToSendRequests(); 300 };
247 301
248 GetSyncTaskManager()->ScheduleTask( 302 for (int i = 0; test_data[i].state != REMOTE_SERVICE_STATE_MAX; ++i) {
249 FROM_HERE, 303 PostUpdateServiceState(test_data[i].state, test_data[i].description);
250 base::Bind(&EmptyTask, SYNC_STATUS_AUTHENTICATION_FAILED), 304 EXPECT_EQ(test_data[i].state, sync_engine()->GetCurrentState())
251 SyncTaskManager::PRIORITY_MED, 305 << "Expected state: REMOTE_SERVICE_" << test_data[i].description;
252 base::Bind(&SyncEngineTest::CheckServiceState, 306 }
253 AsWeakPtr(), 307 }
254 SYNC_STATUS_AUTHENTICATION_FAILED,
255 REMOTE_SERVICE_AUTHENTICATION_REQUIRED));
256 308
257 GetSyncTaskManager()->ScheduleTask( 309 TEST_F(SyncEngineTest, ProcessRemoteChange) {
258 FROM_HERE, 310 base::RunLoop run_loop;
259 base::Bind(&EmptyTask, SYNC_STATUS_ACCESS_FORBIDDEN), 311 sync_engine()->ProcessRemoteChange(
260 SyncTaskManager::PRIORITY_MED, 312 base::Bind(&SyncStatusFileURL, run_loop.QuitClosure()));
261 base::Bind(&SyncEngineTest::CheckServiceState, 313 run_loop.Run();
262 AsWeakPtr(),
263 SYNC_STATUS_ACCESS_FORBIDDEN,
264 REMOTE_SERVICE_AUTHENTICATION_REQUIRED));
265
266 GetSyncTaskManager()->ScheduleTask(
267 FROM_HERE,
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 } 314 }
349 315
350 } // namespace drive_backend 316 } // namespace drive_backend
351 } // namespace sync_file_system 317 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698