OLD | NEW |
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 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 CreateNewOperation(result_.get(), allowed_growth), | 116 CreateNewOperation(result_.get(), allowed_growth), |
117 test_helper_.CreatePath(file_path_), | 117 test_helper_.CreatePath(file_path_), |
118 offset, base::MessageLoopProxy::current())); | 118 offset, base::MessageLoopProxy::current())); |
119 request_.reset(new net::URLRequest(blob_url, file_writer_delegate_.get())); | 119 request_.reset(new net::URLRequest(blob_url, file_writer_delegate_.get())); |
120 } | 120 } |
121 | 121 |
122 FileSystemOperation* CreateNewOperation(Result* result, int64 quota); | 122 FileSystemOperation* CreateNewOperation(Result* result, int64 quota); |
123 | 123 |
124 static net::URLRequest::ProtocolFactory Factory; | 124 static net::URLRequest::ProtocolFactory Factory; |
125 | 125 |
| 126 // This should be alive until the very end of this instance. |
| 127 MessageLoop loop_; |
| 128 |
126 scoped_ptr<QuotaFileUtil> quota_file_util_; | 129 scoped_ptr<QuotaFileUtil> quota_file_util_; |
127 scoped_ptr<FileWriterDelegate> file_writer_delegate_; | 130 scoped_ptr<FileWriterDelegate> file_writer_delegate_; |
128 scoped_ptr<net::URLRequest> request_; | 131 scoped_ptr<net::URLRequest> request_; |
129 scoped_ptr<Result> result_; | 132 scoped_ptr<Result> result_; |
130 FileSystemTestOriginHelper test_helper_; | 133 FileSystemTestOriginHelper test_helper_; |
131 | 134 |
132 MessageLoop loop_; | |
133 ScopedTempDir dir_; | 135 ScopedTempDir dir_; |
134 FilePath file_path_; | 136 FilePath file_path_; |
135 PlatformFile file_; | 137 PlatformFile file_; |
136 | 138 |
137 static const char* content_; | 139 static const char* content_; |
138 }; | 140 }; |
139 const char* FileWriterDelegateTest::content_ = NULL; | 141 const char* FileWriterDelegateTest::content_ = NULL; |
140 | 142 |
141 namespace { | 143 namespace { |
142 | 144 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 return operation; | 220 return operation; |
219 } | 221 } |
220 | 222 |
221 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { | 223 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { |
222 const GURL kBlobURL("blob:nolimit"); | 224 const GURL kBlobURL("blob:nolimit"); |
223 content_ = kData; | 225 content_ = kData; |
224 | 226 |
225 PrepareForWrite(kBlobURL, 0, QuotaFileUtil::kNoLimit); | 227 PrepareForWrite(kBlobURL, 0, QuotaFileUtil::kNoLimit); |
226 | 228 |
227 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); | 229 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); |
228 file_writer_delegate_->Start(file_, request_.get()); | 230 file_writer_delegate_->Start(file_, request_.Pass()); |
229 MessageLoop::current()->Run(); | 231 MessageLoop::current()->Run(); |
230 ASSERT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); | 232 ASSERT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); |
231 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 233 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
232 | 234 |
233 EXPECT_EQ(kDataSize, result_->bytes_written()); | 235 EXPECT_EQ(kDataSize, result_->bytes_written()); |
234 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 236 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); |
235 EXPECT_TRUE(result_->complete()); | 237 EXPECT_TRUE(result_->complete()); |
236 | 238 |
237 file_writer_delegate_.reset(); | 239 file_writer_delegate_.reset(); |
238 } | 240 } |
239 | 241 |
240 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { | 242 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { |
241 const GURL kBlobURL("blob:just"); | 243 const GURL kBlobURL("blob:just"); |
242 content_ = kData; | 244 content_ = kData; |
243 const int64 kAllowedGrowth = kDataSize; | 245 const int64 kAllowedGrowth = kDataSize; |
244 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); | 246 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); |
245 | 247 |
246 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); | 248 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); |
247 file_writer_delegate_->Start(file_, request_.get()); | 249 file_writer_delegate_->Start(file_, request_.Pass()); |
248 MessageLoop::current()->Run(); | 250 MessageLoop::current()->Run(); |
249 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); | 251 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); |
250 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 252 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
251 | 253 |
252 file_writer_delegate_.reset(); | 254 file_writer_delegate_.reset(); |
253 | 255 |
254 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 256 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); |
255 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 257 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); |
256 EXPECT_TRUE(result_->complete()); | 258 EXPECT_TRUE(result_->complete()); |
257 } | 259 } |
258 | 260 |
259 TEST_F(FileWriterDelegateTest, WriteFailureByQuota) { | 261 TEST_F(FileWriterDelegateTest, WriteFailureByQuota) { |
260 const GURL kBlobURL("blob:failure"); | 262 const GURL kBlobURL("blob:failure"); |
261 content_ = kData; | 263 content_ = kData; |
262 const int64 kAllowedGrowth = kDataSize - 1; | 264 const int64 kAllowedGrowth = kDataSize - 1; |
263 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); | 265 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); |
264 | 266 |
265 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); | 267 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); |
266 file_writer_delegate_->Start(file_, request_.get()); | 268 file_writer_delegate_->Start(file_, request_.Pass()); |
267 MessageLoop::current()->Run(); | 269 MessageLoop::current()->Run(); |
268 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); | 270 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); |
269 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 271 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
270 | 272 |
271 file_writer_delegate_.reset(); | 273 file_writer_delegate_.reset(); |
272 | 274 |
273 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 275 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); |
274 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); | 276 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); |
275 EXPECT_TRUE(result_->complete()); | 277 EXPECT_TRUE(result_->complete()); |
276 } | 278 } |
277 | 279 |
278 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { | 280 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { |
279 const GURL kBlobURL("blob:zero"); | 281 const GURL kBlobURL("blob:zero"); |
280 content_ = ""; | 282 content_ = ""; |
281 int64 kAllowedGrowth = 0; | 283 int64 kAllowedGrowth = 0; |
282 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); | 284 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); |
283 | 285 |
284 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); | 286 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); |
285 file_writer_delegate_->Start(file_, request_.get()); | 287 file_writer_delegate_->Start(file_, request_.Pass()); |
286 MessageLoop::current()->Run(); | 288 MessageLoop::current()->Run(); |
287 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); | 289 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); |
288 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 290 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
289 | 291 |
290 file_writer_delegate_.reset(); | 292 file_writer_delegate_.reset(); |
291 | 293 |
292 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 294 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); |
293 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 295 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); |
294 EXPECT_TRUE(result_->complete()); | 296 EXPECT_TRUE(result_->complete()); |
295 } | 297 } |
(...skipping 24 matching lines...) Expand all Loading... |
320 | 322 |
321 // Credate another FileWriterDelegate for concurrent write. | 323 // Credate another FileWriterDelegate for concurrent write. |
322 result2.reset(new Result()); | 324 result2.reset(new Result()); |
323 file_writer_delegate2.reset(new FileWriterDelegate( | 325 file_writer_delegate2.reset(new FileWriterDelegate( |
324 CreateNewOperation(result2.get(), QuotaFileUtil::kNoLimit), | 326 CreateNewOperation(result2.get(), QuotaFileUtil::kNoLimit), |
325 test_helper_.CreatePath(file_path2), | 327 test_helper_.CreatePath(file_path2), |
326 0, base::MessageLoopProxy::current())); | 328 0, base::MessageLoopProxy::current())); |
327 request2.reset(new net::URLRequest(kBlobURL2, file_writer_delegate2.get())); | 329 request2.reset(new net::URLRequest(kBlobURL2, file_writer_delegate2.get())); |
328 | 330 |
329 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); | 331 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); |
330 file_writer_delegate_->Start(file_, request_.get()); | 332 file_writer_delegate_->Start(file_, request_.Pass()); |
331 file_writer_delegate2->Start(file2, request2.get()); | 333 file_writer_delegate2->Start(file2, request2.Pass()); |
332 MessageLoop::current()->Run(); | 334 MessageLoop::current()->Run(); |
333 if (!result_->complete() || !result2->complete()) | 335 if (!result_->complete() || !result2->complete()) |
334 MessageLoop::current()->Run(); | 336 MessageLoop::current()->Run(); |
335 | 337 |
336 ASSERT_EQ(kDataSize * 2, test_helper_.GetCachedOriginUsage()); | 338 ASSERT_EQ(kDataSize * 2, test_helper_.GetCachedOriginUsage()); |
337 base::FlushPlatformFile(file2); | 339 base::FlushPlatformFile(file2); |
338 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 340 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
339 | 341 |
340 file_writer_delegate_.reset(); | 342 file_writer_delegate_.reset(); |
341 | 343 |
(...skipping 11 matching lines...) Expand all Loading... |
353 const GURL kBlobURL("blob:failure-with-updated-quota"); | 355 const GURL kBlobURL("blob:failure-with-updated-quota"); |
354 content_ = kData; | 356 content_ = kData; |
355 | 357 |
356 // Writing kDataSize (=45) bytes data while allowed_growth is 100. | 358 // Writing kDataSize (=45) bytes data while allowed_growth is 100. |
357 int64 offset = 0; | 359 int64 offset = 0; |
358 int64 allowed_growth = 100; | 360 int64 allowed_growth = 100; |
359 ASSERT_LT(kDataSize, allowed_growth); | 361 ASSERT_LT(kDataSize, allowed_growth); |
360 PrepareForWrite(kBlobURL, offset, allowed_growth); | 362 PrepareForWrite(kBlobURL, offset, allowed_growth); |
361 | 363 |
362 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); | 364 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); |
363 file_writer_delegate_->Start(file_, request_.get()); | 365 file_writer_delegate_->Start(file_, request_.Pass()); |
364 MessageLoop::current()->Run(); | 366 MessageLoop::current()->Run(); |
365 ASSERT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); | 367 ASSERT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); |
366 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 368 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
367 EXPECT_EQ(kDataSize, result_->bytes_written()); | 369 EXPECT_EQ(kDataSize, result_->bytes_written()); |
368 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 370 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); |
369 EXPECT_TRUE(result_->complete()); | 371 EXPECT_TRUE(result_->complete()); |
370 | 372 |
371 // Trying to overwrite kDataSize bytes data while allowed_growth is 20. | 373 // Trying to overwrite kDataSize bytes data while allowed_growth is 20. |
372 offset = 0; | 374 offset = 0; |
373 allowed_growth = 20; | 375 allowed_growth = 20; |
374 PrepareForWrite(kBlobURL, offset, allowed_growth); | 376 PrepareForWrite(kBlobURL, offset, allowed_growth); |
375 | 377 |
376 file_writer_delegate_->Start(file_, request_.get()); | 378 file_writer_delegate_->Start(file_, request_.Pass()); |
377 MessageLoop::current()->Run(); | 379 MessageLoop::current()->Run(); |
378 EXPECT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); | 380 EXPECT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); |
379 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 381 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
380 EXPECT_EQ(kDataSize, result_->bytes_written()); | 382 EXPECT_EQ(kDataSize, result_->bytes_written()); |
381 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 383 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); |
382 EXPECT_TRUE(result_->complete()); | 384 EXPECT_TRUE(result_->complete()); |
383 | 385 |
384 // Trying to write kDataSize bytes data from offset 25 while | 386 // Trying to write kDataSize bytes data from offset 25 while |
385 // allowed_growth is 55. | 387 // allowed_growth is 55. |
386 offset = 25; | 388 offset = 25; |
387 allowed_growth = 55; | 389 allowed_growth = 55; |
388 PrepareForWrite(kBlobURL, offset, allowed_growth); | 390 PrepareForWrite(kBlobURL, offset, allowed_growth); |
389 | 391 |
390 file_writer_delegate_->Start(file_, request_.get()); | 392 file_writer_delegate_->Start(file_, request_.Pass()); |
391 MessageLoop::current()->Run(); | 393 MessageLoop::current()->Run(); |
392 EXPECT_EQ(offset + kDataSize, test_helper_.GetCachedOriginUsage()); | 394 EXPECT_EQ(offset + kDataSize, test_helper_.GetCachedOriginUsage()); |
393 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 395 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
394 EXPECT_EQ(kDataSize, result_->bytes_written()); | 396 EXPECT_EQ(kDataSize, result_->bytes_written()); |
395 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 397 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); |
396 EXPECT_TRUE(result_->complete()); | 398 EXPECT_TRUE(result_->complete()); |
397 | 399 |
398 // Trying to overwrite 45 bytes data while allowed_growth is -20. | 400 // Trying to overwrite 45 bytes data while allowed_growth is -20. |
399 offset = 0; | 401 offset = 0; |
400 allowed_growth = -20; | 402 allowed_growth = -20; |
401 PrepareForWrite(kBlobURL, offset, allowed_growth); | 403 PrepareForWrite(kBlobURL, offset, allowed_growth); |
402 | 404 |
403 int64 pre_write_usage = ComputeCurrentOriginUsage(); | 405 int64 pre_write_usage = ComputeCurrentOriginUsage(); |
404 file_writer_delegate_->Start(file_, request_.get()); | 406 file_writer_delegate_->Start(file_, request_.Pass()); |
405 MessageLoop::current()->Run(); | 407 MessageLoop::current()->Run(); |
406 EXPECT_EQ(pre_write_usage, test_helper_.GetCachedOriginUsage()); | 408 EXPECT_EQ(pre_write_usage, test_helper_.GetCachedOriginUsage()); |
407 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 409 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
408 EXPECT_EQ(kDataSize, result_->bytes_written()); | 410 EXPECT_EQ(kDataSize, result_->bytes_written()); |
409 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 411 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); |
410 EXPECT_TRUE(result_->complete()); | 412 EXPECT_TRUE(result_->complete()); |
411 | 413 |
412 // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, | 414 // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, |
413 // while allowed_growth is 10. | 415 // while allowed_growth is 10. |
414 const int kOverlap = 20; | 416 const int kOverlap = 20; |
415 offset = pre_write_usage - kOverlap; | 417 offset = pre_write_usage - kOverlap; |
416 allowed_growth = 10; | 418 allowed_growth = 10; |
417 PrepareForWrite(kBlobURL, offset, allowed_growth); | 419 PrepareForWrite(kBlobURL, offset, allowed_growth); |
418 | 420 |
419 file_writer_delegate_->Start(file_, request_.get()); | 421 file_writer_delegate_->Start(file_, request_.Pass()); |
420 MessageLoop::current()->Run(); | 422 MessageLoop::current()->Run(); |
421 EXPECT_EQ(pre_write_usage + allowed_growth, | 423 EXPECT_EQ(pre_write_usage + allowed_growth, |
422 test_helper_.GetCachedOriginUsage()); | 424 test_helper_.GetCachedOriginUsage()); |
423 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); | 425 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); |
424 EXPECT_EQ(kOverlap + allowed_growth, result_->bytes_written()); | 426 EXPECT_EQ(kOverlap + allowed_growth, result_->bytes_written()); |
425 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); | 427 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); |
426 EXPECT_TRUE(result_->complete()); | 428 EXPECT_TRUE(result_->complete()); |
427 } | 429 } |
428 | 430 |
429 class FileWriterDelegateUnlimitedTest : public FileWriterDelegateTest { | 431 class FileWriterDelegateUnlimitedTest : public FileWriterDelegateTest { |
430 protected: | 432 protected: |
431 virtual void SetUpTestHelper(const FilePath& path) OVERRIDE; | 433 virtual void SetUpTestHelper(const FilePath& path) OVERRIDE; |
432 }; | 434 }; |
433 | 435 |
434 } // namespace fileapi | 436 } // namespace fileapi |
OLD | NEW |