diff options
author | hidehiko@chromium.org <hidehiko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-03 11:17:19 +0000 |
---|---|---|
committer | hidehiko@chromium.org <hidehiko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-03 11:17:19 +0000 |
commit | 79c8c5c4448f7b81c752a5428d794e2d06e18002 (patch) | |
tree | 1a8e2ca8dd0d37243e72386cf099d44d9ff1b0d0 /chrome/browser | |
parent | 08bf56aaa2ef3b173bddba06c096428c2a7ee614 (diff) | |
download | chromium_src-79c8c5c4448f7b81c752a5428d794e2d06e18002.zip chromium_src-79c8c5c4448f7b81c752a5428d794e2d06e18002.tar.gz chromium_src-79c8c5c4448f7b81c752a5428d794e2d06e18002.tar.bz2 |
Extract ReadAllData testing utility.
The method will be used more, so to avoid duplicate it, extract it to the
test_util.
BUG=127129
TEST=Ran unit_tests
Review URL: https://chromiumcodereview.appspot.com/14842003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@198090 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
4 files changed, 56 insertions, 87 deletions
diff --git a/chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc b/chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc index fdf58e1..a7e5984 100644 --- a/chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc +++ b/chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc @@ -11,6 +11,7 @@ #include "base/files/file_path.h" #include "base/files/scoped_temp_dir.h" #include "base/message_loop.h" +#include "base/rand_util.h" #include "base/sequenced_task_runner.h" #include "base/threading/thread.h" #include "chrome/browser/chromeos/drive/fake_file_system.h" @@ -38,26 +39,6 @@ void IncrementCallback(int* num_called) { ++*num_called; } -// Reads all data from |reader| and copies to |content|. Returns net::Error -// code. -int ReadAllData(ReaderProxy* proxy, std::string* content) { - const int kBufferSize = 10; - scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); - - // Read repeatedly, until it is finished. - while (true) { - net::TestCompletionCallback callback; - int result = proxy->Read(buffer.get(), kBufferSize, callback.callback()); - result = callback.GetResult(result); - if (result <= 0) { - // An error or EOF is found. Note that net::OK is 0. - return result; - } - - content->append(buffer->data(), result); - } -} - } // namespace class LocalReaderProxyTest : public ::testing::Test { @@ -101,7 +82,7 @@ TEST_F(LocalReaderProxyTest, Read) { // Make sure the read contant is as same as the file. std::string content; - ASSERT_EQ(net::OK, ReadAllData(&proxy, &content)); + ASSERT_EQ(net::OK, test_util::ReadAllData(&proxy, &content)); EXPECT_EQ(file_content_, content); } @@ -122,7 +103,7 @@ TEST_F(LocalReaderProxyTest, ReadWithLimit) { // Make sure the read contant is as same as the file. std::string content; - ASSERT_EQ(net::OK, ReadAllData(&proxy, &content)); + ASSERT_EQ(net::OK, test_util::ReadAllData(&proxy, &content)); EXPECT_EQ(expected_content, content); } @@ -381,13 +362,8 @@ class DriveFileStreamReaderTest : public ::testing::Test { TEST_F(DriveFileStreamReaderTest, Read) { const base::FilePath kDriveFile = util::GetDriveMyDriveRootPath().AppendASCII("File 1.txt"); - net::TestCompletionCallback callback; - const int kBufferSize = 3; - scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); - // Create the reader, and initialize it. // In this case, the file is not yet locally cached. - scoped_ptr<DriveFileStreamReader> reader(new DriveFileStreamReader( GetFileSystemGetter(), worker_thread_->message_loop_proxy())); @@ -405,17 +381,11 @@ TEST_F(DriveFileStreamReaderTest, Read) { EXPECT_EQ(FILE_ERROR_OK, error); ASSERT_TRUE(entry); EXPECT_TRUE(reader->IsInitialized()); + size_t content_size = entry->file_info().size(); // Read data from the reader. - size_t content_size = entry->file_info().size(); std::string first_content; - while (first_content.size() < content_size) { - int result = reader->Read(buffer.get(), kBufferSize, callback.callback()); - result = callback.GetResult(result); - ASSERT_GT(result, 0); - first_content.append(buffer->data(), result); - } - + ASSERT_EQ(net::OK, test_util::ReadAllData(reader.get(), &first_content)); EXPECT_EQ(content_size, first_content.size()); // Create second instance and initialize it. @@ -439,17 +409,11 @@ TEST_F(DriveFileStreamReaderTest, Read) { EXPECT_TRUE(reader->IsInitialized()); // The size should be same. - EXPECT_EQ(content_size, - static_cast<size_t>(entry->file_info().size())); + EXPECT_EQ(content_size, static_cast<size_t>(entry->file_info().size())); // Read data from the reader, again. std::string second_content; - while (second_content.size() < content_size) { - int result = reader->Read(buffer.get(), kBufferSize, callback.callback()); - result = callback.GetResult(result); - ASSERT_GT(result, 0); - second_content.append(buffer->data(), result); - } + ASSERT_EQ(net::OK, test_util::ReadAllData(reader.get(), &second_content)); // The same content is expected. EXPECT_EQ(first_content, second_content); diff --git a/chrome/browser/chromeos/drive/drive_url_request_job_unittest.cc b/chrome/browser/chromeos/drive/drive_url_request_job_unittest.cc index 9dce8ad..e9fe663 100644 --- a/chrome/browser/chromeos/drive/drive_url_request_job_unittest.cc +++ b/chrome/browser/chromeos/drive/drive_url_request_job_unittest.cc @@ -13,6 +13,7 @@ #include "chrome/browser/chromeos/drive/drive_file_stream_reader.h" #include "chrome/browser/chromeos/drive/fake_file_system.h" #include "chrome/browser/chromeos/drive/file_system_util.h" +#include "chrome/browser/chromeos/drive/test_util.h" #include "chrome/browser/google_apis/fake_drive_service.h" #include "chrome/browser/google_apis/task_util.h" #include "chrome/browser/google_apis/test_util.h" @@ -182,30 +183,15 @@ class DriveURLRequestJobTest : public testing::Test { google_apis::test_util::CreateCopyResultCallback( &error, &entry))); message_loop_.Run(); - if (error != FILE_ERROR_OK) + if (error != FILE_ERROR_OK || !entry) return false; // Read data from the reader. - size_t content_size = entry->file_info().size(); std::string content; - const int kBufferSize = 100; - scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); - while (content.size() < content_size) { - net::TestCompletionCallback callback; - int result = reader->Read(buffer.get(), kBufferSize, callback.callback()); - result = callback.GetResult(result); - if (result < 0) { - // An error is found. - return false; - } - if (result == 0) { - // EOF is found. - break; - } - content.append(buffer->data(), result); - } - - if (content_size != content.size()) + if (test_util::ReadAllData(reader.get(), &content) != net::OK) + return false; + + if (static_cast<size_t>(entry->file_info().size()) != content.size()) return false; *out_content = content; diff --git a/chrome/browser/chromeos/drive/file_reader_unittest.cc b/chrome/browser/chromeos/drive/file_reader_unittest.cc index dbc0690..c25a246 100644 --- a/chrome/browser/chromeos/drive/file_reader_unittest.cc +++ b/chrome/browser/chromeos/drive/file_reader_unittest.cc @@ -14,6 +14,7 @@ #include "base/message_loop.h" #include "base/rand_util.h" #include "base/threading/thread.h" +#include "chrome/browser/chromeos/drive/test_util.h" #include "chrome/browser/google_apis/test_util.h" #include "net/base/io_buffer.h" #include "net/base/test_completion_callback.h" @@ -23,30 +24,21 @@ namespace drive { namespace util { namespace { -// Reads all the contents from |file_reader| and stores into |out_content|. -// Returns net::Error code. -int ReadAllData(FileReader* file_reader, std::string* out_content) { - const int kBufferSize = 100; - scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); - - std::string content; - while (true) { - net::TestCompletionCallback callback; - file_reader->Read(buffer.get(), kBufferSize, callback.callback()); - int result = callback.WaitForResult(); - if (result < 0) { - return result; - } - if (result == 0) { - // Quit the loop at EOF. - break; - } - content.append(buffer->data(), result); +// An adapter to use test_util::ReadAllData. +class FileReaderAdapter { + public: + explicit FileReaderAdapter(FileReader* reader) : reader_(reader) {} + int Read(net::IOBuffer* buffer, + int buffer_length, + const net::CompletionCallback& callback) { + reader_->Read(buffer, buffer_length, callback); + // As FileReader::Read always works asynchronously, return ERR_IO_PENDING. + return net::ERR_IO_PENDING; } - *out_content = content; - return net::OK; -} + private: + FileReader* reader_; +}; } // namespace @@ -92,8 +84,9 @@ TEST_F(DriveFileReaderTest, FullRead) { file_reader_->Open(test_file, 0, callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); + FileReaderAdapter adapter(file_reader_.get()); std::string content; - ASSERT_EQ(net::OK, ReadAllData(file_reader_.get(), &content)); + ASSERT_EQ(net::OK, test_util::ReadAllData(&adapter, &content)); EXPECT_EQ(expected_content, content); } @@ -111,8 +104,9 @@ TEST_F(DriveFileReaderTest, OpenWithOffset) { test_file, static_cast<int64>(offset), callback.callback()); ASSERT_EQ(net::OK, callback.WaitForResult()); + FileReaderAdapter adapter(file_reader_.get()); std::string content; - ASSERT_EQ(net::OK, ReadAllData(file_reader_.get(), &content)); + ASSERT_EQ(net::OK, test_util::ReadAllData(&adapter, &content)); EXPECT_EQ(expected_content, content); } diff --git a/chrome/browser/chromeos/drive/test_util.h b/chrome/browser/chromeos/drive/test_util.h index 67e8ace..0823e11 100644 --- a/chrome/browser/chromeos/drive/test_util.h +++ b/chrome/browser/chromeos/drive/test_util.h @@ -8,6 +8,13 @@ #include <string> #include "chrome/browser/google_apis/test_util.h" +#include "net/base/completion_callback.h" +#include "net/base/io_buffer.h" +#include "net/base/test_completion_callback.h" + +namespace net { +class IOBuffer; +} // namespace net namespace drive { @@ -54,6 +61,24 @@ struct DestroyHelperForTests { } }; +// Reads all the data from |reader| and copies to |content|. Returns net::Error +// code. +template<typename Reader> +int ReadAllData(Reader* reader, std::string* content) { + const int kBufferSize = 10; + scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); + while (true) { + net::TestCompletionCallback callback; + int result = reader->Read(buffer.get(), kBufferSize, callback.callback()); + result = callback.GetResult(result); + if (result <= 0) { + // Found an error or EOF. Return it. Note: net::OK is 0. + return result; + } + content->append(buffer->data(), result); + } +} + } // namespace test_util } // namespace drive |