summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorhidehiko@chromium.org <hidehiko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-03 11:17:19 +0000
committerhidehiko@chromium.org <hidehiko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-03 11:17:19 +0000
commit79c8c5c4448f7b81c752a5428d794e2d06e18002 (patch)
tree1a8e2ca8dd0d37243e72386cf099d44d9ff1b0d0 /chrome/browser
parent08bf56aaa2ef3b173bddba06c096428c2a7ee614 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc50
-rw-r--r--chrome/browser/chromeos/drive/drive_url_request_job_unittest.cc26
-rw-r--r--chrome/browser/chromeos/drive/file_reader_unittest.cc42
-rw-r--r--chrome/browser/chromeos/drive/test_util.h25
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