| 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 |