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.h" | 5 #include "components/cast_channel/cast_socket.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 MOCK_METHOD0(Start, void()); | 151 MOCK_METHOD0(Start, void()); |
152 | 152 |
153 private: | 153 private: |
154 DISALLOW_COPY_AND_ASSIGN(MockDelegate); | 154 DISALLOW_COPY_AND_ASSIGN(MockDelegate); |
155 }; | 155 }; |
156 | 156 |
157 class CompleteHandler { | 157 class CompleteHandler { |
158 public: | 158 public: |
159 CompleteHandler() {} | 159 CompleteHandler() {} |
160 MOCK_METHOD1(OnCloseComplete, void(int result)); | 160 MOCK_METHOD1(OnCloseComplete, void(int result)); |
161 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state)); | 161 MOCK_METHOD2(OnConnectComplete, |
| 162 void(int channel_id, ChannelError error_state)); |
162 MOCK_METHOD1(OnWriteComplete, void(int result)); | 163 MOCK_METHOD1(OnWriteComplete, void(int result)); |
163 MOCK_METHOD1(OnReadComplete, void(int result)); | 164 MOCK_METHOD1(OnReadComplete, void(int result)); |
164 | 165 |
165 private: | 166 private: |
166 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); | 167 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); |
167 }; | 168 }; |
168 | 169 |
169 class TestCastSocket : public CastSocketImpl { | 170 class TestCastSocket : public CastSocketImpl { |
170 public: | 171 public: |
171 static std::unique_ptr<TestCastSocket> CreateSecure( | 172 static std::unique_ptr<TestCastSocket> CreateSecure( |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 socket_ = TestCastSocket::CreateSecure(logger_); | 350 socket_ = TestCastSocket::CreateSecure(logger_); |
350 } | 351 } |
351 | 352 |
352 void HandleAuthHandshake() { | 353 void HandleAuthHandshake() { |
353 socket_->SetupMockTransport(); | 354 socket_->SetupMockTransport(); |
354 CastMessage challenge_proto = CreateAuthChallenge(); | 355 CastMessage challenge_proto = CreateAuthChallenge(); |
355 EXPECT_CALL(*socket_->GetMockTransport(), | 356 EXPECT_CALL(*socket_->GetMockTransport(), |
356 SendMessage(EqualsProto(challenge_proto), _)) | 357 SendMessage(EqualsProto(challenge_proto), _)) |
357 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); | 358 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); |
358 EXPECT_CALL(*socket_->GetMockTransport(), Start()); | 359 EXPECT_CALL(*socket_->GetMockTransport(), Start()); |
359 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::NONE)); | 360 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE)); |
360 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 361 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
361 base::Unretained(&handler_))); | 362 base::Unretained(&handler_))); |
362 RunPendingTasks(); | 363 RunPendingTasks(); |
363 socket_->GetMockTransport()->current_delegate()->OnMessage( | 364 socket_->GetMockTransport()->current_delegate()->OnMessage( |
364 CreateAuthReply()); | 365 CreateAuthReply()); |
365 RunPendingTasks(); | 366 RunPendingTasks(); |
366 } | 367 } |
367 | 368 |
368 protected: | 369 protected: |
369 // Runs all pending tasks in the message loop. | 370 // Runs all pending tasks in the message loop. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 socket_->SetupMockTransport(); | 426 socket_->SetupMockTransport(); |
426 | 427 |
427 socket_->SetupTcpConnect(net::ASYNC, net::OK); | 428 socket_->SetupTcpConnect(net::ASYNC, net::OK); |
428 socket_->SetupSslConnect(net::ASYNC, net::OK); | 429 socket_->SetupSslConnect(net::ASYNC, net::OK); |
429 | 430 |
430 CastMessage challenge_proto = CreateAuthChallenge(); | 431 CastMessage challenge_proto = CreateAuthChallenge(); |
431 EXPECT_CALL(*socket_->GetMockTransport(), | 432 EXPECT_CALL(*socket_->GetMockTransport(), |
432 SendMessage(EqualsProto(challenge_proto), _)) | 433 SendMessage(EqualsProto(challenge_proto), _)) |
433 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); | 434 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); |
434 EXPECT_CALL(*socket_->GetMockTransport(), Start()); | 435 EXPECT_CALL(*socket_->GetMockTransport(), Start()); |
435 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::TRANSPORT_ERROR)); | 436 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::TRANSPORT_ERROR)); |
436 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 437 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
437 base::Unretained(&handler_))); | 438 base::Unretained(&handler_))); |
438 RunPendingTasks(); | 439 RunPendingTasks(); |
439 CastMessage mangled_auth_reply = CreateAuthReply(); | 440 CastMessage mangled_auth_reply = CreateAuthReply(); |
440 mangled_auth_reply.set_namespace_("BOGUS_NAMESPACE"); | 441 mangled_auth_reply.set_namespace_("BOGUS_NAMESPACE"); |
441 | 442 |
442 socket_->GetMockTransport()->current_delegate()->OnMessage( | 443 socket_->GetMockTransport()->current_delegate()->OnMessage( |
443 mangled_auth_reply); | 444 mangled_auth_reply); |
444 RunPendingTasks(); | 445 RunPendingTasks(); |
445 | 446 |
446 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 447 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
447 EXPECT_EQ(ChannelError::TRANSPORT_ERROR, socket_->error_state()); | 448 EXPECT_EQ(ChannelError::TRANSPORT_ERROR, socket_->error_state()); |
448 | 449 |
449 // Verifies that the CastSocket's resources were torn down during channel | 450 // Verifies that the CastSocket's resources were torn down during channel |
450 // close. (see http://crbug.com/504078) | 451 // close. (see http://crbug.com/504078) |
451 EXPECT_EQ(nullptr, socket_->transport()); | 452 EXPECT_EQ(nullptr, socket_->transport()); |
452 } | 453 } |
453 | 454 |
454 // Test connection error - TCP connect fails (async) | 455 // Test connection error - TCP connect fails (async) |
455 TEST_F(CastSocketTest, TestConnectTcpConnectErrorAsync) { | 456 TEST_F(CastSocketTest, TestConnectTcpConnectErrorAsync) { |
456 CreateCastSocketSecure(); | 457 CreateCastSocketSecure(); |
457 | 458 |
458 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED); | 459 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED); |
459 | 460 |
460 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::CONNECT_ERROR)); | 461 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR)); |
461 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 462 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
462 base::Unretained(&handler_))); | 463 base::Unretained(&handler_))); |
463 RunPendingTasks(); | 464 RunPendingTasks(); |
464 | 465 |
465 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 466 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
466 EXPECT_EQ(ChannelError::CONNECT_ERROR, socket_->error_state()); | 467 EXPECT_EQ(ChannelError::CONNECT_ERROR, socket_->error_state()); |
467 } | 468 } |
468 | 469 |
469 // Test connection error - TCP connect fails (sync) | 470 // Test connection error - TCP connect fails (sync) |
470 TEST_F(CastSocketTest, TestConnectTcpConnectErrorSync) { | 471 TEST_F(CastSocketTest, TestConnectTcpConnectErrorSync) { |
471 CreateCastSocketSecure(); | 472 CreateCastSocketSecure(); |
472 | 473 |
473 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED); | 474 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED); |
474 | 475 |
475 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::CONNECT_ERROR)); | 476 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR)); |
476 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 477 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
477 base::Unretained(&handler_))); | 478 base::Unretained(&handler_))); |
478 RunPendingTasks(); | 479 RunPendingTasks(); |
479 | 480 |
480 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 481 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
481 EXPECT_EQ(ChannelError::CONNECT_ERROR, socket_->error_state()); | 482 EXPECT_EQ(ChannelError::CONNECT_ERROR, socket_->error_state()); |
482 } | 483 } |
483 | 484 |
484 // Test connection error - timeout | 485 // Test connection error - timeout |
485 TEST_F(CastSocketTest, TestConnectTcpTimeoutError) { | 486 TEST_F(CastSocketTest, TestConnectTcpTimeoutError) { |
486 CreateCastSocketSecure(); | 487 CreateCastSocketSecure(); |
487 socket_->SetupTcpConnectUnresponsive(); | 488 socket_->SetupTcpConnectUnresponsive(); |
488 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::CONNECT_TIMEOUT)); | 489 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)); |
489 EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT)); | 490 EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT)); |
490 socket_->AddObserver(observer_.get()); | 491 socket_->AddObserver(observer_.get()); |
491 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 492 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
492 base::Unretained(&handler_))); | 493 base::Unretained(&handler_))); |
493 RunPendingTasks(); | 494 RunPendingTasks(); |
494 | 495 |
495 EXPECT_EQ(ReadyState::CONNECTING, socket_->ready_state()); | 496 EXPECT_EQ(ReadyState::CONNECTING, socket_->ready_state()); |
496 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); | 497 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); |
497 socket_->TriggerTimeout(); | 498 socket_->TriggerTimeout(); |
498 RunPendingTasks(); | 499 RunPendingTasks(); |
499 | 500 |
500 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 501 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
501 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); | 502 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); |
502 } | 503 } |
503 | 504 |
504 // Test connection error - TCP socket returns timeout | 505 // Test connection error - TCP socket returns timeout |
505 TEST_F(CastSocketTest, TestConnectTcpSocketTimeoutError) { | 506 TEST_F(CastSocketTest, TestConnectTcpSocketTimeoutError) { |
506 CreateCastSocketSecure(); | 507 CreateCastSocketSecure(); |
507 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT); | 508 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT); |
508 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::CONNECT_TIMEOUT)); | 509 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)); |
509 EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT)); | 510 EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT)); |
510 socket_->AddObserver(observer_.get()); | 511 socket_->AddObserver(observer_.get()); |
511 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 512 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
512 base::Unretained(&handler_))); | 513 base::Unretained(&handler_))); |
513 RunPendingTasks(); | 514 RunPendingTasks(); |
514 | 515 |
515 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 516 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
516 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); | 517 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); |
517 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT, | 518 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT, |
518 logger_->GetLastError(socket_->id()).net_return_value); | 519 logger_->GetLastError(socket_->id()).net_return_value); |
519 } | 520 } |
520 | 521 |
521 // Test connection error - SSL connect fails (async) | 522 // Test connection error - SSL connect fails (async) |
522 TEST_F(CastSocketTest, TestConnectSslConnectErrorAsync) { | 523 TEST_F(CastSocketTest, TestConnectSslConnectErrorAsync) { |
523 CreateCastSocketSecure(); | 524 CreateCastSocketSecure(); |
524 | 525 |
525 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); | 526 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); |
526 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED); | 527 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED); |
527 | 528 |
528 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::AUTHENTICATION_ERROR)); | 529 EXPECT_CALL(handler_, |
| 530 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR)); |
529 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 531 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
530 base::Unretained(&handler_))); | 532 base::Unretained(&handler_))); |
531 RunPendingTasks(); | 533 RunPendingTasks(); |
532 | 534 |
533 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 535 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
534 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); | 536 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); |
535 } | 537 } |
536 | 538 |
537 // Test connection error - SSL connect fails (sync) | 539 // Test connection error - SSL connect fails (sync) |
538 TEST_F(CastSocketTest, TestConnectSslConnectErrorSync) { | 540 TEST_F(CastSocketTest, TestConnectSslConnectErrorSync) { |
539 CreateCastSocketSecure(); | 541 CreateCastSocketSecure(); |
540 | 542 |
541 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); | 543 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); |
542 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED); | 544 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED); |
543 | 545 |
544 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::AUTHENTICATION_ERROR)); | 546 EXPECT_CALL(handler_, |
| 547 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR)); |
545 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 548 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
546 base::Unretained(&handler_))); | 549 base::Unretained(&handler_))); |
547 RunPendingTasks(); | 550 RunPendingTasks(); |
548 | 551 |
549 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 552 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
550 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); | 553 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); |
551 EXPECT_EQ(net::ERR_FAILED, | 554 EXPECT_EQ(net::ERR_FAILED, |
552 logger_->GetLastError(socket_->id()).net_return_value); | 555 logger_->GetLastError(socket_->id()).net_return_value); |
553 } | 556 } |
554 | 557 |
555 // Test connection error - SSL connect times out (sync) | 558 // Test connection error - SSL connect times out (sync) |
556 TEST_F(CastSocketTest, TestConnectSslConnectTimeoutSync) { | 559 TEST_F(CastSocketTest, TestConnectSslConnectTimeoutSync) { |
557 CreateCastSocketSecure(); | 560 CreateCastSocketSecure(); |
558 | 561 |
559 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); | 562 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); |
560 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT); | 563 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT); |
561 | 564 |
562 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::CONNECT_TIMEOUT)); | 565 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)); |
563 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 566 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
564 base::Unretained(&handler_))); | 567 base::Unretained(&handler_))); |
565 RunPendingTasks(); | 568 RunPendingTasks(); |
566 | 569 |
567 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 570 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
568 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); | 571 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); |
569 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT, | 572 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT, |
570 logger_->GetLastError(socket_->id()).net_return_value); | 573 logger_->GetLastError(socket_->id()).net_return_value); |
571 } | 574 } |
572 | 575 |
573 // Test connection error - SSL connect times out (async) | 576 // Test connection error - SSL connect times out (async) |
574 TEST_F(CastSocketTest, TestConnectSslConnectTimeoutAsync) { | 577 TEST_F(CastSocketTest, TestConnectSslConnectTimeoutAsync) { |
575 CreateCastSocketSecure(); | 578 CreateCastSocketSecure(); |
576 | 579 |
577 socket_->SetupTcpConnect(net::ASYNC, net::OK); | 580 socket_->SetupTcpConnect(net::ASYNC, net::OK); |
578 socket_->SetupSslConnect(net::ASYNC, net::ERR_CONNECTION_TIMED_OUT); | 581 socket_->SetupSslConnect(net::ASYNC, net::ERR_CONNECTION_TIMED_OUT); |
579 | 582 |
580 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::CONNECT_TIMEOUT)); | 583 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)); |
581 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 584 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
582 base::Unretained(&handler_))); | 585 base::Unretained(&handler_))); |
583 RunPendingTasks(); | 586 RunPendingTasks(); |
584 | 587 |
585 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 588 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
586 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); | 589 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); |
587 } | 590 } |
588 | 591 |
589 // Test connection error - challenge send fails | 592 // Test connection error - challenge send fails |
590 TEST_F(CastSocketTest, TestConnectChallengeSendError) { | 593 TEST_F(CastSocketTest, TestConnectChallengeSendError) { |
591 CreateCastSocketSecure(); | 594 CreateCastSocketSecure(); |
592 socket_->SetupMockTransport(); | 595 socket_->SetupMockTransport(); |
593 | 596 |
594 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); | 597 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); |
595 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); | 598 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); |
596 EXPECT_CALL(*socket_->GetMockTransport(), | 599 EXPECT_CALL(*socket_->GetMockTransport(), |
597 SendMessage(EqualsProto(CreateAuthChallenge()), _)) | 600 SendMessage(EqualsProto(CreateAuthChallenge()), _)) |
598 .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET)); | 601 .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET)); |
599 | 602 |
600 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::CAST_SOCKET_ERROR)); | 603 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CAST_SOCKET_ERROR)); |
601 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 604 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
602 base::Unretained(&handler_))); | 605 base::Unretained(&handler_))); |
603 RunPendingTasks(); | 606 RunPendingTasks(); |
604 | 607 |
605 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 608 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
606 EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state()); | 609 EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state()); |
607 } | 610 } |
608 | 611 |
609 // Test connection error - connection is destroyed after the challenge is | 612 // Test connection error - connection is destroyed after the challenge is |
610 // sent, with the async result still lurking in the task queue. | 613 // sent, with the async result still lurking in the task queue. |
(...skipping 16 matching lines...) Expand all Loading... |
627 CreateCastSocketSecure(); | 630 CreateCastSocketSecure(); |
628 socket_->SetupMockTransport(); | 631 socket_->SetupMockTransport(); |
629 | 632 |
630 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); | 633 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); |
631 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); | 634 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); |
632 EXPECT_CALL(*socket_->GetMockTransport(), | 635 EXPECT_CALL(*socket_->GetMockTransport(), |
633 SendMessage(EqualsProto(CreateAuthChallenge()), _)) | 636 SendMessage(EqualsProto(CreateAuthChallenge()), _)) |
634 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); | 637 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); |
635 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED); | 638 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED); |
636 EXPECT_CALL(*observer_, OnError(_, ChannelError::CAST_SOCKET_ERROR)); | 639 EXPECT_CALL(*observer_, OnError(_, ChannelError::CAST_SOCKET_ERROR)); |
637 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::CAST_SOCKET_ERROR)); | 640 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CAST_SOCKET_ERROR)); |
638 EXPECT_CALL(*socket_->GetMockTransport(), Start()); | 641 EXPECT_CALL(*socket_->GetMockTransport(), Start()); |
639 socket_->AddObserver(observer_.get()); | 642 socket_->AddObserver(observer_.get()); |
640 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 643 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
641 base::Unretained(&handler_))); | 644 base::Unretained(&handler_))); |
642 RunPendingTasks(); | 645 RunPendingTasks(); |
643 socket_->GetMockTransport()->current_delegate()->OnError( | 646 socket_->GetMockTransport()->current_delegate()->OnError( |
644 ChannelError::CAST_SOCKET_ERROR); | 647 ChannelError::CAST_SOCKET_ERROR); |
645 RunPendingTasks(); | 648 RunPendingTasks(); |
646 | 649 |
647 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 650 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
648 EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state()); | 651 EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state()); |
649 } | 652 } |
650 | 653 |
651 TEST_F(CastSocketTest, TestConnectChallengeVerificationFails) { | 654 TEST_F(CastSocketTest, TestConnectChallengeVerificationFails) { |
652 CreateCastSocketSecure(); | 655 CreateCastSocketSecure(); |
653 socket_->SetupMockTransport(); | 656 socket_->SetupMockTransport(); |
654 socket_->SetupTcpConnect(net::ASYNC, net::OK); | 657 socket_->SetupTcpConnect(net::ASYNC, net::OK); |
655 socket_->SetupSslConnect(net::ASYNC, net::OK); | 658 socket_->SetupSslConnect(net::ASYNC, net::OK); |
656 socket_->SetVerifyChallengeResult(false); | 659 socket_->SetVerifyChallengeResult(false); |
657 | 660 |
658 EXPECT_CALL(*observer_, OnError(_, ChannelError::AUTHENTICATION_ERROR)); | 661 EXPECT_CALL(*observer_, OnError(_, ChannelError::AUTHENTICATION_ERROR)); |
659 CastMessage challenge_proto = CreateAuthChallenge(); | 662 CastMessage challenge_proto = CreateAuthChallenge(); |
660 EXPECT_CALL(*socket_->GetMockTransport(), | 663 EXPECT_CALL(*socket_->GetMockTransport(), |
661 SendMessage(EqualsProto(challenge_proto), _)) | 664 SendMessage(EqualsProto(challenge_proto), _)) |
662 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); | 665 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); |
663 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::AUTHENTICATION_ERROR)); | 666 EXPECT_CALL(handler_, |
| 667 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR)); |
664 EXPECT_CALL(*socket_->GetMockTransport(), Start()); | 668 EXPECT_CALL(*socket_->GetMockTransport(), Start()); |
665 socket_->AddObserver(observer_.get()); | 669 socket_->AddObserver(observer_.get()); |
666 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 670 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
667 base::Unretained(&handler_))); | 671 base::Unretained(&handler_))); |
668 RunPendingTasks(); | 672 RunPendingTasks(); |
669 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply()); | 673 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply()); |
670 RunPendingTasks(); | 674 RunPendingTasks(); |
671 | 675 |
672 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); | 676 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); |
673 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); | 677 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); |
(...skipping 17 matching lines...) Expand all Loading... |
691 std::string reply_str; | 695 std::string reply_str; |
692 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str)); | 696 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str)); |
693 socket_->AddReadResultForData(net::ASYNC, reply_str); | 697 socket_->AddReadResultForData(net::ASYNC, reply_str); |
694 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 698 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
695 | 699 |
696 CastMessage test_message = CreateTestMessage(); | 700 CastMessage test_message = CreateTestMessage(); |
697 std::string test_message_str; | 701 std::string test_message_str; |
698 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str)); | 702 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str)); |
699 socket_->AddWriteResultForData(net::ASYNC, test_message_str); | 703 socket_->AddWriteResultForData(net::ASYNC, test_message_str); |
700 | 704 |
701 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::NONE)); | 705 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE)); |
702 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 706 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
703 base::Unretained(&handler_))); | 707 base::Unretained(&handler_))); |
704 RunPendingTasks(); | 708 RunPendingTasks(); |
705 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state()); | 709 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state()); |
706 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); | 710 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); |
707 | 711 |
708 // Send the test message through a real transport object. | 712 // Send the test message through a real transport object. |
709 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); | 713 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); |
710 socket_->transport()->SendMessage( | 714 socket_->transport()->SendMessage( |
711 test_message, base::Bind(&CompleteHandler::OnWriteComplete, | 715 test_message, base::Bind(&CompleteHandler::OnWriteComplete, |
(...skipping 21 matching lines...) Expand all Loading... |
733 std::string reply_str; | 737 std::string reply_str; |
734 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str)); | 738 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str)); |
735 socket_->AddReadResultForData(net::SYNCHRONOUS, reply_str); | 739 socket_->AddReadResultForData(net::SYNCHRONOUS, reply_str); |
736 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 740 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
737 | 741 |
738 CastMessage test_message = CreateTestMessage(); | 742 CastMessage test_message = CreateTestMessage(); |
739 std::string test_message_str; | 743 std::string test_message_str; |
740 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str)); | 744 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str)); |
741 socket_->AddWriteResultForData(net::SYNCHRONOUS, test_message_str); | 745 socket_->AddWriteResultForData(net::SYNCHRONOUS, test_message_str); |
742 | 746 |
743 EXPECT_CALL(handler_, OnConnectComplete(ChannelError::NONE)); | 747 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE)); |
744 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 748 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
745 base::Unretained(&handler_))); | 749 base::Unretained(&handler_))); |
746 RunPendingTasks(); | 750 RunPendingTasks(); |
747 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state()); | 751 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state()); |
748 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); | 752 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); |
749 | 753 |
750 // Send the test message through a real transport object. | 754 // Send the test message through a real transport object. |
751 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); | 755 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); |
752 socket_->transport()->SendMessage( | 756 socket_->transport()->SendMessage( |
753 test_message, base::Bind(&CompleteHandler::OnWriteComplete, | 757 test_message, base::Bind(&CompleteHandler::OnWriteComplete, |
(...skipping 14 matching lines...) Expand all Loading... |
768 socket_->AddObserver(&observer2); | 772 socket_->AddObserver(&observer2); |
769 socket_->AddObserver(&observer2); | 773 socket_->AddObserver(&observer2); |
770 | 774 |
771 // Test notify observers | 775 // Test notify observers |
772 EXPECT_CALL(observer1, OnError(_, cast_channel::ChannelError::CONNECT_ERROR)); | 776 EXPECT_CALL(observer1, OnError(_, cast_channel::ChannelError::CONNECT_ERROR)); |
773 EXPECT_CALL(observer2, OnError(_, cast_channel::ChannelError::CONNECT_ERROR)); | 777 EXPECT_CALL(observer2, OnError(_, cast_channel::ChannelError::CONNECT_ERROR)); |
774 CastSocketImpl::CastSocketMessageDelegate delegate(socket_.get()); | 778 CastSocketImpl::CastSocketMessageDelegate delegate(socket_.get()); |
775 delegate.OnError(cast_channel::ChannelError::CONNECT_ERROR); | 779 delegate.OnError(cast_channel::ChannelError::CONNECT_ERROR); |
776 } | 780 } |
777 | 781 |
| 782 TEST_F(CastSocketTest, TestOpenChannelConnectingSocket) { |
| 783 CreateCastSocketSecure(); |
| 784 socket_->SetupTcpConnectUnresponsive(); |
| 785 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 786 base::Unretained(&handler_))); |
| 787 RunPendingTasks(); |
| 788 |
| 789 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)) |
| 790 .Times(2); |
| 791 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 792 base::Unretained(&handler_))); |
| 793 socket_->TriggerTimeout(); |
| 794 RunPendingTasks(); |
| 795 } |
| 796 |
| 797 TEST_F(CastSocketTest, TestOpenChannelConnectedSocket) { |
| 798 CreateCastSocketSecure(); |
| 799 socket_->SetupTcpConnect(net::ASYNC, net::OK); |
| 800 socket_->SetupSslConnect(net::ASYNC, net::OK); |
| 801 |
| 802 HandleAuthHandshake(); |
| 803 |
| 804 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE)); |
| 805 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 806 base::Unretained(&handler_))); |
| 807 } |
| 808 |
| 809 TEST_F(CastSocketTest, TestOpenChannelClosedSocket) { |
| 810 CreateCastSocketSecure(); |
| 811 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED); |
| 812 |
| 813 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR)); |
| 814 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 815 base::Unretained(&handler_))); |
| 816 RunPendingTasks(); |
| 817 |
| 818 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR)); |
| 819 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 820 base::Unretained(&handler_))); |
| 821 } |
| 822 |
778 } // namespace cast_channel | 823 } // namespace cast_channel |
OLD | NEW |