| Index: remoting/protocol/message_reader_unittest.cc
|
| diff --git a/remoting/protocol/message_reader_unittest.cc b/remoting/protocol/message_reader_unittest.cc
|
| index c789b96867eb2e74bbe1e459687c729fc13dd543..b3e62892c16e51649b59dd293da9225c64ff15f4 100644
|
| --- a/remoting/protocol/message_reader_unittest.cc
|
| +++ b/remoting/protocol/message_reader_unittest.cc
|
| @@ -43,7 +43,26 @@ class MockMessageReceivedCallback {
|
| class MessageReaderTest : public testing::Test {
|
| public:
|
| MessageReaderTest()
|
| - : run_task_finished_(false, false) {
|
| + : in_callback_(false) {
|
| + }
|
| +
|
| + // Following two methods are used by the ReadFromCallback test.
|
| + void AddSecondMessage(const base::Closure& task) {
|
| + AddMessage(kTestMessage2);
|
| + in_callback_ = true;
|
| + task.Run();
|
| + in_callback_ = false;
|
| + }
|
| +
|
| + void OnSecondMessage(const base::Closure& task) {
|
| + EXPECT_FALSE(in_callback_);
|
| + task.Run();
|
| + }
|
| +
|
| + // Used by the DeleteFromCallback() test.
|
| + void DeleteReader(const base::Closure& task) {
|
| + reader_.reset();
|
| + task.Run();
|
| }
|
|
|
| protected:
|
| @@ -73,11 +92,6 @@ class MessageReaderTest : public testing::Test {
|
| return result == expected;
|
| }
|
|
|
| - 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());
|
| @@ -85,11 +99,11 @@ class MessageReaderTest : public testing::Test {
|
| }
|
|
|
| MessageLoop message_loop_;
|
| - base::WaitableEvent run_task_finished_;
|
| scoped_ptr<MessageReader> reader_;
|
| FakeSocket socket_;
|
| MockMessageReceivedCallback callback_;
|
| std::vector<CompoundBuffer*> messages_;
|
| + bool in_callback_;
|
| };
|
|
|
| // Receive one message and process it with delay
|
| @@ -103,6 +117,7 @@ TEST_F(MessageReaderTest, OneMessage_Delay) {
|
| .WillOnce(SaveArg<0>(&done_task));
|
|
|
| InitReader();
|
| + message_loop_.RunAllPending();
|
|
|
| Mock::VerifyAndClearExpectations(&callback_);
|
| Mock::VerifyAndClearExpectations(&socket_);
|
| @@ -127,6 +142,7 @@ TEST_F(MessageReaderTest, OneMessage_Instant) {
|
| .WillOnce(CallDoneTask());
|
|
|
| InitReader();
|
| + message_loop_.RunAllPending();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
| EXPECT_EQ(1U, messages_.size());
|
| @@ -146,6 +162,7 @@ TEST_F(MessageReaderTest, TwoMessages_Together) {
|
| .WillOnce(SaveArg<0>(&done_task2));
|
|
|
| InitReader();
|
| + message_loop_.RunAllPending();
|
|
|
| Mock::VerifyAndClearExpectations(&callback_);
|
| Mock::VerifyAndClearExpectations(&socket_);
|
| @@ -158,10 +175,12 @@ TEST_F(MessageReaderTest, TwoMessages_Together) {
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| done_task1.Run();
|
| + message_loop_.RunAllPending();
|
|
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| done_task2.Run();
|
| + message_loop_.RunAllPending();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
| }
|
| @@ -180,6 +199,7 @@ TEST_F(MessageReaderTest, TwoMessages_Instant) {
|
| .WillOnce(SaveArg<0>(&done_task2));
|
|
|
| InitReader();
|
| + message_loop_.RunAllPending();
|
|
|
| Mock::VerifyAndClearExpectations(&callback_);
|
| Mock::VerifyAndClearExpectations(&socket_);
|
| @@ -207,6 +227,7 @@ TEST_F(MessageReaderTest, TwoMessages_Instant2) {
|
| .WillOnce(CallDoneTask());
|
|
|
| InitReader();
|
| + message_loop_.RunAllPending();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
| }
|
| @@ -222,6 +243,7 @@ TEST_F(MessageReaderTest, TwoMessages_Separately) {
|
| .WillOnce(SaveArg<0>(&done_task));
|
|
|
| InitReader();
|
| + message_loop_.RunAllPending();
|
|
|
| Mock::VerifyAndClearExpectations(&callback_);
|
| Mock::VerifyAndClearExpectations(&socket_);
|
| @@ -233,6 +255,7 @@ TEST_F(MessageReaderTest, TwoMessages_Separately) {
|
| EXPECT_FALSE(socket_.read_pending());
|
|
|
| done_task.Run();
|
| + message_loop_.RunAllPending();
|
|
|
| EXPECT_TRUE(socket_.read_pending());
|
|
|
| @@ -241,6 +264,7 @@ TEST_F(MessageReaderTest, TwoMessages_Separately) {
|
| .Times(1)
|
| .WillOnce(SaveArg<0>(&done_task));
|
| AddMessage(kTestMessage2);
|
| + message_loop_.RunAllPending();
|
|
|
| EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2));
|
|
|
| @@ -266,5 +290,37 @@ TEST_F(MessageReaderTest, ReadError) {
|
| InitReader();
|
| }
|
|
|
| +// Verify that we the OnMessage callback is not reentered.
|
| +TEST_F(MessageReaderTest, ReadFromCallback) {
|
| + AddMessage(kTestMessage1);
|
| +
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| + .Times(2)
|
| + .WillOnce(Invoke(this, &MessageReaderTest::AddSecondMessage))
|
| + .WillOnce(Invoke(this, &MessageReaderTest::OnSecondMessage));
|
| +
|
| + InitReader();
|
| + message_loop_.RunAllPending();
|
| +
|
| + EXPECT_TRUE(socket_.read_pending());
|
| +}
|
| +
|
| +// Verify that we stop getting callbacks after deleting MessageReader.
|
| +TEST_F(MessageReaderTest, DeleteFromCallback) {
|
| + base::Closure done_task1;
|
| + base::Closure done_task2;
|
| +
|
| + AddMessage(kTestMessage1);
|
| + AddMessage(kTestMessage2);
|
| +
|
| + // OnMessage() should never be called for the second message.
|
| + EXPECT_CALL(callback_, OnMessage(_))
|
| + .Times(1)
|
| + .WillOnce(Invoke(this, &MessageReaderTest::DeleteReader));
|
| +
|
| + InitReader();
|
| + message_loop_.RunAllPending();
|
| +}
|
| +
|
| } // namespace protocol
|
| } // namespace remoting
|
|
|