| 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 <algorithm> |    7 #include <algorithm> | 
|    8 #include <vector> |    8 #include <vector> | 
|    9  |    9  | 
|   10 #include "base/basictypes.h" |   10 #include "base/basictypes.h" | 
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  135   ~ElementsUploadDataStreamTest() override { |  135   ~ElementsUploadDataStreamTest() override { | 
|  136     element_readers_.clear(); |  136     element_readers_.clear(); | 
|  137     base::RunLoop().RunUntilIdle(); |  137     base::RunLoop().RunUntilIdle(); | 
|  138   } |  138   } | 
|  139  |  139  | 
|  140   void FileChangedHelper(const base::FilePath& file_path, |  140   void FileChangedHelper(const base::FilePath& file_path, | 
|  141                          const base::Time& time, |  141                          const base::Time& time, | 
|  142                          bool error_expected); |  142                          bool error_expected); | 
|  143  |  143  | 
|  144   base::ScopedTempDir temp_dir_; |  144   base::ScopedTempDir temp_dir_; | 
|  145   ScopedVector<UploadElementReader> element_readers_; |  145   std::vector<scoped_ptr<UploadElementReader>> element_readers_; | 
|  146 }; |  146 }; | 
|  147  |  147  | 
|  148 TEST_F(ElementsUploadDataStreamTest, EmptyUploadData) { |  148 TEST_F(ElementsUploadDataStreamTest, EmptyUploadData) { | 
|  149   scoped_ptr<UploadDataStream> stream( |  149   scoped_ptr<UploadDataStream> stream( | 
|  150       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  150       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  151   ASSERT_EQ(OK, stream->Init(CompletionCallback())); |  151   ASSERT_EQ(OK, stream->Init(CompletionCallback())); | 
|  152   EXPECT_TRUE(stream->IsInMemory()); |  152   EXPECT_TRUE(stream->IsInMemory()); | 
|  153   EXPECT_EQ(0U, stream->size()); |  153   EXPECT_EQ(0U, stream->size()); | 
|  154   EXPECT_EQ(0U, stream->position()); |  154   EXPECT_EQ(0U, stream->position()); | 
|  155   EXPECT_TRUE(stream->IsEOF()); |  155   EXPECT_TRUE(stream->IsEOF()); | 
|  156 } |  156 } | 
|  157  |  157  | 
|  158 TEST_F(ElementsUploadDataStreamTest, ConsumeAllBytes) { |  158 TEST_F(ElementsUploadDataStreamTest, ConsumeAllBytes) { | 
|  159   element_readers_.push_back(new UploadBytesElementReader( |  159   element_readers_.push_back( | 
|  160       kTestData, kTestDataSize)); |  160       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  161   scoped_ptr<UploadDataStream> stream( |  161   scoped_ptr<UploadDataStream> stream( | 
|  162       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  162       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  163   ASSERT_EQ(OK, stream->Init(CompletionCallback())); |  163   ASSERT_EQ(OK, stream->Init(CompletionCallback())); | 
|  164   EXPECT_TRUE(stream->IsInMemory()); |  164   EXPECT_TRUE(stream->IsInMemory()); | 
|  165   EXPECT_EQ(kTestDataSize, stream->size()); |  165   EXPECT_EQ(kTestDataSize, stream->size()); | 
|  166   EXPECT_EQ(0U, stream->position()); |  166   EXPECT_EQ(0U, stream->position()); | 
|  167   EXPECT_FALSE(stream->IsEOF()); |  167   EXPECT_FALSE(stream->IsEOF()); | 
|  168   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  168   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  169   while (!stream->IsEOF()) { |  169   while (!stream->IsEOF()) { | 
|  170     int bytes_read = |  170     int bytes_read = | 
|  171         stream->Read(buf.get(), kTestBufferSize, CompletionCallback()); |  171         stream->Read(buf.get(), kTestBufferSize, CompletionCallback()); | 
|  172     ASSERT_LE(0, bytes_read);  // Not an error. |  172     ASSERT_LE(0, bytes_read);  // Not an error. | 
|  173   } |  173   } | 
|  174   EXPECT_EQ(kTestDataSize, stream->position()); |  174   EXPECT_EQ(kTestDataSize, stream->position()); | 
|  175   ASSERT_TRUE(stream->IsEOF()); |  175   ASSERT_TRUE(stream->IsEOF()); | 
|  176 } |  176 } | 
|  177  |  177  | 
|  178 TEST_F(ElementsUploadDataStreamTest, File) { |  178 TEST_F(ElementsUploadDataStreamTest, File) { | 
|  179   base::FilePath temp_file_path; |  179   base::FilePath temp_file_path; | 
|  180   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  180   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  181                                              &temp_file_path)); |  181                                              &temp_file_path)); | 
|  182   ASSERT_EQ(static_cast<int>(kTestDataSize), |  182   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  183             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  183             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  184  |  184  | 
|  185   element_readers_.push_back( |  185   element_readers_.push_back(make_scoped_ptr(new UploadFileElementReader( | 
|  186       new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), |  186       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, kuint64max, | 
|  187                                   temp_file_path, 0, kuint64max, base::Time())); |  187       base::Time()))); | 
|  188  |  188  | 
|  189   TestCompletionCallback init_callback; |  189   TestCompletionCallback init_callback; | 
|  190   scoped_ptr<UploadDataStream> stream( |  190   scoped_ptr<UploadDataStream> stream( | 
|  191       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  191       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  192   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); |  192   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); | 
|  193   ASSERT_EQ(OK, init_callback.WaitForResult()); |  193   ASSERT_EQ(OK, init_callback.WaitForResult()); | 
|  194   EXPECT_FALSE(stream->IsInMemory()); |  194   EXPECT_FALSE(stream->IsInMemory()); | 
|  195   EXPECT_EQ(kTestDataSize, stream->size()); |  195   EXPECT_EQ(kTestDataSize, stream->size()); | 
|  196   EXPECT_EQ(0U, stream->position()); |  196   EXPECT_EQ(0U, stream->position()); | 
|  197   EXPECT_FALSE(stream->IsEOF()); |  197   EXPECT_FALSE(stream->IsEOF()); | 
|  198   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  198   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  199   while (!stream->IsEOF()) { |  199   while (!stream->IsEOF()) { | 
|  200     TestCompletionCallback read_callback; |  200     TestCompletionCallback read_callback; | 
|  201     ASSERT_EQ( |  201     ASSERT_EQ( | 
|  202         ERR_IO_PENDING, |  202         ERR_IO_PENDING, | 
|  203         stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); |  203         stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); | 
|  204     ASSERT_LE(0, read_callback.WaitForResult());  // Not an error. |  204     ASSERT_LE(0, read_callback.WaitForResult());  // Not an error. | 
|  205   } |  205   } | 
|  206   EXPECT_EQ(kTestDataSize, stream->position()); |  206   EXPECT_EQ(kTestDataSize, stream->position()); | 
|  207   ASSERT_TRUE(stream->IsEOF()); |  207   ASSERT_TRUE(stream->IsEOF()); | 
|  208 } |  208 } | 
|  209  |  209  | 
|  210 TEST_F(ElementsUploadDataStreamTest, FileSmallerThanLength) { |  210 TEST_F(ElementsUploadDataStreamTest, FileSmallerThanLength) { | 
|  211   base::FilePath temp_file_path; |  211   base::FilePath temp_file_path; | 
|  212   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  212   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  213                                              &temp_file_path)); |  213                                              &temp_file_path)); | 
|  214   ASSERT_EQ(static_cast<int>(kTestDataSize), |  214   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  215             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  215             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  216   const uint64_t kFakeSize = kTestDataSize * 2; |  216   const uint64_t kFakeSize = kTestDataSize * 2; | 
|  217  |  217  | 
|  218   UploadFileElementReader::ScopedOverridingContentLengthForTests |  218   UploadFileElementReader::ScopedOverridingContentLengthForTests | 
|  219       overriding_content_length(kFakeSize); |  219       overriding_content_length(kFakeSize); | 
|  220  |  220  | 
|  221   element_readers_.push_back( |  221   element_readers_.push_back(make_scoped_ptr(new UploadFileElementReader( | 
|  222       new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), |  222       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, kuint64max, | 
|  223                                   temp_file_path, 0, kuint64max, base::Time())); |  223       base::Time()))); | 
|  224  |  224  | 
|  225   TestCompletionCallback init_callback; |  225   TestCompletionCallback init_callback; | 
|  226   scoped_ptr<UploadDataStream> stream( |  226   scoped_ptr<UploadDataStream> stream( | 
|  227       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  227       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  228   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); |  228   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); | 
|  229   ASSERT_EQ(OK, init_callback.WaitForResult()); |  229   ASSERT_EQ(OK, init_callback.WaitForResult()); | 
|  230   EXPECT_FALSE(stream->IsInMemory()); |  230   EXPECT_FALSE(stream->IsInMemory()); | 
|  231   EXPECT_EQ(kFakeSize, stream->size()); |  231   EXPECT_EQ(kFakeSize, stream->size()); | 
|  232   EXPECT_EQ(0U, stream->position()); |  232   EXPECT_EQ(0U, stream->position()); | 
|  233   EXPECT_FALSE(stream->IsEOF()); |  233   EXPECT_FALSE(stream->IsEOF()); | 
|  234   uint64_t read_counter = 0; |  234   uint64_t read_counter = 0; | 
|  235   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  235   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  236   while (!stream->IsEOF()) { |  236   while (!stream->IsEOF()) { | 
|  237     TestCompletionCallback read_callback; |  237     TestCompletionCallback read_callback; | 
|  238     ASSERT_EQ( |  238     ASSERT_EQ( | 
|  239         ERR_IO_PENDING, |  239         ERR_IO_PENDING, | 
|  240         stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); |  240         stream->Read(buf.get(), kTestBufferSize, read_callback.callback())); | 
|  241     int bytes_read = read_callback.WaitForResult(); |  241     int bytes_read = read_callback.WaitForResult(); | 
|  242     ASSERT_LE(0, bytes_read);  // Not an error. |  242     ASSERT_LE(0, bytes_read);  // Not an error. | 
|  243     read_counter += bytes_read; |  243     read_counter += bytes_read; | 
|  244     EXPECT_EQ(read_counter, stream->position()); |  244     EXPECT_EQ(read_counter, stream->position()); | 
|  245   } |  245   } | 
|  246   // UpdateDataStream will pad out the file with 0 bytes so that the HTTP |  246   // UpdateDataStream will pad out the file with 0 bytes so that the HTTP | 
|  247   // transaction doesn't hang.  Therefore we expected the full size. |  247   // transaction doesn't hang.  Therefore we expected the full size. | 
|  248   EXPECT_EQ(kFakeSize, read_counter); |  248   EXPECT_EQ(kFakeSize, read_counter); | 
|  249   EXPECT_EQ(read_counter, stream->position()); |  249   EXPECT_EQ(read_counter, stream->position()); | 
|  250 } |  250 } | 
|  251  |  251  | 
|  252 TEST_F(ElementsUploadDataStreamTest, ReadErrorSync) { |  252 TEST_F(ElementsUploadDataStreamTest, ReadErrorSync) { | 
|  253   // This element cannot be read. |  253   // This element cannot be read. | 
|  254   MockUploadElementReader* reader = |  254   scoped_ptr<MockUploadElementReader> reader( | 
|  255       new MockUploadElementReader(kTestDataSize, true); |  255       new MockUploadElementReader(kTestDataSize, true)); | 
|  256   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |  256   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); | 
|  257   reader->SetReadExpectation(ERR_FAILED); |  257   reader->SetReadExpectation(ERR_FAILED); | 
|  258   element_readers_.push_back(reader); |  258   element_readers_.push_back(std::move(reader)); | 
|  259  |  259  | 
|  260   // This element is ignored because of the error from the previous reader. |  260   // This element is ignored because of the error from the previous reader. | 
|  261   element_readers_.push_back(new UploadBytesElementReader( |  261   element_readers_.push_back( | 
|  262       kTestData, kTestDataSize)); |  262       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  263  |  263  | 
|  264   scoped_ptr<UploadDataStream> stream( |  264   scoped_ptr<UploadDataStream> stream( | 
|  265       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  265       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  266  |  266  | 
|  267   // Run Init(). |  267   // Run Init(). | 
|  268   ASSERT_EQ(OK, stream->Init(CompletionCallback())); |  268   ASSERT_EQ(OK, stream->Init(CompletionCallback())); | 
|  269   EXPECT_EQ(kTestDataSize*2, stream->size()); |  269   EXPECT_EQ(kTestDataSize*2, stream->size()); | 
|  270   EXPECT_EQ(0U, stream->position()); |  270   EXPECT_EQ(0U, stream->position()); | 
|  271   EXPECT_FALSE(stream->IsEOF()); |  271   EXPECT_FALSE(stream->IsEOF()); | 
|  272  |  272  | 
|  273   // Prepare a buffer filled with non-zero data. |  273   // Prepare a buffer filled with non-zero data. | 
|  274   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  274   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  275   std::fill_n(buf->data(), kTestBufferSize, -1); |  275   std::fill_n(buf->data(), kTestBufferSize, -1); | 
|  276  |  276  | 
|  277   // Read() results in success even when the reader returns error. |  277   // Read() results in success even when the reader returns error. | 
|  278   EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |  278   EXPECT_EQ(static_cast<int>(kTestDataSize * 2), | 
|  279             stream->Read(buf.get(), kTestBufferSize, CompletionCallback())); |  279             stream->Read(buf.get(), kTestBufferSize, CompletionCallback())); | 
|  280   EXPECT_EQ(kTestDataSize * 2, stream->position()); |  280   EXPECT_EQ(kTestDataSize * 2, stream->position()); | 
|  281   EXPECT_TRUE(stream->IsEOF()); |  281   EXPECT_TRUE(stream->IsEOF()); | 
|  282  |  282  | 
|  283   // The buffer is filled with zero. |  283   // The buffer is filled with zero. | 
|  284   EXPECT_EQ(static_cast<int>(kTestDataSize*2), |  284   EXPECT_EQ(static_cast<int>(kTestDataSize*2), | 
|  285             std::count(buf->data(), buf->data() + kTestBufferSize, 0)); |  285             std::count(buf->data(), buf->data() + kTestBufferSize, 0)); | 
|  286 } |  286 } | 
|  287  |  287  | 
|  288 TEST_F(ElementsUploadDataStreamTest, ReadErrorAsync) { |  288 TEST_F(ElementsUploadDataStreamTest, ReadErrorAsync) { | 
|  289   // This element cannot be read. |  289   // This element cannot be read. | 
|  290   MockUploadElementReader* reader = |  290   scoped_ptr<MockUploadElementReader> reader( | 
|  291       new MockUploadElementReader(kTestDataSize, false); |  291       new MockUploadElementReader(kTestDataSize, false)); | 
|  292   reader->SetAsyncInitExpectation(OK); |  292   reader->SetAsyncInitExpectation(OK); | 
|  293   reader->SetReadExpectation(ERR_FAILED); |  293   reader->SetReadExpectation(ERR_FAILED); | 
|  294   element_readers_.push_back(reader); |  294   element_readers_.push_back(std::move(reader)); | 
|  295  |  295  | 
|  296   // This element is ignored because of the error from the previous reader. |  296   // This element is ignored because of the error from the previous reader. | 
|  297   element_readers_.push_back(new UploadBytesElementReader( |  297   element_readers_.push_back( | 
|  298       kTestData, kTestDataSize)); |  298       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  299  |  299  | 
|  300   scoped_ptr<UploadDataStream> stream( |  300   scoped_ptr<UploadDataStream> stream( | 
|  301       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  301       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  302  |  302  | 
|  303   // Run Init(). |  303   // Run Init(). | 
|  304   TestCompletionCallback init_callback; |  304   TestCompletionCallback init_callback; | 
|  305   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); |  305   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); | 
|  306   EXPECT_EQ(OK, init_callback.WaitForResult()); |  306   EXPECT_EQ(OK, init_callback.WaitForResult()); | 
|  307   EXPECT_EQ(kTestDataSize*2, stream->size()); |  307   EXPECT_EQ(kTestDataSize*2, stream->size()); | 
|  308   EXPECT_EQ(0U, stream->position()); |  308   EXPECT_EQ(0U, stream->position()); | 
|  309   EXPECT_FALSE(stream->IsEOF()); |  309   EXPECT_FALSE(stream->IsEOF()); | 
|  310  |  310  | 
|  311   // Prepare a buffer filled with non-zero data. |  311   // Prepare a buffer filled with non-zero data. | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|  327  |  327  | 
|  328 TEST_F(ElementsUploadDataStreamTest, FileAndBytes) { |  328 TEST_F(ElementsUploadDataStreamTest, FileAndBytes) { | 
|  329   base::FilePath temp_file_path; |  329   base::FilePath temp_file_path; | 
|  330   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  330   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  331                                              &temp_file_path)); |  331                                              &temp_file_path)); | 
|  332   ASSERT_EQ(static_cast<int>(kTestDataSize), |  332   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  333             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  333             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  334  |  334  | 
|  335   const uint64_t kFileRangeOffset = 1; |  335   const uint64_t kFileRangeOffset = 1; | 
|  336   const uint64_t kFileRangeLength = 4; |  336   const uint64_t kFileRangeLength = 4; | 
|  337   element_readers_.push_back(new UploadFileElementReader( |  337   element_readers_.push_back(make_scoped_ptr(new UploadFileElementReader( | 
|  338       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, |  338       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, | 
|  339       kFileRangeOffset, kFileRangeLength, base::Time())); |  339       kFileRangeOffset, kFileRangeLength, base::Time()))); | 
|  340  |  340  | 
|  341   element_readers_.push_back(new UploadBytesElementReader( |  341   element_readers_.push_back( | 
|  342       kTestData, kTestDataSize)); |  342       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  343  |  343  | 
|  344   const uint64_t kStreamSize = kTestDataSize + kFileRangeLength; |  344   const uint64_t kStreamSize = kTestDataSize + kFileRangeLength; | 
|  345   TestCompletionCallback init_callback; |  345   TestCompletionCallback init_callback; | 
|  346   scoped_ptr<UploadDataStream> stream( |  346   scoped_ptr<UploadDataStream> stream( | 
|  347       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  347       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  348   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); |  348   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); | 
|  349   ASSERT_EQ(OK, init_callback.WaitForResult()); |  349   ASSERT_EQ(OK, init_callback.WaitForResult()); | 
|  350   EXPECT_FALSE(stream->IsInMemory()); |  350   EXPECT_FALSE(stream->IsInMemory()); | 
|  351   EXPECT_EQ(kStreamSize, stream->size()); |  351   EXPECT_EQ(kStreamSize, stream->size()); | 
|  352   EXPECT_EQ(0U, stream->position()); |  352   EXPECT_EQ(0U, stream->position()); | 
|  353   EXPECT_FALSE(stream->IsEOF()); |  353   EXPECT_FALSE(stream->IsEOF()); | 
|  354   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  354   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  355   while (!stream->IsEOF()) { |  355   while (!stream->IsEOF()) { | 
|  356     TestCompletionCallback read_callback; |  356     TestCompletionCallback read_callback; | 
|  357     const int result = |  357     const int result = | 
|  358         stream->Read(buf.get(), kTestBufferSize, read_callback.callback()); |  358         stream->Read(buf.get(), kTestBufferSize, read_callback.callback()); | 
|  359     const int bytes_read = |  359     const int bytes_read = | 
|  360         result != ERR_IO_PENDING ? result : read_callback.WaitForResult(); |  360         result != ERR_IO_PENDING ? result : read_callback.WaitForResult(); | 
|  361     ASSERT_LE(0, bytes_read);  // Not an error. |  361     ASSERT_LE(0, bytes_read);  // Not an error. | 
|  362   } |  362   } | 
|  363   EXPECT_EQ(kStreamSize, stream->position()); |  363   EXPECT_EQ(kStreamSize, stream->position()); | 
|  364   ASSERT_TRUE(stream->IsEOF()); |  364   ASSERT_TRUE(stream->IsEOF()); | 
|  365 } |  365 } | 
|  366  |  366  | 
|  367 // Init() with on-memory and not-on-memory readers. |  367 // Init() with on-memory and not-on-memory readers. | 
|  368 TEST_F(ElementsUploadDataStreamTest, InitAsync) { |  368 TEST_F(ElementsUploadDataStreamTest, InitAsync) { | 
|  369   // Create UploadDataStream with mock readers. |  369   // Create UploadDataStream with mock readers. | 
|  370   MockUploadElementReader* reader = NULL; |  370   scoped_ptr<MockUploadElementReader> reader( | 
 |  371       new MockUploadElementReader(kTestDataSize, true)); | 
 |  372   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); | 
 |  373   element_readers_.push_back(std::move(reader)); | 
|  371  |  374  | 
|  372   reader = new MockUploadElementReader(kTestDataSize, true); |  375   scoped_ptr<MockUploadElementReader> reader2( | 
|  373   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |  376       new MockUploadElementReader(kTestDataSize, true)); | 
|  374   element_readers_.push_back(reader); |  377   EXPECT_CALL(*reader2, Init(_)).WillOnce(Return(OK)); | 
 |  378   element_readers_.push_back(std::move(reader2)); | 
|  375  |  379  | 
|  376   reader = new MockUploadElementReader(kTestDataSize, true); |  380   scoped_ptr<MockUploadElementReader> reader3( | 
|  377   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |  381       new MockUploadElementReader(kTestDataSize, false)); | 
|  378   element_readers_.push_back(reader); |  382   reader3->SetAsyncInitExpectation(OK); | 
 |  383   element_readers_.push_back(std::move(reader3)); | 
|  379  |  384  | 
|  380   reader = new MockUploadElementReader(kTestDataSize, false); |  385   scoped_ptr<MockUploadElementReader> reader4( | 
|  381   reader->SetAsyncInitExpectation(OK); |  386       new MockUploadElementReader(kTestDataSize, false)); | 
|  382   element_readers_.push_back(reader); |  387   reader4->SetAsyncInitExpectation(OK); | 
 |  388   element_readers_.push_back(std::move(reader4)); | 
|  383  |  389  | 
|  384   reader = new MockUploadElementReader(kTestDataSize, false); |  390   scoped_ptr<MockUploadElementReader> reader5( | 
|  385   reader->SetAsyncInitExpectation(OK); |  391       new MockUploadElementReader(kTestDataSize, true)); | 
|  386   element_readers_.push_back(reader); |  392   EXPECT_CALL(*reader5, Init(_)).WillOnce(Return(OK)); | 
|  387  |  393   element_readers_.push_back(std::move(reader5)); | 
|  388   reader = new MockUploadElementReader(kTestDataSize, true); |  | 
|  389   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |  | 
|  390   element_readers_.push_back(reader); |  | 
|  391  |  394  | 
|  392   scoped_ptr<UploadDataStream> stream( |  395   scoped_ptr<UploadDataStream> stream( | 
|  393       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  396       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  394  |  397  | 
|  395   // Run Init(). |  398   // Run Init(). | 
|  396   TestCompletionCallback callback; |  399   TestCompletionCallback callback; | 
|  397   ASSERT_EQ(ERR_IO_PENDING, stream->Init(callback.callback())); |  400   ASSERT_EQ(ERR_IO_PENDING, stream->Init(callback.callback())); | 
|  398   EXPECT_EQ(OK, callback.WaitForResult()); |  401   EXPECT_EQ(OK, callback.WaitForResult()); | 
|  399 } |  402 } | 
|  400  |  403  | 
|  401 // Init() of a reader fails asynchronously. |  404 // Init() of a reader fails asynchronously. | 
|  402 TEST_F(ElementsUploadDataStreamTest, InitAsyncFailureAsync) { |  405 TEST_F(ElementsUploadDataStreamTest, InitAsyncFailureAsync) { | 
|  403   // Create UploadDataStream with a mock reader. |  406   // Create UploadDataStream with a mock reader. | 
|  404   MockUploadElementReader* reader = NULL; |  407   scoped_ptr<MockUploadElementReader> reader( | 
|  405  |  408       new MockUploadElementReader(kTestDataSize, false)); | 
|  406   reader = new MockUploadElementReader(kTestDataSize, false); |  | 
|  407   reader->SetAsyncInitExpectation(ERR_FAILED); |  409   reader->SetAsyncInitExpectation(ERR_FAILED); | 
|  408   element_readers_.push_back(reader); |  410   element_readers_.push_back(std::move(reader)); | 
|  409  |  411  | 
|  410   scoped_ptr<UploadDataStream> stream( |  412   scoped_ptr<UploadDataStream> stream( | 
|  411       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  413       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  412  |  414  | 
|  413   // Run Init(). |  415   // Run Init(). | 
|  414   TestCompletionCallback callback; |  416   TestCompletionCallback callback; | 
|  415   ASSERT_EQ(ERR_IO_PENDING, stream->Init(callback.callback())); |  417   ASSERT_EQ(ERR_IO_PENDING, stream->Init(callback.callback())); | 
|  416   EXPECT_EQ(ERR_FAILED, callback.WaitForResult()); |  418   EXPECT_EQ(ERR_FAILED, callback.WaitForResult()); | 
|  417 } |  419 } | 
|  418  |  420  | 
|  419 // Init() of a reader fails synchronously. |  421 // Init() of a reader fails synchronously. | 
|  420 TEST_F(ElementsUploadDataStreamTest, InitAsyncFailureSync) { |  422 TEST_F(ElementsUploadDataStreamTest, InitAsyncFailureSync) { | 
|  421   // Create UploadDataStream with mock readers. |  423   // Create UploadDataStream with mock readers. | 
|  422   MockUploadElementReader* reader = NULL; |  424   scoped_ptr<MockUploadElementReader> reader( | 
 |  425       new MockUploadElementReader(kTestDataSize, false)); | 
 |  426   reader->SetAsyncInitExpectation(OK); | 
 |  427   element_readers_.push_back(std::move(reader)); | 
|  423  |  428  | 
|  424   reader = new MockUploadElementReader(kTestDataSize, false); |  429   scoped_ptr<MockUploadElementReader> reader2( | 
|  425   reader->SetAsyncInitExpectation(OK); |  430       new MockUploadElementReader(kTestDataSize, true)); | 
|  426   element_readers_.push_back(reader); |  431   EXPECT_CALL(*reader2, Init(_)).WillOnce(Return(ERR_FAILED)); | 
|  427  |  432   element_readers_.push_back(std::move(reader2)); | 
|  428   reader = new MockUploadElementReader(kTestDataSize, true); |  | 
|  429   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(ERR_FAILED)); |  | 
|  430   element_readers_.push_back(reader); |  | 
|  431  |  433  | 
|  432   scoped_ptr<UploadDataStream> stream( |  434   scoped_ptr<UploadDataStream> stream( | 
|  433       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  435       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  434  |  436  | 
|  435   // Run Init(). |  437   // Run Init(). | 
|  436   TestCompletionCallback callback; |  438   TestCompletionCallback callback; | 
|  437   ASSERT_EQ(ERR_IO_PENDING, stream->Init(callback.callback())); |  439   ASSERT_EQ(ERR_IO_PENDING, stream->Init(callback.callback())); | 
|  438   EXPECT_EQ(ERR_FAILED, callback.WaitForResult()); |  440   EXPECT_EQ(ERR_FAILED, callback.WaitForResult()); | 
|  439 } |  441 } | 
|  440  |  442  | 
|  441 // Read with a buffer whose size is same as the data. |  443 // Read with a buffer whose size is same as the data. | 
|  442 TEST_F(ElementsUploadDataStreamTest, ReadAsyncWithExactSizeBuffer) { |  444 TEST_F(ElementsUploadDataStreamTest, ReadAsyncWithExactSizeBuffer) { | 
|  443   element_readers_.push_back(new UploadBytesElementReader( |  445   element_readers_.push_back( | 
|  444       kTestData, kTestDataSize)); |  446       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  445   scoped_ptr<UploadDataStream> stream( |  447   scoped_ptr<UploadDataStream> stream( | 
|  446       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  448       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  447  |  449  | 
|  448   ASSERT_EQ(OK, stream->Init(CompletionCallback())); |  450   ASSERT_EQ(OK, stream->Init(CompletionCallback())); | 
|  449   EXPECT_TRUE(stream->IsInMemory()); |  451   EXPECT_TRUE(stream->IsInMemory()); | 
|  450   EXPECT_EQ(kTestDataSize, stream->size()); |  452   EXPECT_EQ(kTestDataSize, stream->size()); | 
|  451   EXPECT_EQ(0U, stream->position()); |  453   EXPECT_EQ(0U, stream->position()); | 
|  452   EXPECT_FALSE(stream->IsEOF()); |  454   EXPECT_FALSE(stream->IsEOF()); | 
|  453   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestDataSize); |  455   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestDataSize); | 
|  454   int bytes_read = stream->Read(buf.get(), kTestDataSize, CompletionCallback()); |  456   int bytes_read = stream->Read(buf.get(), kTestDataSize, CompletionCallback()); | 
|  455   ASSERT_EQ(static_cast<int>(kTestDataSize), bytes_read);  // Not an error. |  457   ASSERT_EQ(static_cast<int>(kTestDataSize), bytes_read);  // Not an error. | 
|  456   EXPECT_EQ(kTestDataSize, stream->position()); |  458   EXPECT_EQ(kTestDataSize, stream->position()); | 
|  457   ASSERT_TRUE(stream->IsEOF()); |  459   ASSERT_TRUE(stream->IsEOF()); | 
|  458 } |  460 } | 
|  459  |  461  | 
|  460 // Async Read() with on-memory and not-on-memory readers. |  462 // Async Read() with on-memory and not-on-memory readers. | 
|  461 TEST_F(ElementsUploadDataStreamTest, ReadAsync) { |  463 TEST_F(ElementsUploadDataStreamTest, ReadAsync) { | 
|  462   // Create UploadDataStream with mock readers. |  464   // Create UploadDataStream with mock readers. | 
|  463   MockUploadElementReader* reader = NULL; |  465   scoped_ptr<MockUploadElementReader> reader( | 
|  464  |  466       new MockUploadElementReader(kTestDataSize, true)); | 
|  465   reader = new MockUploadElementReader(kTestDataSize, true); |  | 
|  466   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |  467   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); | 
|  467   reader->SetReadExpectation(kTestDataSize); |  468   reader->SetReadExpectation(kTestDataSize); | 
|  468   element_readers_.push_back(reader); |  469   element_readers_.push_back(std::move(reader)); | 
|  469  |  470  | 
|  470   reader = new MockUploadElementReader(kTestDataSize, false); |  471   scoped_ptr<MockUploadElementReader> reader2( | 
|  471   reader->SetAsyncInitExpectation(OK); |  472       new MockUploadElementReader(kTestDataSize, false)); | 
|  472   reader->SetReadExpectation(kTestDataSize); |  473   reader2->SetAsyncInitExpectation(OK); | 
|  473   element_readers_.push_back(reader); |  474   reader2->SetReadExpectation(kTestDataSize); | 
 |  475   element_readers_.push_back(std::move(reader2)); | 
|  474  |  476  | 
|  475   reader = new MockUploadElementReader(kTestDataSize, true); |  477   scoped_ptr<MockUploadElementReader> reader3( | 
|  476   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK)); |  478       new MockUploadElementReader(kTestDataSize, true)); | 
|  477   reader->SetReadExpectation(kTestDataSize); |  479   EXPECT_CALL(*reader3, Init(_)).WillOnce(Return(OK)); | 
|  478   element_readers_.push_back(reader); |  480   reader3->SetReadExpectation(kTestDataSize); | 
 |  481   element_readers_.push_back(std::move(reader3)); | 
|  479  |  482  | 
|  480   reader = new MockUploadElementReader(kTestDataSize, false); |  483   scoped_ptr<MockUploadElementReader> reader4( | 
|  481   reader->SetAsyncInitExpectation(OK); |  484       new MockUploadElementReader(kTestDataSize, false)); | 
|  482   reader->SetReadExpectation(kTestDataSize); |  485   reader4->SetAsyncInitExpectation(OK); | 
|  483   element_readers_.push_back(reader); |  486   reader4->SetReadExpectation(kTestDataSize); | 
 |  487   element_readers_.push_back(std::move(reader4)); | 
|  484  |  488  | 
|  485   scoped_ptr<UploadDataStream> stream( |  489   scoped_ptr<UploadDataStream> stream( | 
|  486       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  490       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  487  |  491  | 
|  488   // Run Init(). |  492   // Run Init(). | 
|  489   TestCompletionCallback init_callback; |  493   TestCompletionCallback init_callback; | 
|  490   EXPECT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); |  494   EXPECT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); | 
|  491   EXPECT_EQ(OK, init_callback.WaitForResult()); |  495   EXPECT_EQ(OK, init_callback.WaitForResult()); | 
|  492  |  496  | 
|  493   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); |  497   scoped_refptr<IOBuffer> buf = new IOBuffer(kTestBufferSize); | 
|  494  |  498  | 
|  495   // Consume the first element. |  499   // Consume the first element. | 
|  496   TestCompletionCallback read_callback1; |  500   TestCompletionCallback read_callback1; | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|  513   EXPECT_EQ(static_cast<int>(kTestDataSize * 2), |  517   EXPECT_EQ(static_cast<int>(kTestDataSize * 2), | 
|  514             read_callback3.WaitForResult()); |  518             read_callback3.WaitForResult()); | 
|  515 } |  519 } | 
|  516  |  520  | 
|  517 void ElementsUploadDataStreamTest::FileChangedHelper( |  521 void ElementsUploadDataStreamTest::FileChangedHelper( | 
|  518     const base::FilePath& file_path, |  522     const base::FilePath& file_path, | 
|  519     const base::Time& time, |  523     const base::Time& time, | 
|  520     bool error_expected) { |  524     bool error_expected) { | 
|  521   // Don't use element_readers_ here, as this function is called twice, and |  525   // Don't use element_readers_ here, as this function is called twice, and | 
|  522   // reusing element_readers_ is wrong. |  526   // reusing element_readers_ is wrong. | 
|  523   ScopedVector<UploadElementReader> element_readers; |  527   std::vector<scoped_ptr<UploadElementReader>> element_readers; | 
|  524   element_readers.push_back(new UploadFileElementReader( |  528   element_readers.push_back(make_scoped_ptr(new UploadFileElementReader( | 
|  525       base::ThreadTaskRunnerHandle::Get().get(), file_path, 1, 2, time)); |  529       base::ThreadTaskRunnerHandle::Get().get(), file_path, 1, 2, time))); | 
|  526  |  530  | 
|  527   TestCompletionCallback init_callback; |  531   TestCompletionCallback init_callback; | 
|  528   scoped_ptr<UploadDataStream> stream( |  532   scoped_ptr<UploadDataStream> stream( | 
|  529       new ElementsUploadDataStream(element_readers.Pass(), 0)); |  533       new ElementsUploadDataStream(std::move(element_readers), 0)); | 
|  530   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); |  534   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); | 
|  531   int error_code = init_callback.WaitForResult(); |  535   int error_code = init_callback.WaitForResult(); | 
|  532   if (error_expected) |  536   if (error_expected) | 
|  533     ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code); |  537     ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code); | 
|  534   else |  538   else | 
|  535     ASSERT_EQ(OK, error_code); |  539     ASSERT_EQ(OK, error_code); | 
|  536 } |  540 } | 
|  537  |  541  | 
|  538 TEST_F(ElementsUploadDataStreamTest, FileChanged) { |  542 TEST_F(ElementsUploadDataStreamTest, FileChanged) { | 
|  539   base::FilePath temp_file_path; |  543   base::FilePath temp_file_path; | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|  555 } |  559 } | 
|  556  |  560  | 
|  557 TEST_F(ElementsUploadDataStreamTest, MultipleInit) { |  561 TEST_F(ElementsUploadDataStreamTest, MultipleInit) { | 
|  558   base::FilePath temp_file_path; |  562   base::FilePath temp_file_path; | 
|  559   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  563   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  560                                              &temp_file_path)); |  564                                              &temp_file_path)); | 
|  561   ASSERT_EQ(static_cast<int>(kTestDataSize), |  565   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  562             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  566             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  563  |  567  | 
|  564   // Prepare data. |  568   // Prepare data. | 
|  565   element_readers_.push_back(new UploadBytesElementReader( |  | 
|  566       kTestData, kTestDataSize)); |  | 
|  567   element_readers_.push_back( |  569   element_readers_.push_back( | 
|  568       new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), |  570       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  569                                   temp_file_path, 0, kuint64max, base::Time())); |  571   element_readers_.push_back(make_scoped_ptr(new UploadFileElementReader( | 
 |  572       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, kuint64max, | 
 |  573       base::Time()))); | 
