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

Side by Side Diff: content/browser/download/download_file_unittest.cc

Issue 2782033002: remove is_sparse_file_ from DownloadFileImpl (Closed)
Patch Set: add IsSparseFile() helper method Created 3 years, 8 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
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 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 // This is a test DownloadFileImpl that has no retry delay and, on Posix, 117 // This is a test DownloadFileImpl that has no retry delay and, on Posix,
118 // retries renames failed due to ACCESS_DENIED. 118 // retries renames failed due to ACCESS_DENIED.
119 class TestDownloadFileImpl : public DownloadFileImpl { 119 class TestDownloadFileImpl : public DownloadFileImpl {
120 public: 120 public:
121 TestDownloadFileImpl( 121 TestDownloadFileImpl(
122 std::unique_ptr<DownloadSaveInfo> save_info, 122 std::unique_ptr<DownloadSaveInfo> save_info,
123 const base::FilePath& default_downloads_directory, 123 const base::FilePath& default_downloads_directory,
124 std::unique_ptr<ByteStreamReader> stream, 124 std::unique_ptr<ByteStreamReader> stream,
125 const std::vector<DownloadItem::ReceivedSlice>& received_slices, 125 const std::vector<DownloadItem::ReceivedSlice>& received_slices,
126 const net::NetLogWithSource& net_log, 126 const net::NetLogWithSource& net_log,
127 bool is_sparse_file,
128 base::WeakPtr<DownloadDestinationObserver> observer) 127 base::WeakPtr<DownloadDestinationObserver> observer)
129 : DownloadFileImpl(std::move(save_info), 128 : DownloadFileImpl(std::move(save_info),
130 default_downloads_directory, 129 default_downloads_directory,
131 std::move(stream), 130 std::move(stream),
132 received_slices, 131 received_slices,
133 net_log, 132 net_log,
134 is_sparse_file,
135 observer) {} 133 observer) {}
136 134
137 protected: 135 protected:
138 base::TimeDelta GetRetryDelayForFailedRename(int attempt_count) override { 136 base::TimeDelta GetRetryDelayForFailedRename(int attempt_count) override {
139 return base::TimeDelta::FromMilliseconds(0); 137 return base::TimeDelta::FromMilliseconds(0);
140 } 138 }
141 139
142 #if !defined(OS_WIN) 140 #if !defined(OS_WIN)
143 // On Posix, we don't encounter transient errors during renames, except 141 // On Posix, we don't encounter transient errors during renames, except
144 // possibly EAGAIN, which is difficult to replicate reliably. So we resort to 142 // possibly EAGAIN, which is difficult to replicate reliably. So we resort to
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 } 199 }
202 200
203 void SetInterruptReasonCallback(const base::Closure& closure, 201 void SetInterruptReasonCallback(const base::Closure& closure,
204 DownloadInterruptReason* reason_p, 202 DownloadInterruptReason* reason_p,
205 DownloadInterruptReason reason) { 203 DownloadInterruptReason reason) {
206 *reason_p = reason; 204 *reason_p = reason;
207 closure.Run(); 205 closure.Run();
208 } 206 }
209 207
210 bool CreateDownloadFile(int offset, bool calculate_hash) { 208 bool CreateDownloadFile(int offset, bool calculate_hash) {
211 return CreateDownloadFile(offset, 0, calculate_hash, false, 209 return CreateDownloadFile(offset, 0, calculate_hash,
212 DownloadItem::ReceivedSlices()); 210 DownloadItem::ReceivedSlices());
213 } 211 }
214 212
215 bool CreateDownloadFile(int offset, 213 bool CreateDownloadFile(int offset,
216 int length, 214 int length,
217 bool calculate_hash, 215 bool calculate_hash,
218 bool is_sparse_file,
219 const DownloadItem::ReceivedSlices& received_slices) { 216 const DownloadItem::ReceivedSlices& received_slices) {
220 // There can be only one. 217 // There can be only one.
221 DCHECK(!download_file_.get()); 218 DCHECK(!download_file_.get());
222 219
223 input_stream_ = new StrictMock<MockByteStreamReader>(); 220 input_stream_ = new StrictMock<MockByteStreamReader>();
224 221
225 // TODO: Need to actually create a function that'll set the variables 222 // TODO: Need to actually create a function that'll set the variables
226 // based on the inputs from the callback. 223 // based on the inputs from the callback.
227 EXPECT_CALL(*input_stream_, RegisterCallback(_)) 224 EXPECT_CALL(*input_stream_, RegisterCallback(_))
228 .WillOnce(Invoke(this, &DownloadFileTest::RegisterCallback)) 225 .WillOnce(Invoke(this, &DownloadFileTest::RegisterCallback))
229 .RetiresOnSaturation(); 226 .RetiresOnSaturation();
230 227
231 std::unique_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo()); 228 std::unique_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo());
232 save_info->offset = offset; 229 save_info->offset = offset;
233 save_info->length = length; 230 save_info->length = length;
234 231
235 download_file_.reset(new TestDownloadFileImpl( 232 download_file_.reset(new TestDownloadFileImpl(
236 std::move(save_info), base::FilePath(), 233 std::move(save_info), base::FilePath(),
237 std::unique_ptr<ByteStreamReader>(input_stream_), received_slices, 234 std::unique_ptr<ByteStreamReader>(input_stream_), received_slices,
238 net::NetLogWithSource(), is_sparse_file, 235 net::NetLogWithSource(), observer_factory_.GetWeakPtr()));
239 observer_factory_.GetWeakPtr()));
240 236
241 EXPECT_CALL(*input_stream_, Read(_, _)) 237 EXPECT_CALL(*input_stream_, Read(_, _))
242 .WillOnce(Return(ByteStreamReader::STREAM_EMPTY)) 238 .WillOnce(Return(ByteStreamReader::STREAM_EMPTY))
243 .RetiresOnSaturation(); 239 .RetiresOnSaturation();
244 240
245 base::WeakPtrFactory<DownloadFileTest> weak_ptr_factory(this); 241 base::WeakPtrFactory<DownloadFileTest> weak_ptr_factory(this);
246 DownloadInterruptReason result = DOWNLOAD_INTERRUPT_REASON_NONE; 242 DownloadInterruptReason result = DOWNLOAD_INTERRUPT_REASON_NONE;
247 base::RunLoop loop_runner; 243 base::RunLoop loop_runner;
248 download_file_->Initialize(base::Bind( 244 download_file_->Initialize(base::Bind(
249 &DownloadFileTest::SetInterruptReasonCallback, 245 &DownloadFileTest::SetInterruptReasonCallback,
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 DestroyDownloadFile(0); 899 DestroyDownloadFile(0);
904 } 900 }
905 901
906 // Tests for concurrent streams handling, used for parallel download. 902 // Tests for concurrent streams handling, used for parallel download.
907 // 903 //
908 // Activate both streams at the same time. 904 // Activate both streams at the same time.
909 TEST_F(DownloadFileTest, MutipleStreamsWrite) { 905 TEST_F(DownloadFileTest, MutipleStreamsWrite) {
910 int64_t stream_0_length = GetBuffersLength(kTestData6, 2); 906 int64_t stream_0_length = GetBuffersLength(kTestData6, 2);
911 int64_t stream_1_length = GetBuffersLength(kTestData7, 2); 907 int64_t stream_1_length = GetBuffersLength(kTestData7, 2);
912 908
913 ASSERT_TRUE(CreateDownloadFile(0, stream_0_length, true, true, 909 ASSERT_TRUE(CreateDownloadFile(0, stream_0_length, true,
914 DownloadItem::ReceivedSlices())); 910 DownloadItem::ReceivedSlices()));
915 911
916 PrepareStream(&input_stream_, 0, false, true, kTestData6, 2); 912 PrepareStream(&input_stream_, 0, false, true, kTestData6, 2);
917 PrepareStream(&additional_streams_[0], stream_0_length, true, true, 913 PrepareStream(&additional_streams_[0], stream_0_length, true, true,
918 kTestData7, 2); 914 kTestData7, 2);
919 915
920 EXPECT_CALL(*additional_streams_[0], RegisterCallback(_)) 916 EXPECT_CALL(*additional_streams_[0], RegisterCallback(_))
921 .RetiresOnSaturation(); 917 .RetiresOnSaturation();
922 EXPECT_CALL(*(observer_.get()), MockDestinationCompleted(_, _)); 918 EXPECT_CALL(*(observer_.get()), MockDestinationCompleted(_, _));
923 919
(...skipping 18 matching lines...) Expand all
942 int64_t stream_0_length = GetBuffersLength(kTestData6, 2); 938 int64_t stream_0_length = GetBuffersLength(kTestData6, 2);
943 939
944 // The second stream has a limited length and should be partially written 940 // The second stream has a limited length and should be partially written
945 // to disk. When we prepare the stream, we fill the stream with 2 full buffer. 941 // to disk. When we prepare the stream, we fill the stream with 2 full buffer.
946 int64_t stream_1_length = GetBuffersLength(kTestData7, 2) - 1; 942 int64_t stream_1_length = GetBuffersLength(kTestData7, 2) - 1;
947 943
948 // The last stream can't have length limit, it's a half open request, e.g 944 // The last stream can't have length limit, it's a half open request, e.g
949 // "Range:50-". 945 // "Range:50-".
950 int64_t stream_2_length = GetBuffersLength(kTestData6, 2); 946 int64_t stream_2_length = GetBuffersLength(kTestData6, 2);
951 947
952 ASSERT_TRUE(CreateDownloadFile(0, stream_0_length, true, true, 948 ASSERT_TRUE(CreateDownloadFile(0, stream_0_length, true,
953 DownloadItem::ReceivedSlices())); 949 DownloadItem::ReceivedSlices()));
954 950
955 PrepareStream(&input_stream_, 0, false, true, kTestData6, 2); 951 PrepareStream(&input_stream_, 0, false, true, kTestData6, 2);
956 PrepareStream(&additional_streams_[0], stream_0_length, true, false, 952 PrepareStream(&additional_streams_[0], stream_0_length, true, false,
957 kTestData7, 2); 953 kTestData7, 2);
958 PrepareStream(&additional_streams_[1], stream_0_length + stream_1_length, 954 PrepareStream(&additional_streams_[1], stream_0_length + stream_1_length,
959 true, true, kTestData6, 2); 955 true, true, kTestData6, 2);
960 956
961 EXPECT_CALL(*additional_streams_[0], RegisterCallback(_)) 957 EXPECT_CALL(*additional_streams_[0], RegisterCallback(_))
962 .Times(2) 958 .Times(2)
(...skipping 28 matching lines...) Expand all
991 987
992 download_file_->Cancel(); 988 download_file_->Cancel();
993 DestroyDownloadFile(0, false); 989 DestroyDownloadFile(0, false);
994 } 990 }
995 991
996 // Activate and deplete one stream, later add the second stream. 992 // Activate and deplete one stream, later add the second stream.
997 TEST_F(DownloadFileTest, MutipleStreamsFirstStreamWriteAllData) { 993 TEST_F(DownloadFileTest, MutipleStreamsFirstStreamWriteAllData) {
998 int64_t stream_0_length = GetBuffersLength(kTestData8, 4); 994 int64_t stream_0_length = GetBuffersLength(kTestData8, 4);
999 995
1000 ASSERT_TRUE(CreateDownloadFile(0, DownloadSaveInfo::kLengthFullContent, true, 996 ASSERT_TRUE(CreateDownloadFile(0, DownloadSaveInfo::kLengthFullContent, true,
1001 true, DownloadItem::ReceivedSlices())); 997 DownloadItem::ReceivedSlices()));
1002 998
1003 PrepareStream(&input_stream_, 0, false, true, kTestData8, 4); 999 PrepareStream(&input_stream_, 0, false, true, kTestData8, 4);
1004 1000
1005 EXPECT_CALL(*(observer_.get()), MockDestinationCompleted(_, _)); 1001 EXPECT_CALL(*(observer_.get()), MockDestinationCompleted(_, _));
1006 1002
1007 sink_callback_.Run(); 1003 sink_callback_.Run();
1008 base::RunLoop().RunUntilIdle(); 1004 base::RunLoop().RunUntilIdle();
1009 1005
1010 // Add another stream, the file is already closed, so nothing should be 1006 // Add another stream, the file is already closed, so nothing should be
1011 // called. 1007 // called.
1012 EXPECT_FALSE(download_file_->InProgress()); 1008 EXPECT_FALSE(download_file_->InProgress());
1013 1009
1014 additional_streams_[0] = new StrictMock<MockByteStreamReader>(); 1010 additional_streams_[0] = new StrictMock<MockByteStreamReader>();
1015 download_file_->AddByteStream( 1011 download_file_->AddByteStream(
1016 std::unique_ptr<MockByteStreamReader>(additional_streams_[0]), 1012 std::unique_ptr<MockByteStreamReader>(additional_streams_[0]),
1017 stream_0_length - 1, DownloadSaveInfo::kLengthFullContent); 1013 stream_0_length - 1, DownloadSaveInfo::kLengthFullContent);
1018 base::RunLoop().RunUntilIdle(); 1014 base::RunLoop().RunUntilIdle();
1019 1015
1020 SourceStreamTestData stream_data_0(0, stream_0_length, true); 1016 SourceStreamTestData stream_data_0(0, stream_0_length, true);
1021 SourceStreamTestData stream_data_1(stream_0_length - 1, 0, false); 1017 SourceStreamTestData stream_data_1(stream_0_length - 1, 0, false);
1022 VerifySourceStreamsStates(stream_data_0); 1018 VerifySourceStreamsStates(stream_data_0);
1023 VerifySourceStreamsStates(stream_data_1); 1019 VerifySourceStreamsStates(stream_data_1);
1024 EXPECT_EQ(stream_0_length, TotalBytesReceived()); 1020 EXPECT_EQ(stream_0_length, TotalBytesReceived());
1025 1021
1026 DestroyDownloadFile(0); 1022 DestroyDownloadFile(0);
1027 } 1023 }
1028 1024
1029 } // namespace content 1025 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698