Index: remoting/protocol/data_channel_manager_unittest.cc |
diff --git a/remoting/protocol/data_channel_manager_unittest.cc b/remoting/protocol/data_channel_manager_unittest.cc |
deleted file mode 100644 |
index 52fdfc5f44102df246b51da6eaea5ebaa0818ec9..0000000000000000000000000000000000000000 |
--- a/remoting/protocol/data_channel_manager_unittest.cc |
+++ /dev/null |
@@ -1,267 +0,0 @@ |
-// Copyright 2017 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 "remoting/protocol/data_channel_manager.h" |
- |
-#include <map> |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/run_loop.h" |
-#include "remoting/base/compound_buffer.h" |
-#include "remoting/proto/test.pb.h" |
-#include "remoting/protocol/fake_message_pipe.h" |
-#include "remoting/protocol/fake_message_pipe_wrapper.h" |
-#include "remoting/protocol/named_message_pipe_handler.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace remoting { |
-namespace protocol { |
- |
-namespace { |
- |
-class FakeNamedMessagePipeHandler final : public NamedMessagePipeHandler { |
- public: |
- FakeNamedMessagePipeHandler(const std::string& name, |
- std::unique_ptr<MessagePipe> pipe, |
- const std::string& expected_data) |
- : NamedMessagePipeHandler(name, std::move(pipe)), |
- expected_data_(expected_data) { |
- handlers_[name] = this; |
- } |
- |
- int received_message_count() const { return received_message_count_; } |
- |
- static FakeNamedMessagePipeHandler* Find(const std::string& name); |
- |
- static int instance_count() { return handlers_.size(); } |
- |
- // NamedMessagePipeHandler implementation. |
- void OnIncomingMessage(std::unique_ptr<CompoundBuffer> message) override; |
- |
- // Public functions for test cases. |
- void Close() { NamedMessagePipeHandler::Close(); } |
- |
- bool connected() const { return NamedMessagePipeHandler::connected(); } |
- |
- void Send(google::protobuf::MessageLite* message, |
- const base::Closure& done); |
- |
- protected: |
- ~FakeNamedMessagePipeHandler() override { |
- EXPECT_EQ(handlers_.erase(pipe_name()), 1U); |
- } |
- |
- private: |
- static std::map<std::string, FakeNamedMessagePipeHandler*> handlers_; |
- |
- const std::string expected_data_; |
- int received_message_count_ = 0; |
-}; |
- |
-void FakeNamedMessagePipeHandler::OnIncomingMessage( |
- std::unique_ptr<CompoundBuffer> message) { |
- ASSERT_TRUE(message != nullptr); |
- std::string content; |
- content.resize(expected_data_.size()); |
- message->CopyTo(&(content[0]), content.size()); |
- ASSERT_EQ(content, expected_data_); |
- received_message_count_++; |
-} |
- |
-// static |
-FakeNamedMessagePipeHandler* FakeNamedMessagePipeHandler::Find( |
- const std::string& name) { |
- auto it = handlers_.find(name); |
- if (it == handlers_.end()) { |
- return nullptr; |
- } |
- return it->second; |
-} |
- |
-void FakeNamedMessagePipeHandler::Send(google::protobuf::MessageLite* message, |
- const base::Closure& done) { |
- if (connected()) { |
- NamedMessagePipeHandler::Send(message, done); |
- return; |
- } |
-#if DCHECK_IS_ON() |
- ASSERT_DEATH_IF_SUPPORTED( |
- NamedMessagePipeHandler::Send(message, done), |
- "connected"); |
-#else |
- NamedMessagePipeHandler::Send(message, done); |
-#endif |
-} |
- |
-// static |
-std::map<std::string, FakeNamedMessagePipeHandler*> |
-FakeNamedMessagePipeHandler::handlers_; |
- |
-void TestDataChannelManagerFullMatch(bool asynchronous) { |
- base::MessageLoop message_loop; |
- DataChannelManager manager; |
- manager.RegisterCreateHandlerCallback("FullMatch", base::Bind( |
- [](const std::string& expected_data, |
- const std::string& name, |
- std::unique_ptr<MessagePipe> pipe) -> void { |
- new FakeNamedMessagePipeHandler(name, std::move(pipe), expected_data); |
- }, |
- "FullMatchContent")); |
- manager.RegisterCreateHandlerCallback("AnotherFullMatch", base::Bind( |
- [](const std::string& expected_data, |
- const std::string& name, |
- std::unique_ptr<MessagePipe> pipe) -> void { |
- new FakeNamedMessagePipeHandler(name, std::move(pipe), expected_data); |
- }, |
- "AnotherFullMatchContent")); |
- |
- FakeMessagePipe pipe1(asynchronous); |
- FakeMessagePipe pipe2(asynchronous); |
- ASSERT_TRUE(manager.OnIncomingDataChannel("FullMatch", pipe1.Wrap())); |
- ASSERT_TRUE(manager.OnIncomingDataChannel("AnotherFullMatch", pipe2.Wrap())); |
- base::RunLoop().RunUntilIdle(); |
- |
- FakeNamedMessagePipeHandler* handler1 = |
- FakeNamedMessagePipeHandler::Find("FullMatch"); |
- FakeNamedMessagePipeHandler* handler2 = |
- FakeNamedMessagePipeHandler::Find("AnotherFullMatch"); |
- ASSERT_TRUE(handler1 != nullptr); |
- ASSERT_TRUE(handler2 != nullptr); |
- |
- pipe1.OpenPipe(); |
- base::RunLoop().RunUntilIdle(); |
- { |
- DataChannelManagerTestProto message; |
- int sent = 0; |
- base::Closure sent_callback = base::Bind([](int* sent) { |
- (*sent)++; |
- }, |
- base::Unretained(&sent)); |
- ASSERT_TRUE(handler1->connected()); |
- handler1->Send(&message, sent_callback); |
- ASSERT_FALSE(handler2->connected()); |
- handler2->Send(&message, sent_callback); |
- |
- base::RunLoop().RunUntilIdle(); |
- ASSERT_EQ(sent, 1); |
- } |
- |
- pipe2.OpenPipe(); |
- base::RunLoop().RunUntilIdle(); |
- { |
- DataChannelManagerTestProto message; |
- int sent = 0; |
- base::Closure sent_callback = base::Bind([](int* sent) { |
- (*sent)++; |
- }, |
- base::Unretained(&sent)); |
- ASSERT_TRUE(handler2->connected()); |
- |
- handler1->Send(&message, sent_callback); |
- handler2->Send(&message, sent_callback); |
- |
- base::RunLoop().RunUntilIdle(); |
- ASSERT_EQ(sent, 2); |
- } |
- |
- { |
- std::string content; |
- auto message = base::MakeUnique<CompoundBuffer>(); |
- content = "FullMatchContent"; |
- message->AppendCopyOf(&(content[0]), content.size()); |
- pipe1.Receive(std::move(message)); |
- |
- message = base::MakeUnique<CompoundBuffer>(); |
- content = "AnotherFullMatchContent"; |
- message->AppendCopyOf(&(content[0]), content.size()); |
- pipe2.Receive(std::move(message)); |
- |
- base::RunLoop().RunUntilIdle(); |
- ASSERT_EQ(handler1->received_message_count(), 1); |
- ASSERT_EQ(handler2->received_message_count(), 1); |
- } |
- |
- pipe2.ClosePipe(); |
- if (asynchronous) { |
- base::RunLoop().RunUntilIdle(); |
- } |
- ASSERT_TRUE(FakeNamedMessagePipeHandler::Find("AnotherFullMatch") == nullptr); |
- |
- handler1->Close(); |
- ASSERT_TRUE(FakeNamedMessagePipeHandler::Find("FullMatch") == nullptr); |
- |
- ASSERT_EQ(FakeNamedMessagePipeHandler::instance_count(), 0); |
-} |
- |
-void TestDataChannelManagerMultipleRegistrations(bool asynchronous) { |
- base::MessageLoop message_loop; |
- DataChannelManager manager; |
- manager.RegisterCreateHandlerCallback("FullMatch", base::Bind( |
- [](const std::string& expected_data, |
- const std::string& name, |
- std::unique_ptr<MessagePipe> pipe) -> void { |
- new FakeNamedMessagePipeHandler(name, std::move(pipe), expected_data); |
- }, |
- "FullMatchContent")); |
- manager.RegisterCreateHandlerCallback("Prefix-", base::Bind( |
- [](const std::string& expected_data, |
- const std::string& name, |
- std::unique_ptr<MessagePipe> pipe) -> void { |
- new FakeNamedMessagePipeHandler(name, std::move(pipe), expected_data); |
- }, |
- "PrefixMatchContent")); |
- |
- FakeMessagePipe pipe1(asynchronous); |
- FakeMessagePipe pipe2(asynchronous); |
- FakeMessagePipe pipe3(asynchronous); |
- FakeMessagePipe pipe4(asynchronous); |
- ASSERT_TRUE(manager.OnIncomingDataChannel("Prefix-1", pipe1.Wrap())); |
- ASSERT_TRUE(manager.OnIncomingDataChannel("Prefix-2", pipe2.Wrap())); |
- ASSERT_FALSE(manager.OnIncomingDataChannel( |
- "PrefixShouldNotMatch", pipe3.Wrap())); |
- ASSERT_TRUE(manager.OnIncomingDataChannel("FullMatch", pipe4.Wrap())); |
- base::RunLoop().RunUntilIdle(); |
- |
- FakeNamedMessagePipeHandler* handler1 = |
- FakeNamedMessagePipeHandler::Find("Prefix-1"); |
- FakeNamedMessagePipeHandler* handler2 = |
- FakeNamedMessagePipeHandler::Find("Prefix-2"); |
- FakeNamedMessagePipeHandler* handler3 = |
- FakeNamedMessagePipeHandler::Find("PrefixShouldNotMatch"); |
- FakeNamedMessagePipeHandler* handler4 = |
- FakeNamedMessagePipeHandler::Find("FullMatch"); |
- ASSERT_TRUE(handler1 != nullptr); |
- ASSERT_TRUE(handler2 != nullptr); |
- ASSERT_TRUE(handler3 == nullptr); |
- ASSERT_TRUE(handler4 != nullptr); |
- |
- handler1->Close(); |
- handler2->Close(); |
- handler4->Close(); |
- base::RunLoop().RunUntilIdle(); |
-} |
- |
-} // namespace |
- |
-TEST(DataChannelManagerTest, FullMatchWithSynchronousPipe) { |
- TestDataChannelManagerFullMatch(false); |
-} |
- |
-TEST(DataChannelManagerTest, FullMatchWithAsynchronousPipe) { |
- TestDataChannelManagerFullMatch(true); |
-} |
- |
-TEST(DataChannelManagerTest, MultipleRegistrationsWithSynchronousPipe) { |
- TestDataChannelManagerMultipleRegistrations(false); |
-} |
- |
-TEST(DataChannelManagerTest, MultipleRegistrationsWithAsynchronousPipe) { |
- TestDataChannelManagerMultipleRegistrations(true); |
-} |
- |
-} // namespace protocol |
-} // namespace remoting |