|  570   scoped_ptr<UploadDataStream> stream( |  574   scoped_ptr<UploadDataStream> stream( | 
|  571       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  575       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  572  |  576  | 
|  573   std::string expected_data(kTestData, kTestData + kTestDataSize); |  577   std::string expected_data(kTestData, kTestData + kTestDataSize); | 
|  574   expected_data += expected_data; |  578   expected_data += expected_data; | 
|  575  |  579  | 
|  576   // Call Init(). |  580   // Call Init(). | 
|  577   TestCompletionCallback init_callback1; |  581   TestCompletionCallback init_callback1; | 
|  578   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); |  582   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); | 
|  579   ASSERT_EQ(OK, init_callback1.WaitForResult()); |  583   ASSERT_EQ(OK, init_callback1.WaitForResult()); | 
|  580   EXPECT_FALSE(stream->IsEOF()); |  584   EXPECT_FALSE(stream->IsEOF()); | 
|  581   EXPECT_EQ(kTestDataSize*2, stream->size()); |  585   EXPECT_EQ(kTestDataSize*2, stream->size()); | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|  598  |  602  | 
|  599 TEST_F(ElementsUploadDataStreamTest, MultipleInitAsync) { |  603 TEST_F(ElementsUploadDataStreamTest, MultipleInitAsync) { | 
|  600   base::FilePath temp_file_path; |  604   base::FilePath temp_file_path; | 
|  601   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  605   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  602                                              &temp_file_path)); |  606                                              &temp_file_path)); | 
|  603   ASSERT_EQ(static_cast<int>(kTestDataSize), |  607   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  604             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  608             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  605   TestCompletionCallback test_callback; |  609   TestCompletionCallback test_callback; | 
|  606  |  610  | 
|  607   // Prepare data. |  611   // Prepare data. | 
|  608   element_readers_.push_back(new UploadBytesElementReader( |  | 
|  609       kTestData, kTestDataSize)); |  | 
|  610   element_readers_.push_back( |  612   element_readers_.push_back( | 
|  611       new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), |  613       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  612                                   temp_file_path, 0, kuint64max, base::Time())); |  614   element_readers_.push_back(make_scoped_ptr(new UploadFileElementReader( | 
 |  615       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, kuint64max, | 
 |  616       base::Time()))); | 
