Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: components/cast_channel/cast_socket_service_unittest.cc

Issue 2925053005: [cast_channel] Implement CastSocketService::OpenSocket() (Closed)
Patch Set: implement CastSocketService::OpenSocket() Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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;
12 using testing::SaveArg; 17 using testing::SaveArg;
13 18
14 namespace cast_channel { 19 namespace cast_channel {
15 20
16 class CastSocketServiceTest : public testing::Test { 21 class CastSocketServiceTest : public testing::Test {
17 public: 22 public:
18 CastSocketServiceTest() 23 CastSocketServiceTest()
19 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), 24 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
20 cast_socket_service_(new CastSocketService()) {} 25 cast_socket_service_(new CastSocketService()) {}
21 26
27 int AddSocket(std::unique_ptr<CastSocket> socket) {
28 return cast_socket_service_->AddSocketRecord(
29 std::move(socket), mock_on_open_callback_.Get(),
30 &pass_through_message_handler_);
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<CastSocketService::OnOpenCallback> mock_on_open_callback_;
39 PassThroughMessageHandler pass_through_message_handler_;
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 int channel_id_1 = AddSocket(std::move(socket1));
31
32 int channel_id = cast_socket_service_->AddSocket(std::move(socket1));
33 EXPECT_EQ(channel_id_1, channel_id);
34 EXPECT_NE(0, channel_id_1); 45 EXPECT_NE(0, channel_id_1);
35 46
36 int channel_id_2 = 0;
37 auto socket2 = base::MakeUnique<MockCastSocket>(); 47 auto socket2 = base::MakeUnique<MockCastSocket>();
38 EXPECT_CALL(*socket2, set_id(_)).WillOnce(SaveArg<0>(&channel_id_2)); 48 auto* socket_ptr = socket2.get();
49 int channel_id_2 = AddSocket(std::move(socket2));
50 EXPECT_NE(channel_id_1, channel_id_2);
51 EXPECT_CALL(mock_on_open_callback_,
52 Run(channel_id_2, ChannelError::CONNECT_ERROR));
39 53
40 auto* socket_ptr = socket2.get(); 54 auto removed_socket = cast_socket_service_->RemoveSocket(channel_id_2);
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()); 55 EXPECT_EQ(socket_ptr, removed_socket.get());
47 56
48 int channel_id_3 = 0;
49 auto socket3 = base::MakeUnique<MockCastSocket>(); 57 auto socket3 = base::MakeUnique<MockCastSocket>();
50 EXPECT_CALL(*socket3, set_id(_)).WillOnce(SaveArg<0>(&channel_id_3)); 58 int channel_id_3 = AddSocket(std::move(socket3));
51
52 channel_id = cast_socket_service_->AddSocket(std::move(socket3));
53 EXPECT_EQ(channel_id_3, channel_id);
54 EXPECT_NE(channel_id_1, channel_id_3); 59 EXPECT_NE(channel_id_1, channel_id_3);
55 EXPECT_NE(channel_id_2, channel_id_3); 60 EXPECT_NE(channel_id_2, channel_id_3);
56 } 61 }
57 62
58 TEST_F(CastSocketServiceTest, TestRemoveAndGetSocket) { 63 TEST_F(CastSocketServiceTest, TestRemoveAndGetSocket) {
59 int channel_id = 1; 64 int channel_id = 1;
60 auto* socket_ptr = cast_socket_service_->GetSocket(channel_id); 65 auto* socket_ptr = cast_socket_service_->GetSocket(channel_id);
61 EXPECT_FALSE(socket_ptr); 66 EXPECT_FALSE(socket_ptr);
62 auto socket = cast_socket_service_->RemoveSocket(channel_id); 67 auto socket = cast_socket_service_->RemoveSocket(channel_id);
63 EXPECT_FALSE(socket); 68 EXPECT_FALSE(socket);
64 69
65 auto mock_socket = base::MakeUnique<MockCastSocket>(); 70 auto mock_socket = base::MakeUnique<MockCastSocket>();
66 EXPECT_CALL(*mock_socket, set_id(_));
67 71
68 auto* mock_socket_ptr = mock_socket.get(); 72 auto* mock_socket_ptr = mock_socket.get();
69 channel_id = cast_socket_service_->AddSocket(std::move(mock_socket)); 73 channel_id = AddSocket(std::move(mock_socket));
70 EXPECT_EQ(mock_socket_ptr, cast_socket_service_->GetSocket(channel_id)); 74 EXPECT_EQ(mock_socket_ptr, cast_socket_service_->GetSocket(channel_id));
75 EXPECT_CALL(mock_on_open_callback_,
76 Run(channel_id, ChannelError::CONNECT_ERROR));
77
71 socket = cast_socket_service_->RemoveSocket(channel_id); 78 socket = cast_socket_service_->RemoveSocket(channel_id);
72 EXPECT_TRUE(socket); 79 EXPECT_TRUE(socket);
73 } 80 }
74 81
82 TEST_F(CastSocketServiceTest, TestOpenChannel) {
83 base::Callback<void(ChannelError)> callback;
84 auto socket = base::MakeUnique<MockCastSocket>();
85 EXPECT_CALL(*socket, ConnectRawPtr(_, _)).WillOnce(SaveArg<1>(&callback));
86
87 auto ip_endpoint = CreateIPEndPointForTest();
88 socket->SetIPEndpoint(ip_endpoint);
89 cast_socket_service_->SetSocketForTest(std::move(socket));
90
91 base::MockCallback<CastSocketService::OnOpenCallback> mock_on_open_callback_;
92 int channel_id = cast_socket_service_->OpenSocket(
93 ip_endpoint, nullptr /* net_log */, mock_on_open_callback_.Get());
94
95 EXPECT_CALL(mock_on_open_callback_, Run(channel_id, ChannelError::NONE));
96 callback.Run(ChannelError::NONE);
97 }
98
99 TEST_F(CastSocketServiceTest, TestOpenChannelConnectingSocketExists) {
100 base::Callback<void(ChannelError)> callback;
101 auto socket = base::MakeUnique<MockCastSocket>();
102
103 EXPECT_CALL(*socket, ConnectRawPtr(_, _)).WillOnce(SaveArg<1>(&callback));
104 EXPECT_CALL(*socket, ready_state()).WillOnce(Return(ReadyState::CONNECTING));
105
106 auto ip_endpoint = CreateIPEndPointForTest();
107 socket->SetIPEndpoint(ip_endpoint);
108 cast_socket_service_->SetSocketForTest(std::move(socket));
109
110 base::MockCallback<CastSocketService::OnOpenCallback> mock_on_open_callback_;
111 int channel_id = cast_socket_service_->OpenSocket(
112 ip_endpoint, nullptr /* net_log */, mock_on_open_callback_.Get());
113 // Stores pending OnOpen callback.
114 int second_channel_id = cast_socket_service_->OpenSocket(
115 ip_endpoint, nullptr /* net_log */, mock_on_open_callback_.Get());
116
117 EXPECT_EQ(channel_id, second_channel_id);
118
119 // Invokes all pending callbacks.
120 EXPECT_CALL(mock_on_open_callback_, Run(channel_id, ChannelError::NONE))
121 .Times(2);
122 callback.Run(ChannelError::NONE);
123 }
124
125 TEST_F(CastSocketServiceTest, TestOpenChannelConnectedSocketExists) {
126 auto socket = base::MakeUnique<MockCastSocket>();
127
128 EXPECT_CALL(*socket, ConnectRawPtr(_, _));
129 EXPECT_CALL(*socket, ready_state()).WillOnce(Return(ReadyState::OPEN));
130
131 auto ip_endpoint = CreateIPEndPointForTest();
132 socket->SetIPEndpoint(ip_endpoint);
133 cast_socket_service_->SetSocketForTest(std::move(socket));
134
135 base::MockCallback<CastSocketService::OnOpenCallback> mock_on_open_callback_;
136 int channel_id = cast_socket_service_->OpenSocket(
137 ip_endpoint, nullptr /* net_log */, mock_on_open_callback_.Get());
138
139 // Invokes callback directly.
140 EXPECT_CALL(mock_on_open_callback_, Run(channel_id, ChannelError::NONE));
141 int second_channel_id = cast_socket_service_->OpenSocket(
142 ip_endpoint, nullptr /* net_log */, mock_on_open_callback_.Get());
143
144 EXPECT_EQ(channel_id, second_channel_id);
145 }
146
147 TEST_F(CastSocketServiceTest, TestOpenChannelClosedSocketExists) {
148 auto socket1 = base::MakeUnique<MockCastSocket>();
149
150 EXPECT_CALL(*socket1, ConnectRawPtr(_, _));
151 EXPECT_CALL(*socket1, ready_state()).WillOnce(Return(ReadyState::CLOSED));
152
153 auto ip_endpoint = CreateIPEndPointForTest();
154 socket1->SetIPEndpoint(ip_endpoint);
155 cast_socket_service_->SetSocketForTest(std::move(socket1));
156
157 base::MockCallback<CastSocketService::OnOpenCallback> mock_on_open_callback_;
158 int channel_id = cast_socket_service_->OpenSocket(
159 ip_endpoint, nullptr /* net_log */, mock_on_open_callback_.Get());
160
161 base::Callback<void(ChannelError)> callback2;
162 auto socket2 = base::MakeUnique<MockCastSocket>();
163
164 EXPECT_CALL(*socket2, ConnectRawPtr(_, _));
165 cast_socket_service_->SetSocketForTest(std::move(socket2));
166
167 EXPECT_CALL(mock_on_open_callback_,
168 Run(channel_id, ChannelError::CONNECT_ERROR));
169 // This call will release |socket1|.
170 int second_channel_id = cast_socket_service_->OpenSocket(
171 ip_endpoint, nullptr /* net_log */, mock_on_open_callback_.Get());
172
173 EXPECT_NE(channel_id, second_channel_id);
174 }
175
176 TEST_F(CastSocketServiceTest, TestRegisterDelegate) {
177 EXPECT_FALSE(cast_socket_service_->RegisterDelegate(
178 1, base::MakeUnique<MockCastTransportDelegate>()));
179
180 auto socket = base::MakeUnique<MockCastSocket>();
181 int channel_id = AddSocket(std::move(socket));
182
183 auto* mock_delegate = new MockCastTransportDelegate();
184 EXPECT_TRUE(cast_socket_service_->RegisterDelegate(
185 channel_id, base::WrapUnique(mock_delegate)));
186 EXPECT_EQ(mock_delegate, pass_through_message_handler_.inner_delegate_.get());
187 }
188
75 } // namespace cast_channel 189 } // namespace cast_channel
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698