OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/cast_channel/cast_socket_service.h" | 5 #include "components/cast_channel/cast_socket_service.h" |
| 6 #include "base/test/mock_callback.h" |
6 #include "components/cast_channel/cast_test_util.h" | 7 #include "components/cast_channel/cast_test_util.h" |
7 #include "content/public/test/test_browser_thread_bundle.h" | 8 #include "content/public/test/test_browser_thread_bundle.h" |
8 | 9 |
| 10 #include "testing/gmock/include/gmock/gmock.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
10 | 12 |
11 using testing::_; | 13 using testing::_; |
| 14 using testing::DoAll; |
| 15 using testing::Invoke; |
| 16 using testing::Return; |
| 17 using testing::ReturnRef; |
12 using testing::SaveArg; | 18 using testing::SaveArg; |
| 19 using testing::WithArgs; |
13 | 20 |
14 namespace cast_channel { | 21 namespace cast_channel { |
15 | 22 |
16 class CastSocketServiceTest : public testing::Test { | 23 class CastSocketServiceTest : public testing::Test { |
17 public: | 24 public: |
18 CastSocketServiceTest() | 25 CastSocketServiceTest() |
19 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 26 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
20 cast_socket_service_(new CastSocketService()) {} | 27 cast_socket_service_(new CastSocketService()) {} |
21 | 28 |
| 29 CastSocket* AddSocket(std::unique_ptr<CastSocket> socket) { |
| 30 return cast_socket_service_->AddSocket(std::move(socket)); |
| 31 } |
| 32 |
| 33 void TearDown() override { cast_socket_service_ = nullptr; } |
| 34 |
22 protected: | 35 protected: |
23 content::TestBrowserThreadBundle thread_bundle_; | 36 content::TestBrowserThreadBundle thread_bundle_; |
24 scoped_refptr<CastSocketService> cast_socket_service_; | 37 scoped_refptr<CastSocketService> cast_socket_service_; |
| 38 base::MockCallback<CastSocket::OnOpenCallback> mock_on_open_callback_; |
| 39 MockCastSocketObserver mock_observer_; |
25 }; | 40 }; |
26 | 41 |
27 TEST_F(CastSocketServiceTest, TestAddSocket) { | 42 TEST_F(CastSocketServiceTest, TestAddSocket) { |
28 int channel_id_1 = 0; | |
29 auto socket1 = base::MakeUnique<MockCastSocket>(); | 43 auto socket1 = base::MakeUnique<MockCastSocket>(); |
30 EXPECT_CALL(*socket1, set_id(_)).WillOnce(SaveArg<0>(&channel_id_1)); | 44 auto* socket_ptr1 = AddSocket(std::move(socket1)); |
| 45 EXPECT_NE(0, socket_ptr1->id()); |
31 | 46 |
32 int channel_id = cast_socket_service_->AddSocket(std::move(socket1)); | 47 auto socket2 = base::MakeUnique<MockCastSocket>(); |
33 EXPECT_EQ(channel_id_1, channel_id); | 48 auto* socket_ptr2 = AddSocket(std::move(socket2)); |
34 EXPECT_NE(0, channel_id_1); | 49 EXPECT_NE(socket_ptr1->id(), socket_ptr2->id()); |
35 | 50 |
36 int channel_id_2 = 0; | 51 auto removed_socket = cast_socket_service_->RemoveSocket(socket_ptr2->id()); |
37 auto socket2 = base::MakeUnique<MockCastSocket>(); | 52 EXPECT_EQ(socket_ptr2, removed_socket.get()); |
38 EXPECT_CALL(*socket2, set_id(_)).WillOnce(SaveArg<0>(&channel_id_2)); | |
39 | 53 |
40 auto* socket_ptr = socket2.get(); | |
41 channel_id = cast_socket_service_->AddSocket(std::move(socket2)); | |
42 EXPECT_EQ(channel_id_2, channel_id); | |
43 EXPECT_NE(channel_id_1, channel_id_2); | |
44 | |
45 auto removed_socket = cast_socket_service_->RemoveSocket(channel_id); | |
46 EXPECT_EQ(socket_ptr, removed_socket.get()); | |
47 | |
48 int channel_id_3 = 0; | |
49 auto socket3 = base::MakeUnique<MockCastSocket>(); | 54 auto socket3 = base::MakeUnique<MockCastSocket>(); |
50 EXPECT_CALL(*socket3, set_id(_)).WillOnce(SaveArg<0>(&channel_id_3)); | 55 auto* socket_ptr3 = AddSocket(std::move(socket3)); |
51 | 56 EXPECT_NE(socket_ptr1->id(), socket_ptr3->id()); |
52 channel_id = cast_socket_service_->AddSocket(std::move(socket3)); | 57 EXPECT_NE(socket_ptr2->id(), socket_ptr3->id()); |
53 EXPECT_EQ(channel_id_3, channel_id); | |
54 EXPECT_NE(channel_id_1, channel_id_3); | |
55 EXPECT_NE(channel_id_2, channel_id_3); | |
56 } | 58 } |
57 | 59 |
58 TEST_F(CastSocketServiceTest, TestRemoveAndGetSocket) { | 60 TEST_F(CastSocketServiceTest, TestRemoveAndGetSocket) { |
59 int channel_id = 1; | 61 int channel_id = 1; |
60 auto* socket_ptr = cast_socket_service_->GetSocket(channel_id); | 62 auto* socket_ptr = cast_socket_service_->GetSocket(channel_id); |
61 EXPECT_FALSE(socket_ptr); | 63 EXPECT_FALSE(socket_ptr); |
62 auto socket = cast_socket_service_->RemoveSocket(channel_id); | 64 auto socket = cast_socket_service_->RemoveSocket(channel_id); |
63 EXPECT_FALSE(socket); | 65 EXPECT_FALSE(socket); |
64 | 66 |
65 auto mock_socket = base::MakeUnique<MockCastSocket>(); | 67 auto mock_socket = base::MakeUnique<MockCastSocket>(); |
66 EXPECT_CALL(*mock_socket, set_id(_)); | |
67 | 68 |
68 auto* mock_socket_ptr = mock_socket.get(); | 69 auto* mock_socket_ptr = AddSocket(std::move(mock_socket)); |
69 channel_id = cast_socket_service_->AddSocket(std::move(mock_socket)); | 70 channel_id = mock_socket_ptr->id(); |
70 EXPECT_EQ(mock_socket_ptr, cast_socket_service_->GetSocket(channel_id)); | 71 EXPECT_EQ(mock_socket_ptr, cast_socket_service_->GetSocket(channel_id)); |
| 72 |
71 socket = cast_socket_service_->RemoveSocket(channel_id); | 73 socket = cast_socket_service_->RemoveSocket(channel_id); |
72 EXPECT_TRUE(socket); | 74 EXPECT_TRUE(socket); |
73 } | 75 } |
74 | 76 |
| 77 TEST_F(CastSocketServiceTest, TestOpenChannel) { |
| 78 auto* mock_socket = new MockCastSocket(); |
| 79 auto ip_endpoint = CreateIPEndPointForTest(); |
| 80 mock_socket->SetIPEndpoint(ip_endpoint); |
| 81 cast_socket_service_->SetSocketForTest(base::WrapUnique(mock_socket)); |
| 82 |
| 83 EXPECT_CALL(*mock_socket, Connect(_)) |
| 84 .WillOnce( |
| 85 WithArgs<0>(Invoke([&](const CastSocket::OnOpenCallback& callback) { |
| 86 callback.Run(mock_socket->id(), ChannelError::NONE); |
| 87 }))); |
| 88 EXPECT_CALL(mock_on_open_callback_, Run(_, ChannelError::NONE)); |
| 89 EXPECT_CALL(*mock_socket, AddObserver(_)); |
| 90 |
| 91 cast_socket_service_->OpenSocket(ip_endpoint, nullptr /* net_log */, |
| 92 mock_on_open_callback_.Get(), |
| 93 &mock_observer_); |
| 94 } |
| 95 |
75 } // namespace cast_channel | 96 } // namespace cast_channel |
OLD | NEW |