|  613   scoped_ptr<UploadDataStream> stream( |  617   scoped_ptr<UploadDataStream> stream( | 
|  614       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  618       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  615  |  619  | 
|  616   std::string expected_data(kTestData, kTestData + kTestDataSize); |  620   std::string expected_data(kTestData, kTestData + kTestDataSize); | 
|  617   expected_data += expected_data; |  621   expected_data += expected_data; | 
|  618  |  622  | 
|  619   // Call Init(). |  623   // Call Init(). | 
|  620   ASSERT_EQ(ERR_IO_PENDING, stream->Init(test_callback.callback())); |  624   ASSERT_EQ(ERR_IO_PENDING, stream->Init(test_callback.callback())); | 
|  621   EXPECT_EQ(OK, test_callback.WaitForResult()); |  625   EXPECT_EQ(OK, test_callback.WaitForResult()); | 
|  622   EXPECT_FALSE(stream->IsEOF()); |  626   EXPECT_FALSE(stream->IsEOF()); | 
|  623   EXPECT_EQ(kTestDataSize*2, stream->size()); |  627   EXPECT_EQ(kTestDataSize*2, stream->size()); | 
|  624  |  628  | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|  638 } |  642 } | 
|  639  |  643  | 
|  640 TEST_F(ElementsUploadDataStreamTest, InitToReset) { |  644 TEST_F(ElementsUploadDataStreamTest, InitToReset) { | 
|  641   base::FilePath temp_file_path; |  645   base::FilePath temp_file_path; | 
|  642   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  646   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  643                                              &temp_file_path)); |  647                                              &temp_file_path)); | 
|  644   ASSERT_EQ(static_cast<int>(kTestDataSize), |  648   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  645             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  649             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  646  |  650  | 
|  647   // Prepare data. |  651   // Prepare data. | 
|  648   element_readers_.push_back(new UploadBytesElementReader( |  | 
|  649       kTestData, kTestDataSize)); |  | 
|  650   element_readers_.push_back( |  652   element_readers_.push_back( | 
|  651       new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), |  653       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  652                                   temp_file_path, 0, kuint64max, base::Time())); |  654   element_readers_.push_back(make_scoped_ptr(new UploadFileElementReader( | 
 |  655       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, kuint64max, | 
 |  656       base::Time()))); | 
