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

Side by Side Diff: remoting/protocol/channel_multiplexer_unittest.cc

Issue 1536713005: Cleanup ChannelMultiplexer tests to avoid dependency on FakeSession. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@connection_tests
Patch Set: Created 5 years 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
« no previous file with comments | « no previous file | remoting/protocol/fake_stream_socket.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "remoting/protocol/channel_multiplexer.h" 5 #include "remoting/protocol/channel_multiplexer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
11 #include "net/socket/socket.h" 11 #include "net/socket/socket.h"
12 #include "net/socket/stream_socket.h" 12 #include "net/socket/stream_socket.h"
13 #include "remoting/base/constants.h" 13 #include "remoting/base/constants.h"
14 #include "remoting/protocol/connection_tester.h" 14 #include "remoting/protocol/connection_tester.h"
15 #include "remoting/protocol/fake_session.h" 15 #include "remoting/protocol/fake_stream_socket.h"
16 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 using testing::_; 19 using testing::_;
20 using testing::AtMost; 20 using testing::AtMost;
21 using testing::InvokeWithoutArgs; 21 using testing::InvokeWithoutArgs;
22 22
23 namespace remoting { 23 namespace remoting {
24 namespace protocol { 24 namespace protocol {
25 25
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 client_mux_.reset(); 64 client_mux_.reset();
65 } 65 }
66 66
67 void DeleteAfterSessionFail() { 67 void DeleteAfterSessionFail() {
68 host_mux_->CancelChannelCreation(kTestChannelName2); 68 host_mux_->CancelChannelCreation(kTestChannelName2);
69 DeleteAll(); 69 DeleteAll();
70 } 70 }
71 71
72 protected: 72 protected:
73 void SetUp() override { 73 void SetUp() override {
74 host_channel_factory_.PairWith(&client_channel_factory_);
75
74 // Create pair of multiplexers and connect them to each other. 76 // Create pair of multiplexers and connect them to each other.
75 host_mux_.reset(new ChannelMultiplexer( 77 host_mux_.reset(
76 host_session_.GetTransport()->GetStreamChannelFactory(), 78 new ChannelMultiplexer(&host_channel_factory_, kMuxChannelName));
77 kMuxChannelName)); 79 client_mux_.reset(
78 client_mux_.reset(new ChannelMultiplexer( 80 new ChannelMultiplexer(&client_channel_factory_, kMuxChannelName));
79 client_session_.GetTransport()->GetStreamChannelFactory(),
80 kMuxChannelName));
81 }
82 81
83 // Connect sockets to each other. Must be called after we've created at least 82 // Make writes asynchronous in one direction
84 // one channel with each multiplexer. 83 host_channel_factory_.set_async_write(true);
85 void ConnectSockets() {
86 FakeStreamSocket* host_socket =
87 host_session_.GetTransport()
88 ->GetStreamChannelFactory()
89 ->GetFakeChannel(ChannelMultiplexer::kMuxChannelName);
90 FakeStreamSocket* client_socket =
91 client_session_.GetTransport()
92 ->GetStreamChannelFactory()
93 ->GetFakeChannel(ChannelMultiplexer::kMuxChannelName);
94 host_socket->PairWith(client_socket);
95
96 // Make writes asynchronous in one direction.
97 host_socket->set_async_write(true);
98 } 84 }
99 85
100 void CreateChannel(const std::string& name, 86 void CreateChannel(const std::string& name,
101 scoped_ptr<P2PStreamSocket>* host_socket, 87 scoped_ptr<P2PStreamSocket>* host_socket,
102 scoped_ptr<P2PStreamSocket>* client_socket) { 88 scoped_ptr<P2PStreamSocket>* client_socket) {
103 int counter = 2; 89 int counter = 2;
104 host_mux_->CreateChannel(name, base::Bind( 90 host_mux_->CreateChannel(name, base::Bind(
105 &ChannelMultiplexerTest::OnChannelConnected, base::Unretained(this), 91 &ChannelMultiplexerTest::OnChannelConnected, base::Unretained(this),
106 host_socket, &counter)); 92 host_socket, &counter));
107 client_mux_->CreateChannel(name, base::Bind( 93 client_mux_->CreateChannel(name, base::Bind(
(...skipping 21 matching lines...) Expand all
129 scoped_refptr<net::IOBufferWithSize> result = 115 scoped_refptr<net::IOBufferWithSize> result =
130 new net::IOBufferWithSize(size); 116 new net::IOBufferWithSize(size);
131 for (int i = 0; i< size; ++i) { 117 for (int i = 0; i< size; ++i) {
132 result->data()[i] = rand() % 256; 118 result->data()[i] = rand() % 256;
133 } 119 }
134 return result; 120 return result;
135 } 121 }
136 122
137 base::MessageLoop message_loop_; 123 base::MessageLoop message_loop_;
138 124
139 FakeSession host_session_; 125 FakeStreamChannelFactory host_channel_factory_;
140 FakeSession client_session_; 126 FakeStreamChannelFactory client_channel_factory_;
141 127
142 scoped_ptr<ChannelMultiplexer> host_mux_; 128 scoped_ptr<ChannelMultiplexer> host_mux_;
143 scoped_ptr<ChannelMultiplexer> client_mux_; 129 scoped_ptr<ChannelMultiplexer> client_mux_;
144 130
145 scoped_ptr<P2PStreamSocket> host_socket1_; 131 scoped_ptr<P2PStreamSocket> host_socket1_;
146 scoped_ptr<P2PStreamSocket> client_socket1_; 132 scoped_ptr<P2PStreamSocket> client_socket1_;
147 scoped_ptr<P2PStreamSocket> host_socket2_; 133 scoped_ptr<P2PStreamSocket> host_socket2_;
148 scoped_ptr<P2PStreamSocket> client_socket2_; 134 scoped_ptr<P2PStreamSocket> client_socket2_;
149 }; 135 };
150 136
151 137
152 TEST_F(ChannelMultiplexerTest, OneChannel) { 138 TEST_F(ChannelMultiplexerTest, OneChannel) {
153 scoped_ptr<P2PStreamSocket> host_socket; 139 scoped_ptr<P2PStreamSocket> host_socket;
154 scoped_ptr<P2PStreamSocket> client_socket; 140 scoped_ptr<P2PStreamSocket> client_socket;
155 ASSERT_NO_FATAL_FAILURE( 141 ASSERT_NO_FATAL_FAILURE(
156 CreateChannel(kTestChannelName, &host_socket, &client_socket)); 142 CreateChannel(kTestChannelName, &host_socket, &client_socket));
157 143
158 ConnectSockets();
159
160 StreamConnectionTester tester(host_socket.get(), client_socket.get(), 144 StreamConnectionTester tester(host_socket.get(), client_socket.get(),
161 kMessageSize, kMessages); 145 kMessageSize, kMessages);
162 tester.Start(); 146 tester.Start();
163 message_loop_.Run(); 147 message_loop_.Run();
164 tester.CheckResults(); 148 tester.CheckResults();
165 } 149 }
166 150
167 TEST_F(ChannelMultiplexerTest, TwoChannels) { 151 TEST_F(ChannelMultiplexerTest, TwoChannels) {
168 scoped_ptr<P2PStreamSocket> host_socket1_; 152 scoped_ptr<P2PStreamSocket> host_socket1_;
169 scoped_ptr<P2PStreamSocket> client_socket1_; 153 scoped_ptr<P2PStreamSocket> client_socket1_;
170 ASSERT_NO_FATAL_FAILURE( 154 ASSERT_NO_FATAL_FAILURE(
171 CreateChannel(kTestChannelName, &host_socket1_, &client_socket1_)); 155 CreateChannel(kTestChannelName, &host_socket1_, &client_socket1_));
172 156
173 scoped_ptr<P2PStreamSocket> host_socket2_; 157 scoped_ptr<P2PStreamSocket> host_socket2_;
174 scoped_ptr<P2PStreamSocket> client_socket2_; 158 scoped_ptr<P2PStreamSocket> client_socket2_;
175 ASSERT_NO_FATAL_FAILURE( 159 ASSERT_NO_FATAL_FAILURE(
176 CreateChannel(kTestChannelName2, &host_socket2_, &client_socket2_)); 160 CreateChannel(kTestChannelName2, &host_socket2_, &client_socket2_));
177 161
178 ConnectSockets();
179
180 StreamConnectionTester tester1(host_socket1_.get(), client_socket1_.get(), 162 StreamConnectionTester tester1(host_socket1_.get(), client_socket1_.get(),
181 kMessageSize, kMessages); 163 kMessageSize, kMessages);
182 StreamConnectionTester tester2(host_socket2_.get(), client_socket2_.get(), 164 StreamConnectionTester tester2(host_socket2_.get(), client_socket2_.get(),
183 kMessageSize, kMessages); 165 kMessageSize, kMessages);
184 tester1.Start(); 166 tester1.Start();
185 tester2.Start(); 167 tester2.Start();
186 while (!tester1.done() || !tester2.done()) { 168 while (!tester1.done() || !tester2.done()) {
187 message_loop_.Run(); 169 message_loop_.Run();
188 } 170 }
189 tester1.CheckResults(); 171 tester1.CheckResults();
(...skipping 15 matching lines...) Expand all
205 scoped_ptr<P2PStreamSocket> host_socket3; 187 scoped_ptr<P2PStreamSocket> host_socket3;
206 scoped_ptr<P2PStreamSocket> client_socket3; 188 scoped_ptr<P2PStreamSocket> client_socket3;
207 ASSERT_NO_FATAL_FAILURE( 189 ASSERT_NO_FATAL_FAILURE(
208 CreateChannel("test3", &host_socket3, &client_socket3)); 190 CreateChannel("test3", &host_socket3, &client_socket3));
209 191
210 scoped_ptr<P2PStreamSocket> host_socket4; 192 scoped_ptr<P2PStreamSocket> host_socket4;
211 scoped_ptr<P2PStreamSocket> client_socket4; 193 scoped_ptr<P2PStreamSocket> client_socket4;
212 ASSERT_NO_FATAL_FAILURE( 194 ASSERT_NO_FATAL_FAILURE(
213 CreateChannel("ch4", &host_socket4, &client_socket4)); 195 CreateChannel("ch4", &host_socket4, &client_socket4));
214 196
215 ConnectSockets();
216
217 StreamConnectionTester tester1(host_socket1_.get(), client_socket1_.get(), 197 StreamConnectionTester tester1(host_socket1_.get(), client_socket1_.get(),
218 kMessageSize, kMessages); 198 kMessageSize, kMessages);
219 StreamConnectionTester tester2(host_socket2_.get(), client_socket2_.get(), 199 StreamConnectionTester tester2(host_socket2_.get(), client_socket2_.get(),
220 kMessageSize, kMessages); 200 kMessageSize, kMessages);
221 StreamConnectionTester tester3(client_socket3.get(), host_socket3.get(), 201 StreamConnectionTester tester3(client_socket3.get(), host_socket3.get(),
222 kMessageSize, kMessages); 202 kMessageSize, kMessages);
223 StreamConnectionTester tester4(client_socket4.get(), host_socket4.get(), 203 StreamConnectionTester tester4(client_socket4.get(), host_socket4.get(),
224 kMessageSize, kMessages); 204 kMessageSize, kMessages);
225 tester1.Start(); 205 tester1.Start();
226 tester2.Start(); 206 tester2.Start();
(...skipping 13 matching lines...) Expand all
240 scoped_ptr<P2PStreamSocket> host_socket1_; 220 scoped_ptr<P2PStreamSocket> host_socket1_;
241 scoped_ptr<P2PStreamSocket> client_socket1_; 221 scoped_ptr<P2PStreamSocket> client_socket1_;
242 ASSERT_NO_FATAL_FAILURE( 222 ASSERT_NO_FATAL_FAILURE(
243 CreateChannel(kTestChannelName, &host_socket1_, &client_socket1_)); 223 CreateChannel(kTestChannelName, &host_socket1_, &client_socket1_));
244 224
245 scoped_ptr<P2PStreamSocket> host_socket2_; 225 scoped_ptr<P2PStreamSocket> host_socket2_;
246 scoped_ptr<P2PStreamSocket> client_socket2_; 226 scoped_ptr<P2PStreamSocket> client_socket2_;
247 ASSERT_NO_FATAL_FAILURE( 227 ASSERT_NO_FATAL_FAILURE(
248 CreateChannel(kTestChannelName2, &host_socket2_, &client_socket2_)); 228 CreateChannel(kTestChannelName2, &host_socket2_, &client_socket2_));
249 229
250 ConnectSockets();
251
252 FakeStreamSocket* socket = 230 FakeStreamSocket* socket =
253 host_session_.GetTransport()->GetStreamChannelFactory()->GetFakeChannel( 231 host_channel_factory_.GetFakeChannel(kMuxChannelName);
254 kMuxChannelName);
255 socket->set_next_write_error(net::ERR_FAILED); 232 socket->set_next_write_error(net::ERR_FAILED);
256 socket->set_async_write(false); 233 socket->set_async_write(false);
257 234
258 scoped_refptr<net::IOBufferWithSize> buf = CreateTestBuffer(100); 235 scoped_refptr<net::IOBufferWithSize> buf = CreateTestBuffer(100);
259 236
260 MockSocketCallback cb1; 237 MockSocketCallback cb1;
261 MockSocketCallback cb2; 238 MockSocketCallback cb2;
262 EXPECT_CALL(cb1, OnDone(net::ERR_FAILED)); 239 EXPECT_CALL(cb1, OnDone(net::ERR_FAILED));
263 EXPECT_CALL(cb2, OnDone(net::ERR_FAILED)); 240 EXPECT_CALL(cb2, OnDone(net::ERR_FAILED));
264 241
(...skipping 11 matching lines...) Expand all
276 base::RunLoop().RunUntilIdle(); 253 base::RunLoop().RunUntilIdle();
277 } 254 }
278 255
279 TEST_F(ChannelMultiplexerTest, WriteFailAsync) { 256 TEST_F(ChannelMultiplexerTest, WriteFailAsync) {
280 ASSERT_NO_FATAL_FAILURE( 257 ASSERT_NO_FATAL_FAILURE(
281 CreateChannel(kTestChannelName, &host_socket1_, &client_socket1_)); 258 CreateChannel(kTestChannelName, &host_socket1_, &client_socket1_));
282 259
283 ASSERT_NO_FATAL_FAILURE( 260 ASSERT_NO_FATAL_FAILURE(
284 CreateChannel(kTestChannelName2, &host_socket2_, &client_socket2_)); 261 CreateChannel(kTestChannelName2, &host_socket2_, &client_socket2_));
285 262
286 ConnectSockets();
287
288 FakeStreamSocket* socket = 263 FakeStreamSocket* socket =
289 host_session_.GetTransport()->GetStreamChannelFactory()->GetFakeChannel( 264 host_channel_factory_.GetFakeChannel(kMuxChannelName);
290 kMuxChannelName);
291 socket->set_next_write_error(net::ERR_FAILED); 265 socket->set_next_write_error(net::ERR_FAILED);
292 socket->set_async_write(true); 266 socket->set_async_write(true);
293 267
294 scoped_refptr<net::IOBufferWithSize> buf = CreateTestBuffer(100); 268 scoped_refptr<net::IOBufferWithSize> buf = CreateTestBuffer(100);
295 269
296 MockSocketCallback cb1; 270 MockSocketCallback cb1;
297 MockSocketCallback cb2; 271 MockSocketCallback cb2;
298 EXPECT_CALL(cb1, OnDone(net::ERR_FAILED)); 272 EXPECT_CALL(cb1, OnDone(net::ERR_FAILED));
299 EXPECT_CALL(cb2, OnDone(net::ERR_FAILED)); 273 EXPECT_CALL(cb2, OnDone(net::ERR_FAILED));
300 274
(...skipping 10 matching lines...) Expand all
311 285
312 base::RunLoop().RunUntilIdle(); 286 base::RunLoop().RunUntilIdle();
313 } 287 }
314 288
315 TEST_F(ChannelMultiplexerTest, DeleteWhenFailed) { 289 TEST_F(ChannelMultiplexerTest, DeleteWhenFailed) {
316 ASSERT_NO_FATAL_FAILURE( 290 ASSERT_NO_FATAL_FAILURE(
317 CreateChannel(kTestChannelName, &host_socket1_, &client_socket1_)); 291 CreateChannel(kTestChannelName, &host_socket1_, &client_socket1_));
318 ASSERT_NO_FATAL_FAILURE( 292 ASSERT_NO_FATAL_FAILURE(
319 CreateChannel(kTestChannelName2, &host_socket2_, &client_socket2_)); 293 CreateChannel(kTestChannelName2, &host_socket2_, &client_socket2_));
320 294
321 ConnectSockets();
322
323 FakeStreamSocket* socket = 295 FakeStreamSocket* socket =
324 host_session_.GetTransport()->GetStreamChannelFactory()->GetFakeChannel( 296 host_channel_factory_.GetFakeChannel(kMuxChannelName);
325 kMuxChannelName);
326 socket->set_next_write_error(net::ERR_FAILED); 297 socket->set_next_write_error(net::ERR_FAILED);
327 socket->set_async_write(true); 298 socket->set_async_write(true);
328 299
329 scoped_refptr<net::IOBufferWithSize> buf = CreateTestBuffer(100); 300 scoped_refptr<net::IOBufferWithSize> buf = CreateTestBuffer(100);
330 301
331 MockSocketCallback cb1; 302 MockSocketCallback cb1;
332 MockSocketCallback cb2; 303 MockSocketCallback cb2;
333 304
334 EXPECT_CALL(cb1, OnDone(net::ERR_FAILED)) 305 EXPECT_CALL(cb1, OnDone(net::ERR_FAILED))
335 .Times(AtMost(1)) 306 .Times(AtMost(1))
(...skipping 13 matching lines...) Expand all
349 base::Bind(&MockSocketCallback::OnDone, 320 base::Bind(&MockSocketCallback::OnDone,
350 base::Unretained(&cb2)))); 321 base::Unretained(&cb2))));
351 322
352 base::RunLoop().RunUntilIdle(); 323 base::RunLoop().RunUntilIdle();
353 324
354 // Check that the sockets were destroyed. 325 // Check that the sockets were destroyed.
355 EXPECT_FALSE(host_mux_.get()); 326 EXPECT_FALSE(host_mux_.get());
356 } 327 }
357 328
358 TEST_F(ChannelMultiplexerTest, SessionFail) { 329 TEST_F(ChannelMultiplexerTest, SessionFail) {
359 host_session_.GetTransport()->GetStreamChannelFactory() 330 host_channel_factory_.set_asynchronous_create(true);
360 ->set_asynchronous_create(true); 331 host_channel_factory_.set_fail_create(true);
361 host_session_.GetTransport()->GetStreamChannelFactory()
362 ->set_fail_create(true);
363 332
364 MockConnectCallback cb1; 333 MockConnectCallback cb1;
365 MockConnectCallback cb2; 334 MockConnectCallback cb2;
366 335
367 host_mux_->CreateChannel(kTestChannelName, base::Bind( 336 host_mux_->CreateChannel(kTestChannelName, base::Bind(
368 &MockConnectCallback::OnConnected, base::Unretained(&cb1))); 337 &MockConnectCallback::OnConnected, base::Unretained(&cb1)));
369 host_mux_->CreateChannel(kTestChannelName2, base::Bind( 338 host_mux_->CreateChannel(kTestChannelName2, base::Bind(
370 &MockConnectCallback::OnConnected, base::Unretained(&cb2))); 339 &MockConnectCallback::OnConnected, base::Unretained(&cb2)));
371 340
372 EXPECT_CALL(cb1, OnConnectedPtr(nullptr)) 341 EXPECT_CALL(cb1, OnConnectedPtr(nullptr))
373 .Times(AtMost(1)) 342 .Times(AtMost(1))
374 .WillOnce(InvokeWithoutArgs( 343 .WillOnce(InvokeWithoutArgs(
375 this, &ChannelMultiplexerTest::DeleteAfterSessionFail)); 344 this, &ChannelMultiplexerTest::DeleteAfterSessionFail));
376 EXPECT_CALL(cb2, OnConnectedPtr(_)) 345 EXPECT_CALL(cb2, OnConnectedPtr(_))
377 .Times(0); 346 .Times(0);
378 347
379 base::RunLoop().RunUntilIdle(); 348 base::RunLoop().RunUntilIdle();
380 } 349 }
381 350
382 } // namespace protocol 351 } // namespace protocol
383 } // namespace remoting 352 } // namespace remoting
OLDNEW
« no previous file with comments | « no previous file | remoting/protocol/fake_stream_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698