| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "storage/browser/blob/blob_reader.h" | 5 #include "storage/browser/blob/blob_reader.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 int async_bytes_read = 0; | 410 int async_bytes_read = 0; |
| 411 EXPECT_EQ(BlobReader::Status::DONE, | 411 EXPECT_EQ(BlobReader::Status::DONE, |
| 412 reader_->Read(buffer.get(), kDataSize, &bytes_read, | 412 reader_->Read(buffer.get(), kDataSize, &bytes_read, |
| 413 base::Bind(&SetValue<int>, &async_bytes_read))); | 413 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 414 EXPECT_EQ(net::OK, reader_->net_error()); | 414 EXPECT_EQ(net::OK, reader_->net_error()); |
| 415 EXPECT_EQ(kDataSize, static_cast<size_t>(bytes_read)); | 415 EXPECT_EQ(kDataSize, static_cast<size_t>(bytes_read)); |
| 416 EXPECT_EQ(0, async_bytes_read); | 416 EXPECT_EQ(0, async_bytes_read); |
| 417 EXPECT_EQ(0, memcmp(buffer->data(), "Hello!!!", kDataSize)); | 417 EXPECT_EQ(0, memcmp(buffer->data(), "Hello!!!", kDataSize)); |
| 418 } | 418 } |
| 419 | 419 |
| 420 TEST_F(BlobReaderTest, BasicMemoryWithResets) { |
| 421 BlobDataBuilder b("uuid"); |
| 422 const std::string kData("Hello!!!"); |
| 423 const size_t kDataSize = 8ul; |
| 424 b.AppendData(kData); |
| 425 this->InitializeReader(&b); |
| 426 EXPECT_FALSE(reader_->reader_used()); |
| 427 |
| 428 int size_result = -1; |
| 429 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 430 EXPECT_EQ(BlobReader::Status::DONE, |
| 431 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 432 EXPECT_TRUE(reader_->reader_used()); |
| 433 |
| 434 // Case 1: Reset after calculate size. |
| 435 reader_->Reset(); |
| 436 EXPECT_FALSE(reader_->reader_used()); |
| 437 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 438 |
| 439 EXPECT_EQ(BlobReader::Status::DONE, |
| 440 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 441 CheckSizeCalculatedSynchronously(kDataSize, size_result); |
| 442 |
| 443 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kDataSize)); |
| 444 int bytes_read = 0; |
| 445 int async_bytes_read = 0; |
| 446 EXPECT_EQ(BlobReader::Status::DONE, |
| 447 reader_->Read(buffer.get(), kDataSize, &bytes_read, |
| 448 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 449 EXPECT_EQ(net::OK, reader_->net_error()); |
| 450 |
| 451 // Case 2: Reset after Read call. |
| 452 reader_->Reset(); |
| 453 EXPECT_FALSE(reader_->reader_used()); |
| 454 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 455 |
| 456 EXPECT_EQ(BlobReader::Status::DONE, |
| 457 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 458 EXPECT_EQ(BlobReader::Status::DONE, |
| 459 reader_->Read(buffer.get(), kDataSize, &bytes_read, |
| 460 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 461 EXPECT_EQ(0, memcmp(buffer->data(), "Hello!!!", kDataSize)); |
| 462 } |
| 463 |
| 420 TEST_F(BlobReaderTest, BasicFile) { | 464 TEST_F(BlobReaderTest, BasicFile) { |
| 421 BlobDataBuilder b("uuid"); | 465 BlobDataBuilder b("uuid"); |
| 422 const FilePath kPath = FilePath::FromUTF8Unsafe("/fake/file.txt"); | 466 const FilePath kPath = FilePath::FromUTF8Unsafe("/fake/file.txt"); |
| 423 const std::string kData = "FileData!!!"; | 467 const std::string kData = "FileData!!!"; |
| 424 const base::Time kTime = base::Time::Now(); | 468 const base::Time kTime = base::Time::Now(); |
| 425 b.AppendFile(kPath, 0, kData.size(), kTime); | 469 b.AppendFile(kPath, 0, kData.size(), kTime); |
| 426 this->InitializeReader(&b); | 470 this->InitializeReader(&b); |
| 427 | 471 |
| 428 // Non-async reader. | 472 // Non-async reader. |
| 429 ExpectLocalFileCall(kPath, kTime, 0, new FakeFileStreamReader(kData)); | 473 ExpectLocalFileCall(kPath, kTime, 0, new FakeFileStreamReader(kData)); |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 671 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 715 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 672 reader_->Read(buffer.get(), kData.size(), &bytes_read, | 716 reader_->Read(buffer.get(), kData.size(), &bytes_read, |
| 673 base::Bind(&SetValue<int>, &async_bytes_read))); | 717 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 674 message_loop_.RunUntilIdle(); | 718 message_loop_.RunUntilIdle(); |
| 675 EXPECT_EQ(net::OK, reader_->net_error()); | 719 EXPECT_EQ(net::OK, reader_->net_error()); |
| 676 EXPECT_EQ(kData.size(), static_cast<size_t>(async_bytes_read)); | 720 EXPECT_EQ(kData.size(), static_cast<size_t>(async_bytes_read)); |
| 677 EXPECT_EQ(0, bytes_read); | 721 EXPECT_EQ(0, bytes_read); |
| 678 EXPECT_EQ(0, memcmp(buffer->data(), "FileData!!!", kData.size())); | 722 EXPECT_EQ(0, memcmp(buffer->data(), "FileData!!!", kData.size())); |
| 679 } | 723 } |
| 680 | 724 |
| 725 TEST_F(BlobReaderTest, FileAsyncWithResets) { |
| 726 BlobDataBuilder b("uuid"); |
| 727 const FilePath kPath = FilePath::FromUTF8Unsafe("/fake/file.txt"); |
| 728 const std::string kData = "FileData!!!"; |
| 729 const base::Time kTime = base::Time::Now(); |
| 730 b.AppendFile(kPath, 0, kData.size(), kTime); |
| 731 this->InitializeReader(&b); |
| 732 |
| 733 scoped_ptr<FakeFileStreamReader> reader(new FakeFileStreamReader(kData)); |
| 734 reader->SetAsyncRunner(message_loop_.task_runner().get()); |
| 735 |
| 736 ExpectLocalFileCall(kPath, kTime, 0, reader.release()); |
| 737 |
| 738 int size_result = -1; |
| 739 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 740 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 741 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 742 CheckSizeNotCalculatedYet(size_result); |
| 743 |
| 744 // Case 1: Reset after calculate size, but before callbacks are run. |
| 745 reader_->Reset(); |
| 746 message_loop_.RunUntilIdle(); |
| 747 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 748 |
| 749 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 750 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 751 message_loop_.RunUntilIdle(); |
| 752 CheckSizeCalculatedAsynchronously(kData.size(), size_result); |
| 753 |
| 754 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kData.size())); |
| 755 int bytes_read = 0; |
| 756 int async_bytes_read = 0; |
| 757 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 758 reader_->Read(buffer.get(), kData.size(), &bytes_read, |
| 759 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 760 |
| 761 // Case 2: Reset after read, but before callbacks are run. |
| 762 reader_->Reset(); |
| 763 message_loop_.RunUntilIdle(); |
| 764 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 765 EXPECT_EQ(0, async_bytes_read); |
| 766 } |
| 767 |
| 681 TEST_F(BlobReaderTest, FileSystemAsync) { | 768 TEST_F(BlobReaderTest, FileSystemAsync) { |
| 682 BlobDataBuilder b("uuid"); | 769 BlobDataBuilder b("uuid"); |
| 683 const GURL kURL("file://test_file/here.txt"); | 770 const GURL kURL("file://test_file/here.txt"); |
| 684 const std::string kData = "FileData!!!"; | 771 const std::string kData = "FileData!!!"; |
| 685 const base::Time kTime = base::Time::Now(); | 772 const base::Time kTime = base::Time::Now(); |
| 686 b.AppendFileSystemFile(kURL, 0, kData.size(), kTime); | 773 b.AppendFileSystemFile(kURL, 0, kData.size(), kTime); |
| 687 this->InitializeReader(&b); | 774 this->InitializeReader(&b); |
| 688 | 775 |
| 689 scoped_ptr<FakeFileStreamReader> reader(new FakeFileStreamReader(kData)); | 776 scoped_ptr<FakeFileStreamReader> reader(new FakeFileStreamReader(kData)); |
| 690 reader->SetAsyncRunner(message_loop_.task_runner().get()); | 777 reader->SetAsyncRunner(message_loop_.task_runner().get()); |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1102 EXPECT_EQ(BlobReader::Status::DONE, | 1189 EXPECT_EQ(BlobReader::Status::DONE, |
| 1103 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 1190 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 1104 buffer = CreateBuffer(kDataSize + 1); | 1191 buffer = CreateBuffer(kDataSize + 1); |
| 1105 EXPECT_EQ(BlobReader::Status::NET_ERROR, | 1192 EXPECT_EQ(BlobReader::Status::NET_ERROR, |
| 1106 reader_->SetReadRange(0, kDataSize + 1)); | 1193 reader_->SetReadRange(0, kDataSize + 1)); |
| 1107 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); | 1194 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); |
| 1108 } | 1195 } |
| 1109 | 1196 |
| 1110 } // namespace | 1197 } // namespace |
| 1111 } // namespace storage | 1198 } // namespace storage |
| OLD | NEW |