|  653   scoped_ptr<UploadDataStream> stream( |  657   scoped_ptr<UploadDataStream> stream( | 
|  654       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  658       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  655  |  659  | 
|  656   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |  660   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 
|  657   expected_data.insert(expected_data.end(), kTestData, |  661   expected_data.insert(expected_data.end(), kTestData, | 
|  658                        kTestData + kTestDataSize); |  662                        kTestData + kTestDataSize); | 
|  659  |  663  | 
|  660   // Call Init(). |  664   // Call Init(). | 
|  661   TestCompletionCallback init_callback1; |  665   TestCompletionCallback init_callback1; | 
|  662   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); |  666   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); | 
|  663   EXPECT_EQ(OK, init_callback1.WaitForResult()); |  667   EXPECT_EQ(OK, init_callback1.WaitForResult()); | 
|  664   EXPECT_FALSE(stream->IsEOF()); |  668   EXPECT_FALSE(stream->IsEOF()); | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
|  694 } |  698 } | 
|  695  |  699  | 
|  696 TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncInit) { |  700 TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncInit) { | 
|  697   base::FilePath temp_file_path; |  701   base::FilePath temp_file_path; | 
|  698   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  702   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  699                                              &temp_file_path)); |  703                                              &temp_file_path)); | 
|  700   ASSERT_EQ(static_cast<int>(kTestDataSize), |  704   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  701             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  705             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  702  |  706  | 
|  703   // Prepare data. |  707   // Prepare data. | 
|  704   element_readers_.push_back(new UploadBytesElementReader( |  | 
|  705       kTestData, kTestDataSize)); |  | 
|  706   element_readers_.push_back( |  708   element_readers_.push_back( | 
|  707       new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), |  709       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  708                                   temp_file_path, 0, kuint64max, base::Time())); |  710   element_readers_.push_back(make_scoped_ptr(new UploadFileElementReader( | 
 |  711       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, kuint64max, | 
 |  712       base::Time()))); | 
