| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 } // namespace | 330 } // namespace |
| 331 | 331 |
| 332 class BlobReaderTest : public ::testing::Test { | 332 class BlobReaderTest : public ::testing::Test { |
| 333 public: | 333 public: |
| 334 BlobReaderTest() {} | 334 BlobReaderTest() {} |
| 335 ~BlobReaderTest() override {} | 335 ~BlobReaderTest() override {} |
| 336 | 336 |
| 337 void TearDown() override { | 337 void TearDown() override { |
| 338 reader_.reset(); | 338 reader_.reset(); |
| 339 blob_handle_.reset(); | 339 blob_handle_.reset(); |
| 340 message_loop_.RunUntilIdle(); | 340 base::RunLoop().RunUntilIdle(); |
| 341 base::RunLoop().RunUntilIdle(); | 341 base::RunLoop().RunUntilIdle(); |
| 342 } | 342 } |
| 343 | 343 |
| 344 protected: | 344 protected: |
| 345 void InitializeReader(BlobDataBuilder* builder) { | 345 void InitializeReader(BlobDataBuilder* builder) { |
| 346 blob_handle_ = builder ? context_.AddFinishedBlob(builder) : nullptr; | 346 blob_handle_ = builder ? context_.AddFinishedBlob(builder) : nullptr; |
| 347 provider_ = new MockFileStreamReaderProvider(); | 347 provider_ = new MockFileStreamReaderProvider(); |
| 348 reader_.reset(new BlobReader(blob_handle_.get(), | 348 reader_.reset(new BlobReader(blob_handle_.get(), |
| 349 base::WrapUnique(provider_), | 349 base::WrapUnique(provider_), |
| 350 message_loop_.task_runner().get())); | 350 message_loop_.task_runner().get())); |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 reader->SetAsyncRunner(message_loop_.task_runner().get()); | 717 reader->SetAsyncRunner(message_loop_.task_runner().get()); |
| 718 | 718 |
| 719 ExpectLocalFileCall(kPath, kTime, 0, reader.release()); | 719 ExpectLocalFileCall(kPath, kTime, 0, reader.release()); |
| 720 | 720 |
| 721 int size_result = -1; | 721 int size_result = -1; |
| 722 EXPECT_FALSE(IsReaderTotalSizeCalculated()); | 722 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 723 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 723 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 724 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 724 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 725 EXPECT_FALSE(reader_->IsInMemory()); | 725 EXPECT_FALSE(reader_->IsInMemory()); |
| 726 CheckSizeNotCalculatedYet(size_result); | 726 CheckSizeNotCalculatedYet(size_result); |
| 727 message_loop_.RunUntilIdle(); | 727 base::RunLoop().RunUntilIdle(); |
| 728 CheckSizeCalculatedAsynchronously(kData.size(), size_result); | 728 CheckSizeCalculatedAsynchronously(kData.size(), size_result); |
| 729 | 729 |
| 730 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kData.size())); | 730 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kData.size())); |
| 731 | 731 |
| 732 int bytes_read = 0; | 732 int bytes_read = 0; |
| 733 int async_bytes_read = 0; | 733 int async_bytes_read = 0; |
| 734 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 734 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 735 reader_->Read(buffer.get(), kData.size(), &bytes_read, | 735 reader_->Read(buffer.get(), kData.size(), &bytes_read, |
| 736 base::Bind(&SetValue<int>, &async_bytes_read))); | 736 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 737 message_loop_.RunUntilIdle(); | 737 base::RunLoop().RunUntilIdle(); |
| 738 EXPECT_EQ(net::OK, reader_->net_error()); | 738 EXPECT_EQ(net::OK, reader_->net_error()); |
| 739 EXPECT_EQ(kData.size(), static_cast<size_t>(async_bytes_read)); | 739 EXPECT_EQ(kData.size(), static_cast<size_t>(async_bytes_read)); |
| 740 EXPECT_EQ(0, bytes_read); | 740 EXPECT_EQ(0, bytes_read); |
| 741 EXPECT_EQ(0, memcmp(buffer->data(), "FileData!!!", kData.size())); | 741 EXPECT_EQ(0, memcmp(buffer->data(), "FileData!!!", kData.size())); |
| 742 } | 742 } |
| 743 | 743 |
| 744 TEST_F(BlobReaderTest, FileSystemAsync) { | 744 TEST_F(BlobReaderTest, FileSystemAsync) { |
| 745 BlobDataBuilder b("uuid"); | 745 BlobDataBuilder b("uuid"); |
| 746 const GURL kURL("file://test_file/here.txt"); | 746 const GURL kURL("file://test_file/here.txt"); |
| 747 const std::string kData = "FileData!!!"; | 747 const std::string kData = "FileData!!!"; |
| 748 const base::Time kTime = base::Time::Now(); | 748 const base::Time kTime = base::Time::Now(); |
| 749 b.AppendFileSystemFile(kURL, 0, kData.size(), kTime); | 749 b.AppendFileSystemFile(kURL, 0, kData.size(), kTime); |
| 750 this->InitializeReader(&b); | 750 this->InitializeReader(&b); |
| 751 | 751 |
| 752 std::unique_ptr<FakeFileStreamReader> reader(new FakeFileStreamReader(kData)); | 752 std::unique_ptr<FakeFileStreamReader> reader(new FakeFileStreamReader(kData)); |
| 753 reader->SetAsyncRunner(message_loop_.task_runner().get()); | 753 reader->SetAsyncRunner(message_loop_.task_runner().get()); |
| 754 | 754 |
| 755 ExpectFileSystemCall(kURL, 0, kData.size(), kTime, reader.release()); | 755 ExpectFileSystemCall(kURL, 0, kData.size(), kTime, reader.release()); |
| 756 | 756 |
| 757 int size_result = -1; | 757 int size_result = -1; |
| 758 EXPECT_FALSE(IsReaderTotalSizeCalculated()); | 758 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 759 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 759 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 760 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 760 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 761 CheckSizeNotCalculatedYet(size_result); | 761 CheckSizeNotCalculatedYet(size_result); |
| 762 EXPECT_FALSE(reader_->IsInMemory()); | 762 EXPECT_FALSE(reader_->IsInMemory()); |
| 763 message_loop_.RunUntilIdle(); | 763 base::RunLoop().RunUntilIdle(); |
| 764 CheckSizeCalculatedAsynchronously(kData.size(), size_result); | 764 CheckSizeCalculatedAsynchronously(kData.size(), size_result); |
| 765 | 765 |
| 766 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kData.size())); | 766 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kData.size())); |
| 767 | 767 |
| 768 int bytes_read = 0; | 768 int bytes_read = 0; |
| 769 int async_bytes_read = 0; | 769 int async_bytes_read = 0; |
| 770 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 770 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 771 reader_->Read(buffer.get(), kData.size(), &bytes_read, | 771 reader_->Read(buffer.get(), kData.size(), &bytes_read, |
| 772 base::Bind(&SetValue<int>, &async_bytes_read))); | 772 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 773 message_loop_.RunUntilIdle(); | 773 base::RunLoop().RunUntilIdle(); |
| 774 EXPECT_EQ(net::OK, reader_->net_error()); | 774 EXPECT_EQ(net::OK, reader_->net_error()); |
| 775 EXPECT_EQ(kData.size(), static_cast<size_t>(async_bytes_read)); | 775 EXPECT_EQ(kData.size(), static_cast<size_t>(async_bytes_read)); |
| 776 EXPECT_EQ(0, bytes_read); | 776 EXPECT_EQ(0, bytes_read); |
| 777 EXPECT_EQ(0, memcmp(buffer->data(), "FileData!!!", kData.size())); | 777 EXPECT_EQ(0, memcmp(buffer->data(), "FileData!!!", kData.size())); |
| 778 } | 778 } |
| 779 | 779 |
| 780 TEST_F(BlobReaderTest, DiskCacheAsync) { | 780 TEST_F(BlobReaderTest, DiskCacheAsync) { |
| 781 std::unique_ptr<disk_cache::Backend> cache = | 781 std::unique_ptr<disk_cache::Backend> cache = |
| 782 CreateInMemoryDiskCache(message_loop_.task_runner()); | 782 CreateInMemoryDiskCache(message_loop_.task_runner()); |
| 783 ASSERT_TRUE(cache); | 783 ASSERT_TRUE(cache); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 ExpectLocalFileCall(kPath, kTime, 0, reader.release()); | 830 ExpectLocalFileCall(kPath, kTime, 0, reader.release()); |
| 831 | 831 |
| 832 // We create the reader again with the offset after the seek. | 832 // We create the reader again with the offset after the seek. |
| 833 reader.reset(new FakeFileStreamReader(kRangeData)); | 833 reader.reset(new FakeFileStreamReader(kRangeData)); |
| 834 reader->SetAsyncRunner(message_loop_.task_runner().get()); | 834 reader->SetAsyncRunner(message_loop_.task_runner().get()); |
| 835 ExpectLocalFileCall(kPath, kTime, kOffset, reader.release()); | 835 ExpectLocalFileCall(kPath, kTime, kOffset, reader.release()); |
| 836 | 836 |
| 837 int size_result = -1; | 837 int size_result = -1; |
| 838 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 838 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 839 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 839 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 840 message_loop_.RunUntilIdle(); | 840 base::RunLoop().RunUntilIdle(); |
| 841 | 841 |
| 842 scoped_refptr<net::IOBuffer> buffer = CreateBuffer(kReadLength); | 842 scoped_refptr<net::IOBuffer> buffer = CreateBuffer(kReadLength); |
| 843 EXPECT_EQ(BlobReader::Status::DONE, | 843 EXPECT_EQ(BlobReader::Status::DONE, |
| 844 reader_->SetReadRange(kOffset, kReadLength)); | 844 reader_->SetReadRange(kOffset, kReadLength)); |
| 845 | 845 |
| 846 int bytes_read = 0; | 846 int bytes_read = 0; |
| 847 int async_bytes_read = 0; | 847 int async_bytes_read = 0; |
| 848 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 848 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 849 reader_->Read(buffer.get(), kReadLength, &bytes_read, | 849 reader_->Read(buffer.get(), kReadLength, &bytes_read, |
| 850 base::Bind(&SetValue<int>, &async_bytes_read))); | 850 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 851 message_loop_.RunUntilIdle(); | 851 base::RunLoop().RunUntilIdle(); |
| 852 EXPECT_EQ(net::OK, reader_->net_error()); | 852 EXPECT_EQ(net::OK, reader_->net_error()); |
| 853 EXPECT_EQ(kReadLength, static_cast<size_t>(async_bytes_read)); | 853 EXPECT_EQ(kReadLength, static_cast<size_t>(async_bytes_read)); |
| 854 EXPECT_EQ(0, bytes_read); | 854 EXPECT_EQ(0, bytes_read); |
| 855 EXPECT_EQ(0, memcmp(buffer->data(), "leD", kReadLength)); | 855 EXPECT_EQ(0, memcmp(buffer->data(), "leD", kReadLength)); |
| 856 } | 856 } |
| 857 | 857 |
| 858 TEST_F(BlobReaderTest, DiskCacheRange) { | 858 TEST_F(BlobReaderTest, DiskCacheRange) { |
| 859 std::unique_ptr<disk_cache::Backend> cache = | 859 std::unique_ptr<disk_cache::Backend> cache = |
| 860 CreateInMemoryDiskCache(message_loop_.task_runner()); | 860 CreateInMemoryDiskCache(message_loop_.task_runner()); |
| 861 ASSERT_TRUE(cache); | 861 ASSERT_TRUE(cache); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 934 FilePath path = kPathBase.Append( | 934 FilePath path = kPathBase.Append( |
| 935 FilePath::FromUTF8Unsafe(base::StringPrintf("%d", current_value))); | 935 FilePath::FromUTF8Unsafe(base::StringPrintf("%d", current_value))); |
| 936 ExpectLocalFileCall(path, kTime, offset, reader.release()); | 936 ExpectLocalFileCall(path, kTime, offset, reader.release()); |
| 937 } | 937 } |
| 938 | 938 |
| 939 int size_result = -1; | 939 int size_result = -1; |
| 940 EXPECT_FALSE(IsReaderTotalSizeCalculated()); | 940 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 941 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 941 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 942 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 942 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 943 CheckSizeNotCalculatedYet(size_result); | 943 CheckSizeNotCalculatedYet(size_result); |
| 944 message_loop_.RunUntilIdle(); | 944 base::RunLoop().RunUntilIdle(); |
| 945 CheckSizeCalculatedAsynchronously(kTotalSize, size_result); | 945 CheckSizeCalculatedAsynchronously(kTotalSize, size_result); |
| 946 | 946 |
| 947 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); | 947 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); |
| 948 | 948 |
| 949 current_value = 0; | 949 current_value = 0; |
| 950 for (size_t i = 0; i < kTotalSize / kBufferSize; i++) { | 950 for (size_t i = 0; i < kTotalSize / kBufferSize; i++) { |
| 951 int bytes_read = 0; | 951 int bytes_read = 0; |
| 952 int async_bytes_read = 0; | 952 int async_bytes_read = 0; |
| 953 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 953 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 954 reader_->Read(buffer.get(), kBufferSize, &bytes_read, | 954 reader_->Read(buffer.get(), kBufferSize, &bytes_read, |
| 955 base::Bind(&SetValue<int>, &async_bytes_read))); | 955 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 956 message_loop_.RunUntilIdle(); | 956 base::RunLoop().RunUntilIdle(); |
| 957 EXPECT_EQ(net::OK, reader_->net_error()); | 957 EXPECT_EQ(net::OK, reader_->net_error()); |
| 958 EXPECT_EQ(0, bytes_read); | 958 EXPECT_EQ(0, bytes_read); |
| 959 EXPECT_EQ(kBufferSize, static_cast<size_t>(async_bytes_read)); | 959 EXPECT_EQ(kBufferSize, static_cast<size_t>(async_bytes_read)); |
| 960 for (size_t j = 0; j < kBufferSize; j++) { | 960 for (size_t j = 0; j < kBufferSize; j++) { |
| 961 EXPECT_EQ(current_value, buffer->data()[j]); | 961 EXPECT_EQ(current_value, buffer->data()[j]); |
| 962 current_value++; | 962 current_value++; |
| 963 } | 963 } |
| 964 } | 964 } |
| 965 } | 965 } |
| 966 | 966 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 995 std::unique_ptr<FakeFileStreamReader> reader( | 995 std::unique_ptr<FakeFileStreamReader> reader( |
| 996 new FakeFileStreamReader(kData1)); | 996 new FakeFileStreamReader(kData1)); |
| 997 reader->SetAsyncRunner(message_loop_.task_runner().get()); | 997 reader->SetAsyncRunner(message_loop_.task_runner().get()); |
| 998 ExpectLocalFileCall(kData1Path, kTime, 0, reader.release()); | 998 ExpectLocalFileCall(kData1Path, kTime, 0, reader.release()); |
| 999 | 999 |
| 1000 int size_result = -1; | 1000 int size_result = -1; |
| 1001 EXPECT_FALSE(IsReaderTotalSizeCalculated()); | 1001 EXPECT_FALSE(IsReaderTotalSizeCalculated()); |
| 1002 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 1002 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 1003 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 1003 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 1004 CheckSizeNotCalculatedYet(size_result); | 1004 CheckSizeNotCalculatedYet(size_result); |
| 1005 message_loop_.RunUntilIdle(); | 1005 base::RunLoop().RunUntilIdle(); |
| 1006 CheckSizeCalculatedAsynchronously(kDataSize, size_result); | 1006 CheckSizeCalculatedAsynchronously(kDataSize, size_result); |
| 1007 | 1007 |
| 1008 scoped_refptr<net::IOBuffer> buffer = CreateBuffer(kDataSize); | 1008 scoped_refptr<net::IOBuffer> buffer = CreateBuffer(kDataSize); |
| 1009 | 1009 |
| 1010 int bytes_read = 0; | 1010 int bytes_read = 0; |
| 1011 int async_bytes_read = 0; | 1011 int async_bytes_read = 0; |
| 1012 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 1012 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 1013 reader_->Read(buffer.get(), kDataSize, &bytes_read, | 1013 reader_->Read(buffer.get(), kDataSize, &bytes_read, |
| 1014 base::Bind(&SetValue<int>, &async_bytes_read))); | 1014 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 1015 EXPECT_EQ(0, async_bytes_read); | 1015 EXPECT_EQ(0, async_bytes_read); |
| 1016 message_loop_.RunUntilIdle(); | 1016 base::RunLoop().RunUntilIdle(); |
| 1017 EXPECT_EQ(net::OK, reader_->net_error()); | 1017 EXPECT_EQ(net::OK, reader_->net_error()); |
| 1018 EXPECT_EQ(0, bytes_read); | 1018 EXPECT_EQ(0, bytes_read); |
| 1019 EXPECT_EQ(kDataSize, static_cast<size_t>(async_bytes_read)); | 1019 EXPECT_EQ(kDataSize, static_cast<size_t>(async_bytes_read)); |
| 1020 EXPECT_EQ(0, memcmp(buffer->data(), "Hello there. This is multi-content.", | 1020 EXPECT_EQ(0, memcmp(buffer->data(), "Hello there. This is multi-content.", |
| 1021 kDataSize)); | 1021 kDataSize)); |
| 1022 } | 1022 } |
| 1023 | 1023 |
| 1024 TEST_F(BlobReaderTest, StateErrors) { | 1024 TEST_F(BlobReaderTest, StateErrors) { |
| 1025 // Test common variables | 1025 // Test common variables |
| 1026 int bytes_read = -1; | 1026 int bytes_read = -1; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 builder1.AppendFile(kPath, 0, kData.size(), kTime); | 1108 builder1.AppendFile(kPath, 0, kData.size(), kTime); |
| 1109 this->InitializeReader(&builder1); | 1109 this->InitializeReader(&builder1); |
| 1110 FakeFileStreamReader* reader = new FakeFileStreamReader(kData); | 1110 FakeFileStreamReader* reader = new FakeFileStreamReader(kData); |
| 1111 reader->SetAsyncRunner(message_loop_.task_runner().get()); | 1111 reader->SetAsyncRunner(message_loop_.task_runner().get()); |
| 1112 reader->SetReturnError(net::ERR_FILE_NOT_FOUND); | 1112 reader->SetReturnError(net::ERR_FILE_NOT_FOUND); |
| 1113 ExpectLocalFileCall(kPath, kTime, 0, reader); | 1113 ExpectLocalFileCall(kPath, kTime, 0, reader); |
| 1114 | 1114 |
| 1115 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 1115 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 1116 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 1116 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 1117 EXPECT_EQ(net::OK, reader_->net_error()); | 1117 EXPECT_EQ(net::OK, reader_->net_error()); |
| 1118 message_loop_.RunUntilIdle(); | 1118 base::RunLoop().RunUntilIdle(); |
| 1119 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, size_result); | 1119 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, size_result); |
| 1120 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); | 1120 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); |
| 1121 | 1121 |
| 1122 // Case: Error on read. | 1122 // Case: Error on read. |
| 1123 BlobDataBuilder builder2("uuid2"); | 1123 BlobDataBuilder builder2("uuid2"); |
| 1124 builder2.AppendFile(kPath, 0, kData.size(), kTime); | 1124 builder2.AppendFile(kPath, 0, kData.size(), kTime); |
| 1125 this->InitializeReader(&builder2); | 1125 this->InitializeReader(&builder2); |
| 1126 reader = new FakeFileStreamReader(kData); | 1126 reader = new FakeFileStreamReader(kData); |
| 1127 ExpectLocalFileCall(kPath, kTime, 0, reader); | 1127 ExpectLocalFileCall(kPath, kTime, 0, reader); |
| 1128 EXPECT_EQ(BlobReader::Status::DONE, | 1128 EXPECT_EQ(BlobReader::Status::DONE, |
| 1129 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 1129 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 1130 reader->SetReturnError(net::ERR_FILE_NOT_FOUND); | 1130 reader->SetReturnError(net::ERR_FILE_NOT_FOUND); |
| 1131 reader->SetAsyncRunner(message_loop_.task_runner().get()); | 1131 reader->SetAsyncRunner(message_loop_.task_runner().get()); |
| 1132 | 1132 |
| 1133 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kData.size())); | 1133 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kData.size())); |
| 1134 int bytes_read = 0; | 1134 int bytes_read = 0; |
| 1135 int async_bytes_read = 0; | 1135 int async_bytes_read = 0; |
| 1136 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 1136 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 1137 reader_->Read(buffer.get(), kData.size(), &bytes_read, | 1137 reader_->Read(buffer.get(), kData.size(), &bytes_read, |
| 1138 base::Bind(&SetValue<int>, &async_bytes_read))); | 1138 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 1139 EXPECT_EQ(net::OK, reader_->net_error()); | 1139 EXPECT_EQ(net::OK, reader_->net_error()); |
| 1140 message_loop_.RunUntilIdle(); | 1140 base::RunLoop().RunUntilIdle(); |
| 1141 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, async_bytes_read); | 1141 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, async_bytes_read); |
| 1142 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); | 1142 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); |
| 1143 } | 1143 } |
| 1144 | 1144 |
| 1145 TEST_F(BlobReaderTest, RangeError) { | 1145 TEST_F(BlobReaderTest, RangeError) { |
| 1146 const std::string kData("Hello!!!"); | 1146 const std::string kData("Hello!!!"); |
| 1147 const size_t kDataSize = 8ul; | 1147 const size_t kDataSize = 8ul; |
| 1148 const uint64_t kReadLength = 4ull; | 1148 const uint64_t kReadLength = 4ull; |
| 1149 | 1149 |
| 1150 // Case: offset too high. | 1150 // Case: offset too high. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1178 context_.CreatePendingBlob(kUuid, "", ""); | 1178 context_.CreatePendingBlob(kUuid, "", ""); |
| 1179 blob_handle_ = context_.GetBlobDataFromUUID(kUuid); | 1179 blob_handle_ = context_.GetBlobDataFromUUID(kUuid); |
| 1180 provider_ = new MockFileStreamReaderProvider(); | 1180 provider_ = new MockFileStreamReaderProvider(); |
| 1181 reader_.reset(new BlobReader(blob_handle_.get(), base::WrapUnique(provider_), | 1181 reader_.reset(new BlobReader(blob_handle_.get(), base::WrapUnique(provider_), |
| 1182 message_loop_.task_runner().get())); | 1182 message_loop_.task_runner().get())); |
| 1183 int size_result = -1; | 1183 int size_result = -1; |
| 1184 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 1184 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 1185 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 1185 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 1186 EXPECT_FALSE(reader_->IsInMemory()); | 1186 EXPECT_FALSE(reader_->IsInMemory()); |
| 1187 context_.CancelPendingBlob(kUuid, IPCBlobCreationCancelCode::UNKNOWN); | 1187 context_.CancelPendingBlob(kUuid, IPCBlobCreationCancelCode::UNKNOWN); |
| 1188 message_loop_.RunUntilIdle(); | 1188 base::RunLoop().RunUntilIdle(); |
| 1189 EXPECT_EQ(net::ERR_FAILED, size_result); | 1189 EXPECT_EQ(net::ERR_FAILED, size_result); |
| 1190 } | 1190 } |
| 1191 | 1191 |
| 1192 TEST_F(BlobReaderTest, ReadFromIncompleteBlob) { | 1192 TEST_F(BlobReaderTest, ReadFromIncompleteBlob) { |
| 1193 const std::string kUuid("uuid1"); | 1193 const std::string kUuid("uuid1"); |
| 1194 const std::string kData("Hello!!!"); | 1194 const std::string kData("Hello!!!"); |
| 1195 const size_t kDataSize = 8ul; | 1195 const size_t kDataSize = 8ul; |
| 1196 | 1196 |
| 1197 BlobDataBuilder b(kUuid); | 1197 BlobDataBuilder b(kUuid); |
| 1198 b.AppendData(kData); | 1198 b.AppendData(kData); |
| 1199 context_.CreatePendingBlob(kUuid, "", ""); | 1199 context_.CreatePendingBlob(kUuid, "", ""); |
| 1200 blob_handle_ = context_.GetBlobDataFromUUID(kUuid); | 1200 blob_handle_ = context_.GetBlobDataFromUUID(kUuid); |
| 1201 provider_ = new MockFileStreamReaderProvider(); | 1201 provider_ = new MockFileStreamReaderProvider(); |
| 1202 reader_.reset(new BlobReader(blob_handle_.get(), base::WrapUnique(provider_), | 1202 reader_.reset(new BlobReader(blob_handle_.get(), base::WrapUnique(provider_), |
| 1203 message_loop_.task_runner().get())); | 1203 message_loop_.task_runner().get())); |
| 1204 int size_result = -1; | 1204 int size_result = -1; |
| 1205 EXPECT_EQ(BlobReader::Status::IO_PENDING, | 1205 EXPECT_EQ(BlobReader::Status::IO_PENDING, |
| 1206 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 1206 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
| 1207 EXPECT_FALSE(reader_->IsInMemory()); | 1207 EXPECT_FALSE(reader_->IsInMemory()); |
| 1208 context_.CompletePendingBlob(b); | 1208 context_.CompletePendingBlob(b); |
| 1209 message_loop_.RunUntilIdle(); | 1209 base::RunLoop().RunUntilIdle(); |
| 1210 CheckSizeCalculatedAsynchronously(kDataSize, size_result); | 1210 CheckSizeCalculatedAsynchronously(kDataSize, size_result); |
| 1211 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kDataSize)); | 1211 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kDataSize)); |
| 1212 | 1212 |
| 1213 int bytes_read = 0; | 1213 int bytes_read = 0; |
| 1214 int async_bytes_read = 0; | 1214 int async_bytes_read = 0; |
| 1215 EXPECT_EQ(BlobReader::Status::DONE, | 1215 EXPECT_EQ(BlobReader::Status::DONE, |
| 1216 reader_->Read(buffer.get(), kDataSize, &bytes_read, | 1216 reader_->Read(buffer.get(), kDataSize, &bytes_read, |
| 1217 base::Bind(&SetValue<int>, &async_bytes_read))); | 1217 base::Bind(&SetValue<int>, &async_bytes_read))); |
| 1218 EXPECT_EQ(net::OK, reader_->net_error()); | 1218 EXPECT_EQ(net::OK, reader_->net_error()); |
| 1219 EXPECT_EQ(kDataSize, static_cast<size_t>(bytes_read)); | 1219 EXPECT_EQ(kDataSize, static_cast<size_t>(bytes_read)); |
| 1220 EXPECT_EQ(0, async_bytes_read); | 1220 EXPECT_EQ(0, async_bytes_read); |
| 1221 EXPECT_EQ(kData, std::string(buffer->data(), kDataSize)); | 1221 EXPECT_EQ(kData, std::string(buffer->data(), kDataSize)); |
| 1222 EXPECT_EQ(net::OK, size_result); | 1222 EXPECT_EQ(net::OK, size_result); |
| 1223 } | 1223 } |
| 1224 | 1224 |
| 1225 } // namespace storage | 1225 } // namespace storage |
| OLD | NEW |