| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "blimp/net/blimp_message_demultiplexer.h" |
| |
| #include "base/logging.h" |
| #include "blimp/net/test_common.h" |
| #include "net/base/net_errors.h" |
| #include "net/base/test_completion_callback.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| using testing::_; |
| using testing::InvokeArgument; |
| using testing::Ref; |
| using testing::Return; |
| using testing::SaveArg; |
| |
| namespace blimp { |
| |
| class BlimpMessageDemultiplexerTest : public testing::Test { |
| public: |
| BlimpMessageDemultiplexerTest() |
| : input_msg_(new BlimpMessage), compositor_msg_(new BlimpMessage) {} |
| |
| void SetUp() override { |
| demux_.AddProcessor(BlimpMessage::INPUT, &receiver1_); |
| demux_.AddProcessor(BlimpMessage::COMPOSITOR, &receiver2_); |
| input_msg_->set_type(BlimpMessage::INPUT); |
| compositor_msg_->set_type(BlimpMessage::COMPOSITOR); |
| } |
| |
| protected: |
| std::unique_ptr<BlimpMessage> input_msg_; |
| std::unique_ptr<BlimpMessage> compositor_msg_; |
| MockBlimpMessageProcessor receiver1_; |
| MockBlimpMessageProcessor receiver2_; |
| net::CompletionCallback captured_cb_; |
| BlimpMessageDemultiplexer demux_; |
| }; |
| |
| TEST_F(BlimpMessageDemultiplexerTest, ProcessMessageOK) { |
| EXPECT_CALL(receiver1_, MockableProcessMessage(Ref(*input_msg_), _)) |
| .WillOnce(SaveArg<1>(&captured_cb_)); |
| net::TestCompletionCallback cb; |
| demux_.ProcessMessage(std::move(input_msg_), cb.callback()); |
| captured_cb_.Run(net::OK); |
| EXPECT_EQ(net::OK, cb.WaitForResult()); |
| } |
| |
| TEST_F(BlimpMessageDemultiplexerTest, ProcessMessageFailed) { |
| EXPECT_CALL(receiver2_, MockableProcessMessage(Ref(*compositor_msg_), _)) |
| .WillOnce(SaveArg<1>(&captured_cb_)); |
| net::TestCompletionCallback cb2; |
| demux_.ProcessMessage(std::move(compositor_msg_), cb2.callback()); |
| captured_cb_.Run(net::ERR_FAILED); |
| EXPECT_EQ(net::ERR_FAILED, cb2.WaitForResult()); |
| } |
| |
| TEST_F(BlimpMessageDemultiplexerTest, ProcessMessageNoRegisteredHandler) { |
| net::TestCompletionCallback cb; |
| std::unique_ptr<BlimpMessage> unknown_message(new BlimpMessage); |
| unknown_message->set_type(BlimpMessage::UNKNOWN); |
| demux_.ProcessMessage(std::move(unknown_message), cb.callback()); |
| EXPECT_EQ(net::ERR_NOT_IMPLEMENTED, cb.WaitForResult()); |
| } |
| |
| } // namespace blimp |