|  709   scoped_ptr<UploadDataStream> stream( |  713   scoped_ptr<UploadDataStream> stream( | 
|  710       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  714       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  711  |  715  | 
|  712   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |  716   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 
|  713   expected_data.insert(expected_data.end(), kTestData, |  717   expected_data.insert(expected_data.end(), kTestData, | 
|  714                        kTestData + kTestDataSize); |  718                        kTestData + kTestDataSize); | 
|  715  |  719  | 
|  716   // Start Init. |  720   // Start Init. | 
|  717   TestCompletionCallback init_callback1; |  721   TestCompletionCallback init_callback1; | 
|  718   EXPECT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); |  722   EXPECT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); | 
|  719  |  723  | 
|  720   // Call Init again to cancel the previous init. |  724   // Call Init again to cancel the previous init. | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
|  740 } |  744 } | 
|  741  |  745  | 
|  742 TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncRead) { |  746 TEST_F(ElementsUploadDataStreamTest, InitDuringAsyncRead) { | 
|  743   base::FilePath temp_file_path; |  747   base::FilePath temp_file_path; | 
|  744   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), |  748   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), | 
|  745                                              &temp_file_path)); |  749                                              &temp_file_path)); | 
|  746   ASSERT_EQ(static_cast<int>(kTestDataSize), |  750   ASSERT_EQ(static_cast<int>(kTestDataSize), | 
|  747             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); |  751             base::WriteFile(temp_file_path, kTestData, kTestDataSize)); | 
|  748  |  752  | 
|  749   // Prepare data. |  753   // Prepare data. | 
|  750   element_readers_.push_back(new UploadBytesElementReader( |  | 
|  751       kTestData, kTestDataSize)); |  | 
|  752   element_readers_.push_back( |  754   element_readers_.push_back( | 
|  753       new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), |  755       make_scoped_ptr(new UploadBytesElementReader(kTestData, kTestDataSize))); | 
|  754                                   temp_file_path, 0, kuint64max, base::Time())); |  756   element_readers_.push_back(make_scoped_ptr(new UploadFileElementReader( | 
 |  757       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0, kuint64max, | 
 |  758       base::Time()))); | 
