| 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/upload_data_stream.h" | 5 #include "net/base/upload_data_stream.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 init_result_(OK), | 63 init_result_(OK), |
| 64 read_result_(OK) {} | 64 read_result_(OK) {} |
| 65 | 65 |
| 66 virtual ~MockUploadElementReader() {} | 66 virtual ~MockUploadElementReader() {} |
| 67 | 67 |
| 68 // UploadElementReader overrides. | 68 // UploadElementReader overrides. |
| 69 MOCK_METHOD1(Init, int(const CompletionCallback& callback)); | 69 MOCK_METHOD1(Init, int(const CompletionCallback& callback)); |
| 70 virtual uint64 GetContentLength() const OVERRIDE { return content_length_; } | 70 virtual uint64 GetContentLength() const OVERRIDE { return content_length_; } |
| 71 virtual uint64 BytesRemaining() const OVERRIDE { return bytes_remaining_; } | 71 virtual uint64 BytesRemaining() const OVERRIDE { return bytes_remaining_; } |
| 72 virtual bool IsInMemory() const OVERRIDE { return is_in_memory_; } | 72 virtual bool IsInMemory() const OVERRIDE { return is_in_memory_; } |
| 73 MOCK_METHOD3(Read, int(IOBuffer* buf, | 73 MOCK_METHOD3(Read, |
| 74 int buf_length, | 74 int(IOBuffer* buf, |
| 75 const CompletionCallback& callback)); | 75 int buf_length, |
| 76 const CompletionCallback& callback)); |
| 76 | 77 |
| 77 // Sets expectation to return the specified result from Init() asynchronously. | 78 // Sets expectation to return the specified result from Init() asynchronously. |
| 78 void SetAsyncInitExpectation(int result) { | 79 void SetAsyncInitExpectation(int result) { |
| 79 init_result_ = result; | 80 init_result_ = result; |
| 80 EXPECT_CALL(*this, Init(_)) | 81 EXPECT_CALL(*this, Init(_)) |
| 81 .WillOnce(DoAll(Invoke(this, &MockUploadElementReader::OnInit), | 82 .WillOnce(DoAll(Invoke(this, &MockUploadElementReader::OnInit), |
| 82 Return(ERR_IO_PENDING))); | 83 Return(ERR_IO_PENDING))); |
| 83 } | 84 } |
| 84 | 85 |
| 85 // Sets expectation to return the specified result from Read(). | 86 // Sets expectation to return the specified result from Read(). |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 TEST_F(UploadDataStreamTest, EmptyUploadData) { | 145 TEST_F(UploadDataStreamTest, EmptyUploadData) { |
| 145 UploadDataStream stream(element_readers_.Pass(), 0); | 146 UploadDataStream stream(element_readers_.Pass(), 0); |
| 146 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 147 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
| 147 EXPECT_TRUE(stream.IsInMemory()); | 148 EXPECT_TRUE(stream.IsInMemory()); |
| 148 EXPECT_EQ(0U, stream.size()); | 149 EXPECT_EQ(0U, stream.size()); |
| 149 EXPECT_EQ(0U, stream.position()); | 150 EXPECT_EQ(0U, stream.position()); |
| 150 EXPECT_TRUE(stream.IsEOF()); | 151 EXPECT_TRUE(stream.IsEOF()); |
| 151 } | 152 } |
| 152 | 153 |
| 153 TEST_F(UploadDataStreamTest, ConsumeAllBytes) { | 154 TEST_F(UploadDataStreamTest, ConsumeAllBytes) { |
| 154 element_readers_.push_back(new UploadBytesElementReader( | 155 element_readers_.push_back( |
| 155 kTestData, kTestDataSize)); | 156 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 156 UploadDataStream stream(element_readers_.Pass(), 0); | 157 UploadDataStream stream(element_readers_.Pass(), 0); |
| 157 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 158 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
| 158 EXPECT_TRUE(stream.IsInMemory()); | 159 EXPECT_TRUE(stream.IsInMemory()); |
| 159 EXPECT_EQ(kTestDataSize, stream.size()); | 160 EXPECT_EQ(kTestDataSize, stream.size()); |
| 160 EXPECT_EQ(0U, stream.position()); | 161 EXPECT_EQ(0U, stream.position()); |
| 161 EXPECT_FALSE(stream.IsEOF()); | 162 EXPECT_FALSE(stream.IsEOF()); |
| 162 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 163 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
| 163 while (!stream.IsEOF()) { | 164 while (!stream.IsEOF()) { |
| 164 int bytes_read = | 165 int bytes_read = |
| 165 stream.Read(buf.get(), kTestBufferSize, CompletionCallback()); | 166 stream.Read(buf.get(), kTestBufferSize, CompletionCallback()); |
| 166 ASSERT_LE(0, bytes_read); // Not an error. | 167 ASSERT_LE(0, bytes_read); // Not an error. |
| 167 } | 168 } |
| 168 EXPECT_EQ(kTestDataSize, stream.position()); | 169 EXPECT_EQ(kTestDataSize, stream.position()); |
| 169 ASSERT_TRUE(stream.IsEOF()); | 170 ASSERT_TRUE(stream.IsEOF()); |
| 170 } | 171 } |
| 171 | 172 |
| 172 TEST_F(UploadDataStreamTest, File) { | 173 TEST_F(UploadDataStreamTest, File) { |
| 173 base::FilePath temp_file_path; | 174 base::FilePath temp_file_path; |
| 174 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 175 ASSERT_TRUE( |
| 175 &temp_file_path)); | 176 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 176 ASSERT_EQ(static_cast<int>(kTestDataSize), | 177 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 177 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 178 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 178 | 179 |
| 179 element_readers_.push_back( | 180 element_readers_.push_back( |
| 180 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 181 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 181 temp_file_path, | 182 temp_file_path, |
| 182 0, | 183 0, |
| 183 kuint64max, | 184 kuint64max, |
| 184 base::Time())); | 185 base::Time())); |
| 185 | 186 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 198 ERR_IO_PENDING, | 199 ERR_IO_PENDING, |
| 199 stream.Read(buf.get(), kTestBufferSize, read_callback.callback())); | 200 stream.Read(buf.get(), kTestBufferSize, read_callback.callback())); |
| 200 ASSERT_LE(0, read_callback.WaitForResult()); // Not an error. | 201 ASSERT_LE(0, read_callback.WaitForResult()); // Not an error. |
| 201 } | 202 } |
| 202 EXPECT_EQ(kTestDataSize, stream.position()); | 203 EXPECT_EQ(kTestDataSize, stream.position()); |
| 203 ASSERT_TRUE(stream.IsEOF()); | 204 ASSERT_TRUE(stream.IsEOF()); |
| 204 } | 205 } |
| 205 | 206 |
| 206 TEST_F(UploadDataStreamTest, FileSmallerThanLength) { | 207 TEST_F(UploadDataStreamTest, FileSmallerThanLength) { |
| 207 base::FilePath temp_file_path; | 208 base::FilePath temp_file_path; |
| 208 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 209 ASSERT_TRUE( |
| 209 &temp_file_path)); | 210 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 210 ASSERT_EQ(static_cast<int>(kTestDataSize), | 211 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 211 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 212 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 212 const uint64 kFakeSize = kTestDataSize*2; | 213 const uint64 kFakeSize = kTestDataSize * 2; |
| 213 | 214 |
| 214 UploadFileElementReader::ScopedOverridingContentLengthForTests | 215 UploadFileElementReader::ScopedOverridingContentLengthForTests |
| 215 overriding_content_length(kFakeSize); | 216 overriding_content_length(kFakeSize); |
| 216 | 217 |
| 217 element_readers_.push_back( | 218 element_readers_.push_back( |
| 218 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 219 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 219 temp_file_path, | 220 temp_file_path, |
| 220 0, | 221 0, |
| 221 kuint64max, | 222 kuint64max, |
| 222 base::Time())); | 223 base::Time())); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 249 | 250 |
| 250 TEST_F(UploadDataStreamTest, ReadErrorSync) { | 251 TEST_F(UploadDataStreamTest, ReadErrorSync) { |
| 251 // This element cannot be read. | 252 // This element cannot be read. |
| 252 MockUploadElementReader* reader = | 253 MockUploadElementReader* reader = |
| 253 new MockUploadElementReader(kTestDataSize, true); | 254 new MockUploadElementReader(kTestDataSize, true); |
| 254 EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); | 255 EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |
| 255 reader->SetReadExpectation(ERR_FAILED); | 256 reader->SetReadExpectation(ERR_FAILED); |
| 256 element_readers_.push_back(reader); | 257 element_readers_.push_back(reader); |
| 257 | 258 |
| 258 // This element is ignored because of the error from the previous reader. | 259 // This element is ignored because of the error from the previous reader. |
| 259 element_readers_.push_back(new UploadBytesElementReader( | 260 element_readers_.push_back( |
| 260 kTestData, kTestDataSize)); | 261 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 261 | 262 |
| 262 UploadDataStream stream(element_readers_.Pass(), 0); | 263 UploadDataStream stream(element_readers_.Pass(), 0); |
| 263 | 264 |
| 264 // Run Init(). | 265 // Run Init(). |
| 265 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 266 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
| 266 EXPECT_EQ(kTestDataSize*2, stream.size()); | 267 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 267 EXPECT_EQ(0U, stream.position()); | 268 EXPECT_EQ(0U, stream.position()); |
| 268 EXPECT_FALSE(stream.IsEOF()); | 269 EXPECT_FALSE(stream.IsEOF()); |
| 269 | 270 |
| 270 // Prepare a buffer filled with non-zero data. | 271 // Prepare a buffer filled with non-zero data. |
| 271 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 272 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
| 272 std::fill_n(buf->data(), kTestBufferSize, -1); | 273 std::fill_n(buf->data(), kTestBufferSize, -1); |
| 273 | 274 |
| 274 // Read() results in success even when the reader returns error. | 275 // Read() results in success even when the reader returns error. |
| 275 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), | 276 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |
| 276 stream.Read(buf.get(), kTestBufferSize, CompletionCallback())); | 277 stream.Read(buf.get(), kTestBufferSize, CompletionCallback())); |
| 277 EXPECT_EQ(kTestDataSize * 2, stream.position()); | 278 EXPECT_EQ(kTestDataSize * 2, stream.position()); |
| 278 EXPECT_TRUE(stream.IsEOF()); | 279 EXPECT_TRUE(stream.IsEOF()); |
| 279 | 280 |
| 280 // The buffer is filled with zero. | 281 // The buffer is filled with zero. |
| 281 EXPECT_EQ(static_cast<int>(kTestDataSize*2), | 282 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |
| 282 std::count(buf->data(), buf->data() + kTestBufferSize, 0)); | 283 std::count(buf->data(), buf->data() + kTestBufferSize, 0)); |
| 283 } | 284 } |
| 284 | 285 |
| 285 TEST_F(UploadDataStreamTest, ReadErrorAsync) { | 286 TEST_F(UploadDataStreamTest, ReadErrorAsync) { |
| 286 // This element cannot be read. | 287 // This element cannot be read. |
| 287 MockUploadElementReader* reader = | 288 MockUploadElementReader* reader = |
| 288 new MockUploadElementReader(kTestDataSize, false); | 289 new MockUploadElementReader(kTestDataSize, false); |
| 289 reader->SetAsyncInitExpectation(OK); | 290 reader->SetAsyncInitExpectation(OK); |
| 290 reader->SetReadExpectation(ERR_FAILED); | 291 reader->SetReadExpectation(ERR_FAILED); |
| 291 element_readers_.push_back(reader); | 292 element_readers_.push_back(reader); |
| 292 | 293 |
| 293 // This element is ignored because of the error from the previous reader. | 294 // This element is ignored because of the error from the previous reader. |
| 294 element_readers_.push_back(new UploadBytesElementReader( | 295 element_readers_.push_back( |
| 295 kTestData, kTestDataSize)); | 296 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 296 | 297 |
| 297 UploadDataStream stream(element_readers_.Pass(), 0); | 298 UploadDataStream stream(element_readers_.Pass(), 0); |
| 298 | 299 |
| 299 // Run Init(). | 300 // Run Init(). |
| 300 TestCompletionCallback init_callback; | 301 TestCompletionCallback init_callback; |
| 301 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); | 302 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); |
| 302 EXPECT_EQ(OK, init_callback.WaitForResult()); | 303 EXPECT_EQ(OK, init_callback.WaitForResult()); |
| 303 EXPECT_EQ(kTestDataSize*2, stream.size()); | 304 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 304 EXPECT_EQ(0U, stream.position()); | 305 EXPECT_EQ(0U, stream.position()); |
| 305 EXPECT_FALSE(stream.IsEOF()); | 306 EXPECT_FALSE(stream.IsEOF()); |
| 306 | 307 |
| 307 // Prepare a buffer filled with non-zero data. | 308 // Prepare a buffer filled with non-zero data. |
| 308 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 309 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
| 309 std::fill_n(buf->data(), kTestBufferSize, -1); | 310 std::fill_n(buf->data(), kTestBufferSize, -1); |
| 310 | 311 |
| 311 // Read() results in success even when the reader returns error. | 312 // Read() results in success even when the reader returns error. |
| 312 TestCompletionCallback read_callback; | 313 TestCompletionCallback read_callback; |
| 313 ASSERT_EQ(ERR_IO_PENDING, | 314 ASSERT_EQ(ERR_IO_PENDING, |
| 314 stream.Read(buf.get(), kTestBufferSize, read_callback.callback())); | 315 stream.Read(buf.get(), kTestBufferSize, read_callback.callback())); |
| 315 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), read_callback.WaitForResult()); | 316 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), read_callback.WaitForResult()); |
| 316 EXPECT_EQ(kTestDataSize*2, stream.position()); | 317 EXPECT_EQ(kTestDataSize * 2, stream.position()); |
| 317 EXPECT_TRUE(stream.IsEOF()); | 318 EXPECT_TRUE(stream.IsEOF()); |
| 318 | 319 |
| 319 // The buffer is filled with zero. | 320 // The buffer is filled with zero. |
| 320 EXPECT_EQ(static_cast<int>(kTestDataSize*2), | 321 EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |
| 321 std::count(buf->data(), buf->data() + kTestBufferSize, 0)); | 322 std::count(buf->data(), buf->data() + kTestBufferSize, 0)); |
| 322 } | 323 } |
| 323 | 324 |
| 324 TEST_F(UploadDataStreamTest, FileAndBytes) { | 325 TEST_F(UploadDataStreamTest, FileAndBytes) { |
| 325 base::FilePath temp_file_path; | 326 base::FilePath temp_file_path; |
| 326 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 327 ASSERT_TRUE( |
| 327 &temp_file_path)); | 328 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 328 ASSERT_EQ(static_cast<int>(kTestDataSize), | 329 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 329 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 330 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 330 | 331 |
| 331 const uint64 kFileRangeOffset = 1; | 332 const uint64 kFileRangeOffset = 1; |
| 332 const uint64 kFileRangeLength = 4; | 333 const uint64 kFileRangeLength = 4; |
| 333 element_readers_.push_back( | 334 element_readers_.push_back( |
| 334 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 335 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 335 temp_file_path, | 336 temp_file_path, |
| 336 kFileRangeOffset, | 337 kFileRangeOffset, |
| 337 kFileRangeLength, | 338 kFileRangeLength, |
| 338 base::Time())); | 339 base::Time())); |
| 339 | 340 |
| 340 element_readers_.push_back(new UploadBytesElementReader( | 341 element_readers_.push_back( |
| 341 kTestData, kTestDataSize)); | 342 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 342 | 343 |
| 343 const uint64 kStreamSize = kTestDataSize + kFileRangeLength; | 344 const uint64 kStreamSize = kTestDataSize + kFileRangeLength; |
| 344 TestCompletionCallback init_callback; | 345 TestCompletionCallback init_callback; |
| 345 UploadDataStream stream(element_readers_.Pass(), 0); | 346 UploadDataStream stream(element_readers_.Pass(), 0); |
| 346 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); | 347 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); |
| 347 ASSERT_EQ(OK, init_callback.WaitForResult()); | 348 ASSERT_EQ(OK, init_callback.WaitForResult()); |
| 348 EXPECT_FALSE(stream.IsInMemory()); | 349 EXPECT_FALSE(stream.IsInMemory()); |
| 349 EXPECT_EQ(kStreamSize, stream.size()); | 350 EXPECT_EQ(kStreamSize, stream.size()); |
| 350 EXPECT_EQ(0U, stream.position()); | 351 EXPECT_EQ(0U, stream.position()); |
| 351 EXPECT_FALSE(stream.IsEOF()); | 352 EXPECT_FALSE(stream.IsEOF()); |
| 352 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 353 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
| 353 while (!stream.IsEOF()) { | 354 while (!stream.IsEOF()) { |
| 354 TestCompletionCallback read_callback; | 355 TestCompletionCallback read_callback; |
| 355 const int result = | 356 const int result = |
| 356 stream.Read(buf.get(), kTestBufferSize, read_callback.callback()); | 357 stream.Read(buf.get(), kTestBufferSize, read_callback.callback()); |
| 357 const int bytes_read = | 358 const int bytes_read = |
| 358 result != ERR_IO_PENDING ? result : read_callback.WaitForResult(); | 359 result != ERR_IO_PENDING ? result : read_callback.WaitForResult(); |
| 359 ASSERT_LE(0, bytes_read); // Not an error. | 360 ASSERT_LE(0, bytes_read); // Not an error. |
| 360 } | 361 } |
| 361 EXPECT_EQ(kStreamSize, stream.position()); | 362 EXPECT_EQ(kStreamSize, stream.position()); |
| 362 ASSERT_TRUE(stream.IsEOF()); | 363 ASSERT_TRUE(stream.IsEOF()); |
| 363 } | 364 } |
| 364 | 365 |
| 365 TEST_F(UploadDataStreamTest, Chunk) { | 366 TEST_F(UploadDataStreamTest, Chunk) { |
| 366 const uint64 kStreamSize = kTestDataSize*2; | 367 const uint64 kStreamSize = kTestDataSize * 2; |
| 367 UploadDataStream stream(UploadDataStream::CHUNKED, 0); | 368 UploadDataStream stream(UploadDataStream::CHUNKED, 0); |
| 368 stream.AppendChunk(kTestData, kTestDataSize, false); | 369 stream.AppendChunk(kTestData, kTestDataSize, false); |
| 369 stream.AppendChunk(kTestData, kTestDataSize, true); | 370 stream.AppendChunk(kTestData, kTestDataSize, true); |
| 370 | 371 |
| 371 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 372 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
| 372 EXPECT_FALSE(stream.IsInMemory()); | 373 EXPECT_FALSE(stream.IsInMemory()); |
| 373 EXPECT_EQ(0U, stream.size()); // Content-Length is 0 for chunked data. | 374 EXPECT_EQ(0U, stream.size()); // Content-Length is 0 for chunked data. |
| 374 EXPECT_EQ(0U, stream.position()); | 375 EXPECT_EQ(0U, stream.position()); |
| 375 EXPECT_FALSE(stream.IsEOF()); | 376 EXPECT_FALSE(stream.IsEOF()); |
| 376 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 377 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 UploadDataStream stream(element_readers_.Pass(), 0); | 450 UploadDataStream stream(element_readers_.Pass(), 0); |
| 450 | 451 |
| 451 // Run Init(). | 452 // Run Init(). |
| 452 TestCompletionCallback callback; | 453 TestCompletionCallback callback; |
| 453 ASSERT_EQ(ERR_IO_PENDING, stream.Init(callback.callback())); | 454 ASSERT_EQ(ERR_IO_PENDING, stream.Init(callback.callback())); |
| 454 EXPECT_EQ(ERR_FAILED, callback.WaitForResult()); | 455 EXPECT_EQ(ERR_FAILED, callback.WaitForResult()); |
| 455 } | 456 } |
| 456 | 457 |
| 457 // Read with a buffer whose size is same as the data. | 458 // Read with a buffer whose size is same as the data. |
| 458 TEST_F(UploadDataStreamTest, ReadAsyncWithExactSizeBuffer) { | 459 TEST_F(UploadDataStreamTest, ReadAsyncWithExactSizeBuffer) { |
| 459 element_readers_.push_back(new UploadBytesElementReader( | 460 element_readers_.push_back( |
| 460 kTestData, kTestDataSize)); | 461 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 461 UploadDataStream stream(element_readers_.Pass(), 0); | 462 UploadDataStream stream(element_readers_.Pass(), 0); |
| 462 | 463 |
| 463 ASSERT_EQ(OK, stream.Init(CompletionCallback())); | 464 ASSERT_EQ(OK, stream.Init(CompletionCallback())); |
| 464 EXPECT_TRUE(stream.IsInMemory()); | 465 EXPECT_TRUE(stream.IsInMemory()); |
| 465 EXPECT_EQ(kTestDataSize, stream.size()); | 466 EXPECT_EQ(kTestDataSize, stream.size()); |
| 466 EXPECT_EQ(0U, stream.position()); | 467 EXPECT_EQ(0U, stream.position()); |
| 467 EXPECT_FALSE(stream.IsEOF()); | 468 EXPECT_FALSE(stream.IsEOF()); |
| 468 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestDataSize); | 469 scoped_refptr<IOBuffer> buf = new IOBuffer(kTestDataSize); |
| 469 int bytes_read = stream.Read(buf.get(), kTestDataSize, CompletionCallback()); | 470 int bytes_read = stream.Read(buf.get(), kTestDataSize, CompletionCallback()); |
| 470 ASSERT_EQ(static_cast<int>(kTestDataSize), bytes_read); // Not an error. | 471 ASSERT_EQ(static_cast<int>(kTestDataSize), bytes_read); // Not an error. |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); | 543 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback.callback())); |
| 543 int error_code = init_callback.WaitForResult(); | 544 int error_code = init_callback.WaitForResult(); |
| 544 if (error_expected) | 545 if (error_expected) |
| 545 ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code); | 546 ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code); |
| 546 else | 547 else |
| 547 ASSERT_EQ(OK, error_code); | 548 ASSERT_EQ(OK, error_code); |
| 548 } | 549 } |
| 549 | 550 |
| 550 TEST_F(UploadDataStreamTest, FileChanged) { | 551 TEST_F(UploadDataStreamTest, FileChanged) { |
| 551 base::FilePath temp_file_path; | 552 base::FilePath temp_file_path; |
| 552 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 553 ASSERT_TRUE( |
| 553 &temp_file_path)); | 554 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 554 ASSERT_EQ(static_cast<int>(kTestDataSize), | 555 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 555 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 556 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 556 | 557 |
| 557 base::File::Info file_info; | 558 base::File::Info file_info; |
| 558 ASSERT_TRUE(base::GetFileInfo(temp_file_path, &file_info)); | 559 ASSERT_TRUE(base::GetFileInfo(temp_file_path, &file_info)); |
| 559 | 560 |
| 560 // Test file not changed. | 561 // Test file not changed. |
| 561 FileChangedHelper(temp_file_path, file_info.last_modified, false); | 562 FileChangedHelper(temp_file_path, file_info.last_modified, false); |
| 562 | 563 |
| 563 // Test file changed. | 564 // Test file changed. |
| 564 FileChangedHelper(temp_file_path, | 565 FileChangedHelper(temp_file_path, |
| 565 file_info.last_modified - base::TimeDelta::FromSeconds(1), | 566 file_info.last_modified - base::TimeDelta::FromSeconds(1), |
| 566 true); | 567 true); |
| 567 } | 568 } |
| 568 | 569 |
| 569 TEST_F(UploadDataStreamTest, MultipleInit) { | 570 TEST_F(UploadDataStreamTest, MultipleInit) { |
| 570 base::FilePath temp_file_path; | 571 base::FilePath temp_file_path; |
| 571 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 572 ASSERT_TRUE( |
| 572 &temp_file_path)); | 573 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 573 ASSERT_EQ(static_cast<int>(kTestDataSize), | 574 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 574 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 575 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 575 | 576 |
| 576 // Prepare data. | 577 // Prepare data. |
| 577 element_readers_.push_back(new UploadBytesElementReader( | 578 element_readers_.push_back( |
| 578 kTestData, kTestDataSize)); | 579 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 579 element_readers_.push_back( | 580 element_readers_.push_back( |
| 580 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 581 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 581 temp_file_path, | 582 temp_file_path, |
| 582 0, | 583 0, |
| 583 kuint64max, | 584 kuint64max, |
| 584 base::Time())); | 585 base::Time())); |
| 585 UploadDataStream stream(element_readers_.Pass(), 0); | 586 UploadDataStream stream(element_readers_.Pass(), 0); |
| 586 | 587 |
| 587 std::string expected_data(kTestData, kTestData + kTestDataSize); | 588 std::string expected_data(kTestData, kTestData + kTestDataSize); |
| 588 expected_data += expected_data; | 589 expected_data += expected_data; |
| 589 | 590 |
| 590 // Call Init(). | 591 // Call Init(). |
| 591 TestCompletionCallback init_callback1; | 592 TestCompletionCallback init_callback1; |
| 592 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); | 593 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); |
| 593 ASSERT_EQ(OK, init_callback1.WaitForResult()); | 594 ASSERT_EQ(OK, init_callback1.WaitForResult()); |
| 594 EXPECT_FALSE(stream.IsEOF()); | 595 EXPECT_FALSE(stream.IsEOF()); |
| 595 EXPECT_EQ(kTestDataSize*2, stream.size()); | 596 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 596 | 597 |
| 597 // Read. | 598 // Read. |
| 598 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); | 599 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); |
| 599 EXPECT_TRUE(stream.IsEOF()); | 600 EXPECT_TRUE(stream.IsEOF()); |
| 600 | 601 |
| 601 // Call Init() again to reset. | 602 // Call Init() again to reset. |
| 602 TestCompletionCallback init_callback2; | 603 TestCompletionCallback init_callback2; |
| 603 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); | 604 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); |
| 604 ASSERT_EQ(OK, init_callback2.WaitForResult()); | 605 ASSERT_EQ(OK, init_callback2.WaitForResult()); |
| 605 EXPECT_FALSE(stream.IsEOF()); | 606 EXPECT_FALSE(stream.IsEOF()); |
| 606 EXPECT_EQ(kTestDataSize*2, stream.size()); | 607 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 607 | 608 |
| 608 // Read again. | 609 // Read again. |
| 609 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); | 610 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); |
| 610 EXPECT_TRUE(stream.IsEOF()); | 611 EXPECT_TRUE(stream.IsEOF()); |
| 611 } | 612 } |
| 612 | 613 |
| 613 TEST_F(UploadDataStreamTest, MultipleInitAsync) { | 614 TEST_F(UploadDataStreamTest, MultipleInitAsync) { |
| 614 base::FilePath temp_file_path; | 615 base::FilePath temp_file_path; |
| 615 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 616 ASSERT_TRUE( |
| 616 &temp_file_path)); | 617 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 617 ASSERT_EQ(static_cast<int>(kTestDataSize), | 618 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 618 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 619 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 619 TestCompletionCallback test_callback; | 620 TestCompletionCallback test_callback; |
| 620 | 621 |
| 621 // Prepare data. | 622 // Prepare data. |
| 622 element_readers_.push_back(new UploadBytesElementReader( | 623 element_readers_.push_back( |
| 623 kTestData, kTestDataSize)); | 624 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 624 element_readers_.push_back( | 625 element_readers_.push_back( |
| 625 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 626 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 626 temp_file_path, | 627 temp_file_path, |
| 627 0, | 628 0, |
| 628 kuint64max, | 629 kuint64max, |
| 629 base::Time())); | 630 base::Time())); |
| 630 UploadDataStream stream(element_readers_.Pass(), 0); | 631 UploadDataStream stream(element_readers_.Pass(), 0); |
| 631 | 632 |
| 632 std::string expected_data(kTestData, kTestData + kTestDataSize); | 633 std::string expected_data(kTestData, kTestData + kTestDataSize); |
| 633 expected_data += expected_data; | 634 expected_data += expected_data; |
| 634 | 635 |
| 635 // Call Init(). | 636 // Call Init(). |
| 636 ASSERT_EQ(ERR_IO_PENDING, stream.Init(test_callback.callback())); | 637 ASSERT_EQ(ERR_IO_PENDING, stream.Init(test_callback.callback())); |
| 637 EXPECT_EQ(OK, test_callback.WaitForResult()); | 638 EXPECT_EQ(OK, test_callback.WaitForResult()); |
| 638 EXPECT_FALSE(stream.IsEOF()); | 639 EXPECT_FALSE(stream.IsEOF()); |
| 639 EXPECT_EQ(kTestDataSize*2, stream.size()); | 640 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 640 | 641 |
| 641 // Read. | 642 // Read. |
| 642 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); | 643 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); |
| 643 EXPECT_TRUE(stream.IsEOF()); | 644 EXPECT_TRUE(stream.IsEOF()); |
| 644 | 645 |
| 645 // Call Init() again to reset. | 646 // Call Init() again to reset. |
| 646 ASSERT_EQ(ERR_IO_PENDING, stream.Init(test_callback.callback())); | 647 ASSERT_EQ(ERR_IO_PENDING, stream.Init(test_callback.callback())); |
| 647 EXPECT_EQ(OK, test_callback.WaitForResult()); | 648 EXPECT_EQ(OK, test_callback.WaitForResult()); |
| 648 EXPECT_FALSE(stream.IsEOF()); | 649 EXPECT_FALSE(stream.IsEOF()); |
| 649 EXPECT_EQ(kTestDataSize*2, stream.size()); | 650 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 650 | 651 |
| 651 // Read again. | 652 // Read again. |
| 652 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); | 653 EXPECT_EQ(expected_data, ReadFromUploadDataStream(&stream)); |
| 653 EXPECT_TRUE(stream.IsEOF()); | 654 EXPECT_TRUE(stream.IsEOF()); |
| 654 } | 655 } |
| 655 | 656 |
| 656 TEST_F(UploadDataStreamTest, InitToReset) { | 657 TEST_F(UploadDataStreamTest, InitToReset) { |
| 657 base::FilePath temp_file_path; | 658 base::FilePath temp_file_path; |
| 658 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 659 ASSERT_TRUE( |
| 659 &temp_file_path)); | 660 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 660 ASSERT_EQ(static_cast<int>(kTestDataSize), | 661 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 661 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 662 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 662 | 663 |
| 663 // Prepare data. | 664 // Prepare data. |
| 664 element_readers_.push_back(new UploadBytesElementReader( | 665 element_readers_.push_back( |
| 665 kTestData, kTestDataSize)); | 666 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 666 element_readers_.push_back( | 667 element_readers_.push_back( |
| 667 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 668 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 668 temp_file_path, | 669 temp_file_path, |
| 669 0, | 670 0, |
| 670 kuint64max, | 671 kuint64max, |
| 671 base::Time())); | 672 base::Time())); |
| 672 UploadDataStream stream(element_readers_.Pass(), 0); | 673 UploadDataStream stream(element_readers_.Pass(), 0); |
| 673 | 674 |
| 674 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 675 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |
| 675 expected_data.insert(expected_data.end(), expected_data.begin(), | 676 expected_data.insert(expected_data.end(), |
| 677 expected_data.begin(), |
| 676 expected_data.begin() + kTestDataSize); | 678 expected_data.begin() + kTestDataSize); |
| 677 | 679 |
| 678 // Call Init(). | 680 // Call Init(). |
| 679 TestCompletionCallback init_callback1; | 681 TestCompletionCallback init_callback1; |
| 680 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); | 682 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); |
| 681 EXPECT_EQ(OK, init_callback1.WaitForResult()); | 683 EXPECT_EQ(OK, init_callback1.WaitForResult()); |
| 682 EXPECT_FALSE(stream.IsEOF()); | 684 EXPECT_FALSE(stream.IsEOF()); |
| 683 EXPECT_EQ(kTestDataSize*2, stream.size()); | 685 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 684 | 686 |
| 685 // Read some. | 687 // Read some. |
| 686 TestCompletionCallback read_callback1; | 688 TestCompletionCallback read_callback1; |
| 687 std::vector<char> buf(kTestDataSize + kTestDataSize/2); | 689 std::vector<char> buf(kTestDataSize + kTestDataSize / 2); |
| 688 scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); | 690 scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); |
| 689 EXPECT_EQ( | 691 EXPECT_EQ( |
| 690 ERR_IO_PENDING, | 692 ERR_IO_PENDING, |
| 691 stream.Read(wrapped_buffer.get(), buf.size(), read_callback1.callback())); | 693 stream.Read(wrapped_buffer.get(), buf.size(), read_callback1.callback())); |
| 692 EXPECT_EQ(static_cast<int>(buf.size()), read_callback1.WaitForResult()); | 694 EXPECT_EQ(static_cast<int>(buf.size()), read_callback1.WaitForResult()); |
| 693 EXPECT_EQ(buf.size(), stream.position()); | 695 EXPECT_EQ(buf.size(), stream.position()); |
| 694 | 696 |
| 695 // Call Init to reset the state. | 697 // Call Init to reset the state. |
| 696 TestCompletionCallback init_callback2; | 698 TestCompletionCallback init_callback2; |
| 697 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); | 699 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); |
| 698 EXPECT_EQ(OK, init_callback2.WaitForResult()); | 700 EXPECT_EQ(OK, init_callback2.WaitForResult()); |
| 699 EXPECT_FALSE(stream.IsEOF()); | 701 EXPECT_FALSE(stream.IsEOF()); |
| 700 EXPECT_EQ(kTestDataSize*2, stream.size()); | 702 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 701 | 703 |
| 702 // Read. | 704 // Read. |
| 703 TestCompletionCallback read_callback2; | 705 TestCompletionCallback read_callback2; |
| 704 std::vector<char> buf2(kTestDataSize*2); | 706 std::vector<char> buf2(kTestDataSize * 2); |
| 705 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); | 707 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); |
| 706 EXPECT_EQ(ERR_IO_PENDING, | 708 EXPECT_EQ(ERR_IO_PENDING, |
| 707 stream.Read( | 709 stream.Read( |
| 708 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 710 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |
| 709 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 711 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
| 710 EXPECT_EQ(expected_data, buf2); | 712 EXPECT_EQ(expected_data, buf2); |
| 711 } | 713 } |
| 712 | 714 |
| 713 TEST_F(UploadDataStreamTest, InitDuringAsyncInit) { | 715 TEST_F(UploadDataStreamTest, InitDuringAsyncInit) { |
| 714 base::FilePath temp_file_path; | 716 base::FilePath temp_file_path; |
| 715 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 717 ASSERT_TRUE( |
| 716 &temp_file_path)); | 718 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 717 ASSERT_EQ(static_cast<int>(kTestDataSize), | 719 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 718 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 720 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 719 | 721 |
| 720 // Prepare data. | 722 // Prepare data. |
| 721 element_readers_.push_back(new UploadBytesElementReader( | 723 element_readers_.push_back( |
| 722 kTestData, kTestDataSize)); | 724 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 723 element_readers_.push_back( | 725 element_readers_.push_back( |
| 724 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 726 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 725 temp_file_path, | 727 temp_file_path, |
| 726 0, | 728 0, |
| 727 kuint64max, | 729 kuint64max, |
| 728 base::Time())); | 730 base::Time())); |
| 729 UploadDataStream stream(element_readers_.Pass(), 0); | 731 UploadDataStream stream(element_readers_.Pass(), 0); |
| 730 | 732 |
| 731 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 733 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |
| 732 expected_data.insert(expected_data.end(), expected_data.begin(), | 734 expected_data.insert(expected_data.end(), |
| 735 expected_data.begin(), |
| 733 expected_data.begin() + kTestDataSize); | 736 expected_data.begin() + kTestDataSize); |
| 734 | 737 |
| 735 // Start Init. | 738 // Start Init. |
| 736 TestCompletionCallback init_callback1; | 739 TestCompletionCallback init_callback1; |
| 737 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); | 740 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); |
| 738 | 741 |
| 739 // Call Init again to cancel the previous init. | 742 // Call Init again to cancel the previous init. |
| 740 TestCompletionCallback init_callback2; | 743 TestCompletionCallback init_callback2; |
| 741 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); | 744 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); |
| 742 EXPECT_EQ(OK, init_callback2.WaitForResult()); | 745 EXPECT_EQ(OK, init_callback2.WaitForResult()); |
| 743 EXPECT_FALSE(stream.IsEOF()); | 746 EXPECT_FALSE(stream.IsEOF()); |
| 744 EXPECT_EQ(kTestDataSize*2, stream.size()); | 747 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 745 | 748 |
| 746 // Read. | 749 // Read. |
| 747 TestCompletionCallback read_callback2; | 750 TestCompletionCallback read_callback2; |
| 748 std::vector<char> buf2(kTestDataSize*2); | 751 std::vector<char> buf2(kTestDataSize * 2); |
| 749 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); | 752 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); |
| 750 EXPECT_EQ(ERR_IO_PENDING, | 753 EXPECT_EQ(ERR_IO_PENDING, |
| 751 stream.Read( | 754 stream.Read( |
| 752 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 755 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |
| 753 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 756 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
| 754 EXPECT_EQ(expected_data, buf2); | 757 EXPECT_EQ(expected_data, buf2); |
| 755 EXPECT_TRUE(stream.IsEOF()); | 758 EXPECT_TRUE(stream.IsEOF()); |
| 756 | 759 |
| 757 // Make sure callbacks are not called for cancelled operations. | 760 // Make sure callbacks are not called for cancelled operations. |
| 758 EXPECT_FALSE(init_callback1.have_result()); | 761 EXPECT_FALSE(init_callback1.have_result()); |
| 759 } | 762 } |
| 760 | 763 |
| 761 TEST_F(UploadDataStreamTest, InitDuringAsyncRead) { | 764 TEST_F(UploadDataStreamTest, InitDuringAsyncRead) { |
| 762 base::FilePath temp_file_path; | 765 base::FilePath temp_file_path; |
| 763 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 766 ASSERT_TRUE( |
| 764 &temp_file_path)); | 767 base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file_path)); |
| 765 ASSERT_EQ(static_cast<int>(kTestDataSize), | 768 ASSERT_EQ(static_cast<int>(kTestDataSize), |
| 766 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 769 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |
| 767 | 770 |
| 768 // Prepare data. | 771 // Prepare data. |
| 769 element_readers_.push_back(new UploadBytesElementReader( | 772 element_readers_.push_back( |
| 770 kTestData, kTestDataSize)); | 773 new UploadBytesElementReader(kTestData, kTestDataSize)); |
| 771 element_readers_.push_back( | 774 element_readers_.push_back( |
| 772 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 775 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 773 temp_file_path, | 776 temp_file_path, |
| 774 0, | 777 0, |
| 775 kuint64max, | 778 kuint64max, |
| 776 base::Time())); | 779 base::Time())); |
| 777 UploadDataStream stream(element_readers_.Pass(), 0); | 780 UploadDataStream stream(element_readers_.Pass(), 0); |
| 778 | 781 |
| 779 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 782 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |
| 780 expected_data.insert(expected_data.end(), expected_data.begin(), | 783 expected_data.insert(expected_data.end(), |
| 784 expected_data.begin(), |
| 781 expected_data.begin() + kTestDataSize); | 785 expected_data.begin() + kTestDataSize); |
| 782 | 786 |
| 783 // Call Init(). | 787 // Call Init(). |
| 784 TestCompletionCallback init_callback1; | 788 TestCompletionCallback init_callback1; |
| 785 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); | 789 ASSERT_EQ(ERR_IO_PENDING, stream.Init(init_callback1.callback())); |
| 786 EXPECT_EQ(OK, init_callback1.WaitForResult()); | 790 EXPECT_EQ(OK, init_callback1.WaitForResult()); |
| 787 EXPECT_FALSE(stream.IsEOF()); | 791 EXPECT_FALSE(stream.IsEOF()); |
| 788 EXPECT_EQ(kTestDataSize*2, stream.size()); | 792 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 789 | 793 |
| 790 // Start reading. | 794 // Start reading. |
| 791 TestCompletionCallback read_callback1; | 795 TestCompletionCallback read_callback1; |
| 792 std::vector<char> buf(kTestDataSize*2); | 796 std::vector<char> buf(kTestDataSize * 2); |
| 793 scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); | 797 scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); |
| 794 EXPECT_EQ( | 798 EXPECT_EQ( |
| 795 ERR_IO_PENDING, | 799 ERR_IO_PENDING, |
| 796 stream.Read(wrapped_buffer.get(), buf.size(), read_callback1.callback())); | 800 stream.Read(wrapped_buffer.get(), buf.size(), read_callback1.callback())); |
| 797 | 801 |
| 798 // Call Init to cancel the previous read. | 802 // Call Init to cancel the previous read. |
| 799 TestCompletionCallback init_callback2; | 803 TestCompletionCallback init_callback2; |
| 800 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); | 804 EXPECT_EQ(ERR_IO_PENDING, stream.Init(init_callback2.callback())); |
| 801 EXPECT_EQ(OK, init_callback2.WaitForResult()); | 805 EXPECT_EQ(OK, init_callback2.WaitForResult()); |
| 802 EXPECT_FALSE(stream.IsEOF()); | 806 EXPECT_FALSE(stream.IsEOF()); |
| 803 EXPECT_EQ(kTestDataSize*2, stream.size()); | 807 EXPECT_EQ(kTestDataSize * 2, stream.size()); |
| 804 | 808 |
| 805 // Read. | 809 // Read. |
| 806 TestCompletionCallback read_callback2; | 810 TestCompletionCallback read_callback2; |
| 807 std::vector<char> buf2(kTestDataSize*2); | 811 std::vector<char> buf2(kTestDataSize * 2); |
| 808 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); | 812 scoped_refptr<IOBuffer> wrapped_buffer2 = new WrappedIOBuffer(&buf2[0]); |
| 809 EXPECT_EQ(ERR_IO_PENDING, | 813 EXPECT_EQ(ERR_IO_PENDING, |
| 810 stream.Read( | 814 stream.Read( |
| 811 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 815 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |
| 812 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 816 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |
| 813 EXPECT_EQ(expected_data, buf2); | 817 EXPECT_EQ(expected_data, buf2); |
| 814 EXPECT_TRUE(stream.IsEOF()); | 818 EXPECT_TRUE(stream.IsEOF()); |
| 815 | 819 |
| 816 // Make sure callbacks are not called for cancelled operations. | 820 // Make sure callbacks are not called for cancelled operations. |
| 817 EXPECT_FALSE(read_callback1.have_result()); | 821 EXPECT_FALSE(read_callback1.have_result()); |
| 818 } | 822 } |
| 819 | 823 |
| 820 } // namespace net | 824 } // namespace net |
| OLD | NEW |