| 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 214 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  225       std::numeric_limits<uint64_t>::max(), base::Time()))); |  225       std::numeric_limits<uint64_t>::max(), base::Time()))); | 
|  226  |  226  | 
|  227   TestCompletionCallback init_callback; |  227   TestCompletionCallback init_callback; | 
|  228   std::unique_ptr<UploadDataStream> stream( |  228   std::unique_ptr<UploadDataStream> stream( | 
|  229       new ElementsUploadDataStream(std::move(element_readers_), 0)); |  229       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  230   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); |  230   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); | 
|  231   ASSERT_EQ(OK, init_callback.WaitForResult()); |  231   ASSERT_EQ(OK, init_callback.WaitForResult()); | 
|  232   EXPECT_FALSE(stream->IsInMemory()); |  232   EXPECT_FALSE(stream->IsInMemory()); | 
|  233   EXPECT_EQ(kFakeSize, stream->size()); |  233   EXPECT_EQ(kFakeSize, stream->size()); | 
|  234   EXPECT_EQ(0U, stream->position()); |  234   EXPECT_EQ(0U, stream->position()); | 
 |  235  | 
 |  236   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  235   EXPECT_FALSE(stream->IsEOF()); |  237   EXPECT_FALSE(stream->IsEOF()); | 
|  236   uint64_t read_counter = 0; |  238  | 
|  237   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  239   TestCompletionCallback read_callback; | 
|  238   while (!stream->IsEOF()) { |  240   ASSERT_EQ(ERR_IO_PENDING, | 
|  239     TestCompletionCallback read_callback; |  241             stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); | 
|  240     ASSERT_EQ( |  242   int bytes_read = read_callback.WaitForResult(); | 
|  241         ERR_IO_PENDING, |  243  | 
|  242         stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); |  244   // UpdateDataStream will return error if there is something wrong. | 
|  243     int bytes_read = read_callback.WaitForResult(); |  245   // Thus, |bytes_read| is actual error. | 
|  244     ASSERT_LE(0, bytes_read);  // Not an error. |  246   EXPECT_EQ(ERR_UPLOAD_FILE_CHANGED, bytes_read); | 
|  245     read_counter += bytes_read; |  247   EXPECT_EQ(0U, stream->position()); | 
|  246     EXPECT_EQ(read_counter, stream->position()); |  248   EXPECT_FALSE(stream->IsEOF()); | 
|  247   } |  | 
|  248   // UpdateDataStream will pad out the file with 0 bytes so that the HTTP |  | 
|  249   // transaction doesn't hang.  Therefore we expected the full size. |  | 
|  250   EXPECT_EQ(kFakeSize, read_counter); |  | 
|  251   EXPECT_EQ(read_counter, stream->position()); |  | 
|  252 } |  249 } | 
|  253  |  250  | 
|  254 TEST_F(ElementsUploadDataStreamTest, ReadErrorSync) { |  251 TEST_F(ElementsUploadDataStreamTest, ReadErrorSync) { | 
|  255   // This element cannot be read. |  252   // This element cannot be read. | 
|  256   std::unique_ptr<MockUploadElementReader> reader( |  253   std::unique_ptr<MockUploadElementReader> reader( | 
|  257       new MockUploadElementReader(kTestDataSize, true)); |  254       new MockUploadElementReader(kTestDataSize, true)); | 
|  258   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |  255   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); | 
|  259   reader->SetReadExpectation(ERR_FAILED); |  256   reader->SetReadExpectation(ERR_FAILED); | 
|  260   element_readers_.push_back(std::move(reader)); |  257   element_readers_.push_back(std::move(reader)); | 
|  261  |  258  | 
|  262   // 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. | 
|  263   element_readers_.push_back( |  260   element_readers_.push_back( | 
|  264       base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); |  261       base::WrapUnique(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  265  |  262  | 
|  266   std::unique_ptr<UploadDataStream> stream( |  263   std::unique_ptr<UploadDataStream> stream( | 
|  267       new ElementsUploadDataStream(std::move(element_readers_), 0)); |  264       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  268  |  265  | 
|  269   // Run Init(). |  266   // Run Init(). | 
|  270   ASSERT_EQ(OK, stream->Init(CompletionCallback())); |  267   ASSERT_EQ(OK, stream->Init(CompletionCallback())); | 
|  271   EXPECT_EQ(kTestDataSize*2, stream->size()); |  268   EXPECT_EQ(kTestDataSize*2, stream->size()); | 
|  272   EXPECT_EQ(0U, stream->position()); |  269   EXPECT_EQ(0U, stream->position()); | 
|  273   EXPECT_FALSE(stream->IsEOF()); |  270   EXPECT_FALSE(stream->IsEOF()); | 
|  274  |  271  | 
|  275   // Prepare a buffer filled with non-zero data. |  272   // Prepare a buffer filled with non-zero data. | 
|  276   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  273   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  277   std::fill_n(buf->data(), kTestBufferSize, -1); |  274   std::fill_n(buf->data(), kTestBufferSize, -1); | 
|  278  |  275  | 
|  279   // Read() results in success even when the reader returns error. |  276   // Read() results in success even when the reader returns error. | 
|  280   EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |  277   EXPECT_EQ(ERR_FAILED, | 
|  281             stream->Read(buf.get(), kTestBufferSize, CompletionCallback())); |  278             stream->Read(buf.get(), kTestBufferSize, CompletionCallback())); | 
|  282   EXPECT_EQ(kTestDataSize * 2, stream->position()); |  279   EXPECT_EQ(0U, stream->position()); | 
|  283   EXPECT_TRUE(stream->IsEOF()); |  280   EXPECT_FALSE(stream->IsEOF()); | 
|  284  |  281  | 
|  285   // The buffer is filled with zero. |  282   // The buffer is filled with zero. | 
|  286   EXPECT_EQ(static_cast<int>(kTestDataSize*2), |  283   EXPECT_EQ(0, std::count(buf->data(), buf->data() + kTestBufferSize, 0)); | 
|  287             std::count(buf->data(), buf->data() + kTestBufferSize, 0)); |  | 
|  288 } |  284 } | 
|  289  |  285  | 
|  290 TEST_F(ElementsUploadDataStreamTest, ReadErrorAsync) { |  286 TEST_F(ElementsUploadDataStreamTest, ReadErrorAsync) { | 
|  291   // This element cannot be read. |  287   // This element cannot be read. | 
|  292   std::unique_ptr<MockUploadElementReader> reader( |  288   std::unique_ptr<MockUploadElementReader> reader( | 
|  293       new MockUploadElementReader(kTestDataSize, false)); |  289       new MockUploadElementReader(kTestDataSize, false)); | 
|  294   reader->SetAsyncInitExpectation(OK); |  290   reader->SetAsyncInitExpectation(OK); | 
|  295   reader->SetReadExpectation(ERR_FAILED); |  291   reader->SetReadExpectation(ERR_FAILED); | 
|  296   element_readers_.push_back(std::move(reader)); |  292   element_readers_.push_back(std::move(reader)); | 
|  297  |  293  | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|  311   EXPECT_FALSE(stream->IsEOF()); |  307   EXPECT_FALSE(stream->IsEOF()); | 
|  312  |  308  | 
|  313   // Prepare a buffer filled with non-zero data. |  309   // Prepare a buffer filled with non-zero data. | 
|  314   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  310   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  315   std::fill_n(buf->data(), kTestBufferSize, -1); |  311   std::fill_n(buf->data(), kTestBufferSize, -1); | 
|  316  |  312  | 
|  317   // Read() results in success even when the reader returns error. |  313   // Read() results in success even when the reader returns error. | 
|  318   TestCompletionCallback read_callback; |  314   TestCompletionCallback read_callback; | 
|  319   ASSERT_EQ(ERR_IO_PENDING, |  315   ASSERT_EQ(ERR_IO_PENDING, | 
|  320             stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); |  316             stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); | 
|  321   EXPECT_EQ(static_cast<int>(kTestDataSize * 2), read_callback.WaitForResult()); |  317   EXPECT_EQ(ERR_FAILED, read_callback.WaitForResult()); | 
|  322   EXPECT_EQ(kTestDataSize*2, stream->position()); |  318   EXPECT_EQ(0U, stream->position()); | 
|  323   EXPECT_TRUE(stream->IsEOF()); |  319   EXPECT_FALSE(stream->IsEOF()); | 
|  324  |  320  | 
|  325   // The buffer is filled with zero. |  321   // The buffer is empty | 
|  326   EXPECT_EQ(static_cast<int>(kTestDataSize*2), |  322   EXPECT_EQ(0, std::count(buf->data(), buf->data() + kTestBufferSize, 0)); | 
|  327             std::count(buf->data(), buf->data() + kTestBufferSize, 0)); |  | 
|  328 } |  323 } | 
|  329  |  324  | 
|  330 TEST_F(ElementsUploadDataStreamTest, FileAndBytes) { |  325 TEST_F(ElementsUploadDataStreamTest, FileAndBytes) { | 
|  331   base::FilePath temp_file_path; |  326   base::FilePath temp_file_path; | 
|  332   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  327   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  333                                              &temp_file_path)); |  328                                              &temp_file_path)); | 
|  334   ASSERT_EQ(static_cast<int>(kTestDataSize), |  329   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  335             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  330             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  336  |  331  | 
|  337   const uint64_t kFileRangeOffset = 1; |  332   const uint64_t kFileRangeOffset = 1; | 
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  797                 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |  792                 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 
|  798   EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |  793   EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 
|  799   EXPECT_EQ(expected_data, buf2); |  794   EXPECT_EQ(expected_data, buf2); | 
|  800   EXPECT_TRUE(stream->IsEOF()); |  795   EXPECT_TRUE(stream->IsEOF()); | 
|  801  |  796  | 
|  802   // Make sure callbacks are not called for cancelled operations. |  797   // Make sure callbacks are not called for cancelled operations. | 
|  803   EXPECT_FALSE(read_callback1.have_result()); |  798   EXPECT_FALSE(read_callback1.have_result()); | 
|  804 } |  799 } | 
|  805  |  800  | 
|  806 }  // namespace net |  801 }  // namespace net | 
| OLD | NEW |