|  755   scoped_ptr<UploadDataStream> stream( |  759   scoped_ptr<UploadDataStream> stream( | 
|  756       new ElementsUploadDataStream(element_readers_.Pass(), 0)); |  760       new ElementsUploadDataStream(std::move(element_readers_), 0)); | 
|  757  |  761  | 
|  758   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); |  762   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); | 
|  759   expected_data.insert(expected_data.end(), kTestData, |  763   expected_data.insert(expected_data.end(), kTestData, | 
|  760                        kTestData + kTestDataSize); |  764                        kTestData + kTestDataSize); | 
|  761  |  765  | 
|  762   // Call Init(). |  766   // Call Init(). | 
|  763   TestCompletionCallback init_callback1; |  767   TestCompletionCallback init_callback1; | 
|  764   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); |  768   ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); | 
|  765   EXPECT_EQ(OK, init_callback1.WaitForResult()); |  769   EXPECT_EQ(OK, init_callback1.WaitForResult()); | 
|  766   EXPECT_FALSE(stream->IsEOF()); |  770   EXPECT_FALSE(stream->IsEOF()); | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
|  791                 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); |  795                 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); | 
|  792   EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); |  796   EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); | 
|  793   EXPECT_EQ(expected_data, buf2); |  797   EXPECT_EQ(expected_data, buf2); | 
|  794   EXPECT_TRUE(stream->IsEOF()); |  798   EXPECT_TRUE(stream->IsEOF()); | 
|  795  |  799  | 
|  796   // Make sure callbacks are not called for cancelled operations. |  800   // Make sure callbacks are not called for cancelled operations. | 
|  797   EXPECT_FALSE(read_callback1.have_result()); |  801   EXPECT_FALSE(read_callback1.have_result()); | 
|  798 } |  802 } | 
|  799  |  803  | 
|  800 }  // namespace net |  804 }  // namespace net | 
| OLD | NEW |