diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-20 11:50:24 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-20 11:50:24 +0000 |
commit | 4db27d802c70279a1e54f028c35eb9ff658fdd6c (patch) | |
tree | d405d57a308ac4b11760d71421ce76c9be08bd46 /net/base/upload_file_element_reader_unittest.cc | |
parent | 46e404d69b13063c29a67b8f0349356afbe54796 (diff) | |
download | chromium_src-4db27d802c70279a1e54f028c35eb9ff658fdd6c.zip chromium_src-4db27d802c70279a1e54f028c35eb9ff658fdd6c.tar.gz chromium_src-4db27d802c70279a1e54f028c35eb9ff658fdd6c.tar.bz2 |
net: Split sync part of UploadFileElementReader as UploadFileElementReaderSync
Add UploadFileElementReaderSync and use it from Chrome Frame.
Remove UploadDataStream::InitSync/ReadSync
Remove UploadElementReader::InitSync/ReadSync
Allow passing null callbacks for Init/Read when callers can be confident that the operation finishes synchronously.
BUG=None
TEST=net_unittests, chrome_frame_net_tests
TBR=ananta@chromium.org for chrome_frame/urlmon_upload_data_stream.cc
Review URL: https://chromiumcodereview.appspot.com/11587007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174133 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/upload_file_element_reader_unittest.cc')
-rw-r--r-- | net/base/upload_file_element_reader_unittest.cc | 273 |
1 files changed, 173 insertions, 100 deletions
diff --git a/net/base/upload_file_element_reader_unittest.cc b/net/base/upload_file_element_reader_unittest.cc index f43aad1..4915635 100644 --- a/net/base/upload_file_element_reader_unittest.cc +++ b/net/base/upload_file_element_reader_unittest.cc @@ -31,7 +31,9 @@ class UploadFileElementReaderTest : public PlatformTest { reader_.reset(new UploadFileElementReader( temp_file_path_, 0, kuint64max, base::Time())); - ASSERT_EQ(OK, reader_->InitSync()); + TestCompletionCallback callback; + ASSERT_EQ(ERR_IO_PENDING, reader_->Init(callback.callback())); + EXPECT_EQ(OK, callback.WaitForResult()); EXPECT_EQ(bytes_.size(), reader_->GetContentLength()); EXPECT_EQ(bytes_.size(), reader_->BytesRemaining()); EXPECT_FALSE(reader_->IsInMemory()); @@ -48,13 +50,17 @@ TEST_F(UploadFileElementReaderTest, ReadPartially) { ASSERT_EQ(bytes_.size(), kHalfSize * 2); std::vector<char> buf(kHalfSize); scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); - EXPECT_EQ(static_cast<int>(buf.size()), - reader_->ReadSync(wrapped_buffer, buf.size())); + TestCompletionCallback read_callback1; + ASSERT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, buf.size(), + read_callback1.callback())); + EXPECT_EQ(static_cast<int>(buf.size()), read_callback1.WaitForResult()); EXPECT_EQ(bytes_.size() - buf.size(), reader_->BytesRemaining()); EXPECT_EQ(std::vector<char>(bytes_.begin(), bytes_.begin() + kHalfSize), buf); - EXPECT_EQ(static_cast<int>(buf.size()), - reader_->ReadSync(wrapped_buffer, buf.size())); + TestCompletionCallback read_callback2; + EXPECT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, buf.size(), + read_callback2.callback())); + EXPECT_EQ(static_cast<int>(buf.size()), read_callback2.WaitForResult()); EXPECT_EQ(0U, reader_->BytesRemaining()); EXPECT_EQ(std::vector<char>(bytes_.begin() + kHalfSize, bytes_.end()), buf); } @@ -62,20 +68,25 @@ TEST_F(UploadFileElementReaderTest, ReadPartially) { TEST_F(UploadFileElementReaderTest, ReadAll) { std::vector<char> buf(bytes_.size()); scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); - EXPECT_EQ(static_cast<int>(buf.size()), - reader_->ReadSync(wrapped_buffer, buf.size())); + TestCompletionCallback read_callback; + ASSERT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, buf.size(), + read_callback.callback())); + EXPECT_EQ(static_cast<int>(buf.size()), read_callback.WaitForResult()); EXPECT_EQ(0U, reader_->BytesRemaining()); EXPECT_EQ(bytes_, buf); // Try to read again. - EXPECT_EQ(0, reader_->ReadSync(wrapped_buffer, buf.size())); + EXPECT_EQ(0, reader_->Read(wrapped_buffer, buf.size(), + read_callback.callback())); } TEST_F(UploadFileElementReaderTest, ReadTooMuch) { const size_t kTooLargeSize = bytes_.size() * 2; std::vector<char> buf(kTooLargeSize); scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); - EXPECT_EQ(static_cast<int>(bytes_.size()), - reader_->ReadSync(wrapped_buffer, buf.size())); + TestCompletionCallback read_callback; + ASSERT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, buf.size(), + read_callback.callback())); + EXPECT_EQ(static_cast<int>(bytes_.size()), read_callback.WaitForResult()); EXPECT_EQ(0U, reader_->BytesRemaining()); buf.resize(bytes_.size()); // Resize to compare. EXPECT_EQ(bytes_, buf); @@ -86,99 +97,25 @@ TEST_F(UploadFileElementReaderTest, MultipleInit) { scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); // Read all. - EXPECT_EQ(static_cast<int>(buf.size()), - reader_->ReadSync(wrapped_buffer, buf.size())); - EXPECT_EQ(0U, reader_->BytesRemaining()); - EXPECT_EQ(bytes_, buf); - - // Call InitSync() again to reset the state. - ASSERT_EQ(OK, reader_->InitSync()); - EXPECT_EQ(bytes_.size(), reader_->GetContentLength()); - EXPECT_EQ(bytes_.size(), reader_->BytesRemaining()); - - // Read again. - EXPECT_EQ(static_cast<int>(buf.size()), - reader_->ReadSync(wrapped_buffer, buf.size())); - EXPECT_EQ(0U, reader_->BytesRemaining()); - EXPECT_EQ(bytes_, buf); -} - -TEST_F(UploadFileElementReaderTest, ReadPartiallyAsync) { - const size_t kHalfSize = bytes_.size() / 2; - ASSERT_EQ(bytes_.size(), kHalfSize * 2); - std::vector<char> buf(kHalfSize); - scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); - TestCompletionCallback test_callback; - EXPECT_EQ(ERR_IO_PENDING, - reader_->Read(wrapped_buffer, buf.size(), - test_callback.callback())); - - EXPECT_EQ(static_cast<int>(buf.size()), test_callback.WaitForResult()); - EXPECT_EQ(bytes_.size() - buf.size(), reader_->BytesRemaining()); - EXPECT_EQ(std::vector<char>(bytes_.begin(), bytes_.begin() + kHalfSize), buf); - - EXPECT_EQ(ERR_IO_PENDING, - reader_->Read(wrapped_buffer, buf.size(), - test_callback.callback())); - - EXPECT_EQ(static_cast<int>(buf.size()), test_callback.WaitForResult()); - EXPECT_EQ(0U, reader_->BytesRemaining()); - EXPECT_EQ(std::vector<char>(bytes_.begin() + kHalfSize, bytes_.end()), buf); -} - -TEST_F(UploadFileElementReaderTest, ReadAllAsync) { - std::vector<char> buf(bytes_.size()); - scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); - TestCompletionCallback test_callback; - EXPECT_EQ(ERR_IO_PENDING, - reader_->Read(wrapped_buffer, buf.size(), - test_callback.callback())); - - EXPECT_EQ(static_cast<int>(buf.size()), test_callback.WaitForResult()); - EXPECT_EQ(0U, reader_->BytesRemaining()); - EXPECT_EQ(bytes_, buf); - // Try to read again. - EXPECT_EQ(0, reader_->ReadSync(wrapped_buffer, buf.size())); -} - -TEST_F(UploadFileElementReaderTest, ReadTooMuchAsync) { - const size_t kTooLargeSize = bytes_.size() * 2; - std::vector<char> buf(kTooLargeSize); - scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); - TestCompletionCallback test_callback; - EXPECT_EQ(ERR_IO_PENDING, - reader_->Read(wrapped_buffer, buf.size(), - test_callback.callback())); - - EXPECT_EQ(static_cast<int>(bytes_.size()), test_callback.WaitForResult()); - EXPECT_EQ(0U, reader_->BytesRemaining()); - buf.resize(bytes_.size()); // Resize to compare. - EXPECT_EQ(bytes_, buf); -} - -TEST_F(UploadFileElementReaderTest, MultipleInitAsync) { - std::vector<char> buf(bytes_.size()); - scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); - TestCompletionCallback test_callback; - - // Read all. - EXPECT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, buf.size(), - test_callback.callback())); - EXPECT_EQ(static_cast<int>(buf.size()), test_callback.WaitForResult()); + TestCompletionCallback read_callback1; + ASSERT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, buf.size(), + read_callback1.callback())); + EXPECT_EQ(static_cast<int>(buf.size()), read_callback1.WaitForResult()); EXPECT_EQ(0U, reader_->BytesRemaining()); EXPECT_EQ(bytes_, buf); // Call Init() again to reset the state. - EXPECT_EQ(ERR_IO_PENDING, reader_->Init(test_callback.callback())); - EXPECT_EQ(OK, test_callback.WaitForResult()); + TestCompletionCallback init_callback; + ASSERT_EQ(ERR_IO_PENDING, reader_->Init(init_callback.callback())); + EXPECT_EQ(OK, init_callback.WaitForResult()); EXPECT_EQ(bytes_.size(), reader_->GetContentLength()); EXPECT_EQ(bytes_.size(), reader_->BytesRemaining()); // Read again. - EXPECT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, buf.size(), - test_callback.callback())); - - EXPECT_EQ(static_cast<int>(buf.size()), test_callback.WaitForResult()); + TestCompletionCallback read_callback2; + ASSERT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, buf.size(), + read_callback2.callback())); + EXPECT_EQ(static_cast<int>(buf.size()), read_callback2.WaitForResult()); EXPECT_EQ(0U, reader_->BytesRemaining()); EXPECT_EQ(bytes_, buf); } @@ -224,13 +161,17 @@ TEST_F(UploadFileElementReaderTest, Range) { const uint64 kLength = bytes_.size() - kOffset * 3; reader_.reset(new UploadFileElementReader( temp_file_path_, kOffset, kLength, base::Time())); - ASSERT_EQ(OK, reader_->InitSync()); + TestCompletionCallback init_callback; + ASSERT_EQ(ERR_IO_PENDING, reader_->Init(init_callback.callback())); + EXPECT_EQ(OK, init_callback.WaitForResult()); EXPECT_EQ(kLength, reader_->GetContentLength()); EXPECT_EQ(kLength, reader_->BytesRemaining()); std::vector<char> buf(kLength); scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); - EXPECT_EQ(static_cast<int>(kLength), - reader_->ReadSync(wrapped_buffer, kLength)); + TestCompletionCallback read_callback; + ASSERT_EQ(ERR_IO_PENDING, reader_->Read(wrapped_buffer, kLength, + read_callback.callback())); + EXPECT_EQ(static_cast<int>(kLength), read_callback.WaitForResult()); const std::vector<char> expected(bytes_.begin() + kOffset, bytes_.begin() + kOffset + kLength); EXPECT_EQ(expected, buf); @@ -245,14 +186,146 @@ TEST_F(UploadFileElementReaderTest, FileChanged) { info.last_modified - base::TimeDelta::FromSeconds(1); reader_.reset(new UploadFileElementReader( temp_file_path_, 0, kuint64max, expected_modification_time)); - EXPECT_EQ(ERR_UPLOAD_FILE_CHANGED, reader_->InitSync()); + TestCompletionCallback init_callback; + ASSERT_EQ(ERR_IO_PENDING, reader_->Init(init_callback.callback())); + EXPECT_EQ(ERR_UPLOAD_FILE_CHANGED, init_callback.WaitForResult()); } TEST_F(UploadFileElementReaderTest, WrongPath) { const FilePath wrong_path(FILE_PATH_LITERAL("wrong_path")); reader_.reset(new UploadFileElementReader( wrong_path, 0, kuint64max, base::Time())); - ASSERT_EQ(OK, reader_->InitSync()); + TestCompletionCallback init_callback; + ASSERT_EQ(ERR_IO_PENDING, reader_->Init(init_callback.callback())); + EXPECT_EQ(OK, init_callback.WaitForResult()); + EXPECT_EQ(0U, reader_->GetContentLength()); + EXPECT_EQ(0U, reader_->BytesRemaining()); +} + + +class UploadFileElementReaderSyncTest : public PlatformTest { + protected: + virtual void SetUp() OVERRIDE { + // Some tests (*.ReadPartially) rely on bytes_.size() being even. + const char kData[] = "123456789abcdefghi"; + bytes_.assign(kData, kData + arraysize(kData) - 1); + + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + + ASSERT_TRUE(file_util::CreateTemporaryFileInDir(temp_dir_.path(), + &temp_file_path_)); + ASSERT_EQ( + static_cast<int>(bytes_.size()), + file_util::WriteFile(temp_file_path_, &bytes_[0], bytes_.size())); + + reader_.reset(new UploadFileElementReaderSync( + temp_file_path_, 0, kuint64max, base::Time())); + ASSERT_EQ(OK, reader_->Init(CompletionCallback())); + EXPECT_EQ(bytes_.size(), reader_->GetContentLength()); + EXPECT_EQ(bytes_.size(), reader_->BytesRemaining()); + EXPECT_FALSE(reader_->IsInMemory()); + } + + std::vector<char> bytes_; + scoped_ptr<UploadElementReader> reader_; + base::ScopedTempDir temp_dir_; + FilePath temp_file_path_; +}; + +TEST_F(UploadFileElementReaderSyncTest, ReadPartially) { + const size_t kHalfSize = bytes_.size() / 2; + ASSERT_EQ(bytes_.size(), kHalfSize * 2); + std::vector<char> buf(kHalfSize); + scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); + EXPECT_EQ(static_cast<int>(buf.size()), + reader_->Read(wrapped_buffer, buf.size(), CompletionCallback())); + EXPECT_EQ(bytes_.size() - buf.size(), reader_->BytesRemaining()); + EXPECT_EQ(std::vector<char>(bytes_.begin(), bytes_.begin() + kHalfSize), buf); + + EXPECT_EQ(static_cast<int>(buf.size()), + reader_->Read(wrapped_buffer, buf.size(), CompletionCallback())); + EXPECT_EQ(0U, reader_->BytesRemaining()); + EXPECT_EQ(std::vector<char>(bytes_.begin() + kHalfSize, bytes_.end()), buf); +} + +TEST_F(UploadFileElementReaderSyncTest, ReadAll) { + std::vector<char> buf(bytes_.size()); + scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); + EXPECT_EQ(static_cast<int>(buf.size()), + reader_->Read(wrapped_buffer, buf.size(), CompletionCallback())); + EXPECT_EQ(0U, reader_->BytesRemaining()); + EXPECT_EQ(bytes_, buf); + // Try to read again. + EXPECT_EQ(0, reader_->Read(wrapped_buffer, buf.size(), CompletionCallback())); +} + +TEST_F(UploadFileElementReaderSyncTest, ReadTooMuch) { + const size_t kTooLargeSize = bytes_.size() * 2; + std::vector<char> buf(kTooLargeSize); + scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); + EXPECT_EQ(static_cast<int>(bytes_.size()), + reader_->Read(wrapped_buffer, buf.size(), CompletionCallback())); + EXPECT_EQ(0U, reader_->BytesRemaining()); + buf.resize(bytes_.size()); // Resize to compare. + EXPECT_EQ(bytes_, buf); +} + +TEST_F(UploadFileElementReaderSyncTest, MultipleInit) { + std::vector<char> buf(bytes_.size()); + scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); + + // Read all. + EXPECT_EQ(static_cast<int>(buf.size()), + reader_->Read(wrapped_buffer, buf.size(), CompletionCallback())); + EXPECT_EQ(0U, reader_->BytesRemaining()); + EXPECT_EQ(bytes_, buf); + + // Call Init() again to reset the state. + ASSERT_EQ(OK, reader_->Init(CompletionCallback())); + EXPECT_EQ(bytes_.size(), reader_->GetContentLength()); + EXPECT_EQ(bytes_.size(), reader_->BytesRemaining()); + + // Read again. + EXPECT_EQ(static_cast<int>(buf.size()), + reader_->Read(wrapped_buffer, buf.size(), CompletionCallback())); + EXPECT_EQ(0U, reader_->BytesRemaining()); + EXPECT_EQ(bytes_, buf); +} + +TEST_F(UploadFileElementReaderSyncTest, Range) { + const uint64 kOffset = 2; + const uint64 kLength = bytes_.size() - kOffset * 3; + reader_.reset(new UploadFileElementReaderSync( + temp_file_path_, kOffset, kLength, base::Time())); + ASSERT_EQ(OK, reader_->Init(CompletionCallback())); + EXPECT_EQ(kLength, reader_->GetContentLength()); + EXPECT_EQ(kLength, reader_->BytesRemaining()); + std::vector<char> buf(kLength); + scoped_refptr<IOBuffer> wrapped_buffer = new WrappedIOBuffer(&buf[0]); + EXPECT_EQ(static_cast<int>(kLength), + reader_->Read(wrapped_buffer, kLength, CompletionCallback())); + const std::vector<char> expected(bytes_.begin() + kOffset, + bytes_.begin() + kOffset + kLength); + EXPECT_EQ(expected, buf); +} + +TEST_F(UploadFileElementReaderSyncTest, FileChanged) { + base::PlatformFileInfo info; + ASSERT_TRUE(file_util::GetFileInfo(temp_file_path_, &info)); + + // Expect one second before the actual modification time to simulate change. + const base::Time expected_modification_time = + info.last_modified - base::TimeDelta::FromSeconds(1); + reader_.reset(new UploadFileElementReaderSync( + temp_file_path_, 0, kuint64max, expected_modification_time)); + EXPECT_EQ(ERR_UPLOAD_FILE_CHANGED, reader_->Init(CompletionCallback())); +} + +TEST_F(UploadFileElementReaderSyncTest, WrongPath) { + const FilePath wrong_path(FILE_PATH_LITERAL("wrong_path")); + reader_.reset(new UploadFileElementReaderSync( + wrong_path, 0, kuint64max, base::Time())); + ASSERT_EQ(OK, reader_->Init(CompletionCallback())); EXPECT_EQ(0U, reader_->GetContentLength()); EXPECT_EQ(0U, reader_->BytesRemaining()); } |