| Index: remoting/protocol/message_reader_unittest.cc
|
| diff --git a/remoting/protocol/message_reader_unittest.cc b/remoting/protocol/message_reader_unittest.cc
|
| index 30115d129be51840dd0d9fedb54748e0a4c321ed..f178d8e351641b1770134cca1d6bc2065b6237fb 100644
|
| --- a/remoting/protocol/message_reader_unittest.cc
|
| +++ b/remoting/protocol/message_reader_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/bind_helpers.h"
|
| #include "base/callback.h"
|
| #include "base/message_loop.h"
|
| +#include "base/stl_util.h"
|
| #include "base/synchronization/waitable_event.h"
|
| #include "base/threading/thread.h"
|
| #include "net/socket/socket.h"
|
| @@ -30,13 +31,13 @@ const char kTestMessage1[] = "Message1";
|
| const char kTestMessage2[] = "Message2";
|
|
|
| ACTION(CallDoneTask) {
|
| - arg1.Run();
|
| -}
|
| + arg0.Run();
|
| }
|
| +} // namespace
|
|
|
| class MockMessageReceivedCallback {
|
| public:
|
| - MOCK_METHOD2(OnMessage, void(CompoundBuffer*, const base::Closure&));
|
| + MOCK_METHOD1(OnMessage, void(const base::Closure&));
|
| };
|
|
|
| class MessageReaderTest : public testing::Test {
|
| @@ -46,22 +47,25 @@ class MessageReaderTest : public testing::Test {
|
| run_task_finished_(false, false) {
|
| }
|
|
|
| - void RunDoneTaskOnOtherThread(CompoundBuffer* buffer,
|
| - const base::Closure& done_task) {
|
| + void RunDoneTaskOnOtherThread(const base::Closure& done_task) {
|
| other_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&MessageReaderTest::RunAndDeleteTask,
|
| + base::Bind(&MessageReaderTest::RunClosure,
|
| base::Unretained(this), done_task));
|
| }
|
|
|
| protected:
|
| - virtual void SetUp() {
|
| + virtual void SetUp() OVERRIDE {
|
| reader_ = new MessageReader();
|
| }
|
|
|
| + virtual void TearDown() OVERRIDE {
|
| + STLDeleteElements(&messages_);
|
| + }
|
| +
|
| void InitReader() {
|
| reader_->Init(&socket_, base::Bind(
|
| - &MockMessageReceivedCallback::OnMessage, base::Unretained(&callback_)));
|
| + &MessageReaderTest::OnMessage, base::Unretained(this)));
|
| }
|
|
|
| void AddMessage(const std::string& message) {
|
| @@ -77,43 +81,48 @@ class MessageReaderTest : public testing::Test {
|
| return result == expected;
|
| }
|
|
|
| - void RunAndDeleteTask(const base::Closure& task) {
|
| + void RunClosure(const base::Closure& task) {
|
| task.Run();
|
| run_task_finished_.Signal();
|
| }
|
|
|
| + void OnMessage(scoped_ptr<CompoundBuffer> buffer,
|
| + const base::Closure& done_callback) {
|
| + messages_.push_back(buffer.release());
|
| + callback_.OnMessage(done_callback);
|
| + }
|
| +
|
| MessageLoop message_loop_;
|
| base::Thread other_thread_;
|
| base::WaitableEvent run_task_finished_;
|
| scoped_refptr<MessageReader> reader_;
|
| FakeSocket socket_;
|
| MockMessageReceivedCallback callback_;
|
| + std::vector<CompoundBuffer*> messages_;
|
| };
|
|
|
| // Receive one message and process it with delay
|
| TEST_F(MessageReaderTest, OneMessage_Delay) {
|
| - CompoundBuffer* buffer;
|
| base::Closure done_task;
|
|
|
| AddMessage(kTestMessage1);
|
|
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(1)
|
| - .WillOnce(DoAll(SaveArg<0>(&buffer),
|
| - SaveArg<1>(&done_task)));
|
| + .WillOnce(SaveArg<0>(&done_task));
|
|
|
| InitReader();
|
|
|
| Mock::VerifyAndClearExpectations(&callback_);
|
| Mock::VerifyAndClearExpectations(&socket_);
|
|
|
| - EXPECT_TRUE(CompareResult(buffer, kTestMessage1));
|
| + EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1));
|
|
|
| // Verify that the reader starts reading again only after we've
|
| // finished processing the previous message.
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| - RunAndDeleteTask(done_task);
|
| + done_task.Run();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
| }
|
| @@ -122,49 +131,46 @@ TEST_F(MessageReaderTest, OneMessage_Delay) {
|
| TEST_F(MessageReaderTest, OneMessage_Instant) {
|
| AddMessage(kTestMessage1);
|
|
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(1)
|
| .WillOnce(CallDoneTask());
|
|
|
| InitReader();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
| + EXPECT_EQ(1U, messages_.size());
|
| }
|
|
|
| // Receive two messages in one packet.
|
| TEST_F(MessageReaderTest, TwoMessages_Together) {
|
| - CompoundBuffer* buffer1;
|
| base::Closure done_task1;
|
| - CompoundBuffer* buffer2;
|
| base::Closure done_task2;
|
|
|
| AddMessage(kTestMessage1);
|
| AddMessage(kTestMessage2);
|
|
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(2)
|
| - .WillOnce(DoAll(SaveArg<0>(&buffer1),
|
| - SaveArg<1>(&done_task1)))
|
| - .WillOnce(DoAll(SaveArg<0>(&buffer2),
|
| - SaveArg<1>(&done_task2)));
|
| + .WillOnce(SaveArg<0>(&done_task1))
|
| + .WillOnce(SaveArg<0>(&done_task2));
|
|
|
| InitReader();
|
|
|
| Mock::VerifyAndClearExpectations(&callback_);
|
| Mock::VerifyAndClearExpectations(&socket_);
|
|
|
| - EXPECT_TRUE(CompareResult(buffer1, kTestMessage1));
|
| - EXPECT_TRUE(CompareResult(buffer2, kTestMessage2));
|
| + EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1));
|
| + EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2));
|
|
|
| // Verify that the reader starts reading again only after we've
|
| // finished processing the previous message.
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| - RunAndDeleteTask(done_task1);
|
| + done_task1.Run();
|
|
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| - RunAndDeleteTask(done_task2);
|
| + done_task2.Run();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
| }
|
| @@ -172,30 +178,28 @@ TEST_F(MessageReaderTest, TwoMessages_Together) {
|
| // Receive two messages in one packet, and process the first one
|
| // instantly.
|
| TEST_F(MessageReaderTest, TwoMessages_Instant) {
|
| - CompoundBuffer* buffer2;
|
| base::Closure done_task2;
|
|
|
| AddMessage(kTestMessage1);
|
| AddMessage(kTestMessage2);
|
|
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(2)
|
| .WillOnce(CallDoneTask())
|
| - .WillOnce(DoAll(SaveArg<0>(&buffer2),
|
| - SaveArg<1>(&done_task2)));
|
| + .WillOnce(SaveArg<0>(&done_task2));
|
|
|
| InitReader();
|
|
|
| Mock::VerifyAndClearExpectations(&callback_);
|
| Mock::VerifyAndClearExpectations(&socket_);
|
|
|
| - EXPECT_TRUE(CompareResult(buffer2, kTestMessage2));
|
| + EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2));
|
|
|
| // Verify that the reader starts reading again only after we've
|
| // finished processing the second message.
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| - RunAndDeleteTask(done_task2);
|
| + done_task2.Run();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
| }
|
| @@ -206,7 +210,7 @@ TEST_F(MessageReaderTest, TwoMessages_Instant2) {
|
| AddMessage(kTestMessage1);
|
| AddMessage(kTestMessage2);
|
|
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(2)
|
| .WillOnce(CallDoneTask())
|
| .WillOnce(CallDoneTask());
|
| @@ -218,45 +222,42 @@ TEST_F(MessageReaderTest, TwoMessages_Instant2) {
|
|
|
| // Receive two messages in separate packets.
|
| TEST_F(MessageReaderTest, TwoMessages_Separately) {
|
| - CompoundBuffer* buffer;
|
| base::Closure done_task;
|
|
|
| AddMessage(kTestMessage1);
|
|
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(1)
|
| - .WillOnce(DoAll(SaveArg<0>(&buffer),
|
| - SaveArg<1>(&done_task)));
|
| + .WillOnce(SaveArg<0>(&done_task));
|
|
|
| InitReader();
|
|
|
| Mock::VerifyAndClearExpectations(&callback_);
|
| Mock::VerifyAndClearExpectations(&socket_);
|
|
|
| - EXPECT_TRUE(CompareResult(buffer, kTestMessage1));
|
| + EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1));
|
|
|
| // Verify that the reader starts reading again only after we've
|
| // finished processing the previous message.
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| - RunAndDeleteTask(done_task);
|
| + done_task.Run();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
|
|
| // Write another message and verify that we receive it.
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(1)
|
| - .WillOnce(DoAll(SaveArg<0>(&buffer),
|
| - SaveArg<1>(&done_task)));
|
| + .WillOnce(SaveArg<0>(&done_task));
|
| AddMessage(kTestMessage2);
|
|
|
| - EXPECT_TRUE(CompareResult(buffer, kTestMessage2));
|
| + EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2));
|
|
|
| // Verify that the reader starts reading again only after we've
|
| // finished processing the previous message.
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| - RunAndDeleteTask(done_task);
|
| + done_task.Run();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
| }
|
| @@ -264,11 +265,10 @@ TEST_F(MessageReaderTest, TwoMessages_Separately) {
|
| // Verify that socket operations occur on same thread, even when the OnMessage()
|
| // callback triggers |done_task| to run on a different thread.
|
| TEST_F(MessageReaderTest, UseSocketOnCorrectThread) {
|
| -
|
| AddMessage(kTestMessage1);
|
| other_thread_.Start();
|
|
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(1)
|
| .WillOnce(Invoke(this, &MessageReaderTest::RunDoneTaskOnOtherThread));
|
|
|
| @@ -278,16 +278,14 @@ TEST_F(MessageReaderTest, UseSocketOnCorrectThread) {
|
| message_loop_.RunAllPending();
|
|
|
| // Write another message and verify that we receive it.
|
| - CompoundBuffer* buffer;
|
| base::Closure done_task;
|
| - EXPECT_CALL(callback_, OnMessage(_, _))
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| .Times(1)
|
| - .WillOnce(DoAll(SaveArg<0>(&buffer),
|
| - SaveArg<1>(&done_task)));
|
| + .WillOnce(SaveArg<0>(&done_task));
|
| AddMessage(kTestMessage2);
|
| - EXPECT_TRUE(CompareResult(buffer, kTestMessage2));
|
| + EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2));
|
|
|
| - RunAndDeleteTask(done_task);
|
| + done_task.Run();
|
| }
|
|
|
| } // namespace protocol
|
|
|