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

Side by Side Diff: webkit/fileapi/file_system_operation_write_unittest.cc

Issue 9372044: Refactor FileSystemOperation to take callback for each method. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reflected kinuko's comments + Fixture for failing-Write -> Cancel pattern. Created 8 years, 10 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 // NOTE: These tests are run as part of "unit_tests" (in chrome/test/unit) 5 // NOTE: These tests are run as part of "unit_tests" (in chrome/test/unit)
6 // rather than as part of test_shell_tests because they rely on being able 6 // rather than as part of test_shell_tests because they rely on being able
7 // to instantiate a MessageLoop of type TYPE_IO. test_shell_tests uses 7 // to instantiate a MessageLoop of type TYPE_IO. test_shell_tests uses
8 // TYPE_UI, which URLRequest doesn't allow. 8 // TYPE_UI, which URLRequest doesn't allow.
9 // 9 //
10 10
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
14 #include "base/message_loop.h" 15 #include "base/message_loop.h"
15 #include "base/message_loop.h" 16 #include "base/message_loop.h"
16 #include "base/message_loop_proxy.h" 17 #include "base/message_loop_proxy.h"
17 #include "base/scoped_temp_dir.h" 18 #include "base/scoped_temp_dir.h"
18 #include "googleurl/src/gurl.h" 19 #include "googleurl/src/gurl.h"
19 #include "net/url_request/url_request.h" 20 #include "net/url_request/url_request.h"
20 #include "net/url_request/url_request_context.h" 21 #include "net/url_request/url_request_context.h"
21 #include "net/url_request/url_request_job.h" 22 #include "net/url_request/url_request_job.h"
22 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
23 #include "webkit/blob/blob_data.h" 24 #include "webkit/blob/blob_data.h"
24 #include "webkit/blob/blob_storage_controller.h" 25 #include "webkit/blob/blob_storage_controller.h"
25 #include "webkit/blob/blob_url_request_job.h" 26 #include "webkit/blob/blob_url_request_job.h"
26 #include "webkit/fileapi/file_system_callback_dispatcher.h"
27 #include "webkit/fileapi/file_system_context.h" 27 #include "webkit/fileapi/file_system_context.h"
28 #include "webkit/fileapi/file_system_file_util.h" 28 #include "webkit/fileapi/file_system_file_util.h"
29 #include "webkit/fileapi/file_system_operation.h" 29 #include "webkit/fileapi/file_system_operation.h"
30 #include "webkit/fileapi/file_system_test_helper.h" 30 #include "webkit/fileapi/file_system_test_helper.h"
31 #include "webkit/fileapi/file_system_util.h" 31 #include "webkit/fileapi/file_system_util.h"
32 #include "webkit/fileapi/local_file_util.h" 32 #include "webkit/fileapi/local_file_util.h"
33 #include "webkit/fileapi/quota_file_util.h" 33 #include "webkit/fileapi/quota_file_util.h"
34 #include "webkit/quota/quota_manager.h" 34 #include "webkit/quota/quota_manager.h"
35 35
36 using quota::QuotaManager; 36 using quota::QuotaManager;
(...skipping 21 matching lines...) Expand all
58 void set_usage(int64 usage) { usage_ = usage; } 58 void set_usage(int64 usage) { usage_ = usage; }
59 void set_quota(int64 quota) { quota_ = quota; } 59 void set_quota(int64 quota) { quota_ = quota; }
60 60
61 private: 61 private:
62 int64 usage_; 62 int64 usage_;
63 int64 quota_; 63 int64 quota_;
64 }; 64 };
65 65
66 } // namespace (anonymous) 66 } // namespace (anonymous)
67 67
68 class FileSystemOperationWriteTest : public testing::Test { 68 class FileSystemOperationWriteTest
69 : public testing::Test,
70 public base::SupportsWeakPtr<FileSystemOperationWriteTest> {
69 public: 71 public:
70 FileSystemOperationWriteTest() 72 FileSystemOperationWriteTest()
71 : local_file_util_(new LocalFileUtil(QuotaFileUtil::CreateDefault())), 73 : local_file_util_(new LocalFileUtil(QuotaFileUtil::CreateDefault())),
72 loop_(MessageLoop::TYPE_IO), 74 loop_(MessageLoop::TYPE_IO),
73 status_(base::PLATFORM_FILE_OK), 75 status_(base::PLATFORM_FILE_OK),
76 cancel_status_(base::PLATFORM_FILE_ERROR_FAILED),
74 bytes_written_(0), 77 bytes_written_(0),
75 complete_(false) {} 78 complete_(false) {}
76 79
77 FileSystemOperation* operation(); 80 FileSystemOperation* operation();
78 81
79 void set_failure_status(base::PlatformFileError status) {
80 EXPECT_FALSE(complete_);
81 EXPECT_EQ(status_, base::PLATFORM_FILE_OK);
82 EXPECT_NE(status, base::PLATFORM_FILE_OK);
83 complete_ = true;
84 status_ = status;
85 }
86 base::PlatformFileError status() const { return status_; } 82 base::PlatformFileError status() const { return status_; }
83 base::PlatformFileError cancel_status() const { return cancel_status_; }
87 void add_bytes_written(int64 bytes, bool complete) { 84 void add_bytes_written(int64 bytes, bool complete) {
88 bytes_written_ += bytes; 85 bytes_written_ += bytes;
89 EXPECT_FALSE(complete_); 86 EXPECT_FALSE(complete_);
90 complete_ = complete; 87 complete_ = complete;
91 } 88 }
92 int64 bytes_written() const { return bytes_written_; } 89 int64 bytes_written() const { return bytes_written_; }
93 bool complete() const { return complete_; } 90 bool complete() const { return complete_; }
94 91
95 virtual void SetUp(); 92 virtual void SetUp();
96 virtual void TearDown(); 93 virtual void TearDown();
97 94
98 protected: 95 protected:
99 GURL URLForPath(const FilePath& path) const { 96 GURL URLForPath(const FilePath& path) const {
100 return test_helper_.GetURLForPath(path); 97 return test_helper_.GetURLForPath(path);
101 } 98 }
102 99
100 // Callback function for recording test results.
101 FileSystemOperationInterface::WriteCallback RecordWriteCallback() {
102 return base::Bind(&FileSystemOperationWriteTest::DidWrite, AsWeakPtr());
103 }
104
105 FileSystemOperationInterface::StatusCallback RecordCancelCallback() {
106 return base::Bind(&FileSystemOperationWriteTest::DidCancel, AsWeakPtr());
107 }
108
109 void DidWrite(base::PlatformFileError status, int64 bytes, bool complete) {
110 if (status == base::PLATFORM_FILE_OK) {
111 add_bytes_written(bytes, complete);
112 if (complete)
113 MessageLoop::current()->Quit();
114 } else {
115 EXPECT_FALSE(complete_);
116 EXPECT_EQ(status_, base::PLATFORM_FILE_OK);
117 complete_ = true;
118 status_ = status;
119 if (MessageLoop::current()->is_running())
120 MessageLoop::current()->Quit();
121 }
122 }
123
124 void DidCancel(base::PlatformFileError status) {
125 cancel_status_ = status;
126 }
127
103 scoped_ptr<LocalFileUtil> local_file_util_; 128 scoped_ptr<LocalFileUtil> local_file_util_;
104 scoped_refptr<MockQuotaManager> quota_manager_; 129 scoped_refptr<MockQuotaManager> quota_manager_;
105 FileSystemTestOriginHelper test_helper_; 130 FileSystemTestOriginHelper test_helper_;
106 131
107 MessageLoop loop_; 132 MessageLoop loop_;
108 133
109 ScopedTempDir dir_; 134 ScopedTempDir dir_;
110 FilePath filesystem_dir_; 135 FilePath filesystem_dir_;
111 FilePath file_; 136 FilePath file_;
112 FilePath virtual_path_; 137 FilePath virtual_path_;
113 138
114 // For post-operation status. 139 // For post-operation status.
115 base::PlatformFileError status_; 140 base::PlatformFileError status_;
141 base::PlatformFileError cancel_status_;
116 int64 bytes_written_; 142 int64 bytes_written_;
117 bool complete_; 143 bool complete_;
118 144
119 DISALLOW_COPY_AND_ASSIGN(FileSystemOperationWriteTest); 145 DISALLOW_COPY_AND_ASSIGN(FileSystemOperationWriteTest);
120 }; 146 };
121 147
122 namespace { 148 namespace {
123 149
124 class TestURLRequestContext : public net::URLRequestContext { 150 class TestURLRequestContext : public net::URLRequestContext {
125 public: 151 public:
(...skipping 14 matching lines...) Expand all
140 const std::string& scheme) { 166 const std::string& scheme) {
141 webkit_blob::BlobStorageController* blob_storage_controller = 167 webkit_blob::BlobStorageController* blob_storage_controller =
142 static_cast<const TestURLRequestContext*>(request->context())-> 168 static_cast<const TestURLRequestContext*>(request->context())->
143 blob_storage_controller(); 169 blob_storage_controller();
144 return new webkit_blob::BlobURLRequestJob( 170 return new webkit_blob::BlobURLRequestJob(
145 request, 171 request,
146 blob_storage_controller->GetBlobDataFromUrl(request->url()), 172 blob_storage_controller->GetBlobDataFromUrl(request->url()),
147 base::MessageLoopProxy::current()); 173 base::MessageLoopProxy::current());
148 } 174 }
149 175
150 class MockDispatcher : public FileSystemCallbackDispatcher {
151 public:
152 MockDispatcher(FileSystemOperationWriteTest* test) : test_(test) { }
153
154 virtual void DidFail(base::PlatformFileError status) {
155 test_->set_failure_status(status);
156 MessageLoop::current()->Quit();
157 }
158
159 virtual void DidSucceed() {
160 ADD_FAILURE();
161 }
162
163 virtual void DidReadMetadata(
164 const base::PlatformFileInfo& info,
165 const FilePath& platform_path) {
166 ADD_FAILURE();
167 }
168
169 virtual void DidReadDirectory(
170 const std::vector<base::FileUtilProxy::Entry>& entries,
171 bool /* has_more */) {
172 ADD_FAILURE();
173 }
174
175 virtual void DidOpenFileSystem(const std::string&, const GURL&) {
176 ADD_FAILURE();
177 }
178
179 virtual void DidWrite(int64 bytes, bool complete) {
180 test_->add_bytes_written(bytes, complete);
181 if (complete)
182 MessageLoop::current()->Quit();
183 }
184
185 private:
186 FileSystemOperationWriteTest* test_;
187 };
188
189 } // namespace (anonymous) 176 } // namespace (anonymous)
190 177
191 void FileSystemOperationWriteTest::SetUp() { 178 void FileSystemOperationWriteTest::SetUp() {
192 ASSERT_TRUE(dir_.CreateUniqueTempDir()); 179 ASSERT_TRUE(dir_.CreateUniqueTempDir());
193 FilePath base_dir = dir_.path().AppendASCII("filesystem"); 180 FilePath base_dir = dir_.path().AppendASCII("filesystem");
194 181
195 quota_manager_ = new MockQuotaManager(base_dir, 1024); 182 quota_manager_ = new MockQuotaManager(base_dir, 1024);
196 test_helper_.SetUp(base_dir, 183 test_helper_.SetUp(base_dir,
197 false /* unlimited quota */, 184 false /* unlimited quota */,
198 quota_manager_->proxy(), 185 quota_manager_->proxy(),
199 local_file_util_.get()); 186 local_file_util_.get());
200 filesystem_dir_ = test_helper_.GetOriginRootPath(); 187 filesystem_dir_ = test_helper_.GetOriginRootPath();
201 188
202 ASSERT_TRUE(file_util::CreateTemporaryFileInDir(filesystem_dir_, &file_)); 189 ASSERT_TRUE(file_util::CreateTemporaryFileInDir(filesystem_dir_, &file_));
203 virtual_path_ = file_.BaseName(); 190 virtual_path_ = file_.BaseName();
204 191
205 net::URLRequest::Deprecated::RegisterProtocolFactory( 192 net::URLRequest::Deprecated::RegisterProtocolFactory(
206 "blob", &BlobURLRequestJobFactory); 193 "blob", &BlobURLRequestJobFactory);
207 } 194 }
208 195
209 void FileSystemOperationWriteTest::TearDown() { 196 void FileSystemOperationWriteTest::TearDown() {
210 net::URLRequest::Deprecated::RegisterProtocolFactory("blob", NULL); 197 net::URLRequest::Deprecated::RegisterProtocolFactory("blob", NULL);
211 quota_manager_ = NULL; 198 quota_manager_ = NULL;
212 test_helper_.TearDown(); 199 test_helper_.TearDown();
213 } 200 }
214 201
215 FileSystemOperation* FileSystemOperationWriteTest::operation() { 202 FileSystemOperation* FileSystemOperationWriteTest::operation() {
216 return test_helper_.NewOperation(new MockDispatcher(this)); 203 return test_helper_.NewOperation();
217 } 204 }
218 205
219 TEST_F(FileSystemOperationWriteTest, TestWriteSuccess) { 206 TEST_F(FileSystemOperationWriteTest, TestWriteSuccess) {
220 GURL blob_url("blob:success"); 207 GURL blob_url("blob:success");
221 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 208 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
222 blob_data->AppendData("Hello, world!\n"); 209 blob_data->AppendData("Hello, world!\n");
223 210
224 scoped_refptr<TestURLRequestContext> url_request_context( 211 scoped_refptr<TestURLRequestContext> url_request_context(
225 new TestURLRequestContext()); 212 new TestURLRequestContext());
226 url_request_context->blob_storage_controller()->AddFinishedBlob( 213 url_request_context->blob_storage_controller()->AddFinishedBlob(
227 blob_url, blob_data); 214 blob_url, blob_data);
228 215
229 operation()->Write(url_request_context, URLForPath(virtual_path_), blob_url, 216 operation()->Write(url_request_context, URLForPath(virtual_path_), blob_url,
230 0); 217 0, RecordWriteCallback());
231 MessageLoop::current()->Run(); 218 MessageLoop::current()->Run();
232 219
233 url_request_context->blob_storage_controller()->RemoveBlob(blob_url); 220 url_request_context->blob_storage_controller()->RemoveBlob(blob_url);
234 221
235 EXPECT_EQ(14, bytes_written()); 222 EXPECT_EQ(14, bytes_written());
236 EXPECT_EQ(base::PLATFORM_FILE_OK, status()); 223 EXPECT_EQ(base::PLATFORM_FILE_OK, status());
237 EXPECT_TRUE(complete()); 224 EXPECT_TRUE(complete());
238 } 225 }
239 226
240 TEST_F(FileSystemOperationWriteTest, TestWriteZero) { 227 TEST_F(FileSystemOperationWriteTest, TestWriteZero) {
241 GURL blob_url("blob:zero"); 228 GURL blob_url("blob:zero");
242 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 229 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
243 blob_data->AppendData(""); 230 blob_data->AppendData("");
244 231
245 scoped_refptr<TestURLRequestContext> url_request_context( 232 scoped_refptr<TestURLRequestContext> url_request_context(
246 new TestURLRequestContext()); 233 new TestURLRequestContext());
247 url_request_context->blob_storage_controller()->AddFinishedBlob( 234 url_request_context->blob_storage_controller()->AddFinishedBlob(
248 blob_url, blob_data); 235 blob_url, blob_data);
249 236
250 operation()->Write(url_request_context, URLForPath(virtual_path_), 237 operation()->Write(url_request_context, URLForPath(virtual_path_),
251 blob_url, 0); 238 blob_url, 0, RecordWriteCallback());
252 MessageLoop::current()->Run(); 239 MessageLoop::current()->Run();
253 240
254 url_request_context->blob_storage_controller()->RemoveBlob(blob_url); 241 url_request_context->blob_storage_controller()->RemoveBlob(blob_url);
255 242
256 EXPECT_EQ(0, bytes_written()); 243 EXPECT_EQ(0, bytes_written());
257 EXPECT_EQ(base::PLATFORM_FILE_OK, status()); 244 EXPECT_EQ(base::PLATFORM_FILE_OK, status());
258 EXPECT_TRUE(complete()); 245 EXPECT_TRUE(complete());
259 } 246 }
260 247
261 TEST_F(FileSystemOperationWriteTest, TestWriteInvalidBlobUrl) { 248 TEST_F(FileSystemOperationWriteTest, TestWriteInvalidBlobUrl) {
262 scoped_refptr<TestURLRequestContext> url_request_context( 249 scoped_refptr<TestURLRequestContext> url_request_context(
263 new TestURLRequestContext()); 250 new TestURLRequestContext());
264 251
265 operation()->Write(url_request_context, URLForPath(virtual_path_), 252 operation()->Write(url_request_context, URLForPath(virtual_path_),
266 GURL("blob:invalid"), 0); 253 GURL("blob:invalid"), 0, RecordWriteCallback());
267 MessageLoop::current()->Run(); 254 MessageLoop::current()->Run();
268 255
269 EXPECT_EQ(0, bytes_written()); 256 EXPECT_EQ(0, bytes_written());
270 EXPECT_EQ(base::PLATFORM_FILE_ERROR_FAILED, status()); 257 EXPECT_EQ(base::PLATFORM_FILE_ERROR_FAILED, status());
271 EXPECT_TRUE(complete()); 258 EXPECT_TRUE(complete());
272 } 259 }
273 260
274 TEST_F(FileSystemOperationWriteTest, TestWriteInvalidFile) { 261 TEST_F(FileSystemOperationWriteTest, TestWriteInvalidFile) {
275 GURL blob_url("blob:writeinvalidfile"); 262 GURL blob_url("blob:writeinvalidfile");
276 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 263 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
277 blob_data->AppendData("It\'ll not be written."); 264 blob_data->AppendData("It\'ll not be written.");
278 265
279 scoped_refptr<TestURLRequestContext> url_request_context( 266 scoped_refptr<TestURLRequestContext> url_request_context(
280 new TestURLRequestContext()); 267 new TestURLRequestContext());
281 url_request_context->blob_storage_controller()->AddFinishedBlob( 268 url_request_context->blob_storage_controller()->AddFinishedBlob(
282 blob_url, blob_data); 269 blob_url, blob_data);
283 270
284 operation()->Write(url_request_context, 271 operation()->Write(url_request_context,
285 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))), 272 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))),
286 blob_url, 0); 273 blob_url, 0, RecordWriteCallback());
287 MessageLoop::current()->Run(); 274 MessageLoop::current()->Run();
288 275
289 url_request_context->blob_storage_controller()->RemoveBlob(blob_url); 276 url_request_context->blob_storage_controller()->RemoveBlob(blob_url);
290 277
291 EXPECT_EQ(0, bytes_written()); 278 EXPECT_EQ(0, bytes_written());
292 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, status()); 279 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, status());
293 EXPECT_TRUE(complete()); 280 EXPECT_TRUE(complete());
294 } 281 }
295 282
296 TEST_F(FileSystemOperationWriteTest, TestWriteDir) { 283 TEST_F(FileSystemOperationWriteTest, TestWriteDir) {
297 FilePath subdir; 284 FilePath subdir;
298 ASSERT_TRUE(file_util::CreateTemporaryDirInDir(filesystem_dir_, 285 ASSERT_TRUE(file_util::CreateTemporaryDirInDir(filesystem_dir_,
299 FILE_PATH_LITERAL("d"), 286 FILE_PATH_LITERAL("d"),
300 &subdir)); 287 &subdir));
301 FilePath virtual_subdir_path = subdir.BaseName(); 288 FilePath virtual_subdir_path = subdir.BaseName();
302 289
303 GURL blob_url("blob:writedir"); 290 GURL blob_url("blob:writedir");
304 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 291 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
305 blob_data->AppendData("It\'ll not be written, too."); 292 blob_data->AppendData("It\'ll not be written, too.");
306 293
307 scoped_refptr<TestURLRequestContext> url_request_context( 294 scoped_refptr<TestURLRequestContext> url_request_context(
308 new TestURLRequestContext()); 295 new TestURLRequestContext());
309 url_request_context->blob_storage_controller()->AddFinishedBlob( 296 url_request_context->blob_storage_controller()->AddFinishedBlob(
310 blob_url, blob_data); 297 blob_url, blob_data);
311 298
312 operation()->Write(url_request_context, URLForPath(virtual_subdir_path), 299 operation()->Write(url_request_context, URLForPath(virtual_subdir_path),
313 blob_url, 0); 300 blob_url, 0, RecordWriteCallback());
314 MessageLoop::current()->Run(); 301 MessageLoop::current()->Run();
315 302
316 url_request_context->blob_storage_controller()->RemoveBlob(blob_url); 303 url_request_context->blob_storage_controller()->RemoveBlob(blob_url);
317 304
318 EXPECT_EQ(0, bytes_written()); 305 EXPECT_EQ(0, bytes_written());
319 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ACCESS_DENIED, status()); 306 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ACCESS_DENIED, status());
320 EXPECT_TRUE(complete()); 307 EXPECT_TRUE(complete());
321 } 308 }
322 309
323 TEST_F(FileSystemOperationWriteTest, TestWriteFailureByQuota) { 310 TEST_F(FileSystemOperationWriteTest, TestWriteFailureByQuota) {
324 GURL blob_url("blob:success"); 311 GURL blob_url("blob:success");
325 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 312 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
326 blob_data->AppendData("Hello, world!\n"); 313 blob_data->AppendData("Hello, world!\n");
327 314
328 scoped_refptr<TestURLRequestContext> url_request_context( 315 scoped_refptr<TestURLRequestContext> url_request_context(
329 new TestURLRequestContext()); 316 new TestURLRequestContext());
330 url_request_context->blob_storage_controller()->AddFinishedBlob( 317 url_request_context->blob_storage_controller()->AddFinishedBlob(
331 blob_url, blob_data); 318 blob_url, blob_data);
332 319
333 quota_manager_->set_quota(10); 320 quota_manager_->set_quota(10);
334 operation()->Write(url_request_context, URLForPath(virtual_path_), blob_url, 321 operation()->Write(url_request_context, URLForPath(virtual_path_), blob_url,
335 0); 322 0, RecordWriteCallback());
336 MessageLoop::current()->Run(); 323 MessageLoop::current()->Run();
337 324
338 url_request_context->blob_storage_controller()->RemoveBlob(blob_url); 325 url_request_context->blob_storage_controller()->RemoveBlob(blob_url);
339 326
340 EXPECT_EQ(10, bytes_written()); 327 EXPECT_EQ(10, bytes_written());
341 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status()); 328 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status());
342 EXPECT_TRUE(complete()); 329 EXPECT_TRUE(complete());
343 } 330 }
344 331
345 // TODO(ericu,dmikurube): Add tests for Cancel. 332 TEST_F(FileSystemOperationWriteTest, TestImmediateCancelSuccessfulWrite) {
333 GURL blob_url("blob:success");
334 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
335 blob_data->AppendData("Hello, world!\n");
336
337 scoped_refptr<TestURLRequestContext> url_request_context(
338 new TestURLRequestContext());
339 url_request_context->blob_storage_controller()->AddFinishedBlob(
340 blob_url, blob_data);
341
342 FileSystemOperationInterface* write_operation = operation();
343 write_operation->Write(url_request_context, URLForPath(virtual_path_),
344 blob_url, 0, RecordWriteCallback());
345 write_operation->Cancel(RecordCancelCallback());
346 // We use RunAllPendings() instead of Run() here, because we won't dispatch
347 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need
348 // to run another write cycle.
349 MessageLoop::current()->RunAllPending();
350
351 url_request_context->blob_storage_controller()->RemoveBlob(blob_url);
352
353 // Issued Cancel() before receiving any response from Write(),
354 // so nothing should have happen.
355 EXPECT_EQ(0, bytes_written());
356 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status());
357 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status());
358 EXPECT_TRUE(complete());
359 }
360
361 TEST_F(FileSystemOperationWriteTest, TestImmediateCancelFailingWrite) {
362 GURL blob_url("blob:writeinvalidfile");
363 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
364 blob_data->AppendData("It\'ll not be written.");
365
366 scoped_refptr<TestURLRequestContext> url_request_context(
367 new TestURLRequestContext());
368 url_request_context->blob_storage_controller()->AddFinishedBlob(
369 blob_url, blob_data);
370
371 FileSystemOperationInterface* write_operation = operation();
372 write_operation->Write(url_request_context,
373 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))),
374 blob_url, 0, RecordWriteCallback());
375 write_operation->Cancel(RecordCancelCallback());
376 // We use RunAllPendings() instead of Run() here, because we won't dispatch
377 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need
378 // to run another write cycle.
379 MessageLoop::current()->RunAllPending();
380
381 url_request_context->blob_storage_controller()->RemoveBlob(blob_url);
382
383 // Issued Cancel() before receiving any response from Write(),
384 // so nothing should have happen.
385 EXPECT_EQ(0, bytes_written());
386 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status());
387 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status());
388 EXPECT_TRUE(complete());
389 }
390
391 // TODO(ericu,dmikurube): Add more tests for Cancel.
346 392
347 } // namespace fileapi 393 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/fileapi/file_system_operation_unittest.cc ('k') | webkit/fileapi/file_system_quota_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698