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

Side by Side Diff: webkit/fileapi/syncable/syncable_file_operation_runner_unittest.cc

Issue 11238054: Add OnSyncEnabled/OnWriteEnabled notification handling to operation runner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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
OLDNEW
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/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/location.h" 6 #include "base/location.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "webkit/blob/mock_blob_url_request_context.h" 10 #include "webkit/blob/mock_blob_url_request_context.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 67
68 file_system_.TearDown(); 68 file_system_.TearDown();
69 message_loop_.RunAllPending(); 69 message_loop_.RunAllPending();
70 RevokeSyncableFileSystem(kServiceName); 70 RevokeSyncableFileSystem(kServiceName);
71 } 71 }
72 72
73 FileSystemURL URL(const std::string& path) { 73 FileSystemURL URL(const std::string& path) {
74 return file_system_.URL(path); 74 return file_system_.URL(path);
75 } 75 }
76 76
77 LocalFileSyncContext* sync_context() {
78 return file_system_.file_system_context()->sync_context();
79 }
80
81 SyncableFileOperationRunner* operation_runner() {
82 return sync_context()->operation_runner().get();
83 }
84
85 LocalFileSyncStatus* sync_status() { 77 LocalFileSyncStatus* sync_status() {
86 return operation_runner()->sync_status(); 78 return file_system_.file_system_context()->sync_context()->sync_status();
87 } 79 }
88 80
89 void ResetCallbackStatus() { 81 void ResetCallbackStatus() {
90 write_status_ = base::PLATFORM_FILE_ERROR_FAILED; 82 write_status_ = base::PLATFORM_FILE_ERROR_FAILED;
91 write_bytes_ = 0; 83 write_bytes_ = 0;
92 write_complete_ = false; 84 write_complete_ = false;
93 callback_count_ = 0; 85 callback_count_ = 0;
94 } 86 }
95 87
96 StatusCallback ExpectStatus(const tracked_objects::Location& location, 88 StatusCallback ExpectStatus(const tracked_objects::Location& location,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 file_system_.NewOperation()->FileExists( 148 file_system_.NewOperation()->FileExists(
157 URL(kFile), ExpectStatus(FROM_HERE, base::PLATFORM_FILE_ERROR_NOT_FOUND)); 149 URL(kFile), ExpectStatus(FROM_HERE, base::PLATFORM_FILE_ERROR_NOT_FOUND));
158 MessageLoop::current()->RunAllPending(); 150 MessageLoop::current()->RunAllPending();
159 EXPECT_EQ(1, callback_count_); 151 EXPECT_EQ(1, callback_count_);
160 152
161 // End syncing (to enable write). 153 // End syncing (to enable write).
162 sync_status()->EndSyncing(URL(kFile)); 154 sync_status()->EndSyncing(URL(kFile));
163 ASSERT_TRUE(sync_status()->IsWritable(URL(kFile))); 155 ASSERT_TRUE(sync_status()->IsWritable(URL(kFile)));
164 156
165 ResetCallbackStatus(); 157 ResetCallbackStatus();
166 operation_runner()->RunNextRunnableTask();
167 MessageLoop::current()->RunAllPending(); 158 MessageLoop::current()->RunAllPending();
168 EXPECT_EQ(2, callback_count_); 159 EXPECT_EQ(2, callback_count_);
169 160
170 // Now the file must have been created and updated. 161 // Now the file must have been created and updated.
171 ResetCallbackStatus(); 162 ResetCallbackStatus();
172 file_system_.NewOperation()->FileExists( 163 file_system_.NewOperation()->FileExists(
173 URL(kFile), ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK)); 164 URL(kFile), ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK));
174 MessageLoop::current()->RunAllPending(); 165 MessageLoop::current()->RunAllPending();
175 EXPECT_EQ(1, callback_count_); 166 EXPECT_EQ(1, callback_count_);
176 } 167 }
177 168
178 TEST_F(SyncableFileOperationRunnerTest, WriteToParentAndChild) { 169 TEST_F(SyncableFileOperationRunnerTest, WriteToParentAndChild) {
179 // First create the kDir directory and kChild in the dir. 170 // First create the kDir directory and kChild in the dir.
180 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateDirectory(URL(kDir))); 171 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateDirectory(URL(kDir)));
181 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateFile(URL(kChild))); 172 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateFile(URL(kChild)));
182 173
183 // Start syncing the kDir directory. 174 // Start syncing the kDir directory.
184 sync_status()->StartSyncing(URL(kDir)); 175 sync_status()->StartSyncing(URL(kDir));
185 ASSERT_FALSE(sync_status()->IsWritable(URL(kDir))); 176 ASSERT_FALSE(sync_status()->IsWritable(URL(kDir)));
186 177
187 // Writes to kParent, kDir and kChild should be all queued up. 178 // Writes to kParent and kChild should be all queued up.
188 ResetCallbackStatus(); 179 ResetCallbackStatus();
189 file_system_.NewOperation()->Truncate( 180 file_system_.NewOperation()->Truncate(
190 URL(kChild), 1, ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK)); 181 URL(kChild), 1, ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK));
191 file_system_.NewOperation()->Remove( 182 file_system_.NewOperation()->Remove(
192 URL(kDir), true /* recursive */,
193 ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK));
194 file_system_.NewOperation()->Remove(
195 URL(kParent), true /* recursive */, 183 URL(kParent), true /* recursive */,
196 ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK)); 184 ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK));
197 MessageLoop::current()->RunAllPending(); 185 MessageLoop::current()->RunAllPending();
198 EXPECT_EQ(0, callback_count_); 186 EXPECT_EQ(0, callback_count_);
199 187
200 // Read operations are not blocked (and are executed before queued ones). 188 // Read operations are not blocked (and are executed before queued ones).
201 file_system_.NewOperation()->DirectoryExists( 189 file_system_.NewOperation()->DirectoryExists(
202 URL(kDir), ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK)); 190 URL(kDir), ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK));
203 MessageLoop::current()->RunAllPending(); 191 MessageLoop::current()->RunAllPending();
204 EXPECT_EQ(1, callback_count_); 192 EXPECT_EQ(1, callback_count_);
205 193
206 // Writes to unrelated files must succeed as well. 194 // Writes to unrelated files must succeed as well.
207 ResetCallbackStatus(); 195 ResetCallbackStatus();
208 file_system_.NewOperation()->CreateDirectory( 196 file_system_.NewOperation()->CreateDirectory(
209 URL(kOther), false /* exclusive */, false /* recursive */, 197 URL(kOther), false /* exclusive */, false /* recursive */,
210 ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK)); 198 ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK));
211 MessageLoop::current()->RunAllPending(); 199 MessageLoop::current()->RunAllPending();
212 EXPECT_EQ(1, callback_count_); 200 EXPECT_EQ(1, callback_count_);
213 201
214 // End syncing (to enable write). 202 // End syncing (to enable write).
215 sync_status()->EndSyncing(URL(kDir)); 203 sync_status()->EndSyncing(URL(kDir));
216 ASSERT_TRUE(sync_status()->IsWritable(URL(kDir))); 204 ASSERT_TRUE(sync_status()->IsWritable(URL(kDir)));
217 205
218 ResetCallbackStatus(); 206 ResetCallbackStatus();
219 operation_runner()->RunNextRunnableTask();
220 MessageLoop::current()->RunAllPending(); 207 MessageLoop::current()->RunAllPending();
221 EXPECT_EQ(3, callback_count_); 208 EXPECT_EQ(2, callback_count_);
222 } 209 }
223 210
224 TEST_F(SyncableFileOperationRunnerTest, CopyAndMove) { 211 TEST_F(SyncableFileOperationRunnerTest, CopyAndMove) {
225 // First create the kDir directory and kChild in the dir. 212 // First create the kDir directory and kChild in the dir.
226 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateDirectory(URL(kDir))); 213 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateDirectory(URL(kDir)));
227 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateFile(URL(kChild))); 214 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateFile(URL(kChild)));
228 215
229 // Start syncing the kParent directory. 216 // Start syncing the kParent directory.
230 sync_status()->StartSyncing(URL(kParent)); 217 sync_status()->StartSyncing(URL(kParent));
231 218
(...skipping 22 matching lines...) Expand all
254 ResetCallbackStatus(); 241 ResetCallbackStatus();
255 file_system_.NewOperation()->Copy( 242 file_system_.NewOperation()->Copy(
256 URL(kDir), URL("dest-copy2"), 243 URL(kDir), URL("dest-copy2"),
257 ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK)); 244 ExpectStatus(FROM_HERE, base::PLATFORM_FILE_OK));
258 MessageLoop::current()->RunAllPending(); 245 MessageLoop::current()->RunAllPending();
259 EXPECT_EQ(0, callback_count_); 246 EXPECT_EQ(0, callback_count_);
260 247
261 // Finish syncing the "dest-copy2" directory to unlock Copy. 248 // Finish syncing the "dest-copy2" directory to unlock Copy.
262 sync_status()->EndSyncing(URL("dest-copy2")); 249 sync_status()->EndSyncing(URL("dest-copy2"));
263 ResetCallbackStatus(); 250 ResetCallbackStatus();
264 operation_runner()->RunNextRunnableTask();
265 MessageLoop::current()->RunAllPending(); 251 MessageLoop::current()->RunAllPending();
266 EXPECT_EQ(1, callback_count_); 252 EXPECT_EQ(1, callback_count_);
267 253
268 // Now we should have "dest-copy2". 254 // Now we should have "dest-copy2".
269 EXPECT_EQ(base::PLATFORM_FILE_OK, 255 EXPECT_EQ(base::PLATFORM_FILE_OK,
270 file_system_.DirectoryExists(URL("dest-copy2"))); 256 file_system_.DirectoryExists(URL("dest-copy2")));
271 257
272 // Finish syncing the kParent to unlock Move. 258 // Finish syncing the kParent to unlock Move.
273 sync_status()->EndSyncing(URL(kParent)); 259 sync_status()->EndSyncing(URL(kParent));
274 ResetCallbackStatus(); 260 ResetCallbackStatus();
275 operation_runner()->RunNextRunnableTask();
276 MessageLoop::current()->RunAllPending(); 261 MessageLoop::current()->RunAllPending();
277 EXPECT_EQ(1, callback_count_); 262 EXPECT_EQ(1, callback_count_);
278 263
279 // Now we should have "dest-move". 264 // Now we should have "dest-move".
280 EXPECT_EQ(base::PLATFORM_FILE_OK, 265 EXPECT_EQ(base::PLATFORM_FILE_OK,
281 file_system_.DirectoryExists(URL("dest-move"))); 266 file_system_.DirectoryExists(URL("dest-move")));
282 } 267 }
283 268
284 TEST_F(SyncableFileOperationRunnerTest, Write) { 269 TEST_F(SyncableFileOperationRunnerTest, Write) {
285 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateFile(URL(kFile))); 270 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.CreateFile(URL(kFile)));
286 const GURL kBlobURL("blob:foo"); 271 const GURL kBlobURL("blob:foo");
287 const std::string kData("Lorem ipsum."); 272 const std::string kData("Lorem ipsum.");
288 ScopedTextBlob blob(url_request_context_, kBlobURL, kData); 273 ScopedTextBlob blob(url_request_context_, kBlobURL, kData);
289 274
290 sync_status()->StartSyncing(URL(kFile)); 275 sync_status()->StartSyncing(URL(kFile));
291 276
292 ResetCallbackStatus(); 277 ResetCallbackStatus();
293 file_system_.NewOperation()->Write( 278 file_system_.NewOperation()->Write(
294 &url_request_context_, 279 &url_request_context_,
295 URL(kFile), kBlobURL, 0, GetWriteCallback(FROM_HERE)); 280 URL(kFile), kBlobURL, 0, GetWriteCallback(FROM_HERE));
296 MessageLoop::current()->RunAllPending(); 281 MessageLoop::current()->RunAllPending();
297 EXPECT_EQ(0, callback_count_); 282 EXPECT_EQ(0, callback_count_);
298 283
299 sync_status()->EndSyncing(URL(kFile)); 284 sync_status()->EndSyncing(URL(kFile));
300 ResetCallbackStatus(); 285 ResetCallbackStatus();
301 operation_runner()->RunNextRunnableTask();
302 286
303 while (!write_complete_) 287 while (!write_complete_)
304 MessageLoop::current()->RunAllPending(); 288 MessageLoop::current()->RunAllPending();
305 289
306 EXPECT_EQ(base::PLATFORM_FILE_OK, write_status_); 290 EXPECT_EQ(base::PLATFORM_FILE_OK, write_status_);
307 EXPECT_EQ(kData.size(), write_bytes_); 291 EXPECT_EQ(kData.size(), write_bytes_);
308 EXPECT_TRUE(write_complete_); 292 EXPECT_TRUE(write_complete_);
309 } 293 }
310 294
311 TEST_F(SyncableFileOperationRunnerTest, QueueAndCancel) { 295 TEST_F(SyncableFileOperationRunnerTest, QueueAndCancel) {
(...skipping 13 matching lines...) Expand all
325 ResetCallbackStatus(); 309 ResetCallbackStatus();
326 310
327 // This shouldn't crash nor leak memory. 311 // This shouldn't crash nor leak memory.
328 sync_context_->ShutdownOnUIThread(); 312 sync_context_->ShutdownOnUIThread();
329 sync_context_ = NULL; 313 sync_context_ = NULL;
330 MessageLoop::current()->RunAllPending(); 314 MessageLoop::current()->RunAllPending();
331 EXPECT_EQ(2, callback_count_); 315 EXPECT_EQ(2, callback_count_);
332 } 316 }
333 317
334 } // namespace fileapi 318 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698