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

Side by Side Diff: net/base/file_stream_unittest.cc

Issue 8843: Add write and read/write support to FileStream (renamed from FileInputStream)... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « net/base/file_stream_posix.cc ('k') | net/base/file_stream_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:mergeinfo
Merged /branches/chrome_webkit_merge_branch/net/base/file_input_stream_unittest.cc:r69-2775
OLDNEW
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. Use of this 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in the 2 // source code is governed by a BSD-style license that can be found in the
3 // LICENSE file. 3 // LICENSE file.
4 4
5 #include "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/path_service.h" 6 #include "base/path_service.h"
7 #include "base/platform_test.h" 7 #include "base/platform_test.h"
8 #include "net/base/file_input_stream.h" 8 #include "net/base/file_stream.h"
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/base/test_completion_callback.h" 10 #include "net/base/test_completion_callback.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 static const char kTestData[] = "0123456789"; 13 static const char kTestData[] = "0123456789";
14 static const int kTestDataSize = arraysize(kTestData) - 1;
14 15
15 class FileInputStreamTest : public PlatformTest { 16 class FileStreamTest : public PlatformTest {
16 public: 17 public:
17 virtual void SetUp() { 18 virtual void SetUp() {
18 PlatformTest::SetUp(); 19 PlatformTest::SetUp();
19 20
20 file_util::CreateTemporaryFileName(&temp_file_path_); 21 file_util::CreateTemporaryFileName(&temp_file_path_);
21 file_util::WriteFile(temp_file_path_, kTestData, arraysize(kTestData)-1); 22 file_util::WriteFile(temp_file_path_, kTestData, kTestDataSize);
22 } 23 }
23 virtual void TearDown() { 24 virtual void TearDown() {
24 file_util::Delete(temp_file_path_, false); 25 file_util::Delete(temp_file_path_, false);
25 26
26 PlatformTest::TearDown(); 27 PlatformTest::TearDown();
27 } 28 }
28 const std::wstring temp_file_path() const { return temp_file_path_; } 29 const std::wstring temp_file_path() const { return temp_file_path_; }
29 private: 30 private:
30 std::wstring temp_file_path_; 31 std::wstring temp_file_path_;
31 }; 32 };
32 33
33 TEST_F(FileInputStreamTest, BasicOpenClose) { 34 TEST_F(FileStreamTest, BasicOpenClose) {
34 net::FileInputStream stream; 35 net::FileStream stream;
35 int rv = stream.Open(temp_file_path(), false); 36 int rv = stream.Open(temp_file_path(),
37 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ);
36 EXPECT_EQ(net::OK, rv); 38 EXPECT_EQ(net::OK, rv);
37 } 39 }
38 40
39 TEST_F(FileInputStreamTest, UseClosedStream) { 41 TEST_F(FileStreamTest, UseClosedStream) {
40 net::FileInputStream stream; 42 net::FileStream stream;
41 43
42 EXPECT_FALSE(stream.IsOpen()); 44 EXPECT_FALSE(stream.IsOpen());
43 45
44 // Try seeking... 46 // Try seeking...
45 int64 new_offset = stream.Seek(net::FROM_BEGIN, 5); 47 int64 new_offset = stream.Seek(net::FROM_BEGIN, 5);
46 EXPECT_EQ(net::ERR_UNEXPECTED, new_offset); 48 EXPECT_EQ(net::ERR_UNEXPECTED, new_offset);
47 49
48 // Try available... 50 // Try available...
49 int64 avail = stream.Available(); 51 int64 avail = stream.Available();
50 EXPECT_EQ(net::ERR_UNEXPECTED, avail); 52 EXPECT_EQ(net::ERR_UNEXPECTED, avail);
51 53
52 // Try reading... 54 // Try reading...
53 char buf[10]; 55 char buf[10];
54 int rv = stream.Read(buf, sizeof(buf), NULL); 56 int rv = stream.Read(buf, sizeof(buf), NULL);
55 EXPECT_EQ(net::ERR_UNEXPECTED, rv); 57 EXPECT_EQ(net::ERR_UNEXPECTED, rv);
56 } 58 }
57 59
58 TEST_F(FileInputStreamTest, BasicRead) { 60 TEST_F(FileStreamTest, BasicRead) {
59 int64 file_size; 61 int64 file_size;
60 bool ok = file_util::GetFileSize(temp_file_path(), &file_size); 62 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
61 EXPECT_TRUE(ok); 63 EXPECT_TRUE(ok);
62 64
63 net::FileInputStream stream; 65 net::FileStream stream;
64 int rv = stream.Open(temp_file_path(), false); 66 int flags = base::PLATFORM_FILE_OPEN |
67 base::PLATFORM_FILE_READ;
68 int rv = stream.Open(temp_file_path(), flags);
65 EXPECT_EQ(net::OK, rv); 69 EXPECT_EQ(net::OK, rv);
66 70
67 int64 total_bytes_avail = stream.Available(); 71 int64 total_bytes_avail = stream.Available();
68 EXPECT_EQ(file_size, total_bytes_avail); 72 EXPECT_EQ(file_size, total_bytes_avail);
69 73
70 int64 total_bytes_read = 0; 74 int64 total_bytes_read = 0;
71 75
72 std::string data_read; 76 std::string data_read;
73 for (;;) { 77 for (;;) {
74 char buf[4]; 78 char buf[4];
75 rv = stream.Read(buf, sizeof(buf), NULL); 79 rv = stream.Read(buf, sizeof(buf), NULL);
76 EXPECT_LE(0, rv); 80 EXPECT_LE(0, rv);
77 if (rv <= 0) 81 if (rv <= 0)
78 break; 82 break;
79 total_bytes_read += rv; 83 total_bytes_read += rv;
80 data_read.append(buf, rv); 84 data_read.append(buf, rv);
81 } 85 }
82 EXPECT_EQ(file_size, total_bytes_read); 86 EXPECT_EQ(file_size, total_bytes_read);
83 EXPECT_TRUE(data_read == kTestData); 87 EXPECT_TRUE(data_read == kTestData);
84 } 88 }
85 89
86 TEST_F(FileInputStreamTest, AsyncRead) { 90 TEST_F(FileStreamTest, AsyncRead) {
87 int64 file_size; 91 int64 file_size;
88 bool ok = file_util::GetFileSize(temp_file_path(), &file_size); 92 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
89 EXPECT_TRUE(ok); 93 EXPECT_TRUE(ok);
90 94
91 net::FileInputStream stream; 95 net::FileStream stream;
92 int rv = stream.Open(temp_file_path(), true); 96 int flags = base::PLATFORM_FILE_OPEN |
97 base::PLATFORM_FILE_READ |
98 base::PLATFORM_FILE_ASYNC;
99 int rv = stream.Open(temp_file_path(), flags);
93 EXPECT_EQ(net::OK, rv); 100 EXPECT_EQ(net::OK, rv);
94 101
95 int64 total_bytes_avail = stream.Available(); 102 int64 total_bytes_avail = stream.Available();
96 EXPECT_EQ(file_size, total_bytes_avail); 103 EXPECT_EQ(file_size, total_bytes_avail);
97 104
98 TestCompletionCallback callback; 105 TestCompletionCallback callback;
99 106
100 int64 total_bytes_read = 0; 107 int64 total_bytes_read = 0;
101 108
102 std::string data_read; 109 std::string data_read;
103 for (;;) { 110 for (;;) {
104 char buf[4]; 111 char buf[4];
105 rv = stream.Read(buf, sizeof(buf), &callback); 112 rv = stream.Read(buf, sizeof(buf), &callback);
106 if (rv == net::ERR_IO_PENDING) 113 if (rv == net::ERR_IO_PENDING)
107 rv = callback.WaitForResult(); 114 rv = callback.WaitForResult();
108 EXPECT_LE(0, rv); 115 EXPECT_LE(0, rv);
109 if (rv <= 0) 116 if (rv <= 0)
110 break; 117 break;
111 total_bytes_read += rv; 118 total_bytes_read += rv;
112 data_read.append(buf, rv); 119 data_read.append(buf, rv);
113 } 120 }
114 EXPECT_EQ(file_size, total_bytes_read); 121 EXPECT_EQ(file_size, total_bytes_read);
115 EXPECT_TRUE(data_read == kTestData); 122 EXPECT_TRUE(data_read == kTestData);
116 } 123 }
117 124
118 TEST_F(FileInputStreamTest, BasicRead_FromOffset) { 125 TEST_F(FileStreamTest, BasicRead_FromOffset) {
119 int64 file_size; 126 int64 file_size;
120 bool ok = file_util::GetFileSize(temp_file_path(), &file_size); 127 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
121 EXPECT_TRUE(ok); 128 EXPECT_TRUE(ok);
122 129
123 net::FileInputStream stream; 130 net::FileStream stream;
124 int rv = stream.Open(temp_file_path(), false); 131 int flags = base::PLATFORM_FILE_OPEN |
132 base::PLATFORM_FILE_READ;
133 int rv = stream.Open(temp_file_path(), flags);
125 EXPECT_EQ(net::OK, rv); 134 EXPECT_EQ(net::OK, rv);
126 135
127 const int64 kOffset = 3; 136 const int64 kOffset = 3;
128 int64 new_offset = stream.Seek(net::FROM_BEGIN, kOffset); 137 int64 new_offset = stream.Seek(net::FROM_BEGIN, kOffset);
129 EXPECT_EQ(kOffset, new_offset); 138 EXPECT_EQ(kOffset, new_offset);
130 139
131 int64 total_bytes_avail = stream.Available(); 140 int64 total_bytes_avail = stream.Available();
132 EXPECT_EQ(file_size - kOffset, total_bytes_avail); 141 EXPECT_EQ(file_size - kOffset, total_bytes_avail);
133 142
134 int64 total_bytes_read = 0; 143 int64 total_bytes_read = 0;
135 144
136 std::string data_read; 145 std::string data_read;
137 for (;;) { 146 for (;;) {
138 char buf[4]; 147 char buf[4];
139 rv = stream.Read(buf, sizeof(buf), NULL); 148 rv = stream.Read(buf, sizeof(buf), NULL);
140 EXPECT_LE(0, rv); 149 EXPECT_LE(0, rv);
141 if (rv <= 0) 150 if (rv <= 0)
142 break; 151 break;
143 total_bytes_read += rv; 152 total_bytes_read += rv;
144 data_read.append(buf, rv); 153 data_read.append(buf, rv);
145 } 154 }
146 EXPECT_EQ(file_size - kOffset, total_bytes_read); 155 EXPECT_EQ(file_size - kOffset, total_bytes_read);
147 EXPECT_TRUE(data_read == kTestData + kOffset); 156 EXPECT_TRUE(data_read == kTestData + kOffset);
148 } 157 }
149 158
150 TEST_F(FileInputStreamTest, AsyncRead_FromOffset) { 159 TEST_F(FileStreamTest, AsyncRead_FromOffset) {
151 int64 file_size; 160 int64 file_size;
152 bool ok = file_util::GetFileSize(temp_file_path(), &file_size); 161 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
153 EXPECT_TRUE(ok); 162 EXPECT_TRUE(ok);
154 163
155 net::FileInputStream stream; 164 net::FileStream stream;
156 int rv = stream.Open(temp_file_path(), true); 165 int flags = base::PLATFORM_FILE_OPEN |
166 base::PLATFORM_FILE_READ |
167 base::PLATFORM_FILE_ASYNC;
168 int rv = stream.Open(temp_file_path(), flags);
157 EXPECT_EQ(net::OK, rv); 169 EXPECT_EQ(net::OK, rv);
158 170
159 const int64 kOffset = 3; 171 const int64 kOffset = 3;
160 int64 new_offset = stream.Seek(net::FROM_BEGIN, kOffset); 172 int64 new_offset = stream.Seek(net::FROM_BEGIN, kOffset);
161 EXPECT_EQ(kOffset, new_offset); 173 EXPECT_EQ(kOffset, new_offset);
162 174
163 int64 total_bytes_avail = stream.Available(); 175 int64 total_bytes_avail = stream.Available();
164 EXPECT_EQ(file_size - kOffset, total_bytes_avail); 176 EXPECT_EQ(file_size - kOffset, total_bytes_avail);
165 177
166 TestCompletionCallback callback; 178 TestCompletionCallback callback;
167 179
168 int64 total_bytes_read = 0; 180 int64 total_bytes_read = 0;
169 181
170 std::string data_read; 182 std::string data_read;
171 for (;;) { 183 for (;;) {
172 char buf[4]; 184 char buf[4];
173 rv = stream.Read(buf, sizeof(buf), &callback); 185 rv = stream.Read(buf, sizeof(buf), &callback);
174 if (rv == net::ERR_IO_PENDING) 186 if (rv == net::ERR_IO_PENDING)
175 rv = callback.WaitForResult(); 187 rv = callback.WaitForResult();
176 EXPECT_LE(0, rv); 188 EXPECT_LE(0, rv);
177 if (rv <= 0) 189 if (rv <= 0)
178 break; 190 break;
179 total_bytes_read += rv; 191 total_bytes_read += rv;
180 data_read.append(buf, rv); 192 data_read.append(buf, rv);
181 } 193 }
182 EXPECT_EQ(file_size - kOffset, total_bytes_read); 194 EXPECT_EQ(file_size - kOffset, total_bytes_read);
183 EXPECT_TRUE(data_read == kTestData + kOffset); 195 EXPECT_TRUE(data_read == kTestData + kOffset);
184 } 196 }
185 197
186 TEST_F(FileInputStreamTest, SeekAround) { 198 TEST_F(FileStreamTest, SeekAround) {
187 net::FileInputStream stream; 199 net::FileStream stream;
188 int rv = stream.Open(temp_file_path(), true); 200 int flags = base::PLATFORM_FILE_OPEN |
201 base::PLATFORM_FILE_READ;
202 int rv = stream.Open(temp_file_path(), flags);
189 EXPECT_EQ(net::OK, rv); 203 EXPECT_EQ(net::OK, rv);
190 204
191 const int64 kOffset = 3; 205 const int64 kOffset = 3;
192 int64 new_offset = stream.Seek(net::FROM_BEGIN, kOffset); 206 int64 new_offset = stream.Seek(net::FROM_BEGIN, kOffset);
193 EXPECT_EQ(kOffset, new_offset); 207 EXPECT_EQ(kOffset, new_offset);
194 208
195 new_offset = stream.Seek(net::FROM_CURRENT, kOffset); 209 new_offset = stream.Seek(net::FROM_CURRENT, kOffset);
196 EXPECT_EQ(2 * kOffset, new_offset); 210 EXPECT_EQ(2 * kOffset, new_offset);
197 211
198 new_offset = stream.Seek(net::FROM_CURRENT, -kOffset); 212 new_offset = stream.Seek(net::FROM_CURRENT, -kOffset);
199 EXPECT_EQ(kOffset, new_offset); 213 EXPECT_EQ(kOffset, new_offset);
200 214
201 const int kTestDataLen = arraysize(kTestData) - 1; 215 const int kTestDataLen = arraysize(kTestData) - 1;
202 216
203 new_offset = stream.Seek(net::FROM_END, -kTestDataLen); 217 new_offset = stream.Seek(net::FROM_END, -kTestDataLen);
204 EXPECT_EQ(0, new_offset); 218 EXPECT_EQ(0, new_offset);
205 } 219 }
220
221 TEST_F(FileStreamTest, BasicWrite) {
222 net::FileStream stream;
223 int flags = base::PLATFORM_FILE_CREATE_ALWAYS |
224 base::PLATFORM_FILE_WRITE;
225 int rv = stream.Open(temp_file_path(), flags);
226 EXPECT_EQ(net::OK, rv);
227
228 int64 file_size;
229 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
230 EXPECT_TRUE(ok);
231 EXPECT_EQ(0, file_size);
232
233 rv = stream.Write(kTestData, kTestDataSize, NULL);
234 EXPECT_EQ(kTestDataSize, rv);
235 stream.Close();
236
237 ok = file_util::GetFileSize(temp_file_path(), &file_size);
238 EXPECT_TRUE(ok);
239 EXPECT_EQ(kTestDataSize, file_size);
240 }
241
242 TEST_F(FileStreamTest, AsyncWrite) {
243 net::FileStream stream;
244 int flags = base::PLATFORM_FILE_CREATE_ALWAYS |
245 base::PLATFORM_FILE_WRITE |
246 base::PLATFORM_FILE_ASYNC;
247 int rv = stream.Open(temp_file_path(), flags);
248 EXPECT_EQ(net::OK, rv);
249
250 int64 file_size;
251 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
252 EXPECT_TRUE(ok);
253 EXPECT_EQ(0, file_size);
254
255 TestCompletionCallback callback;
256 int64 total_bytes_written = 0;
257
258 while (total_bytes_written != kTestDataSize) {
259 rv = stream.Write(kTestData, kTestDataSize, &callback);
260 if (rv == net::ERR_IO_PENDING)
261 rv = callback.WaitForResult();
262 EXPECT_LT(0, rv);
263 if (rv <= 0)
264 break;
265 total_bytes_written += rv;
266 }
267 ok = file_util::GetFileSize(temp_file_path(), &file_size);
268 EXPECT_TRUE(ok);
269 EXPECT_EQ(file_size, total_bytes_written);
270 }
271
272 TEST_F(FileStreamTest, BasicWrite_FromOffset) {
273 net::FileStream stream;
274 int flags = base::PLATFORM_FILE_OPEN |
275 base::PLATFORM_FILE_WRITE;
276 int rv = stream.Open(temp_file_path(), flags);
277 EXPECT_EQ(net::OK, rv);
278
279 int64 file_size;
280 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
281 EXPECT_TRUE(ok);
282 EXPECT_EQ(kTestDataSize, file_size);
283
284 const int64 kOffset = 0;
285 int64 new_offset = stream.Seek(net::FROM_END, kOffset);
286 EXPECT_EQ(kTestDataSize, new_offset);
287
288 rv = stream.Write(kTestData, kTestDataSize, NULL);
289 EXPECT_EQ(kTestDataSize, rv);
290 stream.Close();
291
292 ok = file_util::GetFileSize(temp_file_path(), &file_size);
293 EXPECT_TRUE(ok);
294 EXPECT_EQ(kTestDataSize * 2, file_size);
295 }
296
297 TEST_F(FileStreamTest, AsyncWrite_FromOffset) {
298 int64 file_size;
299 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
300 EXPECT_TRUE(ok);
301
302 net::FileStream stream;
303 int flags = base::PLATFORM_FILE_OPEN |
304 base::PLATFORM_FILE_WRITE |
305 base::PLATFORM_FILE_ASYNC;
306 int rv = stream.Open(temp_file_path(), flags);
307 EXPECT_EQ(net::OK, rv);
308
309 const int64 kOffset = 0;
310 int64 new_offset = stream.Seek(net::FROM_END, kOffset);
311 EXPECT_EQ(kTestDataSize, new_offset);
312
313 TestCompletionCallback callback;
314 int64 total_bytes_written = 0;
315
316 while (total_bytes_written != kTestDataSize) {
317 rv = stream.Write(kTestData, kTestDataSize, &callback);
318 if (rv == net::ERR_IO_PENDING)
319 rv = callback.WaitForResult();
320 EXPECT_LT(0, rv);
321 if (rv <= 0)
322 break;
323 total_bytes_written += rv;
324 }
325 ok = file_util::GetFileSize(temp_file_path(), &file_size);
326 EXPECT_TRUE(ok);
327 EXPECT_EQ(file_size, kTestDataSize * 2);
328 }
329
330 TEST_F(FileStreamTest, BasicReadWrite) {
331 int64 file_size;
332 bool ok = file_util::GetFileSize(temp_file_path(), &file_size);
333 EXPECT_TRUE(ok);
334
335 net::FileStream stream;
336 int flags = base::PLATFORM_FILE_OPEN |
337 base::PLATFORM_FILE_READ |
338 base::PLATFORM_FILE_WRITE;
339 int rv = stream.Open(temp_file_path(), flags);
340 EXPECT_EQ(net::OK, rv);
341
342 int64 total_bytes_avail = stream.Available();
343 EXPECT_EQ(file_size, total_bytes_avail);
344
345 int64 total_bytes_read = 0;
346
347 std::string data_read;
348 for (;;) {
349 char buf[4];
350 rv = stream.Read(buf, sizeof(buf), NULL);
351 EXPECT_LE(0, rv);
352 if (rv <= 0)
353 break;
354 total_bytes_read += rv;
355 data_read.append(buf, rv);
356 }
357 EXPECT_EQ(file_size, total_bytes_read);
358 EXPECT_TRUE(data_read == kTestData);
359
360 rv = stream.Write(kTestData, kTestDataSize, NULL);
361 EXPECT_EQ(kTestDataSize, rv);
362 stream.Close();
363
364 ok = file_util::GetFileSize(temp_file_path(), &file_size);
365 EXPECT_TRUE(ok);
366 EXPECT_EQ(kTestDataSize * 2, file_size);
367 }
368
369 // TODO(erikkay): more READ_WRITE tests?
OLDNEW
« no previous file with comments | « net/base/file_stream_posix.cc ('k') | net/base/file_stream_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698