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

Side by Side Diff: webkit/browser/fileapi/file_system_operation_impl_write_unittest.cc

Issue 21370003: Rename fileapi::LocalFileSystemOperation to FileSystemOperationImpl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 4 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 <vector> 5 #include <vector>
6 6
7 #include "base/files/scoped_temp_dir.h" 7 #include "base/files/scoped_temp_dir.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 29 matching lines...) Expand all
40 const GURL kOrigin("http://example.com"); 40 const GURL kOrigin("http://example.com");
41 const FileSystemType kFileSystemType = kFileSystemTypeTest; 41 const FileSystemType kFileSystemType = kFileSystemTypeTest;
42 42
43 void AssertStatusEq(base::PlatformFileError expected, 43 void AssertStatusEq(base::PlatformFileError expected,
44 base::PlatformFileError actual) { 44 base::PlatformFileError actual) {
45 ASSERT_EQ(expected, actual); 45 ASSERT_EQ(expected, actual);
46 } 46 }
47 47
48 } // namespace 48 } // namespace
49 49
50 class LocalFileSystemOperationWriteTest 50 class FileSystemOperationImplWriteTest
51 : public testing::Test, 51 : public testing::Test,
52 public base::SupportsWeakPtr<LocalFileSystemOperationWriteTest> { 52 public base::SupportsWeakPtr<FileSystemOperationImplWriteTest> {
53 public: 53 public:
54 LocalFileSystemOperationWriteTest() 54 FileSystemOperationImplWriteTest()
55 : loop_(base::MessageLoop::TYPE_IO), 55 : loop_(base::MessageLoop::TYPE_IO),
56 status_(base::PLATFORM_FILE_OK), 56 status_(base::PLATFORM_FILE_OK),
57 cancel_status_(base::PLATFORM_FILE_ERROR_FAILED), 57 cancel_status_(base::PLATFORM_FILE_ERROR_FAILED),
58 bytes_written_(0), 58 bytes_written_(0),
59 complete_(false) { 59 complete_(false) {
60 change_observers_ = MockFileChangeObserver::CreateList(&change_observer_); 60 change_observers_ = MockFileChangeObserver::CreateList(&change_observer_);
61 } 61 }
62 62
63 virtual void SetUp() { 63 virtual void SetUp() {
64 ASSERT_TRUE(dir_.CreateUniqueTempDir()); 64 ASSERT_TRUE(dir_.CreateUniqueTempDir());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 return &change_observer_; 110 return &change_observer_;
111 } 111 }
112 112
113 FileSystemURL URLForPath(const base::FilePath& path) const { 113 FileSystemURL URLForPath(const base::FilePath& path) const {
114 return file_system_context_->CreateCrackedFileSystemURL( 114 return file_system_context_->CreateCrackedFileSystemURL(
115 kOrigin, kFileSystemType, path); 115 kOrigin, kFileSystemType, path);
116 } 116 }
117 117
118 // Callback function for recording test results. 118 // Callback function for recording test results.
119 FileSystemOperation::WriteCallback RecordWriteCallback() { 119 FileSystemOperation::WriteCallback RecordWriteCallback() {
120 return base::Bind(&LocalFileSystemOperationWriteTest::DidWrite, 120 return base::Bind(&FileSystemOperationImplWriteTest::DidWrite,
121 AsWeakPtr()); 121 AsWeakPtr());
122 } 122 }
123 123
124 FileSystemOperation::StatusCallback RecordCancelCallback() { 124 FileSystemOperation::StatusCallback RecordCancelCallback() {
125 return base::Bind(&LocalFileSystemOperationWriteTest::DidCancel, 125 return base::Bind(&FileSystemOperationImplWriteTest::DidCancel,
126 AsWeakPtr()); 126 AsWeakPtr());
127 } 127 }
128 128
129 void DidWrite(base::PlatformFileError status, int64 bytes, bool complete) { 129 void DidWrite(base::PlatformFileError status, int64 bytes, bool complete) {
130 if (status == base::PLATFORM_FILE_OK) { 130 if (status == base::PLATFORM_FILE_OK) {
131 add_bytes_written(bytes, complete); 131 add_bytes_written(bytes, complete);
132 if (complete) 132 if (complete)
133 base::MessageLoop::current()->Quit(); 133 base::MessageLoop::current()->Quit();
134 } else { 134 } else {
135 EXPECT_FALSE(complete_); 135 EXPECT_FALSE(complete_);
(...skipping 25 matching lines...) Expand all
161 base::PlatformFileError status_; 161 base::PlatformFileError status_;
162 base::PlatformFileError cancel_status_; 162 base::PlatformFileError cancel_status_;
163 int64 bytes_written_; 163 int64 bytes_written_;
164 bool complete_; 164 bool complete_;
165 165
166 scoped_ptr<MockBlobURLRequestContext> url_request_context_; 166 scoped_ptr<MockBlobURLRequestContext> url_request_context_;
167 167
168 MockFileChangeObserver change_observer_; 168 MockFileChangeObserver change_observer_;
169 ChangeObserverList change_observers_; 169 ChangeObserverList change_observers_;
170 170
171 DISALLOW_COPY_AND_ASSIGN(LocalFileSystemOperationWriteTest); 171 DISALLOW_COPY_AND_ASSIGN(FileSystemOperationImplWriteTest);
172 }; 172 };
173 173
174 TEST_F(LocalFileSystemOperationWriteTest, TestWriteSuccess) { 174 TEST_F(FileSystemOperationImplWriteTest, TestWriteSuccess) {
175 const GURL blob_url("blob:success"); 175 const GURL blob_url("blob:success");
176 ScopedTextBlob blob(url_request_context(), blob_url, "Hello, world!\n"); 176 ScopedTextBlob blob(url_request_context(), blob_url, "Hello, world!\n");
177 177
178 file_system_context_->operation_runner()->Write( 178 file_system_context_->operation_runner()->Write(
179 &url_request_context(), URLForPath(virtual_path_), blob_url, 179 &url_request_context(), URLForPath(virtual_path_), blob_url,
180 0, RecordWriteCallback()); 180 0, RecordWriteCallback());
181 base::MessageLoop::current()->Run(); 181 base::MessageLoop::current()->Run();
182 182
183 EXPECT_EQ(14, bytes_written()); 183 EXPECT_EQ(14, bytes_written());
184 EXPECT_EQ(base::PLATFORM_FILE_OK, status()); 184 EXPECT_EQ(base::PLATFORM_FILE_OK, status());
185 EXPECT_TRUE(complete()); 185 EXPECT_TRUE(complete());
186 186
187 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count()); 187 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
188 } 188 }
189 189
190 TEST_F(LocalFileSystemOperationWriteTest, TestWriteZero) { 190 TEST_F(FileSystemOperationImplWriteTest, TestWriteZero) {
191 GURL blob_url("blob:zero"); 191 GURL blob_url("blob:zero");
192 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 192 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
193 193
194 url_request_context().blob_storage_controller() 194 url_request_context().blob_storage_controller()
195 ->AddFinishedBlob(blob_url, blob_data.get()); 195 ->AddFinishedBlob(blob_url, blob_data.get());
196 196
197 file_system_context_->operation_runner()->Write( 197 file_system_context_->operation_runner()->Write(
198 &url_request_context(), URLForPath(virtual_path_), 198 &url_request_context(), URLForPath(virtual_path_),
199 blob_url, 0, RecordWriteCallback()); 199 blob_url, 0, RecordWriteCallback());
200 base::MessageLoop::current()->Run(); 200 base::MessageLoop::current()->Run();
201 201
202 url_request_context().blob_storage_controller()->RemoveBlob(blob_url); 202 url_request_context().blob_storage_controller()->RemoveBlob(blob_url);
203 203
204 EXPECT_EQ(0, bytes_written()); 204 EXPECT_EQ(0, bytes_written());
205 EXPECT_EQ(base::PLATFORM_FILE_OK, status()); 205 EXPECT_EQ(base::PLATFORM_FILE_OK, status());
206 EXPECT_TRUE(complete()); 206 EXPECT_TRUE(complete());
207 207
208 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count()); 208 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
209 } 209 }
210 210
211 TEST_F(LocalFileSystemOperationWriteTest, TestWriteInvalidBlobUrl) { 211 TEST_F(FileSystemOperationImplWriteTest, TestWriteInvalidBlobUrl) {
212 file_system_context_->operation_runner()->Write( 212 file_system_context_->operation_runner()->Write(
213 &url_request_context(), URLForPath(virtual_path_), 213 &url_request_context(), URLForPath(virtual_path_),
214 GURL("blob:invalid"), 0, RecordWriteCallback()); 214 GURL("blob:invalid"), 0, RecordWriteCallback());
215 base::MessageLoop::current()->Run(); 215 base::MessageLoop::current()->Run();
216 216
217 EXPECT_EQ(0, bytes_written()); 217 EXPECT_EQ(0, bytes_written());
218 EXPECT_EQ(base::PLATFORM_FILE_ERROR_FAILED, status()); 218 EXPECT_EQ(base::PLATFORM_FILE_ERROR_FAILED, status());
219 EXPECT_TRUE(complete()); 219 EXPECT_TRUE(complete());
220 220
221 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count()); 221 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count());
222 } 222 }
223 223
224 TEST_F(LocalFileSystemOperationWriteTest, TestWriteInvalidFile) { 224 TEST_F(FileSystemOperationImplWriteTest, TestWriteInvalidFile) {
225 GURL blob_url("blob:writeinvalidfile"); 225 GURL blob_url("blob:writeinvalidfile");
226 ScopedTextBlob blob(url_request_context(), blob_url, 226 ScopedTextBlob blob(url_request_context(), blob_url,
227 "It\'ll not be written."); 227 "It\'ll not be written.");
228 228
229 file_system_context_->operation_runner()->Write( 229 file_system_context_->operation_runner()->Write(
230 &url_request_context(), 230 &url_request_context(),
231 URLForPath(base::FilePath(FILE_PATH_LITERAL("nonexist"))), 231 URLForPath(base::FilePath(FILE_PATH_LITERAL("nonexist"))),
232 blob_url, 0, RecordWriteCallback()); 232 blob_url, 0, RecordWriteCallback());
233 base::MessageLoop::current()->Run(); 233 base::MessageLoop::current()->Run();
234 234
235 EXPECT_EQ(0, bytes_written()); 235 EXPECT_EQ(0, bytes_written());
236 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, status()); 236 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, status());
237 EXPECT_TRUE(complete()); 237 EXPECT_TRUE(complete());
238 238
239 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count()); 239 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
240 } 240 }
241 241
242 TEST_F(LocalFileSystemOperationWriteTest, TestWriteDir) { 242 TEST_F(FileSystemOperationImplWriteTest, TestWriteDir) {
243 base::FilePath virtual_dir_path(FILE_PATH_LITERAL("d")); 243 base::FilePath virtual_dir_path(FILE_PATH_LITERAL("d"));
244 file_system_context_->operation_runner()->CreateDirectory( 244 file_system_context_->operation_runner()->CreateDirectory(
245 URLForPath(virtual_dir_path), 245 URLForPath(virtual_dir_path),
246 true /* exclusive */, false /* recursive */, 246 true /* exclusive */, false /* recursive */,
247 base::Bind(&AssertStatusEq, base::PLATFORM_FILE_OK)); 247 base::Bind(&AssertStatusEq, base::PLATFORM_FILE_OK));
248 248
249 GURL blob_url("blob:writedir"); 249 GURL blob_url("blob:writedir");
250 ScopedTextBlob blob(url_request_context(), blob_url, 250 ScopedTextBlob blob(url_request_context(), blob_url,
251 "It\'ll not be written, too."); 251 "It\'ll not be written, too.");
252 252
253 file_system_context_->operation_runner()->Write( 253 file_system_context_->operation_runner()->Write(
254 &url_request_context(), URLForPath(virtual_dir_path), 254 &url_request_context(), URLForPath(virtual_dir_path),
255 blob_url, 0, RecordWriteCallback()); 255 blob_url, 0, RecordWriteCallback());
256 base::MessageLoop::current()->Run(); 256 base::MessageLoop::current()->Run();
257 257
258 EXPECT_EQ(0, bytes_written()); 258 EXPECT_EQ(0, bytes_written());
259 // TODO(kinuko): This error code is platform- or fileutil- dependent 259 // TODO(kinuko): This error code is platform- or fileutil- dependent
260 // right now. Make it return PLATFORM_FILE_ERROR_NOT_A_FILE in every case. 260 // right now. Make it return PLATFORM_FILE_ERROR_NOT_A_FILE in every case.
261 EXPECT_TRUE(status() == base::PLATFORM_FILE_ERROR_NOT_A_FILE || 261 EXPECT_TRUE(status() == base::PLATFORM_FILE_ERROR_NOT_A_FILE ||
262 status() == base::PLATFORM_FILE_ERROR_ACCESS_DENIED || 262 status() == base::PLATFORM_FILE_ERROR_ACCESS_DENIED ||
263 status() == base::PLATFORM_FILE_ERROR_FAILED); 263 status() == base::PLATFORM_FILE_ERROR_FAILED);
264 EXPECT_TRUE(complete()); 264 EXPECT_TRUE(complete());
265 265
266 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count()); 266 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
267 } 267 }
268 268
269 TEST_F(LocalFileSystemOperationWriteTest, TestWriteFailureByQuota) { 269 TEST_F(FileSystemOperationImplWriteTest, TestWriteFailureByQuota) {
270 GURL blob_url("blob:success"); 270 GURL blob_url("blob:success");
271 ScopedTextBlob blob(url_request_context(), blob_url, "Hello, world!\n"); 271 ScopedTextBlob blob(url_request_context(), blob_url, "Hello, world!\n");
272 272
273 quota_manager_->SetQuota( 273 quota_manager_->SetQuota(
274 kOrigin, FileSystemTypeToQuotaStorageType(kFileSystemType), 10); 274 kOrigin, FileSystemTypeToQuotaStorageType(kFileSystemType), 10);
275 file_system_context_->operation_runner()->Write( 275 file_system_context_->operation_runner()->Write(
276 &url_request_context(), URLForPath(virtual_path_), blob_url, 276 &url_request_context(), URLForPath(virtual_path_), blob_url,
277 0, RecordWriteCallback()); 277 0, RecordWriteCallback());
278 base::MessageLoop::current()->Run(); 278 base::MessageLoop::current()->Run();
279 279
280 EXPECT_EQ(10, bytes_written()); 280 EXPECT_EQ(10, bytes_written());
281 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status()); 281 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status());
282 EXPECT_TRUE(complete()); 282 EXPECT_TRUE(complete());
283 283
284 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count()); 284 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
285 } 285 }
286 286
287 TEST_F(LocalFileSystemOperationWriteTest, TestImmediateCancelSuccessfulWrite) { 287 TEST_F(FileSystemOperationImplWriteTest, TestImmediateCancelSuccessfulWrite) {
288 GURL blob_url("blob:success"); 288 GURL blob_url("blob:success");
289 ScopedTextBlob blob(url_request_context(), blob_url, "Hello, world!\n"); 289 ScopedTextBlob blob(url_request_context(), blob_url, "Hello, world!\n");
290 290
291 FileSystemOperationRunner::OperationID id = 291 FileSystemOperationRunner::OperationID id =
292 file_system_context_->operation_runner()->Write( 292 file_system_context_->operation_runner()->Write(
293 &url_request_context(), URLForPath(virtual_path_), 293 &url_request_context(), URLForPath(virtual_path_),
294 blob_url, 0, RecordWriteCallback()); 294 blob_url, 0, RecordWriteCallback());
295 file_system_context_->operation_runner()->Cancel(id, RecordCancelCallback()); 295 file_system_context_->operation_runner()->Cancel(id, RecordCancelCallback());
296 // We use RunAllPendings() instead of Run() here, because we won't dispatch 296 // We use RunAllPendings() instead of Run() here, because we won't dispatch
297 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need 297 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need
298 // to run another write cycle. 298 // to run another write cycle.
299 base::MessageLoop::current()->RunUntilIdle(); 299 base::MessageLoop::current()->RunUntilIdle();
300 300
301 // Issued Cancel() before receiving any response from Write(), 301 // Issued Cancel() before receiving any response from Write(),
302 // so nothing should have happen. 302 // so nothing should have happen.
303 EXPECT_EQ(0, bytes_written()); 303 EXPECT_EQ(0, bytes_written());
304 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status()); 304 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status());
305 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status()); 305 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status());
306 EXPECT_TRUE(complete()); 306 EXPECT_TRUE(complete());
307 307
308 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count()); 308 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count());
309 } 309 }
310 310
311 TEST_F(LocalFileSystemOperationWriteTest, TestImmediateCancelFailingWrite) { 311 TEST_F(FileSystemOperationImplWriteTest, TestImmediateCancelFailingWrite) {
312 GURL blob_url("blob:writeinvalidfile"); 312 GURL blob_url("blob:writeinvalidfile");
313 ScopedTextBlob blob(url_request_context(), blob_url, 313 ScopedTextBlob blob(url_request_context(), blob_url,
314 "It\'ll not be written."); 314 "It\'ll not be written.");
315 315
316 FileSystemOperationRunner::OperationID id = 316 FileSystemOperationRunner::OperationID id =
317 file_system_context_->operation_runner()->Write( 317 file_system_context_->operation_runner()->Write(
318 &url_request_context(), 318 &url_request_context(),
319 URLForPath(base::FilePath(FILE_PATH_LITERAL("nonexist"))), 319 URLForPath(base::FilePath(FILE_PATH_LITERAL("nonexist"))),
320 blob_url, 0, RecordWriteCallback()); 320 blob_url, 0, RecordWriteCallback());
321 file_system_context_->operation_runner()->Cancel(id, RecordCancelCallback()); 321 file_system_context_->operation_runner()->Cancel(id, RecordCancelCallback());
322 // We use RunAllPendings() instead of Run() here, because we won't dispatch 322 // We use RunAllPendings() instead of Run() here, because we won't dispatch
323 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need 323 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need
324 // to run another write cycle. 324 // to run another write cycle.
325 base::MessageLoop::current()->RunUntilIdle(); 325 base::MessageLoop::current()->RunUntilIdle();
326 326
327 // Issued Cancel() before receiving any response from Write(), 327 // Issued Cancel() before receiving any response from Write(),
328 // so nothing should have happen. 328 // so nothing should have happen.
329 EXPECT_EQ(0, bytes_written()); 329 EXPECT_EQ(0, bytes_written());
330 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status()); 330 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status());
331 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status()); 331 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status());
332 EXPECT_TRUE(complete()); 332 EXPECT_TRUE(complete());
333 333
334 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count()); 334 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count());
335 } 335 }
336 336
337 // TODO(ericu,dmikurube,kinuko): Add more tests for cancel cases. 337 // TODO(ericu,dmikurube,kinuko): Add more tests for cancel cases.
338 338
339 } // namespace fileapi 339 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/browser/fileapi/file_system_operation_impl_unittest.cc ('k') | webkit/browser/fileapi/file_system_operation_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698