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 #include "net/base/elements_upload_data_stream.h" | 5 #include "net/base/elements_upload_data_stream.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <limits> | 10 #include <limits> |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 int bytes_read = | 176 int bytes_read = |
177 stream->Read(buf.get(), kTestBufferSize, CompletionCallback()); | 177 stream->Read(buf.get(), kTestBufferSize, CompletionCallback()); |
178 ASSERT_LE(0, bytes_read); // Not an error. | 178 ASSERT_LE(0, bytes_read); // Not an error. |
179 } | 179 } |
180 EXPECT_EQ(kTestDataSize, stream->position()); | 180 EXPECT_EQ(kTestDataSize, stream->position()); |
181 ASSERT_TRUE(stream->IsEOF()); | 181 ASSERT_TRUE(stream->IsEOF()); |
182 } | 182 } |
183 | 183 |
184 TEST_F(ElementsUploadDataStreamTest, File) { | 184 TEST_F(ElementsUploadDataStreamTest, File) { |
185 base::FilePath temp_file_path; | 185 base::FilePath temp_file_path; |
186 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 186 ASSERT_TRUE( |
187 &temp_file_path)); | 187 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
188 ASSERT_EQ(static_cast<int>(kTestDataSize), | 188 ASSERT_EQ(static_cast<int>(kTestDataSize), |
189 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 189 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
190 | 190 |
191 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( | 191 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( |
192 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, | 192 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
193 std::numeric_limits<uint64_t>::max(), base::Time()))); | 193 std::numeric_limits<uint64_t>::max(), base::Time()))); |
194 | 194 |
195 TestCompletionCallback init_callback; | 195 TestCompletionCallback init_callback; |
196 std::unique_ptr<UploadDataStream> stream( | 196 std::unique_ptr<UploadDataStream> stream( |
197 new ElementsUploadDataStream(std::move(element_readers_), 0)); | 197 new ElementsUploadDataStream(std::move(element_readers_), 0)); |
(...skipping 11 matching lines...) Expand all Loading... |
209 ERR_IO_PENDING, | 209 ERR_IO_PENDING, |
210 stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); | 210 stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); |
211 ASSERT_LE(0, read_callback.WaitForResult()); // Not an error. | 211 ASSERT_LE(0, read_callback.WaitForResult()); // Not an error. |
212 } | 212 } |
213 EXPECT_EQ(kTestDataSize, stream->position()); | 213 EXPECT_EQ(kTestDataSize, stream->position()); |
214 ASSERT_TRUE(stream->IsEOF()); | 214 ASSERT_TRUE(stream->IsEOF()); |
215 } | 215 } |
216 | 216 |
217 TEST_F(ElementsUploadDataStreamTest, FileSmallerThanLength) { | 217 TEST_F(ElementsUploadDataStreamTest, FileSmallerThanLength) { |
218 base::FilePath temp_file_path; | 218 base::FilePath temp_file_path; |
219 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 219 ASSERT_TRUE( |
220 &temp_file_path)); | 220 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
221 ASSERT_EQ(static_cast<int>(kTestDataSize), | 221 ASSERT_EQ(static_cast<int>(kTestDataSize), |
222 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 222 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
223 const uint64_t kFakeSize = kTestDataSize * 2; | 223 const uint64_t kFakeSize = kTestDataSize * 2; |
224 | 224 |
225 UploadFileElementReader::ScopedOverridingContentLengthForTests | 225 UploadFileElementReader::ScopedOverridingContentLengthForTests |
226 overriding_content_length(kFakeSize); | 226 overriding_content_length(kFakeSize); |
227 | 227 |
228 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( | 228 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( |
229 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, | 229 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
230 std::numeric_limits<uint64_t>::max(), base::Time()))); | 230 std::numeric_limits<uint64_t>::max(), base::Time()))); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 EXPECT_THAT(read_callback.WaitForResult(), IsError(ERR_FAILED)); | 328 EXPECT_THAT(read_callback.WaitForResult(), IsError(ERR_FAILED)); |
329 EXPECT_EQ(0U, stream->position()); | 329 EXPECT_EQ(0U, stream->position()); |
330 EXPECT_FALSE(stream->IsEOF()); | 330 EXPECT_FALSE(stream->IsEOF()); |
331 | 331 |
332 // The buffer is empty | 332 // The buffer is empty |
333 EXPECT_EQ(0, std::count(buf->data(), buf->data() + kTestBufferSize, 0)); | 333 EXPECT_EQ(0, std::count(buf->data(), buf->data() + kTestBufferSize, 0)); |
334 } | 334 } |
335 | 335 |
336 TEST_F(ElementsUploadDataStreamTest, FileAndBytes) { | 336 TEST_F(ElementsUploadDataStreamTest, FileAndBytes) { |
337 base::FilePath temp_file_path; | 337 base::FilePath temp_file_path; |
338 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 338 ASSERT_TRUE( |
339 &temp_file_path)); | 339 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
340 ASSERT_EQ(static_cast<int>(kTestDataSize), | 340 ASSERT_EQ(static_cast<int>(kTestDataSize), |
341 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 341 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
342 | 342 |
343 const uint64_t kFileRangeOffset = 1; | 343 const uint64_t kFileRangeOffset = 1; |
344 const uint64_t kFileRangeLength = 4; | 344 const uint64_t kFileRangeLength = 4; |
345 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( | 345 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( |
346 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, | 346 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, |
347 kFileRangeOffset, kFileRangeLength, base::Time()))); | 347 kFileRangeOffset, kFileRangeLength, base::Time()))); |
348 | 348 |
349 element_readers_.push_back( | 349 element_readers_.push_back( |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 IsError(ERR_IO_PENDING)); | 548 IsError(ERR_IO_PENDING)); |
549 int error_code = init_callback.WaitForResult(); | 549 int error_code = init_callback.WaitForResult(); |
550 if (error_expected) | 550 if (error_expected) |
551 ASSERT_THAT(error_code, IsError(ERR_UPLOAD_FILE_CHANGED)); | 551 ASSERT_THAT(error_code, IsError(ERR_UPLOAD_FILE_CHANGED)); |
552 else | 552 else |
553 ASSERT_THAT(error_code, IsOk()); | 553 ASSERT_THAT(error_code, IsOk()); |
554 } | 554 } |
555 | 555 |
556 TEST_F(ElementsUploadDataStreamTest, FileChanged) { | 556 TEST_F(ElementsUploadDataStreamTest, FileChanged) { |
557 base::FilePath temp_file_path; | 557 base::FilePath temp_file_path; |
558 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 558 ASSERT_TRUE( |
559 &temp_file_path)); | 559 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
560 ASSERT_EQ(static_cast<int>(kTestDataSize), | 560 ASSERT_EQ(static_cast<int>(kTestDataSize), |
561 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 561 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
562 | 562 |
563 base::File::Info file_info; | 563 base::File::Info file_info; |
564 ASSERT_TRUE(base::GetFileInfo(temp_file_path, &file_info)); | 564 ASSERT_TRUE(base::GetFileInfo(temp_file_path, &file_info)); |
565 | 565 |
566 // Test file not changed. | 566 // Test file not changed. |
567 FileChangedHelper(temp_file_path, file_info.last_modified, false); | 567 FileChangedHelper(temp_file_path, file_info.last_modified, false); |
568 | 568 |
569 // Test file changed. | 569 // Test file changed. |
570 FileChangedHelper(temp_file_path, | 570 FileChangedHelper(temp_file_path, |
571 file_info.last_modified - base::TimeDelta::FromSeconds(1), | 571 file_info.last_modified - base::TimeDelta::FromSeconds(1), |
572 true); | 572 true); |
573 } | 573 } |
574 | 574 |
575 TEST_F(ElementsUploadDataStreamTest, MultipleInit) { | 575 TEST_F(ElementsUploadDataStreamTest, MultipleInit) { |
576 base::FilePath temp_file_path; | 576 base::FilePath temp_file_path; |
577 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 577 ASSERT_TRUE( |
578 &temp_file_path)); | 578 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
579 ASSERT_EQ(static_cast<int>(kTestDataSize), | 579 ASSERT_EQ(static_cast<int>(kTestDataSize), |
580 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 580 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
581 | 581 |
582 // Prepare data. | 582 // Prepare data. |
583 element_readers_.push_back( | 583 element_readers_.push_back( |
584 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); | 584 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); |
585 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( | 585 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( |
586 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, | 586 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
587 std::numeric_limits<uint64_t>::max(), base::Time()))); | 587 std::numeric_limits<uint64_t>::max(), base::Time()))); |
588 std::unique_ptr<UploadDataStream> stream( | 588 std::unique_ptr<UploadDataStream> stream( |
(...skipping 22 matching lines...) Expand all Loading... |
611 EXPECT_FALSE(stream->IsEOF()); | 611 EXPECT_FALSE(stream->IsEOF()); |
612 EXPECT_EQ(kTestDataSize*2, stream->size()); | 612 EXPECT_EQ(kTestDataSize*2, stream->size()); |
613 | 613 |
614 // Read again. | 614 // Read again. |
615 EXPECT_EQ(expected_data, ReadFromUploadDataStream(stream.get())); | 615 EXPECT_EQ(expected_data, ReadFromUploadDataStream(stream.get())); |
616 EXPECT_TRUE(stream->IsEOF()); | 616 EXPECT_TRUE(stream->IsEOF()); |
617 } | 617 } |
618 | 618 |
619 TEST_F(ElementsUploadDataStreamTest, MultipleInitAsync) { | 619 TEST_F(ElementsUploadDataStreamTest, MultipleInitAsync) { |
620 base::FilePath temp_file_path; | 620 base::FilePath temp_file_path; |
621 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 621 ASSERT_TRUE( |
622 &temp_file_path)); | 622 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
623 ASSERT_EQ(static_cast<int>(kTestDataSize), | 623 ASSERT_EQ(static_cast<int>(kTestDataSize), |
624 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 624 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
625 TestCompletionCallback test_callback; | 625 TestCompletionCallback test_callback; |
626 | 626 |
627 // Prepare data. | 627 // Prepare data. |
628 element_readers_.push_back( | 628 element_readers_.push_back( |
629 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); | 629 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); |
630 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( | 630 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( |
631 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, | 631 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
632 std::numeric_limits<uint64_t>::max(), base::Time()))); | 632 std::numeric_limits<uint64_t>::max(), base::Time()))); |
(...skipping 21 matching lines...) Expand all Loading... |
654 EXPECT_FALSE(stream->IsEOF()); | 654 EXPECT_FALSE(stream->IsEOF()); |
655 EXPECT_EQ(kTestDataSize*2, stream->size()); | 655 EXPECT_EQ(kTestDataSize*2, stream->size()); |
656 | 656 |
657 // Read again. | 657 // Read again. |
658 EXPECT_EQ(expected_data, ReadFromUploadDataStream(stream.get())); | 658 EXPECT_EQ(expected_data, ReadFromUploadDataStream(stream.get())); |
659 EXPECT_TRUE(stream->IsEOF()); | 659 EXPECT_TRUE(stream->IsEOF()); |
660 } | 660 } |
661 | 661 |
662 TEST_F(ElementsUploadDataStreamTest, InitToReset) { | 662 TEST_F(ElementsUploadDataStreamTest, InitToReset) { |
663 base::FilePath temp_file_path; | 663 base::FilePath temp_file_path; |
664 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 664 ASSERT_TRUE( |
665 &temp_file_path)); | 665 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
666 ASSERT_EQ(static_cast<int>(kTestDataSize), | 666 ASSERT_EQ(static_cast<int>(kTestDataSize), |
667 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 667 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
668 | 668 |
669 // Prepare data. | 669 // Prepare data. |
670 element_readers_.push_back( | 670 element_readers_.push_back( |
671 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); | 671 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); |
672 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( | 672 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( |
673 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, | 673 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
674 std::numeric_limits<uint64_t>::max(), base::Time()))); | 674 std::numeric_limits<uint64_t>::max(), base::Time()))); |
675 std::unique_ptr<UploadDataStream> stream( | 675 std::unique_ptr<UploadDataStream> stream( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); | 712 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); |
713 EXPECT_EQ(ERR_IO_PENDING, | 713 EXPECT_EQ(ERR_IO_PENDING, |
714 stream->Read( | 714 stream->Read( |
715 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 715 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |
716 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 716 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
717 EXPECT_EQ(expected_data, buf2); | 717 EXPECT_EQ(expected_data, buf2); |
718 } | 718 } |
719 | 719 |
720 TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncInit) { | 720 TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncInit) { |
721 base::FilePath temp_file_path; | 721 base::FilePath temp_file_path; |
722 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 722 ASSERT_TRUE( |
723 &temp_file_path)); | 723 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
724 ASSERT_EQ(static_cast<int>(kTestDataSize), | 724 ASSERT_EQ(static_cast<int>(kTestDataSize), |
725 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 725 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
726 | 726 |
727 // Prepare data. | 727 // Prepare data. |
728 element_readers_.push_back( | 728 element_readers_.push_back( |
729 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); | 729 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); |
730 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( | 730 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( |
731 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, | 731 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
732 std::numeric_limits<uint64_t>::max(), base::Time()))); | 732 std::numeric_limits<uint64_t>::max(), base::Time()))); |
733 std::unique_ptr<UploadDataStream> stream( | 733 std::unique_ptr<UploadDataStream> stream( |
(...skipping 26 matching lines...) Expand all Loading... |
760 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 760 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
761 EXPECT_EQ(expected_data, buf2); | 761 EXPECT_EQ(expected_data, buf2); |
762 EXPECT_TRUE(stream->IsEOF()); | 762 EXPECT_TRUE(stream->IsEOF()); |
763 | 763 |
764 // Make sure callbacks are not called for cancelled operations. | 764 // Make sure callbacks are not called for cancelled operations. |
765 EXPECT_FALSE(init_callback1.have_result()); | 765 EXPECT_FALSE(init_callback1.have_result()); |
766 } | 766 } |
767 | 767 |
768 TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncRead) { | 768 TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncRead) { |
769 base::FilePath temp_file_path; | 769 base::FilePath temp_file_path; |
770 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 770 ASSERT_TRUE( |
771 &temp_file_path)); | 771 base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file_path)); |
772 ASSERT_EQ(static_cast<int>(kTestDataSize), | 772 ASSERT_EQ(static_cast<int>(kTestDataSize), |
773 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 773 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
774 | 774 |
775 // Prepare data. | 775 // Prepare data. |
776 element_readers_.push_back( | 776 element_readers_.push_back( |
777 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); | 777 base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); |
778 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( | 778 element_readers_.push_back(base::WrapUnique(new UploadFileElementReader( |
779 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, | 779 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, |
780 std::numeric_limits<uint64_t>::max(), base::Time()))); | 780 std::numeric_limits<uint64_t>::max(), base::Time()))); |
781 std::unique_ptr<UploadDataStream> stream( | 781 std::unique_ptr<UploadDataStream> stream( |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 819 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |
820 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 820 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
821 EXPECT_EQ(expected_data, buf2); | 821 EXPECT_EQ(expected_data, buf2); |
822 EXPECT_TRUE(stream->IsEOF()); | 822 EXPECT_TRUE(stream->IsEOF()); |
823 | 823 |
824 // Make sure callbacks are not called for cancelled operations. | 824 // Make sure callbacks are not called for cancelled operations. |
825 EXPECT_FALSE(read_callback1.have_result()); | 825 EXPECT_FALSE(read_callback1.have_result()); |
826 } | 826 } |
827 | 827 |
828 } // namespace net | 828 } // namespace net |
OLD | NEW |