Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Unified Diff: net/base/upload_data_stream_unittest.cc

Issue 10913179: net: Make UploadDataStream::Init() asynchronous. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: changed argument order Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/upload_data_stream.cc ('k') | net/base/upload_element_reader.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/upload_data_stream_unittest.cc
diff --git a/net/base/upload_data_stream_unittest.cc b/net/base/upload_data_stream_unittest.cc
index 8a8ec394a667b7d662dcc650c6dae18ac55dce86..33d035e43d15d2ec69c604e4cb1306eb7d4b70b6 100644
--- a/net/base/upload_data_stream_unittest.cc
+++ b/net/base/upload_data_stream_unittest.cc
@@ -17,9 +17,15 @@
#include "net/base/net_errors.h"
#include "net/base/upload_data.h"
#include "net/base/upload_file_element_reader.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
+using ::testing::DoAll;
+using ::testing::Invoke;
+using ::testing::Return;
+using ::testing::_;
+
namespace net {
namespace {
@@ -39,6 +45,46 @@ std::string ReadFromUploadDataStream(UploadDataStream* stream) {
return data_read;
}
+// A mock class of UploadElementReader.
+class MockUploadElementReader : public UploadElementReader {
+ public:
+ MockUploadElementReader() : init_result_(OK) {}
+ virtual ~MockUploadElementReader() {}
+
+ MOCK_METHOD1(Init, int(const CompletionCallback& callback));
+ MOCK_CONST_METHOD0(GetContentLength, uint64());
+ MOCK_CONST_METHOD0(BytesRemaining, uint64());
+ MOCK_CONST_METHOD0(IsInMemory, bool());
+ MOCK_METHOD2(ReadSync, int(char* buf, int buf_length));
+
+ // Sets expectation to return the specified result from Init() asynchronously.
+ void SetAsyncInitExpectation(int result) {
+ init_result_ = result;
+ EXPECT_CALL(*this, Init(_))
+ .WillOnce(DoAll(Invoke(this, &MockUploadElementReader::OnInit),
+ Return(ERR_IO_PENDING)));
+ }
+
+ private:
+ void OnInit(const CompletionCallback& callback) {
+ MessageLoop::current()->PostTask(FROM_HERE,
+ base::Bind(callback, init_result_));
+ }
+
+ // Result value returned from Init().
+ int init_result_;
+};
+
+// A mock CompletionCallback.
+class MockCompletionCallback {
+ public:
+ MOCK_METHOD1(Run, void(int result));
+
+ CompletionCallback CreateCallback() {
+ return base::Bind(&MockCompletionCallback::Run, base::Unretained(this));
+ }
+};
+
} // namespace
class UploadDataStreamTest : public PlatformTest {
@@ -55,7 +101,7 @@ class UploadDataStreamTest : public PlatformTest {
TEST_F(UploadDataStreamTest, EmptyUploadData) {
upload_data_->AppendBytes("", 0);
scoped_ptr<UploadDataStream> stream(new UploadDataStream(upload_data_));
- ASSERT_EQ(OK, stream->Init());
+ ASSERT_EQ(OK, stream->InitSync());
EXPECT_TRUE(stream->IsInMemory());
ASSERT_TRUE(stream.get());
EXPECT_EQ(0U, stream->size());
@@ -66,7 +112,7 @@ TEST_F(UploadDataStreamTest, EmptyUploadData) {
TEST_F(UploadDataStreamTest, ConsumeAllBytes) {
upload_data_->AppendBytes(kTestData, kTestDataSize);
scoped_ptr<UploadDataStream> stream(new UploadDataStream(upload_data_));
- ASSERT_EQ(OK, stream->Init());
+ ASSERT_EQ(OK, stream->InitSync());
EXPECT_TRUE(stream->IsInMemory());
ASSERT_TRUE(stream.get());
EXPECT_EQ(kTestDataSize, stream->size());
@@ -94,7 +140,7 @@ TEST_F(UploadDataStreamTest, File) {
upload_data_->SetElements(elements);
scoped_ptr<UploadDataStream> stream(new UploadDataStream(upload_data_));
- ASSERT_EQ(OK, stream->Init());
+ ASSERT_EQ(OK, stream->InitSync());
EXPECT_FALSE(stream->IsInMemory());
ASSERT_TRUE(stream.get());
EXPECT_EQ(kTestDataSize, stream->size());
@@ -127,7 +173,7 @@ TEST_F(UploadDataStreamTest, FileSmallerThanLength) {
upload_data_->SetElements(elements);
scoped_ptr<UploadDataStream> stream(new UploadDataStream(upload_data_));
- ASSERT_EQ(OK, stream->Init());
+ ASSERT_EQ(OK, stream->InitSync());
EXPECT_FALSE(stream->IsInMemory());
ASSERT_TRUE(stream.get());
EXPECT_EQ(kFakeSize, stream->size());
@@ -164,7 +210,7 @@ TEST_F(UploadDataStreamTest, FileAndBytes) {
const uint64 kStreamSize = kTestDataSize + kFileRangeLength;
scoped_ptr<UploadDataStream> stream(new UploadDataStream(upload_data_));
- ASSERT_EQ(OK, stream->Init());
+ ASSERT_EQ(OK, stream->InitSync());
EXPECT_FALSE(stream->IsInMemory());
ASSERT_TRUE(stream.get());
EXPECT_EQ(kStreamSize, stream->size());
@@ -188,7 +234,7 @@ TEST_F(UploadDataStreamTest, Chunk) {
const uint64 kStreamSize = kTestDataSize*2;
scoped_ptr<UploadDataStream> stream(new UploadDataStream(upload_data_));
- ASSERT_EQ(OK, stream->Init());
+ ASSERT_EQ(OK, stream->InitSync());
EXPECT_FALSE(stream->IsInMemory());
ASSERT_TRUE(stream.get());
EXPECT_EQ(0U, stream->size()); // Content-Length is 0 for chunked data.
@@ -203,6 +249,96 @@ TEST_F(UploadDataStreamTest, Chunk) {
ASSERT_TRUE(stream->IsEOF());
}
+// Init() with on-memory and not-on-memory readers.
+TEST_F(UploadDataStreamTest, InitAsync) {
+ // Create stream without element readers.
+ UploadDataStream stream(upload_data_);
+
+ // Set mock readers to the stream.
+ MockUploadElementReader* reader = NULL;
+
+ reader = new MockUploadElementReader;
+ EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK));
+ EXPECT_CALL(*reader, GetContentLength()).WillRepeatedly(Return(0));
+ EXPECT_CALL(*reader, IsInMemory()).WillRepeatedly(Return(true));
+ stream.element_readers_.push_back(reader);
+
+ reader = new MockUploadElementReader;
+ EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK));
+ EXPECT_CALL(*reader, GetContentLength()).WillRepeatedly(Return(0));
+ EXPECT_CALL(*reader, IsInMemory()).WillRepeatedly(Return(true));
+ stream.element_readers_.push_back(reader);
+
+ reader = new MockUploadElementReader;
+ reader->SetAsyncInitExpectation(OK);
+ EXPECT_CALL(*reader, GetContentLength()).WillRepeatedly(Return(0));
+ EXPECT_CALL(*reader, IsInMemory()).WillRepeatedly(Return(false));
+ stream.element_readers_.push_back(reader);
+
+ reader = new MockUploadElementReader;
+ reader->SetAsyncInitExpectation(OK);
+ EXPECT_CALL(*reader, GetContentLength()).WillRepeatedly(Return(0));
+ EXPECT_CALL(*reader, IsInMemory()).WillRepeatedly(Return(false));
+ stream.element_readers_.push_back(reader);
+
+ reader = new MockUploadElementReader;
+ EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK));
+ EXPECT_CALL(*reader, GetContentLength()).WillRepeatedly(Return(0));
+ EXPECT_CALL(*reader, IsInMemory()).WillRepeatedly(Return(true));
+ stream.element_readers_.push_back(reader);
+
+ // Run Init().
+ MockCompletionCallback mock_callback;
+ EXPECT_CALL(mock_callback, Run(OK)).Times(1);
+ EXPECT_EQ(stream.Init(mock_callback.CreateCallback()), ERR_IO_PENDING);
+ MessageLoop::current()->RunAllPending();
+}
+
+// Init() of a reader fails asynchronously.
+TEST_F(UploadDataStreamTest, InitAsyncFailureAsync) {
+ // Create stream without element readers.
+ UploadDataStream stream(upload_data_);
+
+ // Set a mock reader to the stream.
+ MockUploadElementReader* reader = NULL;
+
+ reader = new MockUploadElementReader;
+ reader->SetAsyncInitExpectation(ERR_FAILED);
+ EXPECT_CALL(*reader, IsInMemory()).WillRepeatedly(Return(false));
+ stream.element_readers_.push_back(reader);
+
+ // Run Init().
+ MockCompletionCallback mock_callback;
+ EXPECT_CALL(mock_callback, Run(ERR_FAILED)).Times(1);
+ EXPECT_EQ(stream.Init(mock_callback.CreateCallback()), ERR_IO_PENDING);
+ MessageLoop::current()->RunAllPending();
+}
+
+// Init() of a reader fails synchronously.
+TEST_F(UploadDataStreamTest, InitAsyncFailureSync) {
+ // Create stream without element readers.
+ UploadDataStream stream(upload_data_);
+
+ // Set mock readers to the stream.
+ MockUploadElementReader* reader = NULL;
+
+ reader = new MockUploadElementReader;
+ reader->SetAsyncInitExpectation(OK);
+ EXPECT_CALL(*reader, IsInMemory()).WillRepeatedly(Return(false));
+ stream.element_readers_.push_back(reader);
+
+ reader = new MockUploadElementReader;
+ EXPECT_CALL(*reader, Init(_)).WillOnce(Return(ERR_FAILED));
+ EXPECT_CALL(*reader, IsInMemory()).WillRepeatedly(Return(true));
+ stream.element_readers_.push_back(reader);
+
+ // Run Init().
+ MockCompletionCallback mock_callback;
+ EXPECT_CALL(mock_callback, Run(ERR_FAILED)).Times(1);
+ EXPECT_EQ(stream.Init(mock_callback.CreateCallback()), ERR_IO_PENDING);
+ MessageLoop::current()->RunAllPending();
+}
+
void UploadDataStreamTest::FileChangedHelper(const FilePath& file_path,
const base::Time& time,
bool error_expected) {
@@ -216,7 +352,7 @@ void UploadDataStreamTest::FileChangedHelper(const FilePath& file_path,
upload_data->SetElements(elements);
scoped_ptr<UploadDataStream> stream(new UploadDataStream(upload_data));
- int error_code = stream->Init();
+ int error_code = stream->InitSync();
if (error_expected)
ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code);
else
@@ -259,7 +395,7 @@ TEST_F(UploadDataStreamTest, UploadDataReused) {
// Confirm that the file is read properly.
{
UploadDataStream stream(upload_data_);
- ASSERT_EQ(OK, stream.Init());
+ ASSERT_EQ(OK, stream.InitSync());
EXPECT_EQ(kTestDataSize, stream.size());
EXPECT_EQ(kTestData, ReadFromUploadDataStream(&stream));
}
@@ -268,7 +404,7 @@ TEST_F(UploadDataStreamTest, UploadDataReused) {
// file is read properly.
{
UploadDataStream stream(upload_data_);
- ASSERT_EQ(OK, stream.Init());
+ ASSERT_EQ(OK, stream.InitSync());
EXPECT_EQ(kTestDataSize, stream.size());
EXPECT_EQ(kTestData, ReadFromUploadDataStream(&stream));
}
« no previous file with comments | « net/base/upload_data_stream.cc ('k') | net/base/upload_element_reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698