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

Side by Side Diff: chrome/browser/chromeos/file_system_provider/fileapi/buffering_file_stream_reader_unittest.cc

Issue 564503002: Remove implicit conversions from scoped_refptr to T* in c/b/chromeos/file* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 BufferingFileStreamReader reader( 91 BufferingFileStreamReader reader(
92 scoped_ptr<storage::FileStreamReader>( 92 scoped_ptr<storage::FileStreamReader>(
93 new FakeFileStreamReader(&inner_read_log, net::OK)), 93 new FakeFileStreamReader(&inner_read_log, net::OK)),
94 kBufferSize); 94 kBufferSize);
95 95
96 // For the first read, the internal file stream reader is fired, as there is 96 // For the first read, the internal file stream reader is fired, as there is
97 // no data in the preloading buffer. 97 // no data in the preloading buffer.
98 { 98 {
99 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize)); 99 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize));
100 std::vector<int> read_log; 100 std::vector<int> read_log;
101 const int result = 101 const int result = reader.Read(
102 reader.Read(buffer, kChunkSize, base::Bind(&LogValue<int>, &read_log)); 102 buffer.get(), kChunkSize, base::Bind(&LogValue<int>, &read_log));
103 base::RunLoop().RunUntilIdle(); 103 base::RunLoop().RunUntilIdle();
104 104
105 EXPECT_EQ(net::ERR_IO_PENDING, result); 105 EXPECT_EQ(net::ERR_IO_PENDING, result);
106 ASSERT_EQ(1u, inner_read_log.size()); 106 ASSERT_EQ(1u, inner_read_log.size());
107 EXPECT_EQ(kBufferSize, inner_read_log[0]); 107 EXPECT_EQ(kBufferSize, inner_read_log[0]);
108 ASSERT_EQ(1u, read_log.size()); 108 ASSERT_EQ(1u, read_log.size());
109 EXPECT_EQ(kChunkSize, read_log[0]); 109 EXPECT_EQ(kChunkSize, read_log[0]);
110 } 110 }
111 111
112 // Second read should return data from the preloading buffer, without calling 112 // Second read should return data from the preloading buffer, without calling
113 // the internal file stream reader. 113 // the internal file stream reader.
114 { 114 {
115 inner_read_log.clear(); 115 inner_read_log.clear();
116 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize)); 116 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize));
117 std::vector<int> read_log; 117 std::vector<int> read_log;
118 const int result = 118 const int result = reader.Read(
119 reader.Read(buffer, kChunkSize, base::Bind(&LogValue<int>, &read_log)); 119 buffer.get(), kChunkSize, base::Bind(&LogValue<int>, &read_log));
120 base::RunLoop().RunUntilIdle(); 120 base::RunLoop().RunUntilIdle();
121 121
122 EXPECT_EQ(kChunkSize, result); 122 EXPECT_EQ(kChunkSize, result);
123 EXPECT_EQ(0u, inner_read_log.size()); 123 EXPECT_EQ(0u, inner_read_log.size());
124 // Results returned synchronously, so no new read result events. 124 // Results returned synchronously, so no new read result events.
125 EXPECT_EQ(0u, read_log.size()); 125 EXPECT_EQ(0u, read_log.size());
126 } 126 }
127 127
128 // Third read should return partial result from the preloading buffer. It is 128 // Third read should return partial result from the preloading buffer. It is
129 // valid to return less bytes than requested. 129 // valid to return less bytes than requested.
130 { 130 {
131 inner_read_log.clear(); 131 inner_read_log.clear();
132 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize)); 132 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize));
133 std::vector<int> read_log; 133 std::vector<int> read_log;
134 const int result = 134 const int result = reader.Read(
135 reader.Read(buffer, kChunkSize, base::Bind(&LogValue<int>, &read_log)); 135 buffer.get(), kChunkSize, base::Bind(&LogValue<int>, &read_log));
136 base::RunLoop().RunUntilIdle(); 136 base::RunLoop().RunUntilIdle();
137 137
138 EXPECT_EQ(kBufferSize - 2 * kChunkSize, result); 138 EXPECT_EQ(kBufferSize - 2 * kChunkSize, result);
139 EXPECT_EQ(0u, inner_read_log.size()); 139 EXPECT_EQ(0u, inner_read_log.size());
140 // Results returned synchronously, so no new read result events. 140 // Results returned synchronously, so no new read result events.
141 EXPECT_EQ(0u, read_log.size()); 141 EXPECT_EQ(0u, read_log.size());
142 } 142 }
143 143
144 // The preloading buffer is now empty, so reading should invoke the internal 144 // The preloading buffer is now empty, so reading should invoke the internal
145 // file stream reader. 145 // file stream reader.
146 { 146 {
147 inner_read_log.clear(); 147 inner_read_log.clear();
148 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize)); 148 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize));
149 std::vector<int> read_log; 149 std::vector<int> read_log;
150 const int result = 150 const int result = reader.Read(
151 reader.Read(buffer, kChunkSize, base::Bind(&LogValue<int>, &read_log)); 151 buffer.get(), kChunkSize, base::Bind(&LogValue<int>, &read_log));
152 base::RunLoop().RunUntilIdle(); 152 base::RunLoop().RunUntilIdle();
153 153
154 EXPECT_EQ(net::ERR_IO_PENDING, result); 154 EXPECT_EQ(net::ERR_IO_PENDING, result);
155 ASSERT_EQ(1u, inner_read_log.size()); 155 ASSERT_EQ(1u, inner_read_log.size());
156 EXPECT_EQ(kBufferSize, inner_read_log[0]); 156 EXPECT_EQ(kBufferSize, inner_read_log[0]);
157 ASSERT_EQ(1u, read_log.size()); 157 ASSERT_EQ(1u, read_log.size());
158 EXPECT_EQ(kChunkSize, read_log[0]); 158 EXPECT_EQ(kChunkSize, read_log[0]);
159 } 159 }
160 } 160 }
161 161
162 TEST_F(FileSystemProviderBufferingFileStreamReaderTest, Read_Directly) { 162 TEST_F(FileSystemProviderBufferingFileStreamReaderTest, Read_Directly) {
163 std::vector<int> inner_read_log; 163 std::vector<int> inner_read_log;
164 BufferingFileStreamReader reader( 164 BufferingFileStreamReader reader(
165 scoped_ptr<storage::FileStreamReader>( 165 scoped_ptr<storage::FileStreamReader>(
166 new FakeFileStreamReader(&inner_read_log, net::OK)), 166 new FakeFileStreamReader(&inner_read_log, net::OK)),
167 kBufferSize); 167 kBufferSize);
168 168
169 // First read couple of bytes, so the internal buffer is filled out. 169 // First read couple of bytes, so the internal buffer is filled out.
170 { 170 {
171 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize)); 171 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize));
172 std::vector<int> read_log; 172 std::vector<int> read_log;
173 const int result = 173 const int result = reader.Read(
174 reader.Read(buffer, kChunkSize, base::Bind(&LogValue<int>, &read_log)); 174 buffer.get(), kChunkSize, base::Bind(&LogValue<int>, &read_log));
175 base::RunLoop().RunUntilIdle(); 175 base::RunLoop().RunUntilIdle();
176 176
177 EXPECT_EQ(net::ERR_IO_PENDING, result); 177 EXPECT_EQ(net::ERR_IO_PENDING, result);
178 ASSERT_EQ(1u, inner_read_log.size()); 178 ASSERT_EQ(1u, inner_read_log.size());
179 EXPECT_EQ(kBufferSize, inner_read_log[0]); 179 EXPECT_EQ(kBufferSize, inner_read_log[0]);
180 ASSERT_EQ(1u, read_log.size()); 180 ASSERT_EQ(1u, read_log.size());
181 EXPECT_EQ(kChunkSize, read_log[0]); 181 EXPECT_EQ(kChunkSize, read_log[0]);
182 } 182 }
183 183
184 const int read_bytes = kBufferSize * 2; 184 const int read_bytes = kBufferSize * 2;
185 ASSERT_GT(kFileSize, read_bytes); 185 ASSERT_GT(kFileSize, read_bytes);
186 186
187 // Reading more than the internal buffer size would cause fetching only 187 // Reading more than the internal buffer size would cause fetching only
188 // as much as available in the internal buffer. 188 // as much as available in the internal buffer.
189 { 189 {
190 inner_read_log.clear(); 190 inner_read_log.clear();
191 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(read_bytes)); 191 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(read_bytes));
192 std::vector<int> read_log; 192 std::vector<int> read_log;
193 const int result = 193 const int result = reader.Read(
194 reader.Read(buffer, read_bytes, base::Bind(&LogValue<int>, &read_log)); 194 buffer.get(), read_bytes, base::Bind(&LogValue<int>, &read_log));
195 base::RunLoop().RunUntilIdle(); 195 base::RunLoop().RunUntilIdle();
196 196
197 EXPECT_EQ(kBufferSize - kChunkSize, result); 197 EXPECT_EQ(kBufferSize - kChunkSize, result);
198 EXPECT_EQ(0u, inner_read_log.size()); 198 EXPECT_EQ(0u, inner_read_log.size());
199 EXPECT_EQ(0u, read_log.size()); 199 EXPECT_EQ(0u, read_log.size());
200 } 200 }
201 201
202 // The internal buffer is clean. Fetching more than the internal buffer size 202 // The internal buffer is clean. Fetching more than the internal buffer size
203 // would cause fetching data directly from the inner reader, with skipping 203 // would cause fetching data directly from the inner reader, with skipping
204 // the internal buffer. 204 // the internal buffer.
205 { 205 {
206 inner_read_log.clear(); 206 inner_read_log.clear();
207 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(read_bytes)); 207 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(read_bytes));
208 std::vector<int> read_log; 208 std::vector<int> read_log;
209 const int result = 209 const int result = reader.Read(
210 reader.Read(buffer, read_bytes, base::Bind(&LogValue<int>, &read_log)); 210 buffer.get(), read_bytes, base::Bind(&LogValue<int>, &read_log));
211 base::RunLoop().RunUntilIdle(); 211 base::RunLoop().RunUntilIdle();
212 212
213 EXPECT_EQ(net::ERR_IO_PENDING, result); 213 EXPECT_EQ(net::ERR_IO_PENDING, result);
214 ASSERT_EQ(1u, inner_read_log.size()); 214 ASSERT_EQ(1u, inner_read_log.size());
215 EXPECT_EQ(read_bytes, inner_read_log[0]); 215 EXPECT_EQ(read_bytes, inner_read_log[0]);
216 ASSERT_EQ(1u, read_log.size()); 216 ASSERT_EQ(1u, read_log.size());
217 EXPECT_EQ(read_bytes, read_log[0]); 217 EXPECT_EQ(read_bytes, read_log[0]);
218 } 218 }
219 } 219 }
220 220
221 TEST_F(FileSystemProviderBufferingFileStreamReaderTest, 221 TEST_F(FileSystemProviderBufferingFileStreamReaderTest,
222 Read_MoreThanBufferSize) { 222 Read_MoreThanBufferSize) {
223 std::vector<int> inner_read_log; 223 std::vector<int> inner_read_log;
224 BufferingFileStreamReader reader( 224 BufferingFileStreamReader reader(
225 scoped_ptr<storage::FileStreamReader>( 225 scoped_ptr<storage::FileStreamReader>(
226 new FakeFileStreamReader(&inner_read_log, net::OK)), 226 new FakeFileStreamReader(&inner_read_log, net::OK)),
227 kBufferSize); 227 kBufferSize);
228 // First read couple of bytes, so the internal buffer is filled out. 228 // First read couple of bytes, so the internal buffer is filled out.
229 { 229 {
230 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize)); 230 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize));
231 std::vector<int> read_log; 231 std::vector<int> read_log;
232 const int result = 232 const int result = reader.Read(
233 reader.Read(buffer, kChunkSize, base::Bind(&LogValue<int>, &read_log)); 233 buffer.get(), kChunkSize, base::Bind(&LogValue<int>, &read_log));
234 base::RunLoop().RunUntilIdle(); 234 base::RunLoop().RunUntilIdle();
235 235
236 EXPECT_EQ(net::ERR_IO_PENDING, result); 236 EXPECT_EQ(net::ERR_IO_PENDING, result);
237 ASSERT_EQ(1u, inner_read_log.size()); 237 ASSERT_EQ(1u, inner_read_log.size());
238 EXPECT_EQ(kBufferSize, inner_read_log[0]); 238 EXPECT_EQ(kBufferSize, inner_read_log[0]);
239 ASSERT_EQ(1u, read_log.size()); 239 ASSERT_EQ(1u, read_log.size());
240 EXPECT_EQ(kChunkSize, read_log[0]); 240 EXPECT_EQ(kChunkSize, read_log[0]);
241 } 241 }
242 242
243 // Returning less than requested number of bytes is valid, and should not 243 // Returning less than requested number of bytes is valid, and should not
244 // fail. 244 // fail.
245 { 245 {
246 inner_read_log.clear(); 246 inner_read_log.clear();
247 const int chunk_size = 20; 247 const int chunk_size = 20;
248 ASSERT_LT(kBufferSize, chunk_size); 248 ASSERT_LT(kBufferSize, chunk_size);
249 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(chunk_size)); 249 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(chunk_size));
250 std::vector<int> read_log; 250 std::vector<int> read_log;
251 const int result = 251 const int result = reader.Read(
252 reader.Read(buffer, chunk_size, base::Bind(&LogValue<int>, &read_log)); 252 buffer.get(), chunk_size, base::Bind(&LogValue<int>, &read_log));
253 base::RunLoop().RunUntilIdle(); 253 base::RunLoop().RunUntilIdle();
254 254
255 EXPECT_EQ(5, result); 255 EXPECT_EQ(5, result);
256 EXPECT_EQ(0u, inner_read_log.size()); 256 EXPECT_EQ(0u, inner_read_log.size());
257 EXPECT_EQ(0u, read_log.size()); 257 EXPECT_EQ(0u, read_log.size());
258 } 258 }
259 } 259 }
260 260
261 TEST_F(FileSystemProviderBufferingFileStreamReaderTest, Read_WithError) { 261 TEST_F(FileSystemProviderBufferingFileStreamReaderTest, Read_WithError) {
262 std::vector<int> inner_read_log; 262 std::vector<int> inner_read_log;
263 BufferingFileStreamReader reader( 263 BufferingFileStreamReader reader(
264 scoped_ptr<storage::FileStreamReader>( 264 scoped_ptr<storage::FileStreamReader>(
265 new FakeFileStreamReader(&inner_read_log, net::ERR_ACCESS_DENIED)), 265 new FakeFileStreamReader(&inner_read_log, net::ERR_ACCESS_DENIED)),
266 kBufferSize); 266 kBufferSize);
267 267
268 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize)); 268 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kChunkSize));
269 std::vector<int> read_log; 269 std::vector<int> read_log;
270 const int result = 270 const int result = reader.Read(
271 reader.Read(buffer, kChunkSize, base::Bind(&LogValue<int>, &read_log)); 271 buffer.get(), kChunkSize, base::Bind(&LogValue<int>, &read_log));
272 base::RunLoop().RunUntilIdle(); 272 base::RunLoop().RunUntilIdle();
273 273
274 EXPECT_EQ(net::ERR_IO_PENDING, result); 274 EXPECT_EQ(net::ERR_IO_PENDING, result);
275 ASSERT_EQ(1u, inner_read_log.size()); 275 ASSERT_EQ(1u, inner_read_log.size());
276 EXPECT_EQ(kBufferSize, inner_read_log[0]); 276 EXPECT_EQ(kBufferSize, inner_read_log[0]);
277 ASSERT_EQ(1u, read_log.size()); 277 ASSERT_EQ(1u, read_log.size());
278 EXPECT_EQ(net::ERR_ACCESS_DENIED, read_log[0]); 278 EXPECT_EQ(net::ERR_ACCESS_DENIED, read_log[0]);
279 } 279 }
280 280
281 TEST_F(FileSystemProviderBufferingFileStreamReaderTest, GetLength) { 281 TEST_F(FileSystemProviderBufferingFileStreamReaderTest, GetLength) {
282 BufferingFileStreamReader reader(scoped_ptr<storage::FileStreamReader>( 282 BufferingFileStreamReader reader(scoped_ptr<storage::FileStreamReader>(
283 new FakeFileStreamReader(NULL, net::OK)), 283 new FakeFileStreamReader(NULL, net::OK)),
284 kBufferSize); 284 kBufferSize);
285 285
286 std::vector<int64> get_length_log; 286 std::vector<int64> get_length_log;
287 const int64 result = 287 const int64 result =
288 reader.GetLength(base::Bind(&LogValue<int64>, &get_length_log)); 288 reader.GetLength(base::Bind(&LogValue<int64>, &get_length_log));
289 base::RunLoop().RunUntilIdle(); 289 base::RunLoop().RunUntilIdle();
290 290
291 EXPECT_EQ(net::ERR_IO_PENDING, result); 291 EXPECT_EQ(net::ERR_IO_PENDING, result);
292 ASSERT_EQ(1u, get_length_log.size()); 292 ASSERT_EQ(1u, get_length_log.size());
293 EXPECT_EQ(kFileSize, get_length_log[0]); 293 EXPECT_EQ(kFileSize, get_length_log[0]);
294 } 294 }
295 295
296 } // namespace file_system_provider 296 } // namespace file_system_provider
297 } // namespace chromeos 297 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698