OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "base/test/test_timeouts.h" | 10 #include "base/test/test_timeouts.h" |
11 #include "crypto/nss_util.h" | 11 #include "crypto/nss_util.h" |
12 #include "net/base/completion_callback.h" | 12 #include "net/base/completion_callback.h" |
13 #include "net/base/io_buffer.h" | 13 #include "net/base/io_buffer.h" |
14 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
15 #include "net/socket/socket.h" | 15 #include "net/socket/socket.h" |
| 16 #include "net/socket/stream_socket.h" |
16 #include "remoting/protocol/jingle_session.h" | 17 #include "remoting/protocol/jingle_session.h" |
17 #include "remoting/protocol/jingle_session_manager.h" | 18 #include "remoting/protocol/jingle_session_manager.h" |
18 #include "remoting/jingle_glue/jingle_thread.h" | 19 #include "remoting/jingle_glue/jingle_thread.h" |
19 #include "remoting/jingle_glue/fake_signal_strategy.h" | 20 #include "remoting/jingle_glue/fake_signal_strategy.h" |
20 #include "testing/gmock/include/gmock/gmock.h" | 21 #include "testing/gmock/include/gmock/gmock.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
22 #include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h" | 23 #include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h" |
23 | 24 |
24 using testing::_; | 25 using testing::_; |
25 using testing::AtMost; | 26 using testing::AtMost; |
(...skipping 20 matching lines...) Expand all Loading... |
46 | 47 |
47 namespace { | 48 namespace { |
48 | 49 |
49 // Send 100 messages 1024 bytes each. UDP messages are sent with 10ms delay | 50 // Send 100 messages 1024 bytes each. UDP messages are sent with 10ms delay |
50 // between messages (about 1 second for 100 messages). | 51 // between messages (about 1 second for 100 messages). |
51 const int kMessageSize = 1024; | 52 const int kMessageSize = 1024; |
52 const int kMessages = 100; | 53 const int kMessages = 100; |
53 const int kTestDataSize = kMessages * kMessageSize; | 54 const int kTestDataSize = kMessages * kMessageSize; |
54 const int kUdpWriteDelayMs = 10; | 55 const int kUdpWriteDelayMs = 10; |
55 const char kTestToken[] = "a_dummy_token"; | 56 const char kTestToken[] = "a_dummy_token"; |
| 57 const char kChannelName[] = "test_channel"; |
56 | 58 |
57 const char kHostJid[] = "host1@gmail.com/123"; | 59 const char kHostJid[] = "host1@gmail.com/123"; |
58 const char kClientJid[] = "host2@gmail.com/321"; | 60 const char kClientJid[] = "host2@gmail.com/321"; |
59 | 61 |
60 const char kTestHostPublicKey[] = | 62 const char kTestHostPublicKey[] = |
61 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3nk/8ILc0JBqHgOS0UCOIl4m" | 63 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3nk/8ILc0JBqHgOS0UCOIl4m" |
62 "0GUd2FIiZ/6Fc9D/iiyUgli+FIY5dwsrSoNJ87sYGifVDh8a5fdZNV5y58CcrapI5fJI" | 64 "0GUd2FIiZ/6Fc9D/iiyUgli+FIY5dwsrSoNJ87sYGifVDh8a5fdZNV5y58CcrapI5fJI" |
63 "FpXviSW4g8d/t1gcZkoz1ppmjzbgXm6ckw9Td0yRD0cHu732Ijs+eo8wT0pt4KiHkbyR" | 65 "FpXviSW4g8d/t1gcZkoz1ppmjzbgXm6ckw9Td0yRD0cHu732Ijs+eo8wT0pt4KiHkbyR" |
64 "iAvjrvkNDlfiEk7tiY7YzD9zTi3146GX6KLz5GQAd/3I8I5QW3ftF1s/m93AHuc383GZ" | 66 "iAvjrvkNDlfiEk7tiY7YzD9zTi3146GX6KLz5GQAd/3I8I5QW3ftF1s/m93AHuc383GZ" |
65 "A78Oi+IbcJf/jJUZO119VNnRKGiPsf5GZIoHyXX8O5OUQk5soKdQPeK1FwWkeZu6fuXl" | 67 "A78Oi+IbcJf/jJUZO119VNnRKGiPsf5GZIoHyXX8O5OUQk5soKdQPeK1FwWkeZu6fuXl" |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 | 209 |
208 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)) | 210 EXPECT_CALL(host_server_listener_, OnIncomingSession(_, _)) |
209 .WillOnce(DoAll( | 211 .WillOnce(DoAll( |
210 WithArg<0>(Invoke( | 212 WithArg<0>(Invoke( |
211 this, &JingleSessionTest::SetHostSession)), | 213 this, &JingleSessionTest::SetHostSession)), |
212 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT))); | 214 SetArgumentPointee<1>(protocol::SessionManager::ACCEPT))); |
213 | 215 |
214 { | 216 { |
215 InSequence dummy; | 217 InSequence dummy; |
216 | 218 |
217 EXPECT_CALL(host_connection_callback_, | |
218 OnStateChange(Session::CONNECTING)) | |
219 .Times(1); | |
220 if (shared_secret == kTestSharedSecret) { | 219 if (shared_secret == kTestSharedSecret) { |
221 EXPECT_CALL(host_connection_callback_, | 220 EXPECT_CALL(host_connection_callback_, |
222 OnStateChange(Session::CONNECTED)) | 221 OnStateChange(Session::CONNECTED)) |
| 222 .Times(1); |
| 223 EXPECT_CALL(host_connection_callback_, |
| 224 OnStateChange(Session::CONNECTED_CHANNELS)) |
223 .Times(1) | 225 .Times(1) |
224 .WillOnce(QuitThreadOnCounter(¬_connected_peers)); | 226 .WillOnce(QuitThreadOnCounter(¬_connected_peers)); |
225 // Expect that the connection will be closed eventually. | 227 // Expect that the connection will be closed eventually. |
226 EXPECT_CALL(host_connection_callback_, | 228 EXPECT_CALL(host_connection_callback_, |
227 OnStateChange(Session::CLOSED)) | 229 OnStateChange(Session::CLOSED)) |
228 .Times(1); | 230 .Times(1); |
229 } else { | 231 } else { |
230 // Might pass through the CONNECTED state. | 232 // Might pass through the CONNECTED state. |
231 EXPECT_CALL(host_connection_callback_, | 233 EXPECT_CALL(host_connection_callback_, |
232 OnStateChange(Session::CONNECTED)) | 234 OnStateChange(Session::CONNECTED)) |
233 .Times(AtMost(1)); | 235 .Times(AtMost(1)); |
| 236 EXPECT_CALL(host_connection_callback_, |
| 237 OnStateChange(Session::CONNECTED_CHANNELS)) |
| 238 .Times(AtMost(1)); |
234 // Expect that the connection will be closed eventually. | 239 // Expect that the connection will be closed eventually. |
235 EXPECT_CALL(host_connection_callback_, | 240 EXPECT_CALL(host_connection_callback_, |
236 OnStateChange(Session::FAILED)) | 241 OnStateChange(Session::FAILED)) |
237 .Times(1) | 242 .Times(1) |
238 .WillOnce(InvokeWithoutArgs(&QuitCurrentThread)); | 243 .WillOnce(InvokeWithoutArgs(&QuitCurrentThread)); |
239 } | 244 } |
240 } | 245 } |
241 | 246 |
242 { | 247 { |
243 InSequence dummy; | 248 InSequence dummy; |
244 | 249 |
245 EXPECT_CALL(client_connection_callback_, | 250 EXPECT_CALL(client_connection_callback_, |
246 OnStateChange(Session::CONNECTING)) | 251 OnStateChange(Session::CONNECTING)) |
247 .Times(1); | 252 .Times(1); |
248 if (shared_secret == kTestSharedSecret) { | 253 if (shared_secret == kTestSharedSecret) { |
249 EXPECT_CALL(client_connection_callback_, | 254 EXPECT_CALL(client_connection_callback_, |
250 OnStateChange(Session::CONNECTED)) | 255 OnStateChange(Session::CONNECTED)) |
| 256 .Times(1); |
| 257 EXPECT_CALL(client_connection_callback_, |
| 258 OnStateChange(Session::CONNECTED_CHANNELS)) |
251 .Times(1) | 259 .Times(1) |
252 .WillOnce(QuitThreadOnCounter(¬_connected_peers)); | 260 .WillOnce(QuitThreadOnCounter(¬_connected_peers)); |
253 } else { | 261 } else { |
254 EXPECT_CALL(client_connection_callback_, | 262 EXPECT_CALL(client_connection_callback_, |
255 OnStateChange(Session::CONNECTED)) | 263 OnStateChange(Session::CONNECTED)) |
256 .Times(AtMost(1)); | 264 .Times(AtMost(1)); |
| 265 EXPECT_CALL(client_connection_callback_, |
| 266 OnStateChange(Session::CONNECTED_CHANNELS)) |
| 267 .Times(AtMost(1)); |
257 } | 268 } |
258 // Expect that the connection will be closed eventually. | 269 // Expect that the connection will be closed eventually. |
259 EXPECT_CALL(client_connection_callback_, | 270 EXPECT_CALL(client_connection_callback_, |
260 OnStateChange(Session::CLOSED)) | 271 OnStateChange(Session::CLOSED)) |
261 .Times(1); | 272 .Times(1); |
262 } | 273 } |
263 | 274 |
264 client_session_.reset(client_server_->Connect( | 275 client_session_.reset(client_server_->Connect( |
265 kHostJid, kTestHostPublicKey, kTestToken, | 276 kHostJid, kTestHostPublicKey, kTestToken, |
266 CandidateSessionConfig::CreateDefault(), | 277 CandidateSessionConfig::CreateDefault(), |
(...skipping 18 matching lines...) Expand all Loading... |
285 MockSessionManagerListener client_server_listener_; | 296 MockSessionManagerListener client_server_listener_; |
286 | 297 |
287 scoped_ptr<Session> host_session_; | 298 scoped_ptr<Session> host_session_; |
288 MockSessionCallback host_connection_callback_; | 299 MockSessionCallback host_connection_callback_; |
289 scoped_ptr<Session> client_session_; | 300 scoped_ptr<Session> client_session_; |
290 MockSessionCallback client_connection_callback_; | 301 MockSessionCallback client_connection_callback_; |
291 }; | 302 }; |
292 | 303 |
293 class ChannelTesterBase : public base::RefCountedThreadSafe<ChannelTesterBase> { | 304 class ChannelTesterBase : public base::RefCountedThreadSafe<ChannelTesterBase> { |
294 public: | 305 public: |
295 enum ChannelType { | |
296 CONTROL, | |
297 EVENT, | |
298 VIDEO, | |
299 VIDEO_RTP, | |
300 VIDEO_RTCP, | |
301 }; | |
302 | |
303 ChannelTesterBase(Session* host_session, | 306 ChannelTesterBase(Session* host_session, |
304 Session* client_session) | 307 Session* client_session) |
305 : host_session_(host_session), | 308 : host_session_(host_session), |
306 client_session_(client_session), | 309 client_session_(client_session), |
307 done_(false) { | 310 done_(false) { |
308 } | 311 } |
309 | 312 |
310 virtual ~ChannelTesterBase() { } | 313 virtual ~ChannelTesterBase() { } |
311 | 314 |
312 void Start(ChannelType channel) { | 315 void Start() { |
313 MessageLoop::current()->PostTask( | 316 MessageLoop::current()->PostTask( |
314 FROM_HERE, NewRunnableMethod(this, &ChannelTesterBase::DoStart, | 317 FROM_HERE, NewRunnableMethod(this, &ChannelTesterBase::DoStart)); |
315 channel)); | |
316 } | 318 } |
317 | 319 |
318 bool WaitFinished() { | 320 bool WaitFinished() { |
319 return RunMessageLoopWithTimeout(TestTimeouts::action_max_timeout_ms()); | 321 return RunMessageLoopWithTimeout(TestTimeouts::action_max_timeout_ms()); |
320 } | 322 } |
321 | 323 |
322 virtual void CheckResults() = 0; | 324 virtual void CheckResults() = 0; |
323 | 325 |
324 protected: | 326 protected: |
325 void DoStart(ChannelType channel) { | 327 void DoStart() { |
326 socket_1_ = SelectChannel(host_session_, channel); | 328 InitChannels(); |
327 socket_2_ = SelectChannel(client_session_, channel); | 329 } |
328 | 330 |
329 InitBuffers(); | 331 virtual void InitChannels() = 0; |
330 DoRead(); | |
331 DoWrite(); | |
332 } | |
333 | 332 |
334 void Done() { | 333 void Done() { |
335 done_ = true; | 334 done_ = true; |
336 MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&QuitCurrentThread)); | 335 MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&QuitCurrentThread)); |
337 } | 336 } |
338 | 337 |
339 virtual void InitBuffers() = 0; | 338 virtual void InitBuffers() = 0; |
340 virtual void DoWrite() = 0; | 339 virtual void DoWrite() = 0; |
341 virtual void DoRead() = 0; | 340 virtual void DoRead() = 0; |
342 | 341 |
343 net::Socket* SelectChannel(Session* session, | |
344 ChannelType channel) { | |
345 switch (channel) { | |
346 case CONTROL: | |
347 return session->control_channel(); | |
348 case EVENT: | |
349 return session->event_channel(); | |
350 case VIDEO: | |
351 return session->video_channel(); | |
352 case VIDEO_RTP: | |
353 return session->video_rtp_channel(); | |
354 case VIDEO_RTCP: | |
355 return session->video_rtcp_channel(); | |
356 default: | |
357 NOTREACHED(); | |
358 return NULL; | |
359 } | |
360 } | |
361 | |
362 Session* host_session_; | 342 Session* host_session_; |
363 Session* client_session_; | 343 Session* client_session_; |
364 net::Socket* socket_1_; | 344 scoped_ptr<net::Socket> sockets_[2]; |
365 net::Socket* socket_2_; | |
366 bool done_; | 345 bool done_; |
367 }; | 346 }; |
368 | 347 |
369 class TCPChannelTester : public ChannelTesterBase { | 348 class TCPChannelTester : public ChannelTesterBase { |
370 public: | 349 public: |
371 TCPChannelTester(Session* host_session, | 350 TCPChannelTester(Session* host_session, |
372 Session* client_session, | 351 Session* client_session, |
373 int message_size, | 352 int message_size, |
374 int message_count) | 353 int message_count) |
375 : ChannelTesterBase(host_session, client_session), | 354 : ChannelTesterBase(host_session, client_session), |
(...skipping 17 matching lines...) Expand all Loading... |
393 ASSERT_EQ(test_data_size_, input_buffer_->offset()); | 372 ASSERT_EQ(test_data_size_, input_buffer_->offset()); |
394 | 373 |
395 output_buffer_->SetOffset(0); | 374 output_buffer_->SetOffset(0); |
396 ASSERT_EQ(test_data_size_, output_buffer_->size()); | 375 ASSERT_EQ(test_data_size_, output_buffer_->size()); |
397 | 376 |
398 EXPECT_EQ(0, memcmp(output_buffer_->data(), | 377 EXPECT_EQ(0, memcmp(output_buffer_->data(), |
399 input_buffer_->StartOfBuffer(), test_data_size_)); | 378 input_buffer_->StartOfBuffer(), test_data_size_)); |
400 } | 379 } |
401 | 380 |
402 protected: | 381 protected: |
| 382 virtual void InitChannels() OVERRIDE { |
| 383 host_session_->CreateStreamChannel( |
| 384 kChannelName, |
| 385 base::Bind(&TCPChannelTester::OnChannelReady, |
| 386 base::Unretained(this), 0)); |
| 387 client_session_->CreateStreamChannel( |
| 388 kChannelName, |
| 389 base::Bind(&TCPChannelTester::OnChannelReady, |
| 390 base::Unretained(this), 1)); |
| 391 } |
| 392 |
| 393 void OnChannelReady(int id, const std::string name, |
| 394 net::StreamSocket* socket) { |
| 395 ASSERT_TRUE(socket); |
| 396 ASSERT_EQ(name, kChannelName); |
| 397 if (!socket) { |
| 398 Done(); |
| 399 return; |
| 400 } |
| 401 |
| 402 DCHECK(id >= 0 && id < 2); |
| 403 sockets_[id].reset(socket); |
| 404 |
| 405 if (sockets_[0].get() && sockets_[1].get()) { |
| 406 InitBuffers(); |
| 407 DoRead(); |
| 408 DoWrite(); |
| 409 } |
| 410 } |
| 411 |
403 virtual void InitBuffers() { | 412 virtual void InitBuffers() { |
404 output_buffer_ = new net::DrainableIOBuffer( | 413 output_buffer_ = new net::DrainableIOBuffer( |
405 new net::IOBuffer(test_data_size_), test_data_size_); | 414 new net::IOBuffer(test_data_size_), test_data_size_); |
406 memset(output_buffer_->data(), 123, test_data_size_); | 415 memset(output_buffer_->data(), 123, test_data_size_); |
407 | 416 |
408 input_buffer_ = new net::GrowableIOBuffer(); | 417 input_buffer_ = new net::GrowableIOBuffer(); |
409 } | 418 } |
410 | 419 |
411 virtual void DoWrite() { | 420 virtual void DoWrite() { |
412 int result = 1; | 421 int result = 1; |
413 while (result > 0) { | 422 while (result > 0) { |
414 if (output_buffer_->BytesRemaining() == 0) | 423 if (output_buffer_->BytesRemaining() == 0) |
415 break; | 424 break; |
416 int bytes_to_write = std::min(output_buffer_->BytesRemaining(), | 425 int bytes_to_write = std::min(output_buffer_->BytesRemaining(), |
417 message_size_); | 426 message_size_); |
418 result = socket_1_->Write(output_buffer_, bytes_to_write, &write_cb_); | 427 result = sockets_[0]->Write(output_buffer_, bytes_to_write, &write_cb_); |
419 HandleWriteResult(result); | 428 HandleWriteResult(result); |
420 }; | 429 }; |
421 } | 430 } |
422 | 431 |
423 void OnWritten(int result) { | 432 void OnWritten(int result) { |
424 HandleWriteResult(result); | 433 HandleWriteResult(result); |
425 DoWrite(); | 434 DoWrite(); |
426 } | 435 } |
427 | 436 |
428 void HandleWriteResult(int result) { | 437 void HandleWriteResult(int result) { |
429 if (result <= 0 && result != net::ERR_IO_PENDING) { | 438 if (result <= 0 && result != net::ERR_IO_PENDING) { |
430 LOG(ERROR) << "Received error " << result << " when trying to write"; | 439 LOG(ERROR) << "Received error " << result << " when trying to write"; |
431 write_errors_++; | 440 write_errors_++; |
432 Done(); | 441 Done(); |
433 } else if (result > 0) { | 442 } else if (result > 0) { |
434 output_buffer_->DidConsume(result); | 443 output_buffer_->DidConsume(result); |
435 } | 444 } |
436 } | 445 } |
437 | 446 |
438 virtual void DoRead() { | 447 virtual void DoRead() { |
439 int result = 1; | 448 int result = 1; |
440 while (result > 0) { | 449 while (result > 0) { |
441 input_buffer_->SetCapacity(input_buffer_->offset() + message_size_); | 450 input_buffer_->SetCapacity(input_buffer_->offset() + message_size_); |
442 result = socket_2_->Read(input_buffer_, message_size_, &read_cb_); | 451 result = sockets_[1]->Read(input_buffer_, message_size_, &read_cb_); |
443 HandleReadResult(result); | 452 HandleReadResult(result); |
444 }; | 453 }; |
445 } | 454 } |
446 | 455 |
447 void OnRead(int result) { | 456 void OnRead(int result) { |
448 HandleReadResult(result); | 457 HandleReadResult(result); |
449 if (!done_) | 458 if (!done_) |
450 DoRead(); // Don't try to read again when we are done reading. | 459 DoRead(); // Don't try to read again when we are done reading. |
451 } | 460 } |
452 | 461 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 | 538 |
530 EXPECT_EQ(0, broken_packets_); | 539 EXPECT_EQ(0, broken_packets_); |
531 | 540 |
532 // Verify that we've received at least one packet. | 541 // Verify that we've received at least one packet. |
533 EXPECT_GT(packets_received_, 0); | 542 EXPECT_GT(packets_received_, 0); |
534 LOG(INFO) << "Received " << packets_received_ << " packets out of " | 543 LOG(INFO) << "Received " << packets_received_ << " packets out of " |
535 << kMessages; | 544 << kMessages; |
536 } | 545 } |
537 | 546 |
538 protected: | 547 protected: |
| 548 virtual void InitChannels() OVERRIDE { |
| 549 host_session_->CreateDatagramChannel( |
| 550 kChannelName, |
| 551 base::Bind(&UDPChannelTester::OnChannelReady, |
| 552 base::Unretained(this), 0)); |
| 553 client_session_->CreateDatagramChannel( |
| 554 kChannelName, |
| 555 base::Bind(&UDPChannelTester::OnChannelReady, |
| 556 base::Unretained(this), 1)); |
| 557 } |
| 558 |
| 559 void OnChannelReady(int id, const std::string name, net::Socket* socket) { |
| 560 ASSERT_TRUE(socket); |
| 561 ASSERT_EQ(name, kChannelName); |
| 562 if (!socket) { |
| 563 Done(); |
| 564 return; |
| 565 } |
| 566 |
| 567 DCHECK(id >= 0 && id < 2); |
| 568 sockets_[id].reset(socket); |
| 569 |
| 570 if (sockets_[0].get() && sockets_[1].get()) { |
| 571 InitBuffers(); |
| 572 DoRead(); |
| 573 DoWrite(); |
| 574 } |
| 575 } |
| 576 |
| 577 |
539 virtual void InitBuffers() { | 578 virtual void InitBuffers() { |
540 } | 579 } |
541 | 580 |
542 virtual void DoWrite() { | 581 virtual void DoWrite() { |
543 if (packets_sent_ >= kMessages) { | 582 if (packets_sent_ >= kMessages) { |
544 Done(); | 583 Done(); |
545 return; | 584 return; |
546 } | 585 } |
547 | 586 |
548 scoped_refptr<net::IOBuffer> packet(new net::IOBuffer(kMessageSize)); | 587 scoped_refptr<net::IOBuffer> packet(new net::IOBuffer(kMessageSize)); |
549 memset(packet->data(), 123, kMessageSize); | 588 memset(packet->data(), 123, kMessageSize); |
550 sent_packets_[packets_sent_] = packet; | 589 sent_packets_[packets_sent_] = packet; |
551 // Put index of this packet in the beginning of the packet body. | 590 // Put index of this packet in the beginning of the packet body. |
552 memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_)); | 591 memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_)); |
553 | 592 |
554 int result = socket_1_->Write(packet, kMessageSize, &write_cb_); | 593 int result = sockets_[0]->Write(packet, kMessageSize, &write_cb_); |
555 HandleWriteResult(result); | 594 HandleWriteResult(result); |
556 } | 595 } |
557 | 596 |
558 void OnWritten(int result) { | 597 void OnWritten(int result) { |
559 HandleWriteResult(result); | 598 HandleWriteResult(result); |
560 } | 599 } |
561 | 600 |
562 void HandleWriteResult(int result) { | 601 void HandleWriteResult(int result) { |
563 if (result <= 0 && result != net::ERR_IO_PENDING) { | 602 if (result <= 0 && result != net::ERR_IO_PENDING) { |
564 LOG(ERROR) << "Received error " << result << " when trying to write"; | 603 LOG(ERROR) << "Received error " << result << " when trying to write"; |
565 write_errors_++; | 604 write_errors_++; |
566 Done(); | 605 Done(); |
567 } else if (result > 0) { | 606 } else if (result > 0) { |
568 EXPECT_EQ(kMessageSize, result); | 607 EXPECT_EQ(kMessageSize, result); |
569 packets_sent_++; | 608 packets_sent_++; |
570 MessageLoop::current()->PostDelayedTask( | 609 MessageLoop::current()->PostDelayedTask( |
571 FROM_HERE, NewRunnableMethod(this, &UDPChannelTester::DoWrite), | 610 FROM_HERE, NewRunnableMethod(this, &UDPChannelTester::DoWrite), |
572 kUdpWriteDelayMs); | 611 kUdpWriteDelayMs); |
573 } | 612 } |
574 } | 613 } |
575 | 614 |
576 virtual void DoRead() { | 615 virtual void DoRead() { |
577 int result = 1; | 616 int result = 1; |
578 while (result > 0) { | 617 while (result > 0) { |
579 int kReadSize = kMessageSize * 2; | 618 int kReadSize = kMessageSize * 2; |
580 read_buffer_ = new net::IOBuffer(kReadSize); | 619 read_buffer_ = new net::IOBuffer(kReadSize); |
581 | 620 |
582 result = socket_2_->Read(read_buffer_, kReadSize, &read_cb_); | 621 result = sockets_[1]->Read(read_buffer_, kReadSize, &read_cb_); |
583 HandleReadResult(result); | 622 HandleReadResult(result); |
584 }; | 623 }; |
585 } | 624 } |
586 | 625 |
587 void OnRead(int result) { | 626 void OnRead(int result) { |
588 HandleReadResult(result); | 627 HandleReadResult(result); |
589 DoRead(); | 628 DoRead(); |
590 } | 629 } |
591 | 630 |
592 void HandleReadResult(int result) { | 631 void HandleReadResult(int result) { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); | 710 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
672 } | 711 } |
673 | 712 |
674 // Verify that we can't connect two endpoints with mismatched secrets. | 713 // Verify that we can't connect two endpoints with mismatched secrets. |
675 TEST_F(JingleSessionTest, ConnectBadChannelAuth) { | 714 TEST_F(JingleSessionTest, ConnectBadChannelAuth) { |
676 CreateServerPair(); | 715 CreateServerPair(); |
677 ASSERT_TRUE(InitiateConnection(kTestSharedSecretBad)); | 716 ASSERT_TRUE(InitiateConnection(kTestSharedSecretBad)); |
678 } | 717 } |
679 | 718 |
680 // Verify that data can be transmitted over the event channel. | 719 // Verify that data can be transmitted over the event channel. |
681 TEST_F(JingleSessionTest, TestControlChannel) { | 720 TEST_F(JingleSessionTest, TestTcpChannel) { |
682 CreateServerPair(); | 721 CreateServerPair(); |
683 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); | 722 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
684 scoped_refptr<TCPChannelTester> tester( | 723 scoped_refptr<TCPChannelTester> tester( |
685 new TCPChannelTester(host_session_.get(), client_session_.get(), | 724 new TCPChannelTester(host_session_.get(), client_session_.get(), |
686 kMessageSize, kMessages)); | 725 kMessageSize, kMessages)); |
687 tester->Start(ChannelTesterBase::CONTROL); | 726 tester->Start(); |
688 ASSERT_TRUE(tester->WaitFinished()); | 727 ASSERT_TRUE(tester->WaitFinished()); |
689 tester->CheckResults(); | 728 tester->CheckResults(); |
690 | 729 |
691 // Connections must be closed while |tester| still exists. | |
692 CloseSessions(); | |
693 } | |
694 | |
695 // Verify that data can be transmitted over the video channel. | |
696 TEST_F(JingleSessionTest, TestVideoChannel) { | |
697 CreateServerPair(); | |
698 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); | |
699 scoped_refptr<TCPChannelTester> tester( | |
700 new TCPChannelTester(host_session_.get(), client_session_.get(), | |
701 kMessageSize, kMessageSize)); | |
702 tester->Start(ChannelTesterBase::VIDEO); | |
703 ASSERT_TRUE(tester->WaitFinished()); | |
704 tester->CheckResults(); | |
705 | |
706 // Connections must be closed while |tester| still exists. | |
707 CloseSessions(); | |
708 } | |
709 | |
710 // Verify that data can be transmitted over the event channel. | |
711 TEST_F(JingleSessionTest, TestEventChannel) { | |
712 CreateServerPair(); | |
713 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); | |
714 scoped_refptr<TCPChannelTester> tester( | |
715 new TCPChannelTester(host_session_.get(), client_session_.get(), | |
716 kMessageSize, kMessageSize)); | |
717 tester->Start(ChannelTesterBase::EVENT); | |
718 ASSERT_TRUE(tester->WaitFinished()); | |
719 tester->CheckResults(); | |
720 | |
721 // Connections must be closed while |tester| still exists. | 730 // Connections must be closed while |tester| still exists. |
722 CloseSessions(); | 731 CloseSessions(); |
723 } | 732 } |
724 | 733 |
725 // Verify that data can be transmitted over the video RTP channel. | 734 // Verify that data can be transmitted over the video RTP channel. |
726 // Disabled because RTP support is disabled, see crbug.com/91538 . | 735 TEST_F(JingleSessionTest, TestUdpChannel) { |
727 TEST_F(JingleSessionTest, DISABLED_TestVideoRtpChannel) { | |
728 CreateServerPair(); | 736 CreateServerPair(); |
729 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); | 737 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
730 scoped_refptr<UDPChannelTester> tester( | 738 scoped_refptr<UDPChannelTester> tester( |
731 new UDPChannelTester(host_session_.get(), client_session_.get())); | 739 new UDPChannelTester(host_session_.get(), client_session_.get())); |
732 tester->Start(ChannelTesterBase::VIDEO_RTP); | 740 tester->Start(); |
733 ASSERT_TRUE(tester->WaitFinished()); | 741 ASSERT_TRUE(tester->WaitFinished()); |
734 tester->CheckResults(); | 742 tester->CheckResults(); |
735 | 743 |
736 // Connections must be closed while |tester| still exists. | 744 // Connections must be closed while |tester| still exists. |
737 CloseSessions(); | 745 CloseSessions(); |
738 } | 746 } |
739 | 747 |
740 // Send packets of different size to get the latency for sending data | 748 // Send packets of different size to get the latency for sending data |
741 // using sockets from JingleSession. | 749 // using sockets from JingleSession. |
742 TEST_F(JingleSessionTest, TestSpeed) { | 750 TEST_F(JingleSessionTest, TestSpeed) { |
743 CreateServerPair(); | 751 CreateServerPair(); |
744 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); | 752 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
745 scoped_refptr<ChannelSpeedTester> tester; | 753 scoped_refptr<ChannelSpeedTester> tester; |
746 | 754 |
747 tester = new ChannelSpeedTester(host_session_.get(), | 755 tester = new ChannelSpeedTester(host_session_.get(), |
748 client_session_.get(), 512); | 756 client_session_.get(), 512); |
749 tester->Start(ChannelTesterBase::VIDEO); | 757 tester->Start(); |
750 ASSERT_TRUE(tester->WaitFinished()); | 758 ASSERT_TRUE(tester->WaitFinished()); |
751 LOG(INFO) << "Time for 512 bytes " | 759 LOG(INFO) << "Time for 512 bytes " |
752 << tester->GetElapsedTime().InMilliseconds() << " ms."; | 760 << tester->GetElapsedTime().InMilliseconds() << " ms."; |
753 | 761 |
| 762 CloseSessions(); |
| 763 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| 764 |
754 tester = new ChannelSpeedTester(host_session_.get(), | 765 tester = new ChannelSpeedTester(host_session_.get(), |
755 client_session_.get(), 1024); | 766 client_session_.get(), 1024); |
756 tester->Start(ChannelTesterBase::VIDEO); | 767 tester->Start(); |
757 ASSERT_TRUE(tester->WaitFinished()); | 768 ASSERT_TRUE(tester->WaitFinished()); |
758 LOG(INFO) << "Time for 1024 bytes " | 769 LOG(INFO) << "Time for 1024 bytes " |
759 << tester->GetElapsedTime().InMilliseconds() << " ms."; | 770 << tester->GetElapsedTime().InMilliseconds() << " ms."; |
760 | 771 |
| 772 CloseSessions(); |
| 773 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| 774 |
761 tester = new ChannelSpeedTester(host_session_.get(), | 775 tester = new ChannelSpeedTester(host_session_.get(), |
762 client_session_.get(), 51200); | 776 client_session_.get(), 51200); |
763 tester->Start(ChannelTesterBase::VIDEO); | 777 tester->Start(); |
764 ASSERT_TRUE(tester->WaitFinished()); | 778 ASSERT_TRUE(tester->WaitFinished()); |
765 LOG(INFO) << "Time for 50k bytes " | 779 LOG(INFO) << "Time for 50k bytes " |
766 << tester->GetElapsedTime().InMilliseconds() << " ms."; | 780 << tester->GetElapsedTime().InMilliseconds() << " ms."; |
767 | 781 |
| 782 CloseSessions(); |
| 783 ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| 784 |
768 tester = new ChannelSpeedTester(host_session_.get(), | 785 tester = new ChannelSpeedTester(host_session_.get(), |
769 client_session_.get(), 512000); | 786 client_session_.get(), 512000); |
770 tester->Start(ChannelTesterBase::VIDEO); | 787 tester->Start(); |
771 ASSERT_TRUE(tester->WaitFinished()); | 788 ASSERT_TRUE(tester->WaitFinished()); |
772 LOG(INFO) << "Time for 500k bytes " | 789 LOG(INFO) << "Time for 500k bytes " |
773 << tester->GetElapsedTime().InMilliseconds() << " ms."; | 790 << tester->GetElapsedTime().InMilliseconds() << " ms."; |
774 | 791 |
775 // Connections must be closed while |tester| still exists. | 792 // Connections must be closed while |tester| still exists. |
776 CloseSessions(); | 793 CloseSessions(); |
777 } | 794 } |
778 | 795 |
779 } // namespace protocol | 796 } // namespace protocol |
780 } // namespace remoting | 797 } // namespace remoting |
OLD | NEW |