| 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 "extensions/browser/api/cast_channel/cast_socket.h" | 5 #include "extensions/browser/api/cast_channel/cast_socket.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 const std::string& destination_id, | 67 const std::string& destination_id, |
| 68 const std::string& data, | 68 const std::string& data, |
| 69 MessageInfo* message) { | 69 MessageInfo* message) { |
| 70 message->namespace_ = namespace_; | 70 message->namespace_ = namespace_; |
| 71 message->source_id = source_id; | 71 message->source_id = source_id; |
| 72 message->destination_id = destination_id; | 72 message->destination_id = destination_id; |
| 73 message->data.reset(base::BinaryValue::CreateWithCopiedBuffer( | 73 message->data.reset(base::BinaryValue::CreateWithCopiedBuffer( |
| 74 data.c_str(), data.size())); | 74 data.c_str(), data.size())); |
| 75 } | 75 } |
| 76 | 76 |
| 77 class MockCastSocketDelegate : public CastSocket::Delegate { | 77 class MockCastSocketImplDelegate : public CastSocketImpl::Delegate { |
| 78 public: | 78 public: |
| 79 MOCK_METHOD3(OnError, | 79 MOCK_METHOD3(OnError, |
| 80 void(const CastSocket* socket, | 80 void(const CastSocketImpl* socket, |
| 81 ChannelError error, | 81 ChannelError error, |
| 82 const LastErrors& last_errors)); | 82 const LastErrors& last_errors)); |
| 83 MOCK_METHOD2(OnMessage, void(const CastSocket* socket, | 83 MOCK_METHOD2(OnMessage, |
| 84 const MessageInfo& message)); | 84 void(const CastSocketImpl* socket, const MessageInfo& message)); |
| 85 }; | 85 }; |
| 86 | 86 |
| 87 class MockTCPSocket : public net::TCPClientSocket { | 87 class MockTCPSocket : public net::TCPClientSocket { |
| 88 public: | 88 public: |
| 89 explicit MockTCPSocket(const net::MockConnect& connect_data) : | 89 explicit MockTCPSocket(const net::MockConnect& connect_data) : |
| 90 TCPClientSocket(net::AddressList(), NULL, net::NetLog::Source()), | 90 TCPClientSocket(net::AddressList(), NULL, net::NetLog::Source()), |
| 91 connect_data_(connect_data), | 91 connect_data_(connect_data), |
| 92 do_nothing_(false) { } | 92 do_nothing_(false) { } |
| 93 | 93 |
| 94 explicit MockTCPSocket(bool do_nothing) : | 94 explicit MockTCPSocket(bool do_nothing) : |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 class CompleteHandler { | 141 class CompleteHandler { |
| 142 public: | 142 public: |
| 143 CompleteHandler() {} | 143 CompleteHandler() {} |
| 144 MOCK_METHOD1(OnCloseComplete, void(int result)); | 144 MOCK_METHOD1(OnCloseComplete, void(int result)); |
| 145 MOCK_METHOD1(OnConnectComplete, void(int result)); | 145 MOCK_METHOD1(OnConnectComplete, void(int result)); |
| 146 MOCK_METHOD1(OnWriteComplete, void(int result)); | 146 MOCK_METHOD1(OnWriteComplete, void(int result)); |
| 147 private: | 147 private: |
| 148 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); | 148 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); |
| 149 }; | 149 }; |
| 150 | 150 |
| 151 class TestCastSocket : public CastSocket { | 151 class TestCastSocketImpl : public CastSocketImpl { |
| 152 public: | 152 public: |
| 153 static scoped_ptr<TestCastSocket> Create(MockCastSocketDelegate* delegate, | 153 static scoped_ptr<TestCastSocketImpl> Create( |
| 154 Logger* logger) { | 154 MockCastSocketImplDelegate* delegate, |
| 155 return scoped_ptr<TestCastSocket>(new TestCastSocket(delegate, | 155 Logger* logger) { |
| 156 CreateIPEndPoint(), | 156 return scoped_ptr<TestCastSocketImpl>( |
| 157 CHANNEL_AUTH_TYPE_SSL, | 157 new TestCastSocketImpl(delegate, |
| 158 kDistantTimeoutMillis, | 158 CreateIPEndPoint(), |
| 159 logger)); | 159 CHANNEL_AUTH_TYPE_SSL, |
| 160 kDistantTimeoutMillis, |
| 161 logger)); |
| 160 } | 162 } |
| 161 | 163 |
| 162 static scoped_ptr<TestCastSocket> CreateSecure( | 164 static scoped_ptr<TestCastSocketImpl> CreateSecure( |
| 163 MockCastSocketDelegate* delegate, | 165 MockCastSocketImplDelegate* delegate, |
| 164 Logger* logger) { | 166 Logger* logger) { |
| 165 return scoped_ptr<TestCastSocket>( | 167 return scoped_ptr<TestCastSocketImpl>( |
| 166 new TestCastSocket(delegate, | 168 new TestCastSocketImpl(delegate, |
| 167 CreateIPEndPoint(), | 169 CreateIPEndPoint(), |
| 168 CHANNEL_AUTH_TYPE_SSL_VERIFIED, | 170 CHANNEL_AUTH_TYPE_SSL_VERIFIED, |
| 169 kDistantTimeoutMillis, | 171 kDistantTimeoutMillis, |
| 170 logger)); | 172 logger)); |
| 171 } | 173 } |
| 172 | 174 |
| 173 explicit TestCastSocket(MockCastSocketDelegate* delegate, | 175 explicit TestCastSocketImpl(MockCastSocketImplDelegate* delegate, |
| 174 const net::IPEndPoint& ip_endpoint, | 176 const net::IPEndPoint& ip_endpoint, |
| 175 ChannelAuthType channel_auth, | 177 ChannelAuthType channel_auth, |
| 176 int64 timeout_ms, | 178 int64 timeout_ms, |
| 177 Logger* logger) | 179 Logger* logger) |
| 178 : CastSocket("abcdefg", | 180 : CastSocketImpl("abcdefg", |
| 179 ip_endpoint, | 181 ip_endpoint, |
| 180 channel_auth, | 182 channel_auth, |
| 181 delegate, | 183 delegate, |
| 182 &capturing_net_log_, | 184 &capturing_net_log_, |
| 183 base::TimeDelta::FromMilliseconds(timeout_ms), | 185 base::TimeDelta::FromMilliseconds(timeout_ms), |
| 184 logger), | 186 logger), |
| 185 ip_(ip_endpoint), | 187 ip_(ip_endpoint), |
| 186 connect_index_(0), | 188 connect_index_(0), |
| 187 extract_cert_result_(true), | 189 extract_cert_result_(true), |
| 188 verify_challenge_result_(true), | 190 verify_challenge_result_(true), |
| 189 verify_challenge_disallow_(false), | 191 verify_challenge_disallow_(false), |
| 190 tcp_unresponsive_(false), | 192 tcp_unresponsive_(false), |
| 191 mock_timer_(new base::MockTimer(false, false)) {} | 193 mock_timer_(new base::MockTimer(false, false)) {} |
| 192 | 194 |
| 193 static net::IPEndPoint CreateIPEndPoint() { | 195 static net::IPEndPoint CreateIPEndPoint() { |
| 194 net::IPAddressNumber number; | 196 net::IPAddressNumber number; |
| 195 number.push_back(192); | 197 number.push_back(192); |
| 196 number.push_back(0); | 198 number.push_back(0); |
| 197 number.push_back(0); | 199 number.push_back(0); |
| 198 number.push_back(1); | 200 number.push_back(1); |
| 199 return net::IPEndPoint(number, 8009); | 201 return net::IPEndPoint(number, 8009); |
| 200 } | 202 } |
| 201 | 203 |
| 202 // Returns the size of the body (in bytes) of the given serialized message. | 204 // Returns the size of the body (in bytes) of the given serialized message. |
| 203 static size_t ComputeBodySize(const std::string& msg) { | 205 static size_t ComputeBodySize(const std::string& msg) { |
| 204 return msg.length() - MessageFramer::MessageHeader::header_size(); | 206 return msg.length() - MessageFramer::MessageHeader::header_size(); |
| 205 } | 207 } |
| 206 | 208 |
| 207 virtual ~TestCastSocket() { | 209 virtual ~TestCastSocketImpl() {} |
| 208 } | |
| 209 | 210 |
| 210 // Helpers to set mock results for various operations. | 211 // Helpers to set mock results for various operations. |
| 211 void SetupTcp1Connect(net::IoMode mode, int result) { | 212 void SetupTcp1Connect(net::IoMode mode, int result) { |
| 212 tcp_connect_data_[0].reset(new net::MockConnect(mode, result)); | 213 tcp_connect_data_[0].reset(new net::MockConnect(mode, result)); |
| 213 } | 214 } |
| 214 void SetupSsl1Connect(net::IoMode mode, int result) { | 215 void SetupSsl1Connect(net::IoMode mode, int result) { |
| 215 ssl_connect_data_[0].reset(new net::MockConnect(mode, result)); | 216 ssl_connect_data_[0].reset(new net::MockConnect(mode, result)); |
| 216 } | 217 } |
| 217 void SetupTcp2Connect(net::IoMode mode, int result) { | 218 void SetupTcp2Connect(net::IoMode mode, int result) { |
| 218 tcp_connect_data_[1].reset(new net::MockConnect(mode, result)); | 219 tcp_connect_data_[1].reset(new net::MockConnect(mode, result)); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 // Simulated result of peer cert extraction. | 340 // Simulated result of peer cert extraction. |
| 340 bool extract_cert_result_; | 341 bool extract_cert_result_; |
| 341 // Simulated result of verifying challenge reply. | 342 // Simulated result of verifying challenge reply. |
| 342 bool verify_challenge_result_; | 343 bool verify_challenge_result_; |
| 343 bool verify_challenge_disallow_; | 344 bool verify_challenge_disallow_; |
| 344 // If true, makes TCP connection process stall. For timeout testing. | 345 // If true, makes TCP connection process stall. For timeout testing. |
| 345 bool tcp_unresponsive_; | 346 bool tcp_unresponsive_; |
| 346 scoped_ptr<base::MockTimer> mock_timer_; | 347 scoped_ptr<base::MockTimer> mock_timer_; |
| 347 }; | 348 }; |
| 348 | 349 |
| 349 class CastSocketTest : public testing::Test { | 350 class CastSocketImplTest : public testing::Test { |
| 350 public: | 351 public: |
| 351 CastSocketTest() | 352 CastSocketImplTest() |
| 352 : logger_(new Logger( | 353 : logger_(new Logger( |
| 353 scoped_ptr<base::TickClock>(new base::SimpleTestTickClock), | 354 scoped_ptr<base::TickClock>(new base::SimpleTestTickClock), |
| 354 base::TimeTicks())) {} | 355 base::TimeTicks())) {} |
| 355 virtual ~CastSocketTest() {} | 356 virtual ~CastSocketImplTest() {} |
| 356 | 357 |
| 357 virtual void SetUp() OVERRIDE { | 358 virtual void SetUp() OVERRIDE { |
| 358 // Create a few test messages | 359 // Create a few test messages |
| 359 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 360 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 360 CreateStringMessage("urn:cast", "1", "2", kTestData[i], | 361 CreateStringMessage("urn:cast", "1", "2", kTestData[i], |
| 361 &test_messages_[i]); | 362 &test_messages_[i]); |
| 362 ASSERT_TRUE(MessageInfoToCastMessage( | 363 ASSERT_TRUE(MessageInfoToCastMessage( |
| 363 test_messages_[i], &test_protos_[i])); | 364 test_messages_[i], &test_protos_[i])); |
| 364 ASSERT_TRUE( | 365 ASSERT_TRUE( |
| 365 MessageFramer::Serialize(test_protos_[i], &test_proto_strs_[i])); | 366 MessageFramer::Serialize(test_protos_[i], &test_proto_strs_[i])); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 385 | 386 |
| 386 // Create a test auth reply. | 387 // Create a test auth reply. |
| 387 MessageInfo reply; | 388 MessageInfo reply; |
| 388 CreateBinaryMessage( | 389 CreateBinaryMessage( |
| 389 auth_namespace, "sender-0", "receiver-0", "abcd", &reply); | 390 auth_namespace, "sender-0", "receiver-0", "abcd", &reply); |
| 390 CastMessage reply_msg; | 391 CastMessage reply_msg; |
| 391 ASSERT_TRUE(MessageInfoToCastMessage(reply, &reply_msg)); | 392 ASSERT_TRUE(MessageInfoToCastMessage(reply, &reply_msg)); |
| 392 ASSERT_TRUE(MessageFramer::Serialize(reply_msg, &auth_reply_)); | 393 ASSERT_TRUE(MessageFramer::Serialize(reply_msg, &auth_reply_)); |
| 393 } | 394 } |
| 394 | 395 |
| 395 void CreateCastSocket() { | 396 void CreateCastSocketImpl() { |
| 396 socket_ = TestCastSocket::Create(&mock_delegate_, logger_.get()); | 397 socket_ = TestCastSocketImpl::Create(&mock_delegate_, logger_.get()); |
| 397 } | 398 } |
| 398 | 399 |
| 399 void CreateCastSocketSecure() { | 400 void CreateCastSocketImplSecure() { |
| 400 socket_ = TestCastSocket::CreateSecure(&mock_delegate_, logger_.get()); | 401 socket_ = TestCastSocketImpl::CreateSecure(&mock_delegate_, logger_.get()); |
| 401 } | 402 } |
| 402 | 403 |
| 403 // Sets up CastSocket::Connect to succeed. | 404 // Sets up CastSocketImpl::Connect to succeed. |
| 404 // Connecting the socket also starts the read loop; so we add a mock | 405 // Connecting the socket also starts the read loop; so we add a mock |
| 405 // read result that returns IO_PENDING and callback is never fired. | 406 // read result that returns IO_PENDING and callback is never fired. |
| 406 void ConnectHelper() { | 407 void ConnectHelper() { |
| 407 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 408 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 408 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); | 409 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); |
| 409 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 410 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 410 | 411 |
| 411 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 412 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 412 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 413 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 413 base::Unretained(&handler_))); | 414 base::Unretained(&handler_))); |
| 414 RunPendingTasks(); | 415 RunPendingTasks(); |
| 415 } | 416 } |
| 416 | 417 |
| 417 protected: | 418 protected: |
| 418 // Runs all pending tasks in the message loop. | 419 // Runs all pending tasks in the message loop. |
| 419 void RunPendingTasks() { | 420 void RunPendingTasks() { |
| 420 base::RunLoop run_loop; | 421 base::RunLoop run_loop; |
| 421 run_loop.RunUntilIdle(); | 422 run_loop.RunUntilIdle(); |
| 422 } | 423 } |
| 423 | 424 |
| 424 base::MessageLoop message_loop_; | 425 base::MessageLoop message_loop_; |
| 425 MockCastSocketDelegate mock_delegate_; | 426 MockCastSocketImplDelegate mock_delegate_; |
| 426 scoped_refptr<Logger> logger_; | 427 scoped_refptr<Logger> logger_; |
| 427 scoped_ptr<TestCastSocket> socket_; | 428 scoped_ptr<TestCastSocketImpl> socket_; |
| 428 CompleteHandler handler_; | 429 CompleteHandler handler_; |
| 429 MessageInfo test_messages_[arraysize(kTestData)]; | 430 MessageInfo test_messages_[arraysize(kTestData)]; |
| 430 CastMessage test_protos_[arraysize(kTestData)]; | 431 CastMessage test_protos_[arraysize(kTestData)]; |
| 431 std::string test_proto_strs_[arraysize(kTestData)]; | 432 std::string test_proto_strs_[arraysize(kTestData)]; |
| 432 std::string auth_request_; | 433 std::string auth_request_; |
| 433 std::string auth_reply_; | 434 std::string auth_reply_; |
| 434 }; | 435 }; |
| 435 | 436 |
| 436 // Tests connecting and closing the socket. | 437 // Tests connecting and closing the socket. |
| 437 TEST_F(CastSocketTest, TestConnectAndClose) { | 438 TEST_F(CastSocketImplTest, TestConnectAndClose) { |
| 438 CreateCastSocket(); | 439 CreateCastSocketImpl(); |
| 439 ConnectHelper(); | 440 ConnectHelper(); |
| 440 SetupAuthMessage(); | 441 SetupAuthMessage(); |
| 441 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 442 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 442 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 443 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 443 | 444 |
| 444 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); | 445 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); |
| 445 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, | 446 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, |
| 446 base::Unretained(&handler_))); | 447 base::Unretained(&handler_))); |
| 447 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 448 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 448 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 449 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 449 } | 450 } |
| 450 | 451 |
| 451 // Tests that the following connection flow works: | 452 // Tests that the following connection flow works: |
| 452 // - TCP connection succeeds (async) | 453 // - TCP connection succeeds (async) |
| 453 // - SSL connection succeeds (async) | 454 // - SSL connection succeeds (async) |
| 454 TEST_F(CastSocketTest, TestConnect) { | 455 TEST_F(CastSocketImplTest, TestConnect) { |
| 455 CreateCastSocket(); | 456 CreateCastSocketImpl(); |
| 456 SetupAuthMessage(); | 457 SetupAuthMessage(); |
| 457 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 458 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 458 socket_->SetupSsl1Connect(net::ASYNC, net::OK); | 459 socket_->SetupSsl1Connect(net::ASYNC, net::OK); |
| 459 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 460 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 460 | 461 |
| 461 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 462 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 462 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 463 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 463 base::Unretained(&handler_))); | 464 base::Unretained(&handler_))); |
| 464 RunPendingTasks(); | 465 RunPendingTasks(); |
| 465 | 466 |
| 466 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 467 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 467 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 468 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 468 } | 469 } |
| 469 | 470 |
| 470 // Test that the following connection flow works: | 471 // Test that the following connection flow works: |
| 471 // - TCP connection succeeds (async) | 472 // - TCP connection succeeds (async) |
| 472 // - SSL connection fails with cert error (async) | 473 // - SSL connection fails with cert error (async) |
| 473 // - Cert is extracted successfully | 474 // - Cert is extracted successfully |
| 474 // - Second TCP connection succeeds (async) | 475 // - Second TCP connection succeeds (async) |
| 475 // - Second SSL connection succeeds (async) | 476 // - Second SSL connection succeeds (async) |
| 476 TEST_F(CastSocketTest, TestConnectTwoStep) { | 477 TEST_F(CastSocketImplTest, TestConnectTwoStep) { |
| 477 CreateCastSocket(); | 478 CreateCastSocketImpl(); |
| 478 SetupAuthMessage(); | 479 SetupAuthMessage(); |
| 479 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 480 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 480 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 481 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 481 socket_->SetupTcp2Connect(net::ASYNC, net::OK); | 482 socket_->SetupTcp2Connect(net::ASYNC, net::OK); |
| 482 socket_->SetupSsl2Connect(net::ASYNC, net::OK); | 483 socket_->SetupSsl2Connect(net::ASYNC, net::OK); |
| 483 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 484 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 484 | 485 |
| 485 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 486 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 486 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 487 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 487 base::Unretained(&handler_))); | 488 base::Unretained(&handler_))); |
| 488 RunPendingTasks(); | 489 RunPendingTasks(); |
| 489 | 490 |
| 490 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 491 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 491 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 492 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 492 } | 493 } |
| 493 | 494 |
| 494 // Test that the following connection flow works: | 495 // Test that the following connection flow works: |
| 495 // - TCP connection succeeds (async) | 496 // - TCP connection succeeds (async) |
| 496 // - SSL connection fails with cert error (async) | 497 // - SSL connection fails with cert error (async) |
| 497 // - Cert is extracted successfully | 498 // - Cert is extracted successfully |
| 498 // - Second TCP connection succeeds (async) | 499 // - Second TCP connection succeeds (async) |
| 499 // - Second SSL connection fails (async) | 500 // - Second SSL connection fails (async) |
| 500 // - The flow should NOT be tried again | 501 // - The flow should NOT be tried again |
| 501 TEST_F(CastSocketTest, TestConnectMaxTwoAttempts) { | 502 TEST_F(CastSocketImplTest, TestConnectMaxTwoAttempts) { |
| 502 CreateCastSocket(); | 503 CreateCastSocketImpl(); |
| 503 SetupAuthMessage(); | 504 SetupAuthMessage(); |
| 504 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 505 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 505 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 506 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 506 socket_->SetupTcp2Connect(net::ASYNC, net::OK); | 507 socket_->SetupTcp2Connect(net::ASYNC, net::OK); |
| 507 socket_->SetupSsl2Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 508 socket_->SetupSsl2Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 508 | 509 |
| 509 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 510 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 510 EXPECT_CALL(mock_delegate_, | 511 EXPECT_CALL(mock_delegate_, |
| 511 OnError(socket_.get(), | 512 OnError(socket_.get(), |
| 512 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 513 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 513 A<const LastErrors&>())); | 514 A<const LastErrors&>())); |
| 514 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 515 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 515 base::Unretained(&handler_))); | 516 base::Unretained(&handler_))); |
| 516 RunPendingTasks(); | 517 RunPendingTasks(); |
| 517 | 518 |
| 518 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 519 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 519 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 520 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 520 } | 521 } |
| 521 | 522 |
| 522 // Tests that the following connection flow works: | 523 // Tests that the following connection flow works: |
| 523 // - TCP connection succeeds (async) | 524 // - TCP connection succeeds (async) |
| 524 // - SSL connection fails with cert error (async) | 525 // - SSL connection fails with cert error (async) |
| 525 // - Cert is extracted successfully | 526 // - Cert is extracted successfully |
| 526 // - Second TCP connection succeeds (async) | 527 // - Second TCP connection succeeds (async) |
| 527 // - Second SSL connection succeeds (async) | 528 // - Second SSL connection succeeds (async) |
| 528 // - Challenge request is sent (async) | 529 // - Challenge request is sent (async) |
| 529 // - Challenge response is received (async) | 530 // - Challenge response is received (async) |
| 530 // - Credentials are verified successfuly | 531 // - Credentials are verified successfuly |
| 531 TEST_F(CastSocketTest, TestConnectFullSecureFlowAsync) { | 532 TEST_F(CastSocketImplTest, TestConnectFullSecureFlowAsync) { |
| 532 CreateCastSocketSecure(); | 533 CreateCastSocketImplSecure(); |
| 533 SetupAuthMessage(); | 534 SetupAuthMessage(); |
| 534 | 535 |
| 535 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 536 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 536 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 537 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 537 socket_->SetupTcp2Connect(net::ASYNC, net::OK); | 538 socket_->SetupTcp2Connect(net::ASYNC, net::OK); |
| 538 socket_->SetupSsl2Connect(net::ASYNC, net::OK); | 539 socket_->SetupSsl2Connect(net::ASYNC, net::OK); |
| 539 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); | 540 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); |
| 540 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); | 541 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); |
| 541 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 542 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 542 | 543 |
| 543 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 544 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 544 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 545 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 545 base::Unretained(&handler_))); | 546 base::Unretained(&handler_))); |
| 546 RunPendingTasks(); | 547 RunPendingTasks(); |
| 547 | 548 |
| 548 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 549 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 549 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 550 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 550 } | 551 } |
| 551 | 552 |
| 552 // Same as TestFullSecureConnectionFlowAsync, but operations are synchronous. | 553 // Same as TestFullSecureConnectionFlowAsync, but operations are synchronous. |
| 553 TEST_F(CastSocketTest, TestConnectFullSecureFlowSync) { | 554 TEST_F(CastSocketImplTest, TestConnectFullSecureFlowSync) { |
| 554 CreateCastSocketSecure(); | 555 CreateCastSocketImplSecure(); |
| 555 SetupAuthMessage(); | 556 SetupAuthMessage(); |
| 556 | 557 |
| 557 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 558 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 558 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_CERT_AUTHORITY_INVALID); | 559 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_CERT_AUTHORITY_INVALID); |
| 559 socket_->SetupTcp2Connect(net::SYNCHRONOUS, net::OK); | 560 socket_->SetupTcp2Connect(net::SYNCHRONOUS, net::OK); |
| 560 socket_->SetupSsl2Connect(net::SYNCHRONOUS, net::OK); | 561 socket_->SetupSsl2Connect(net::SYNCHRONOUS, net::OK); |
| 561 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, auth_request_); | 562 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, auth_request_); |
| 562 socket_->AddReadResultForMessage(net::SYNCHRONOUS, auth_reply_); | 563 socket_->AddReadResultForMessage(net::SYNCHRONOUS, auth_reply_); |
| 563 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 564 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 564 | 565 |
| 565 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 566 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 566 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 567 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 567 base::Unretained(&handler_))); | 568 base::Unretained(&handler_))); |
| 568 RunPendingTasks(); | 569 RunPendingTasks(); |
| 569 | 570 |
| 570 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 571 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 571 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 572 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 572 } | 573 } |
| 573 | 574 |
| 574 // Test that an AuthMessage with a mangled namespace triggers cancelation | 575 // Test that an AuthMessage with a mangled namespace triggers cancelation |
| 575 // of the connection event loop. | 576 // of the connection event loop. |
| 576 TEST_F(CastSocketTest, TestConnectAuthMessageCorrupted) { | 577 TEST_F(CastSocketImplTest, TestConnectAuthMessageCorrupted) { |
| 577 CreateCastSocketSecure(); | 578 CreateCastSocketImplSecure(); |
| 578 SetupAuthMessage("bogus_namespace"); | 579 SetupAuthMessage("bogus_namespace"); |
| 579 | 580 |
| 580 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 581 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 581 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 582 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 582 socket_->SetupTcp2Connect(net::ASYNC, net::OK); | 583 socket_->SetupTcp2Connect(net::ASYNC, net::OK); |
| 583 socket_->SetupSsl2Connect(net::ASYNC, net::OK); | 584 socket_->SetupSsl2Connect(net::ASYNC, net::OK); |
| 584 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); | 585 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); |
| 585 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); | 586 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); |
| 586 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 587 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 587 // Guard against VerifyChallengeResult() being triggered. | 588 // Guard against VerifyChallengeResult() being triggered. |
| 588 socket_->DisallowVerifyChallengeResult(); | 589 socket_->DisallowVerifyChallengeResult(); |
| 589 | 590 |
| 590 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 591 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 591 EXPECT_CALL(mock_delegate_, | 592 EXPECT_CALL(mock_delegate_, |
| 592 OnError(socket_.get(), | 593 OnError(socket_.get(), |
| 593 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 594 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 594 A<const LastErrors&>())); | 595 A<const LastErrors&>())); |
| 595 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 596 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 596 base::Unretained(&handler_))); | 597 base::Unretained(&handler_))); |
| 597 RunPendingTasks(); | 598 RunPendingTasks(); |
| 598 | 599 |
| 599 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 600 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 600 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 601 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 601 } | 602 } |
| 602 | 603 |
| 603 // Test connection error - TCP connect fails (async) | 604 // Test connection error - TCP connect fails (async) |
| 604 TEST_F(CastSocketTest, TestConnectTcpConnectErrorAsync) { | 605 TEST_F(CastSocketImplTest, TestConnectTcpConnectErrorAsync) { |
| 605 CreateCastSocketSecure(); | 606 CreateCastSocketImplSecure(); |
| 606 SetupAuthMessage(); | 607 SetupAuthMessage(); |
| 607 | 608 |
| 608 socket_->SetupTcp1Connect(net::ASYNC, net::ERR_FAILED); | 609 socket_->SetupTcp1Connect(net::ASYNC, net::ERR_FAILED); |
| 609 | 610 |
| 610 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 611 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 611 EXPECT_CALL(mock_delegate_, | 612 EXPECT_CALL(mock_delegate_, |
| 612 OnError(socket_.get(), | 613 OnError(socket_.get(), |
| 613 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 614 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 614 A<const LastErrors&>())); | 615 A<const LastErrors&>())); |
| 615 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 616 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 616 base::Unretained(&handler_))); | 617 base::Unretained(&handler_))); |
| 617 RunPendingTasks(); | 618 RunPendingTasks(); |
| 618 | 619 |
| 619 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 620 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 620 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 621 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 621 } | 622 } |
| 622 | 623 |
| 623 // Test connection error - TCP connect fails (sync) | 624 // Test connection error - TCP connect fails (sync) |
| 624 TEST_F(CastSocketTest, TestConnectTcpConnectErrorSync) { | 625 TEST_F(CastSocketImplTest, TestConnectTcpConnectErrorSync) { |
| 625 CreateCastSocketSecure(); | 626 CreateCastSocketImplSecure(); |
| 626 SetupAuthMessage(); | 627 SetupAuthMessage(); |
| 627 | 628 |
| 628 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::ERR_FAILED); | 629 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::ERR_FAILED); |
| 629 | 630 |
| 630 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 631 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 631 EXPECT_CALL(mock_delegate_, | 632 EXPECT_CALL(mock_delegate_, |
| 632 OnError(socket_.get(), | 633 OnError(socket_.get(), |
| 633 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 634 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 634 A<const LastErrors&>())); | 635 A<const LastErrors&>())); |
| 635 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 636 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 636 base::Unretained(&handler_))); | 637 base::Unretained(&handler_))); |
| 637 RunPendingTasks(); | 638 RunPendingTasks(); |
| 638 | 639 |
| 639 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 640 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 640 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 641 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 641 } | 642 } |
| 642 | 643 |
| 643 // Test connection error - timeout | 644 // Test connection error - timeout |
| 644 TEST_F(CastSocketTest, TestConnectTcpTimeoutError) { | 645 TEST_F(CastSocketImplTest, TestConnectTcpTimeoutError) { |
| 645 CreateCastSocketSecure(); | 646 CreateCastSocketImplSecure(); |
| 646 socket_->SetupTcp1ConnectUnresponsive(); | 647 socket_->SetupTcp1ConnectUnresponsive(); |
| 647 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 648 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 648 EXPECT_CALL(mock_delegate_, | 649 EXPECT_CALL(mock_delegate_, |
| 649 OnError(socket_.get(), | 650 OnError(socket_.get(), |
| 650 cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, | 651 cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, |
| 651 A<const LastErrors&>())); | 652 A<const LastErrors&>())); |
| 652 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 653 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 653 base::Unretained(&handler_))); | 654 base::Unretained(&handler_))); |
| 654 RunPendingTasks(); | 655 RunPendingTasks(); |
| 655 | 656 |
| 656 EXPECT_EQ(cast_channel::READY_STATE_CONNECTING, socket_->ready_state()); | 657 EXPECT_EQ(cast_channel::READY_STATE_CONNECTING, socket_->ready_state()); |
| 657 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 658 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 658 socket_->TriggerTimeout(); | 659 socket_->TriggerTimeout(); |
| 659 RunPendingTasks(); | 660 RunPendingTasks(); |
| 660 | 661 |
| 661 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 662 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 662 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, | 663 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, |
| 663 socket_->error_state()); | 664 socket_->error_state()); |
| 664 } | 665 } |
| 665 | 666 |
| 666 // Test connection error - SSL connect fails (async) | 667 // Test connection error - SSL connect fails (async) |
| 667 TEST_F(CastSocketTest, TestConnectSslConnectErrorAsync) { | 668 TEST_F(CastSocketImplTest, TestConnectSslConnectErrorAsync) { |
| 668 CreateCastSocketSecure(); | 669 CreateCastSocketImplSecure(); |
| 669 SetupAuthMessage(); | 670 SetupAuthMessage(); |
| 670 | 671 |
| 671 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 672 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 672 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_FAILED); | 673 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_FAILED); |
| 673 | 674 |
| 674 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 675 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 675 EXPECT_CALL(mock_delegate_, | 676 EXPECT_CALL(mock_delegate_, |
| 676 OnError(socket_.get(), | 677 OnError(socket_.get(), |
| 677 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 678 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 678 A<const LastErrors&>())); | 679 A<const LastErrors&>())); |
| 679 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 680 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 680 base::Unretained(&handler_))); | 681 base::Unretained(&handler_))); |
| 681 RunPendingTasks(); | 682 RunPendingTasks(); |
| 682 | 683 |
| 683 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 684 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 684 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 685 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 685 } | 686 } |
| 686 | 687 |
| 687 // Test connection error - SSL connect fails (sync) | 688 // Test connection error - SSL connect fails (sync) |
| 688 TEST_F(CastSocketTest, TestConnectSslConnectErrorSync) { | 689 TEST_F(CastSocketImplTest, TestConnectSslConnectErrorSync) { |
| 689 CreateCastSocketSecure(); | 690 CreateCastSocketImplSecure(); |
| 690 SetupAuthMessage(); | 691 SetupAuthMessage(); |
| 691 | 692 |
| 692 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 693 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 693 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_FAILED); | 694 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_FAILED); |
| 694 | 695 |
| 695 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 696 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 696 EXPECT_CALL(mock_delegate_, | 697 EXPECT_CALL(mock_delegate_, |
| 697 OnError(socket_.get(), | 698 OnError(socket_.get(), |
| 698 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 699 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 699 A<const LastErrors&>())); | 700 A<const LastErrors&>())); |
| 700 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 701 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 701 base::Unretained(&handler_))); | 702 base::Unretained(&handler_))); |
| 702 RunPendingTasks(); | 703 RunPendingTasks(); |
| 703 | 704 |
| 704 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 705 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 705 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 706 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 706 } | 707 } |
| 707 | 708 |
| 708 // Test connection error - cert extraction error (async) | 709 // Test connection error - cert extraction error (async) |
| 709 TEST_F(CastSocketTest, TestConnectCertExtractionErrorAsync) { | 710 TEST_F(CastSocketImplTest, TestConnectCertExtractionErrorAsync) { |
| 710 CreateCastSocket(); | 711 CreateCastSocketImpl(); |
| 711 SetupAuthMessage(); | 712 SetupAuthMessage(); |
| 712 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 713 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 713 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 714 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 714 // Set cert extraction to fail | 715 // Set cert extraction to fail |
| 715 socket_->SetExtractCertResult(false); | 716 socket_->SetExtractCertResult(false); |
| 716 | 717 |
| 717 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 718 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 718 EXPECT_CALL(mock_delegate_, | 719 EXPECT_CALL(mock_delegate_, |
| 719 OnError(socket_.get(), | 720 OnError(socket_.get(), |
| 720 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 721 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 721 A<const LastErrors&>())); | 722 A<const LastErrors&>())); |
| 722 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 723 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 723 base::Unretained(&handler_))); | 724 base::Unretained(&handler_))); |
| 724 RunPendingTasks(); | 725 RunPendingTasks(); |
| 725 | 726 |
| 726 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 727 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 727 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 728 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 728 } | 729 } |
| 729 | 730 |
| 730 // Test connection error - cert extraction error (sync) | 731 // Test connection error - cert extraction error (sync) |
| 731 TEST_F(CastSocketTest, TestConnectCertExtractionErrorSync) { | 732 TEST_F(CastSocketImplTest, TestConnectCertExtractionErrorSync) { |
| 732 CreateCastSocket(); | 733 CreateCastSocketImpl(); |
| 733 SetupAuthMessage(); | 734 SetupAuthMessage(); |
| 734 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 735 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 735 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_CERT_AUTHORITY_INVALID); | 736 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_CERT_AUTHORITY_INVALID); |
| 736 // Set cert extraction to fail | 737 // Set cert extraction to fail |
| 737 socket_->SetExtractCertResult(false); | 738 socket_->SetExtractCertResult(false); |
| 738 | 739 |
| 739 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 740 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 740 EXPECT_CALL(mock_delegate_, | 741 EXPECT_CALL(mock_delegate_, |
| 741 OnError(socket_.get(), | 742 OnError(socket_.get(), |
| 742 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 743 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 743 A<const LastErrors&>())); | 744 A<const LastErrors&>())); |
| 744 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 745 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 745 base::Unretained(&handler_))); | 746 base::Unretained(&handler_))); |
| 746 RunPendingTasks(); | 747 RunPendingTasks(); |
| 747 | 748 |
| 748 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 749 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 749 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 750 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 750 } | 751 } |
| 751 | 752 |
| 752 // Test connection error - challenge send fails | 753 // Test connection error - challenge send fails |
| 753 TEST_F(CastSocketTest, TestConnectChallengeSendError) { | 754 TEST_F(CastSocketImplTest, TestConnectChallengeSendError) { |
| 754 CreateCastSocketSecure(); | 755 CreateCastSocketImplSecure(); |
| 755 SetupAuthMessage(); | 756 SetupAuthMessage(); |
| 756 | 757 |
| 757 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 758 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 758 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); | 759 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); |
| 759 socket_->AddWriteResult(net::SYNCHRONOUS, net::ERR_FAILED); | 760 socket_->AddWriteResult(net::SYNCHRONOUS, net::ERR_FAILED); |
| 760 | 761 |
| 761 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 762 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 762 EXPECT_CALL(mock_delegate_, | 763 EXPECT_CALL(mock_delegate_, |
| 763 OnError(socket_.get(), | 764 OnError(socket_.get(), |
| 764 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 765 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 765 A<const LastErrors&>())); | 766 A<const LastErrors&>())); |
| 766 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 767 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 767 base::Unretained(&handler_))); | 768 base::Unretained(&handler_))); |
| 768 RunPendingTasks(); | 769 RunPendingTasks(); |
| 769 | 770 |
| 770 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 771 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 771 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 772 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 772 } | 773 } |
| 773 | 774 |
| 774 // Test connection error - challenge reply receive fails | 775 // Test connection error - challenge reply receive fails |
| 775 TEST_F(CastSocketTest, TestConnectChallengeReplyReceiveError) { | 776 TEST_F(CastSocketImplTest, TestConnectChallengeReplyReceiveError) { |
| 776 CreateCastSocketSecure(); | 777 CreateCastSocketImplSecure(); |
| 777 SetupAuthMessage(); | 778 SetupAuthMessage(); |
| 778 | 779 |
| 779 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 780 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 780 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); | 781 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); |
| 781 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); | 782 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); |
| 782 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED); | 783 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED); |
| 783 | 784 |
| 784 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 785 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 785 EXPECT_CALL(mock_delegate_, | 786 EXPECT_CALL(mock_delegate_, |
| 786 OnError(socket_.get(), | 787 OnError(socket_.get(), |
| 787 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 788 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 788 A<const LastErrors&>())); | 789 A<const LastErrors&>())); |
| 789 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 790 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 790 base::Unretained(&handler_))); | 791 base::Unretained(&handler_))); |
| 791 RunPendingTasks(); | 792 RunPendingTasks(); |
| 792 | 793 |
| 793 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 794 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 794 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 795 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 795 } | 796 } |
| 796 | 797 |
| 797 // Test connection error - challenge reply verification fails | 798 // Test connection error - challenge reply verification fails |
| 798 TEST_F(CastSocketTest, TestConnectChallengeVerificationFails) { | 799 TEST_F(CastSocketImplTest, TestConnectChallengeVerificationFails) { |
| 799 CreateCastSocketSecure(); | 800 CreateCastSocketImplSecure(); |
| 800 SetupAuthMessage(); | 801 SetupAuthMessage(); |
| 801 | 802 |
| 802 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 803 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 803 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); | 804 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); |
| 804 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); | 805 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); |
| 805 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); | 806 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); |
| 806 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 807 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 807 socket_->SetVerifyChallengeResult(false); | 808 socket_->SetVerifyChallengeResult(false); |
| 808 | 809 |
| 809 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); | 810 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CONNECTION_FAILED)); |
| 810 EXPECT_CALL(mock_delegate_, | 811 EXPECT_CALL(mock_delegate_, |
| 811 OnError(socket_.get(), | 812 OnError(socket_.get(), |
| 812 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, | 813 cast_channel::CHANNEL_ERROR_CONNECT_ERROR, |
| 813 A<const LastErrors&>())); | 814 A<const LastErrors&>())); |
| 814 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 815 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 815 base::Unretained(&handler_))); | 816 base::Unretained(&handler_))); |
| 816 RunPendingTasks(); | 817 RunPendingTasks(); |
| 817 | 818 |
| 818 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 819 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 819 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 820 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 820 } | 821 } |
| 821 | 822 |
| 822 // Test write success - single message (async) | 823 // Test write success - single message (async) |
| 823 TEST_F(CastSocketTest, TestWriteAsync) { | 824 TEST_F(CastSocketImplTest, TestWriteAsync) { |
| 824 CreateCastSocket(); | 825 CreateCastSocketImpl(); |
| 825 socket_->AddWriteResultForMessage(net::ASYNC, test_proto_strs_[0]); | 826 socket_->AddWriteResultForMessage(net::ASYNC, test_proto_strs_[0]); |
| 826 ConnectHelper(); | 827 ConnectHelper(); |
| 827 SetupAuthMessage(); | 828 SetupAuthMessage(); |
| 828 | 829 |
| 829 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); | 830 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); |
| 830 socket_->SendMessage(test_messages_[0], | 831 socket_->SendMessage(test_messages_[0], |
| 831 base::Bind(&CompleteHandler::OnWriteComplete, | 832 base::Bind(&CompleteHandler::OnWriteComplete, |
| 832 base::Unretained(&handler_))); | 833 base::Unretained(&handler_))); |
| 833 RunPendingTasks(); | 834 RunPendingTasks(); |
| 834 | 835 |
| 835 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 836 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 836 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 837 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 837 } | 838 } |
| 838 | 839 |
| 839 // Test write success - single message (sync) | 840 // Test write success - single message (sync) |
| 840 TEST_F(CastSocketTest, TestWriteSync) { | 841 TEST_F(CastSocketImplTest, TestWriteSync) { |
| 841 CreateCastSocket(); | 842 CreateCastSocketImpl(); |
| 842 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0]); | 843 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0]); |
| 843 ConnectHelper(); | 844 ConnectHelper(); |
| 844 SetupAuthMessage(); | 845 SetupAuthMessage(); |
| 845 | 846 |
| 846 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); | 847 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); |
| 847 socket_->SendMessage(test_messages_[0], | 848 socket_->SendMessage(test_messages_[0], |
| 848 base::Bind(&CompleteHandler::OnWriteComplete, | 849 base::Bind(&CompleteHandler::OnWriteComplete, |
| 849 base::Unretained(&handler_))); | 850 base::Unretained(&handler_))); |
| 850 RunPendingTasks(); | 851 RunPendingTasks(); |
| 851 | 852 |
| 852 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 853 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 853 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 854 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 854 } | 855 } |
| 855 | 856 |
| 856 // Test write success - single message sent in multiple chunks (async) | 857 // Test write success - single message sent in multiple chunks (async) |
| 857 TEST_F(CastSocketTest, TestWriteChunkedAsync) { | 858 TEST_F(CastSocketImplTest, TestWriteChunkedAsync) { |
| 858 CreateCastSocket(); | 859 CreateCastSocketImpl(); |
| 859 socket_->AddWriteResultForMessage(net::ASYNC, test_proto_strs_[0], 2); | 860 socket_->AddWriteResultForMessage(net::ASYNC, test_proto_strs_[0], 2); |
| 860 ConnectHelper(); | 861 ConnectHelper(); |
| 861 SetupAuthMessage(); | 862 SetupAuthMessage(); |
| 862 | 863 |
| 863 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); | 864 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); |
| 864 socket_->SendMessage(test_messages_[0], | 865 socket_->SendMessage(test_messages_[0], |
| 865 base::Bind(&CompleteHandler::OnWriteComplete, | 866 base::Bind(&CompleteHandler::OnWriteComplete, |
| 866 base::Unretained(&handler_))); | 867 base::Unretained(&handler_))); |
| 867 RunPendingTasks(); | 868 RunPendingTasks(); |
| 868 | 869 |
| 869 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 870 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 870 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 871 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 871 } | 872 } |
| 872 | 873 |
| 873 // Test write success - single message sent in multiple chunks (sync) | 874 // Test write success - single message sent in multiple chunks (sync) |
| 874 TEST_F(CastSocketTest, TestWriteChunkedSync) { | 875 TEST_F(CastSocketImplTest, TestWriteChunkedSync) { |
| 875 CreateCastSocket(); | 876 CreateCastSocketImpl(); |
| 876 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0], 2); | 877 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0], 2); |
| 877 ConnectHelper(); | 878 ConnectHelper(); |
| 878 SetupAuthMessage(); | 879 SetupAuthMessage(); |
| 879 | 880 |
| 880 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); | 881 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); |
| 881 socket_->SendMessage(test_messages_[0], | 882 socket_->SendMessage(test_messages_[0], |
| 882 base::Bind(&CompleteHandler::OnWriteComplete, | 883 base::Bind(&CompleteHandler::OnWriteComplete, |
| 883 base::Unretained(&handler_))); | 884 base::Unretained(&handler_))); |
| 884 RunPendingTasks(); | 885 RunPendingTasks(); |
| 885 | 886 |
| 886 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 887 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 887 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 888 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 888 } | 889 } |
| 889 | 890 |
| 890 // Test write success - multiple messages (async) | 891 // Test write success - multiple messages (async) |
| 891 TEST_F(CastSocketTest, TestWriteManyAsync) { | 892 TEST_F(CastSocketImplTest, TestWriteManyAsync) { |
| 892 CreateCastSocket(); | 893 CreateCastSocketImpl(); |
| 893 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 894 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 894 size_t msg_size = test_proto_strs_[i].size(); | 895 size_t msg_size = test_proto_strs_[i].size(); |
| 895 socket_->AddWriteResult(net::ASYNC, msg_size); | 896 socket_->AddWriteResult(net::ASYNC, msg_size); |
| 896 EXPECT_CALL(handler_, OnWriteComplete(msg_size)); | 897 EXPECT_CALL(handler_, OnWriteComplete(msg_size)); |
| 897 } | 898 } |
| 898 ConnectHelper(); | 899 ConnectHelper(); |
| 899 SetupAuthMessage(); | 900 SetupAuthMessage(); |
| 900 | 901 |
| 901 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 902 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 902 socket_->SendMessage(test_messages_[i], | 903 socket_->SendMessage(test_messages_[i], |
| 903 base::Bind(&CompleteHandler::OnWriteComplete, | 904 base::Bind(&CompleteHandler::OnWriteComplete, |
| 904 base::Unretained(&handler_))); | 905 base::Unretained(&handler_))); |
| 905 } | 906 } |
| 906 RunPendingTasks(); | 907 RunPendingTasks(); |
| 907 | 908 |
| 908 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 909 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 909 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 910 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 910 } | 911 } |
| 911 | 912 |
| 912 // Test write success - multiple messages (sync) | 913 // Test write success - multiple messages (sync) |
| 913 TEST_F(CastSocketTest, TestWriteManySync) { | 914 TEST_F(CastSocketImplTest, TestWriteManySync) { |
| 914 CreateCastSocket(); | 915 CreateCastSocketImpl(); |
| 915 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 916 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 916 size_t msg_size = test_proto_strs_[i].size(); | 917 size_t msg_size = test_proto_strs_[i].size(); |
| 917 socket_->AddWriteResult(net::SYNCHRONOUS, msg_size); | 918 socket_->AddWriteResult(net::SYNCHRONOUS, msg_size); |
| 918 EXPECT_CALL(handler_, OnWriteComplete(msg_size)); | 919 EXPECT_CALL(handler_, OnWriteComplete(msg_size)); |
| 919 } | 920 } |
| 920 ConnectHelper(); | 921 ConnectHelper(); |
| 921 SetupAuthMessage(); | 922 SetupAuthMessage(); |
| 922 | 923 |
| 923 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 924 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 924 socket_->SendMessage(test_messages_[i], | 925 socket_->SendMessage(test_messages_[i], |
| 925 base::Bind(&CompleteHandler::OnWriteComplete, | 926 base::Bind(&CompleteHandler::OnWriteComplete, |
| 926 base::Unretained(&handler_))); | 927 base::Unretained(&handler_))); |
| 927 } | 928 } |
| 928 RunPendingTasks(); | 929 RunPendingTasks(); |
| 929 | 930 |
| 930 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 931 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 931 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 932 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 932 } | 933 } |
| 933 | 934 |
| 934 // Test write error - not connected | 935 // Test write error - not connected |
| 935 TEST_F(CastSocketTest, TestWriteErrorNotConnected) { | 936 TEST_F(CastSocketImplTest, TestWriteErrorNotConnected) { |
| 936 CreateCastSocket(); | 937 CreateCastSocketImpl(); |
| 937 SetupAuthMessage(); | 938 SetupAuthMessage(); |
| 938 | 939 |
| 939 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 940 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 940 socket_->SendMessage(test_messages_[0], | 941 socket_->SendMessage(test_messages_[0], |
| 941 base::Bind(&CompleteHandler::OnWriteComplete, | 942 base::Bind(&CompleteHandler::OnWriteComplete, |
| 942 base::Unretained(&handler_))); | 943 base::Unretained(&handler_))); |
| 943 | 944 |
| 944 EXPECT_EQ(cast_channel::READY_STATE_NONE, socket_->ready_state()); | 945 EXPECT_EQ(cast_channel::READY_STATE_NONE, socket_->ready_state()); |
| 945 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 946 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 946 } | 947 } |
| 947 | 948 |
| 948 // Test write error - very large message | 949 // Test write error - very large message |
| 949 TEST_F(CastSocketTest, TestWriteErrorLargeMessage) { | 950 TEST_F(CastSocketImplTest, TestWriteErrorLargeMessage) { |
| 950 CreateCastSocket(); | 951 CreateCastSocketImpl(); |
| 951 ConnectHelper(); | 952 ConnectHelper(); |
| 952 SetupAuthMessage(); | 953 SetupAuthMessage(); |
| 953 | 954 |
| 954 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 955 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 955 size_t size = MessageFramer::MessageHeader::max_message_size() + 1; | 956 size_t size = MessageFramer::MessageHeader::max_message_size() + 1; |
| 956 test_messages_[0].data.reset( | 957 test_messages_[0].data.reset( |
| 957 new base::StringValue(std::string(size, 'a'))); | 958 new base::StringValue(std::string(size, 'a'))); |
| 958 socket_->SendMessage(test_messages_[0], | 959 socket_->SendMessage(test_messages_[0], |
| 959 base::Bind(&CompleteHandler::OnWriteComplete, | 960 base::Bind(&CompleteHandler::OnWriteComplete, |
| 960 base::Unretained(&handler_))); | 961 base::Unretained(&handler_))); |
| 961 | 962 |
| 962 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 963 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 963 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 964 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 964 } | 965 } |
| 965 | 966 |
| 966 // Test write error - network error (sync) | 967 // Test write error - network error (sync) |
| 967 TEST_F(CastSocketTest, TestWriteNetworkErrorSync) { | 968 TEST_F(CastSocketImplTest, TestWriteNetworkErrorSync) { |
| 968 CreateCastSocket(); | 969 CreateCastSocketImpl(); |
| 969 socket_->AddWriteResult(net::SYNCHRONOUS, net::ERR_FAILED); | 970 socket_->AddWriteResult(net::SYNCHRONOUS, net::ERR_FAILED); |
| 970 ConnectHelper(); | 971 ConnectHelper(); |
| 971 SetupAuthMessage(); | 972 SetupAuthMessage(); |
| 972 | 973 |
| 973 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 974 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 974 EXPECT_CALL(mock_delegate_, | 975 EXPECT_CALL(mock_delegate_, |
| 975 OnError(socket_.get(), | 976 OnError(socket_.get(), |
| 976 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, | 977 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, |
| 977 A<const LastErrors&>())); | 978 A<const LastErrors&>())); |
| 978 socket_->SendMessage(test_messages_[0], | 979 socket_->SendMessage(test_messages_[0], |
| 979 base::Bind(&CompleteHandler::OnWriteComplete, | 980 base::Bind(&CompleteHandler::OnWriteComplete, |
| 980 base::Unretained(&handler_))); | 981 base::Unretained(&handler_))); |
| 981 RunPendingTasks(); | 982 RunPendingTasks(); |
| 982 | 983 |
| 983 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 984 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 984 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 985 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 985 } | 986 } |
| 986 | 987 |
| 987 // Test write error - network error (async) | 988 // Test write error - network error (async) |
| 988 TEST_F(CastSocketTest, TestWriteErrorAsync) { | 989 TEST_F(CastSocketImplTest, TestWriteErrorAsync) { |
| 989 CreateCastSocket(); | 990 CreateCastSocketImpl(); |
| 990 socket_->AddWriteResult(net::ASYNC, net::ERR_FAILED); | 991 socket_->AddWriteResult(net::ASYNC, net::ERR_FAILED); |
| 991 ConnectHelper(); | 992 ConnectHelper(); |
| 992 SetupAuthMessage(); | 993 SetupAuthMessage(); |
| 993 | 994 |
| 994 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 995 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 995 EXPECT_CALL(mock_delegate_, | 996 EXPECT_CALL(mock_delegate_, |
| 996 OnError(socket_.get(), | 997 OnError(socket_.get(), |
| 997 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, | 998 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, |
| 998 A<const LastErrors&>())); | 999 A<const LastErrors&>())); |
| 999 socket_->SendMessage(test_messages_[0], | 1000 socket_->SendMessage(test_messages_[0], |
| 1000 base::Bind(&CompleteHandler::OnWriteComplete, | 1001 base::Bind(&CompleteHandler::OnWriteComplete, |
| 1001 base::Unretained(&handler_))); | 1002 base::Unretained(&handler_))); |
| 1002 RunPendingTasks(); | 1003 RunPendingTasks(); |
| 1003 | 1004 |
| 1004 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1005 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1005 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 1006 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 1006 } | 1007 } |
| 1007 | 1008 |
| 1008 // Test write error - 0 bytes written should be considered an error | 1009 // Test write error - 0 bytes written should be considered an error |
| 1009 TEST_F(CastSocketTest, TestWriteErrorZeroBytesWritten) { | 1010 TEST_F(CastSocketImplTest, TestWriteErrorZeroBytesWritten) { |
| 1010 CreateCastSocket(); | 1011 CreateCastSocketImpl(); |
| 1011 socket_->AddWriteResult(net::SYNCHRONOUS, 0); | 1012 socket_->AddWriteResult(net::SYNCHRONOUS, 0); |
| 1012 ConnectHelper(); | 1013 ConnectHelper(); |
| 1013 SetupAuthMessage(); | 1014 SetupAuthMessage(); |
| 1014 | 1015 |
| 1015 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 1016 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 1016 EXPECT_CALL(mock_delegate_, | 1017 EXPECT_CALL(mock_delegate_, |
| 1017 OnError(socket_.get(), | 1018 OnError(socket_.get(), |
| 1018 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, | 1019 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, |
| 1019 A<const LastErrors&>())); | 1020 A<const LastErrors&>())); |
| 1020 socket_->SendMessage(test_messages_[0], | 1021 socket_->SendMessage(test_messages_[0], |
| 1021 base::Bind(&CompleteHandler::OnWriteComplete, | 1022 base::Bind(&CompleteHandler::OnWriteComplete, |
| 1022 base::Unretained(&handler_))); | 1023 base::Unretained(&handler_))); |
| 1023 RunPendingTasks(); | 1024 RunPendingTasks(); |
| 1024 | 1025 |
| 1025 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1026 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1026 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 1027 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 1027 } | 1028 } |
| 1028 | 1029 |
| 1029 // Test that when an error occurrs in one write, write callback is invoked for | 1030 // Test that when an error occurrs in one write, write callback is invoked for |
| 1030 // all pending writes with the error | 1031 // all pending writes with the error |
| 1031 TEST_F(CastSocketTest, TestWriteErrorWithMultiplePendingWritesAsync) { | 1032 TEST_F(CastSocketImplTest, TestWriteErrorWithMultiplePendingWritesAsync) { |
| 1032 CreateCastSocket(); | 1033 CreateCastSocketImpl(); |
| 1033 socket_->AddWriteResult(net::ASYNC, net::ERR_SOCKET_NOT_CONNECTED); | 1034 socket_->AddWriteResult(net::ASYNC, net::ERR_SOCKET_NOT_CONNECTED); |
| 1034 ConnectHelper(); | 1035 ConnectHelper(); |
| 1035 SetupAuthMessage(); | 1036 SetupAuthMessage(); |
| 1036 | 1037 |
| 1037 const int num_writes = arraysize(test_messages_); | 1038 const int num_writes = arraysize(test_messages_); |
| 1038 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_SOCKET_NOT_CONNECTED)) | 1039 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_SOCKET_NOT_CONNECTED)) |
| 1039 .Times(num_writes); | 1040 .Times(num_writes); |
| 1040 EXPECT_CALL(mock_delegate_, | 1041 EXPECT_CALL(mock_delegate_, |
| 1041 OnError(socket_.get(), | 1042 OnError(socket_.get(), |
| 1042 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, | 1043 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, |
| 1043 A<const LastErrors&>())); | 1044 A<const LastErrors&>())); |
| 1044 for (int i = 0; i < num_writes; i++) { | 1045 for (int i = 0; i < num_writes; i++) { |
| 1045 socket_->SendMessage(test_messages_[i], | 1046 socket_->SendMessage(test_messages_[i], |
| 1046 base::Bind(&CompleteHandler::OnWriteComplete, | 1047 base::Bind(&CompleteHandler::OnWriteComplete, |
| 1047 base::Unretained(&handler_))); | 1048 base::Unretained(&handler_))); |
| 1048 } | 1049 } |
| 1049 RunPendingTasks(); | 1050 RunPendingTasks(); |
| 1050 | 1051 |
| 1051 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1052 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1052 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 1053 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 1053 } | 1054 } |
| 1054 | 1055 |
| 1055 // Test read success - single message (async) | 1056 // Test read success - single message (async) |
| 1056 TEST_F(CastSocketTest, TestReadAsync) { | 1057 TEST_F(CastSocketImplTest, TestReadAsync) { |
| 1057 CreateCastSocket(); | 1058 CreateCastSocketImpl(); |
| 1058 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[0]); | 1059 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[0]); |
| 1059 EXPECT_CALL(mock_delegate_, | 1060 EXPECT_CALL(mock_delegate_, |
| 1060 OnMessage(socket_.get(), A<const MessageInfo&>())); | 1061 OnMessage(socket_.get(), A<const MessageInfo&>())); |
| 1061 ConnectHelper(); | 1062 ConnectHelper(); |
| 1062 SetupAuthMessage(); | 1063 SetupAuthMessage(); |
| 1063 | 1064 |
| 1064 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1065 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 1065 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1066 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 1066 } | 1067 } |
| 1067 | 1068 |
| 1068 // Test read success - single message (sync) | 1069 // Test read success - single message (sync) |
| 1069 TEST_F(CastSocketTest, TestReadSync) { | 1070 TEST_F(CastSocketImplTest, TestReadSync) { |
| 1070 CreateCastSocket(); | 1071 CreateCastSocketImpl(); |
| 1071 SetupAuthMessage(); | 1072 SetupAuthMessage(); |
| 1072 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0]); | 1073 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0]); |
| 1073 EXPECT_CALL(mock_delegate_, | 1074 EXPECT_CALL(mock_delegate_, |
| 1074 OnMessage(socket_.get(), A<const MessageInfo&>())); | 1075 OnMessage(socket_.get(), A<const MessageInfo&>())); |
| 1075 ConnectHelper(); | 1076 ConnectHelper(); |
| 1076 | 1077 |
| 1077 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1078 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 1078 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1079 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 1079 } | 1080 } |
| 1080 | 1081 |
| 1081 // Test read success - single message received in multiple chunks (async) | 1082 // Test read success - single message received in multiple chunks (async) |
| 1082 TEST_F(CastSocketTest, TestReadChunkedAsync) { | 1083 TEST_F(CastSocketImplTest, TestReadChunkedAsync) { |
| 1083 CreateCastSocket(); | 1084 CreateCastSocketImpl(); |
| 1084 SetupAuthMessage(); | 1085 SetupAuthMessage(); |
| 1085 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[0], 2); | 1086 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[0], 2); |
| 1086 EXPECT_CALL(mock_delegate_, | 1087 EXPECT_CALL(mock_delegate_, |
| 1087 OnMessage(socket_.get(), A<const MessageInfo&>())); | 1088 OnMessage(socket_.get(), A<const MessageInfo&>())); |
| 1088 ConnectHelper(); | 1089 ConnectHelper(); |
| 1089 | 1090 |
| 1090 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1091 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 1091 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1092 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 1092 } | 1093 } |
| 1093 | 1094 |
| 1094 // Test read success - single message received in multiple chunks (sync) | 1095 // Test read success - single message received in multiple chunks (sync) |
| 1095 TEST_F(CastSocketTest, TestReadChunkedSync) { | 1096 TEST_F(CastSocketImplTest, TestReadChunkedSync) { |
| 1096 CreateCastSocket(); | 1097 CreateCastSocketImpl(); |
| 1097 SetupAuthMessage(); | 1098 SetupAuthMessage(); |
| 1098 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0], 2); | 1099 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0], 2); |
| 1099 EXPECT_CALL(mock_delegate_, | 1100 EXPECT_CALL(mock_delegate_, |
| 1100 OnMessage(socket_.get(), A<const MessageInfo&>())); | 1101 OnMessage(socket_.get(), A<const MessageInfo&>())); |
| 1101 ConnectHelper(); | 1102 ConnectHelper(); |
| 1102 | 1103 |
| 1103 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1104 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 1104 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1105 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 1105 } | 1106 } |
| 1106 | 1107 |
| 1107 // Test read success - multiple messages (async) | 1108 // Test read success - multiple messages (async) |
| 1108 TEST_F(CastSocketTest, TestReadManyAsync) { | 1109 TEST_F(CastSocketImplTest, TestReadManyAsync) { |
| 1109 CreateCastSocket(); | 1110 CreateCastSocketImpl(); |
| 1110 SetupAuthMessage(); | 1111 SetupAuthMessage(); |
| 1111 size_t num_reads = arraysize(test_proto_strs_); | 1112 size_t num_reads = arraysize(test_proto_strs_); |
| 1112 for (size_t i = 0; i < num_reads; i++) | 1113 for (size_t i = 0; i < num_reads; i++) |
| 1113 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[i]); | 1114 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[i]); |
| 1114 EXPECT_CALL(mock_delegate_, | 1115 EXPECT_CALL(mock_delegate_, |
| 1115 OnMessage(socket_.get(), A<const MessageInfo&>())) | 1116 OnMessage(socket_.get(), A<const MessageInfo&>())) |
| 1116 .Times(num_reads); | 1117 .Times(num_reads); |
| 1117 ConnectHelper(); | 1118 ConnectHelper(); |
| 1118 | 1119 |
| 1119 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1120 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 1120 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1121 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 1121 } | 1122 } |
| 1122 | 1123 |
| 1123 // Test read success - multiple messages (sync) | 1124 // Test read success - multiple messages (sync) |
| 1124 TEST_F(CastSocketTest, TestReadManySync) { | 1125 TEST_F(CastSocketImplTest, TestReadManySync) { |
| 1125 CreateCastSocket(); | 1126 CreateCastSocketImpl(); |
| 1126 SetupAuthMessage(); | 1127 SetupAuthMessage(); |
| 1127 size_t num_reads = arraysize(test_proto_strs_); | 1128 size_t num_reads = arraysize(test_proto_strs_); |
| 1128 for (size_t i = 0; i < num_reads; i++) | 1129 for (size_t i = 0; i < num_reads; i++) |
| 1129 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[i]); | 1130 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[i]); |
| 1130 EXPECT_CALL(mock_delegate_, | 1131 EXPECT_CALL(mock_delegate_, |
| 1131 OnMessage(socket_.get(), A<const MessageInfo&>())) | 1132 OnMessage(socket_.get(), A<const MessageInfo&>())) |
| 1132 .Times(num_reads); | 1133 .Times(num_reads); |
| 1133 ConnectHelper(); | 1134 ConnectHelper(); |
| 1134 | 1135 |
| 1135 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1136 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 1136 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1137 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 1137 } | 1138 } |
| 1138 | 1139 |
| 1139 // Test read error - network error (async) | 1140 // Test read error - network error (async) |
| 1140 TEST_F(CastSocketTest, TestReadErrorAsync) { | 1141 TEST_F(CastSocketImplTest, TestReadErrorAsync) { |
| 1141 CreateCastSocket(); | 1142 CreateCastSocketImpl(); |
| 1142 SetupAuthMessage(); | 1143 SetupAuthMessage(); |
| 1143 socket_->AddReadResult(net::ASYNC, net::ERR_SOCKET_NOT_CONNECTED); | 1144 socket_->AddReadResult(net::ASYNC, net::ERR_SOCKET_NOT_CONNECTED); |
| 1144 EXPECT_CALL(mock_delegate_, | 1145 EXPECT_CALL(mock_delegate_, |
| 1145 OnError(socket_.get(), | 1146 OnError(socket_.get(), |
| 1146 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, | 1147 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, |
| 1147 A<const LastErrors&>())); | 1148 A<const LastErrors&>())); |
| 1148 ConnectHelper(); | 1149 ConnectHelper(); |
| 1149 | 1150 |
| 1150 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1151 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1151 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 1152 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 1152 } | 1153 } |
| 1153 | 1154 |
| 1154 // Test read error - network error (sync) | 1155 // Test read error - network error (sync) |
| 1155 TEST_F(CastSocketTest, TestReadErrorSync) { | 1156 TEST_F(CastSocketImplTest, TestReadErrorSync) { |
| 1156 CreateCastSocket(); | 1157 CreateCastSocketImpl(); |
| 1157 SetupAuthMessage(); | 1158 SetupAuthMessage(); |
| 1158 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_SOCKET_NOT_CONNECTED); | 1159 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_SOCKET_NOT_CONNECTED); |
| 1159 EXPECT_CALL(mock_delegate_, | 1160 EXPECT_CALL(mock_delegate_, |
| 1160 OnError(socket_.get(), | 1161 OnError(socket_.get(), |
| 1161 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, | 1162 cast_channel::CHANNEL_ERROR_SOCKET_ERROR, |
| 1162 A<const LastErrors&>())); | 1163 A<const LastErrors&>())); |
| 1163 ConnectHelper(); | 1164 ConnectHelper(); |
| 1164 | 1165 |
| 1165 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1166 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1166 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 1167 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 1167 } | 1168 } |
| 1168 | 1169 |
| 1169 // Test read error - header parse error | 1170 // Test read error - header parse error |
| 1170 TEST_F(CastSocketTest, TestReadHeaderParseError) { | 1171 TEST_F(CastSocketImplTest, TestReadHeaderParseError) { |
| 1171 CreateCastSocket(); | 1172 CreateCastSocketImpl(); |
| 1172 SetupAuthMessage(); | 1173 SetupAuthMessage(); |
| 1173 | 1174 |
| 1174 uint32 body_size = | 1175 uint32 body_size = |
| 1175 base::HostToNet32(MessageFramer::MessageHeader::max_message_size() + 1); | 1176 base::HostToNet32(MessageFramer::MessageHeader::max_message_size() + 1); |
| 1176 // TODO(munjal): Add a method to cast_message_util.h to serialize messages | 1177 // TODO(munjal): Add a method to cast_message_util.h to serialize messages |
| 1177 char header[sizeof(body_size)]; | 1178 char header[sizeof(body_size)]; |
| 1178 memcpy(&header, &body_size, arraysize(header)); | 1179 memcpy(&header, &body_size, arraysize(header)); |
| 1179 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); | 1180 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); |
| 1180 EXPECT_CALL(mock_delegate_, | 1181 EXPECT_CALL(mock_delegate_, |
| 1181 OnError(socket_.get(), | 1182 OnError(socket_.get(), |
| 1182 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, | 1183 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, |
| 1183 A<const LastErrors&>())); | 1184 A<const LastErrors&>())); |
| 1184 ConnectHelper(); | 1185 ConnectHelper(); |
| 1185 | 1186 |
| 1186 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1187 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1187 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, | 1188 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, |
| 1188 socket_->error_state()); | 1189 socket_->error_state()); |
| 1189 } | 1190 } |
| 1190 | 1191 |
| 1191 // Test read error - body parse error | 1192 // Test read error - body parse error |
| 1192 TEST_F(CastSocketTest, TestReadBodyParseError) { | 1193 TEST_F(CastSocketImplTest, TestReadBodyParseError) { |
| 1193 CreateCastSocket(); | 1194 CreateCastSocketImpl(); |
| 1194 SetupAuthMessage(); | 1195 SetupAuthMessage(); |
| 1195 char body[] = "some body"; | 1196 char body[] = "some body"; |
| 1196 uint32 body_size = base::HostToNet32(arraysize(body)); | 1197 uint32 body_size = base::HostToNet32(arraysize(body)); |
| 1197 char header[sizeof(body_size)]; | 1198 char header[sizeof(body_size)]; |
| 1198 memcpy(&header, &body_size, arraysize(header)); | 1199 memcpy(&header, &body_size, arraysize(header)); |
| 1199 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); | 1200 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); |
| 1200 socket_->AddReadResult(net::SYNCHRONOUS, body, arraysize(body)); | 1201 socket_->AddReadResult(net::SYNCHRONOUS, body, arraysize(body)); |
| 1201 EXPECT_CALL(mock_delegate_, | 1202 EXPECT_CALL(mock_delegate_, |
| 1202 OnError(socket_.get(), | 1203 OnError(socket_.get(), |
| 1203 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, | 1204 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, |
| 1204 A<const LastErrors&>())); | 1205 A<const LastErrors&>())); |
| 1205 ConnectHelper(); | 1206 ConnectHelper(); |
| 1206 | 1207 |
| 1207 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1208 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1208 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, | 1209 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, |
| 1209 socket_->error_state()); | 1210 socket_->error_state()); |
| 1210 } | 1211 } |
| 1211 } // namespace cast_channel | 1212 } // namespace cast_channel |
| 1212 } // namespace core_api | 1213 } // namespace core_api |
| 1213 } // namespace extensions | 1214 } // namespace extensions |
| OLD | NEW |