You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.1 KiB
99 lines
3.1 KiB
// Copyright 2019 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 "cast/common/channel/namespace_router.h"
|
|
|
|
#include <utility>
|
|
|
|
#include "cast/common/channel/cast_message_handler.h"
|
|
#include "cast/common/channel/proto/cast_channel.pb.h"
|
|
#include "cast/common/channel/testing/fake_cast_socket.h"
|
|
#include "cast/common/channel/testing/mock_cast_message_handler.h"
|
|
#include "cast/common/channel/virtual_connection_router.h"
|
|
#include "gmock/gmock.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace openscreen {
|
|
namespace cast {
|
|
namespace {
|
|
|
|
using ::cast::channel::CastMessage;
|
|
using ::testing::_;
|
|
using ::testing::Invoke;
|
|
|
|
class NamespaceRouterTest : public ::testing::Test {
|
|
public:
|
|
protected:
|
|
CastSocket* socket() { return &fake_socket_.socket; }
|
|
|
|
FakeCastSocket fake_socket_;
|
|
VirtualConnectionRouter vc_router_;
|
|
NamespaceRouter router_;
|
|
};
|
|
|
|
} // namespace
|
|
|
|
TEST_F(NamespaceRouterTest, NoHandlersNoop) {
|
|
CastMessage message;
|
|
message.set_namespace_("anzrfcnpr");
|
|
router_.OnMessage(&vc_router_, socket(), std::move(message));
|
|
}
|
|
|
|
TEST_F(NamespaceRouterTest, MultipleHandlers) {
|
|
MockCastMessageHandler media_handler;
|
|
MockCastMessageHandler auth_handler;
|
|
MockCastMessageHandler connection_handler;
|
|
|
|
router_.AddNamespaceHandler("media", &media_handler);
|
|
router_.AddNamespaceHandler("auth", &auth_handler);
|
|
router_.AddNamespaceHandler("connection", &connection_handler);
|
|
|
|
EXPECT_CALL(media_handler, OnMessage(_, _, _)).Times(0);
|
|
EXPECT_CALL(auth_handler, OnMessage(_, _, _))
|
|
.WillOnce(Invoke([](VirtualConnectionRouter* router, CastSocket*,
|
|
CastMessage message) {
|
|
EXPECT_EQ(message.namespace_(), "auth");
|
|
}));
|
|
EXPECT_CALL(connection_handler, OnMessage(_, _, _))
|
|
.WillOnce(Invoke([](VirtualConnectionRouter* router, CastSocket*,
|
|
CastMessage message) {
|
|
EXPECT_EQ(message.namespace_(), "connection");
|
|
}));
|
|
|
|
CastMessage auth_message;
|
|
auth_message.set_namespace_("auth");
|
|
router_.OnMessage(&vc_router_, socket(), std::move(auth_message));
|
|
|
|
CastMessage connection_message;
|
|
connection_message.set_namespace_("connection");
|
|
router_.OnMessage(&vc_router_, socket(), std::move(connection_message));
|
|
}
|
|
|
|
TEST_F(NamespaceRouterTest, RemoveHandler) {
|
|
MockCastMessageHandler handler1;
|
|
MockCastMessageHandler handler2;
|
|
|
|
router_.AddNamespaceHandler("one", &handler1);
|
|
router_.AddNamespaceHandler("two", &handler2);
|
|
|
|
router_.RemoveNamespaceHandler("one");
|
|
|
|
EXPECT_CALL(handler1, OnMessage(_, _, _)).Times(0);
|
|
EXPECT_CALL(handler2, OnMessage(_, _, _))
|
|
.WillOnce(Invoke(
|
|
[](VirtualConnectionRouter* router, CastSocket* socket,
|
|
CastMessage message) { EXPECT_EQ("two", message.namespace_()); }));
|
|
|
|
CastMessage message1;
|
|
message1.set_namespace_("one");
|
|
router_.OnMessage(&vc_router_, socket(), std::move(message1));
|
|
|
|
CastMessage message2;
|
|
message2.set_namespace_("two");
|
|
router_.OnMessage(&vc_router_, socket(), std::move(message2));
|
|
}
|
|
|
|
} // namespace cast
|
|
} // namespace openscreen
|