| 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 "base/memory/weak_ptr.h" | 7 #include "base/memory/weak_ptr.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 : CastSocket("abcdefg", | 166 : CastSocket("abcdefg", |
| 167 ip_endpoint, | 167 ip_endpoint, |
| 168 channel_auth, | 168 channel_auth, |
| 169 delegate, | 169 delegate, |
| 170 &capturing_net_log_, | 170 &capturing_net_log_, |
| 171 base::TimeDelta::FromMilliseconds(timeout_ms)), | 171 base::TimeDelta::FromMilliseconds(timeout_ms)), |
| 172 ip_(ip_endpoint), | 172 ip_(ip_endpoint), |
| 173 connect_index_(0), | 173 connect_index_(0), |
| 174 extract_cert_result_(true), | 174 extract_cert_result_(true), |
| 175 verify_challenge_result_(true), | 175 verify_challenge_result_(true), |
| 176 verify_challenge_disallow_(false), |
| 176 tcp_unresponsive_(false), | 177 tcp_unresponsive_(false), |
| 177 mock_timer_(new base::MockTimer(false, false)) {} | 178 mock_timer_(new base::MockTimer(false, false)) {} |
| 178 | 179 |
| 179 static net::IPEndPoint CreateIPEndPoint() { | 180 static net::IPEndPoint CreateIPEndPoint() { |
| 180 net::IPAddressNumber number; | 181 net::IPAddressNumber number; |
| 181 number.push_back(192); | 182 number.push_back(192); |
| 182 number.push_back(0); | 183 number.push_back(0); |
| 183 number.push_back(0); | 184 number.push_back(0); |
| 184 number.push_back(1); | 185 number.push_back(1); |
| 185 return net::IPEndPoint(number, 8009); | 186 return net::IPEndPoint(number, 8009); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 extract_cert_result_ = value; | 261 extract_cert_result_ = value; |
| 261 } | 262 } |
| 262 void SetVerifyChallengeResult(bool value) { | 263 void SetVerifyChallengeResult(bool value) { |
| 263 verify_challenge_result_ = value; | 264 verify_challenge_result_ = value; |
| 264 } | 265 } |
| 265 | 266 |
| 266 void TriggerTimeout() { | 267 void TriggerTimeout() { |
| 267 mock_timer_->Fire(); | 268 mock_timer_->Fire(); |
| 268 } | 269 } |
| 269 | 270 |
| 271 void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; } |
| 272 |
| 270 private: | 273 private: |
| 271 virtual scoped_ptr<net::TCPClientSocket> CreateTcpSocket() OVERRIDE { | 274 virtual scoped_ptr<net::TCPClientSocket> CreateTcpSocket() OVERRIDE { |
| 272 if (tcp_unresponsive_) { | 275 if (tcp_unresponsive_) { |
| 273 return scoped_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); | 276 return scoped_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); |
| 274 } else { | 277 } else { |
| 275 net::MockConnect* connect_data = tcp_connect_data_[connect_index_].get(); | 278 net::MockConnect* connect_data = tcp_connect_data_[connect_index_].get(); |
| 276 connect_data->peer_addr = ip_; | 279 connect_data->peer_addr = ip_; |
| 277 return scoped_ptr<net::TCPClientSocket>(new MockTCPSocket(*connect_data)); | 280 return scoped_ptr<net::TCPClientSocket>(new MockTCPSocket(*connect_data)); |
| 278 } | 281 } |
| 279 } | 282 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 293 net::AddressList(), &capturing_net_log_, ssl_data_.get())); | 296 net::AddressList(), &capturing_net_log_, ssl_data_.get())); |
| 294 } | 297 } |
| 295 | 298 |
| 296 virtual bool ExtractPeerCert(std::string* cert) OVERRIDE { | 299 virtual bool ExtractPeerCert(std::string* cert) OVERRIDE { |
| 297 if (extract_cert_result_) | 300 if (extract_cert_result_) |
| 298 cert->assign("dummy_test_cert"); | 301 cert->assign("dummy_test_cert"); |
| 299 return extract_cert_result_; | 302 return extract_cert_result_; |
| 300 } | 303 } |
| 301 | 304 |
| 302 virtual bool VerifyChallengeReply() OVERRIDE { | 305 virtual bool VerifyChallengeReply() OVERRIDE { |
| 306 EXPECT_EQ(false, verify_challenge_disallow_); |
| 303 return verify_challenge_result_; | 307 return verify_challenge_result_; |
| 304 } | 308 } |
| 305 | 309 |
| 306 virtual base::Timer* GetTimer() OVERRIDE { | 310 virtual base::Timer* GetTimer() OVERRIDE { |
| 307 return mock_timer_.get(); | 311 return mock_timer_.get(); |
| 308 } | 312 } |
| 309 | 313 |
| 310 net::CapturingNetLog capturing_net_log_; | 314 net::CapturingNetLog capturing_net_log_; |
| 311 net::IPEndPoint ip_; | 315 net::IPEndPoint ip_; |
| 312 // Simulated connect data | 316 // Simulated connect data |
| 313 scoped_ptr<net::MockConnect> tcp_connect_data_[2]; | 317 scoped_ptr<net::MockConnect> tcp_connect_data_[2]; |
| 314 scoped_ptr<net::MockConnect> ssl_connect_data_[2]; | 318 scoped_ptr<net::MockConnect> ssl_connect_data_[2]; |
| 315 // Simulated read / write data | 319 // Simulated read / write data |
| 316 std::vector<net::MockWrite> writes_; | 320 std::vector<net::MockWrite> writes_; |
| 317 std::vector<net::MockRead> reads_; | 321 std::vector<net::MockRead> reads_; |
| 318 scoped_ptr<net::SocketDataProvider> ssl_data_; | 322 scoped_ptr<net::SocketDataProvider> ssl_data_; |
| 319 // Number of times Connect method is called | 323 // Number of times Connect method is called |
| 320 size_t connect_index_; | 324 size_t connect_index_; |
| 321 // Simulated result of peer cert extraction. | 325 // Simulated result of peer cert extraction. |
| 322 bool extract_cert_result_; | 326 bool extract_cert_result_; |
| 323 // Simulated result of verifying challenge reply. | 327 // Simulated result of verifying challenge reply. |
| 324 bool verify_challenge_result_; | 328 bool verify_challenge_result_; |
| 329 bool verify_challenge_disallow_; |
| 325 // If true, makes TCP connection process stall. For timeout testing. | 330 // If true, makes TCP connection process stall. For timeout testing. |
| 326 bool tcp_unresponsive_; | 331 bool tcp_unresponsive_; |
| 327 scoped_ptr<base::MockTimer> mock_timer_; | 332 scoped_ptr<base::MockTimer> mock_timer_; |
| 328 }; | 333 }; |
| 329 | 334 |
| 330 class CastSocketTest : public testing::Test { | 335 class CastSocketTest : public testing::Test { |
| 331 public: | 336 public: |
| 332 CastSocketTest() {} | 337 CastSocketTest() {} |
| 333 virtual ~CastSocketTest() {} | 338 virtual ~CastSocketTest() {} |
| 334 | 339 |
| 335 virtual void SetUp() OVERRIDE { | 340 virtual void SetUp() OVERRIDE { |
| 336 // Create a few test messages | 341 // Create a few test messages |
| 337 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 342 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 338 CreateStringMessage("urn:cast", "1", "2", kTestData[i], | 343 CreateStringMessage("urn:cast", "1", "2", kTestData[i], |
| 339 &test_messages_[i]); | 344 &test_messages_[i]); |
| 340 ASSERT_TRUE(MessageInfoToCastMessage( | 345 ASSERT_TRUE(MessageInfoToCastMessage( |
| 341 test_messages_[i], &test_protos_[i])); | 346 test_messages_[i], &test_protos_[i])); |
| 342 ASSERT_TRUE(CastSocket::Serialize(test_protos_[i], &test_proto_strs_[i])); | 347 ASSERT_TRUE(CastSocket::Serialize(test_protos_[i], &test_proto_strs_[i])); |
| 343 } | 348 } |
| 349 } |
| 344 | 350 |
| 351 virtual void TearDown() OVERRIDE { |
| 352 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); |
| 353 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, |
| 354 base::Unretained(&handler_))); |
| 355 } |
| 356 |
| 357 // The caller can specify non-standard namespaces by setting "auth_namespace" |
| 358 // (useful for negative test cases.) |
| 359 void SetupAuthMessage( |
| 360 const char* auth_namespace = "urn:x-cast:com.google.cast.tp.deviceauth") { |
| 345 // Create a test auth request. | 361 // Create a test auth request. |
| 346 CastMessage request; | 362 CastMessage request; |
| 347 CreateAuthChallengeMessage(&request); | 363 CreateAuthChallengeMessage(&request); |
| 348 ASSERT_TRUE(CastSocket::Serialize(request, &auth_request_)); | 364 ASSERT_TRUE(CastSocket::Serialize(request, &auth_request_)); |
| 349 | 365 |
| 350 // Create a test auth reply. | 366 // Create a test auth reply. |
| 351 MessageInfo reply; | 367 MessageInfo reply; |
| 352 CreateBinaryMessage("urn:x-cast:com.google.cast.tp.deviceauth", | 368 CreateBinaryMessage( |
| 353 "sender-0", | 369 auth_namespace, "sender-0", "receiver-0", "abcd", &reply); |
| 354 "receiver-0", | |
| 355 "abcd", | |
| 356 &reply); | |
| 357 CastMessage reply_msg; | 370 CastMessage reply_msg; |
| 358 ASSERT_TRUE(MessageInfoToCastMessage(reply, &reply_msg)); | 371 ASSERT_TRUE(MessageInfoToCastMessage(reply, &reply_msg)); |
| 359 ASSERT_TRUE(CastSocket::Serialize(reply_msg, &auth_reply_)); | 372 ASSERT_TRUE(CastSocket::Serialize(reply_msg, &auth_reply_)); |
| 360 } | 373 } |
| 361 | 374 |
| 362 virtual void TearDown() OVERRIDE { | |
| 363 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); | |
| 364 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, | |
| 365 base::Unretained(&handler_))); | |
| 366 } | |
| 367 | |
| 368 void CreateCastSocket() { | 375 void CreateCastSocket() { |
| 369 socket_ = TestCastSocket::Create(&mock_delegate_); | 376 socket_ = TestCastSocket::Create(&mock_delegate_); |
| 370 } | 377 } |
| 371 | 378 |
| 372 void CreateCastSocketSecure() { | 379 void CreateCastSocketSecure() { |
| 373 socket_ = TestCastSocket::CreateSecure(&mock_delegate_); | 380 socket_ = TestCastSocket::CreateSecure(&mock_delegate_); |
| 374 } | 381 } |
| 375 | 382 |
| 376 // Sets up CastSocket::Connect to succeed. | 383 // Sets up CastSocket::Connect to succeed. |
| 377 // Connecting the socket also starts the read loop; so we add a mock | 384 // Connecting the socket also starts the read loop; so we add a mock |
| (...skipping 24 matching lines...) Expand all Loading... |
| 402 CastMessage test_protos_[arraysize(kTestData)]; | 409 CastMessage test_protos_[arraysize(kTestData)]; |
| 403 std::string test_proto_strs_[arraysize(kTestData)]; | 410 std::string test_proto_strs_[arraysize(kTestData)]; |
| 404 std::string auth_request_; | 411 std::string auth_request_; |
| 405 std::string auth_reply_; | 412 std::string auth_reply_; |
| 406 }; | 413 }; |
| 407 | 414 |
| 408 // Tests connecting and closing the socket. | 415 // Tests connecting and closing the socket. |
| 409 TEST_F(CastSocketTest, TestConnectAndClose) { | 416 TEST_F(CastSocketTest, TestConnectAndClose) { |
| 410 CreateCastSocket(); | 417 CreateCastSocket(); |
| 411 ConnectHelper(); | 418 ConnectHelper(); |
| 419 SetupAuthMessage(); |
| 412 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 420 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 413 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 421 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 414 | 422 |
| 415 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); | 423 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); |
| 416 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, | 424 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, |
| 417 base::Unretained(&handler_))); | 425 base::Unretained(&handler_))); |
| 418 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 426 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 419 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 427 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 420 } | 428 } |
| 421 | 429 |
| 422 // Tests that the following connection flow works: | 430 // Tests that the following connection flow works: |
| 423 // - TCP connection succeeds (async) | 431 // - TCP connection succeeds (async) |
| 424 // - SSL connection succeeds (async) | 432 // - SSL connection succeeds (async) |
| 425 TEST_F(CastSocketTest, TestConnect) { | 433 TEST_F(CastSocketTest, TestConnect) { |
| 426 CreateCastSocket(); | 434 CreateCastSocket(); |
| 435 SetupAuthMessage(); |
| 427 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 436 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 428 socket_->SetupSsl1Connect(net::ASYNC, net::OK); | 437 socket_->SetupSsl1Connect(net::ASYNC, net::OK); |
| 429 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 438 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 430 | 439 |
| 431 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 440 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 432 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 441 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 433 base::Unretained(&handler_))); | 442 base::Unretained(&handler_))); |
| 434 RunPendingTasks(); | 443 RunPendingTasks(); |
| 435 | 444 |
| 436 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 445 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 437 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 446 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 438 } | 447 } |
| 439 | 448 |
| 440 // Test that the following connection flow works: | 449 // Test that the following connection flow works: |
| 441 // - TCP connection succeeds (async) | 450 // - TCP connection succeeds (async) |
| 442 // - SSL connection fails with cert error (async) | 451 // - SSL connection fails with cert error (async) |
| 443 // - Cert is extracted successfully | 452 // - Cert is extracted successfully |
| 444 // - Second TCP connection succeeds (async) | 453 // - Second TCP connection succeeds (async) |
| 445 // - Second SSL connection succeeds (async) | 454 // - Second SSL connection succeeds (async) |
| 446 TEST_F(CastSocketTest, TestConnectTwoStep) { | 455 TEST_F(CastSocketTest, TestConnectTwoStep) { |
| 447 CreateCastSocket(); | 456 CreateCastSocket(); |
| 457 SetupAuthMessage(); |
| 448 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 458 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 449 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 459 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 450 socket_->SetupTcp2Connect(net::ASYNC, net::OK); | 460 socket_->SetupTcp2Connect(net::ASYNC, net::OK); |
| 451 socket_->SetupSsl2Connect(net::ASYNC, net::OK); | 461 socket_->SetupSsl2Connect(net::ASYNC, net::OK); |
| 452 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 462 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 453 | 463 |
| 454 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 464 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 455 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 465 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 456 base::Unretained(&handler_))); | 466 base::Unretained(&handler_))); |
| 457 RunPendingTasks(); | 467 RunPendingTasks(); |
| 458 | 468 |
| 459 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 469 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 460 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 470 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 461 } | 471 } |
| 462 | 472 |
| 463 // Test that the following connection flow works: | 473 // Test that the following connection flow works: |
| 464 // - TCP connection succeeds (async) | 474 // - TCP connection succeeds (async) |
| 465 // - SSL connection fails with cert error (async) | 475 // - SSL connection fails with cert error (async) |
| 466 // - Cert is extracted successfully | 476 // - Cert is extracted successfully |
| 467 // - Second TCP connection succeeds (async) | 477 // - Second TCP connection succeeds (async) |
| 468 // - Second SSL connection fails (async) | 478 // - Second SSL connection fails (async) |
| 469 // - The flow should NOT be tried again | 479 // - The flow should NOT be tried again |
| 470 TEST_F(CastSocketTest, TestConnectMaxTwoAttempts) { | 480 TEST_F(CastSocketTest, TestConnectMaxTwoAttempts) { |
| 471 CreateCastSocket(); | 481 CreateCastSocket(); |
| 482 SetupAuthMessage(); |
| 472 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 483 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 473 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 484 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 474 socket_->SetupTcp2Connect(net::ASYNC, net::OK); | 485 socket_->SetupTcp2Connect(net::ASYNC, net::OK); |
| 475 socket_->SetupSsl2Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 486 socket_->SetupSsl2Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 476 | 487 |
| 477 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); | 488 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); |
| 478 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 489 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 479 base::Unretained(&handler_))); | 490 base::Unretained(&handler_))); |
| 480 RunPendingTasks(); | 491 RunPendingTasks(); |
| 481 | 492 |
| 482 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 493 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 483 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 494 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 484 } | 495 } |
| 485 | 496 |
| 486 // Tests that the following connection flow works: | 497 // Tests that the following connection flow works: |
| 487 // - TCP connection succeeds (async) | 498 // - TCP connection succeeds (async) |
| 488 // - SSL connection fails with cert error (async) | 499 // - SSL connection fails with cert error (async) |
| 489 // - Cert is extracted successfully | 500 // - Cert is extracted successfully |
| 490 // - Second TCP connection succeeds (async) | 501 // - Second TCP connection succeeds (async) |
| 491 // - Second SSL connection succeeds (async) | 502 // - Second SSL connection succeeds (async) |
| 492 // - Challenge request is sent (async) | 503 // - Challenge request is sent (async) |
| 493 // - Challenge response is received (async) | 504 // - Challenge response is received (async) |
| 494 // - Credentials are verified successfuly | 505 // - Credentials are verified successfuly |
| 495 TEST_F(CastSocketTest, TestConnectFullSecureFlowAsync) { | 506 TEST_F(CastSocketTest, TestConnectFullSecureFlowAsync) { |
| 496 CreateCastSocketSecure(); | 507 CreateCastSocketSecure(); |
| 508 SetupAuthMessage(); |
| 497 | 509 |
| 498 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 510 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 499 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 511 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 500 socket_->SetupTcp2Connect(net::ASYNC, net::OK); | 512 socket_->SetupTcp2Connect(net::ASYNC, net::OK); |
| 501 socket_->SetupSsl2Connect(net::ASYNC, net::OK); | 513 socket_->SetupSsl2Connect(net::ASYNC, net::OK); |
| 502 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); | 514 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); |
| 503 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); | 515 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); |
| 504 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 516 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 505 | 517 |
| 506 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 518 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 507 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 519 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 508 base::Unretained(&handler_))); | 520 base::Unretained(&handler_))); |
| 509 RunPendingTasks(); | 521 RunPendingTasks(); |
| 510 | 522 |
| 511 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 523 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 512 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 524 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 513 } | 525 } |
| 514 | 526 |
| 515 // Same as TestFullSecureConnectionFlowAsync, but operations are synchronous. | 527 // Same as TestFullSecureConnectionFlowAsync, but operations are synchronous. |
| 516 TEST_F(CastSocketTest, TestConnectFullSecureFlowSync) { | 528 TEST_F(CastSocketTest, TestConnectFullSecureFlowSync) { |
| 517 CreateCastSocketSecure(); | 529 CreateCastSocketSecure(); |
| 530 SetupAuthMessage(); |
| 518 | 531 |
| 519 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 532 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 520 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_CERT_AUTHORITY_INVALID); | 533 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_CERT_AUTHORITY_INVALID); |
| 521 socket_->SetupTcp2Connect(net::SYNCHRONOUS, net::OK); | 534 socket_->SetupTcp2Connect(net::SYNCHRONOUS, net::OK); |
| 522 socket_->SetupSsl2Connect(net::SYNCHRONOUS, net::OK); | 535 socket_->SetupSsl2Connect(net::SYNCHRONOUS, net::OK); |
| 523 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, auth_request_); | 536 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, auth_request_); |
| 524 socket_->AddReadResultForMessage(net::SYNCHRONOUS, auth_reply_); | 537 socket_->AddReadResultForMessage(net::SYNCHRONOUS, auth_reply_); |
| 525 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 538 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 526 | 539 |
| 527 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 540 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 528 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 541 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 529 base::Unretained(&handler_))); | 542 base::Unretained(&handler_))); |
| 530 RunPendingTasks(); | 543 RunPendingTasks(); |
| 531 | 544 |
| 532 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 545 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 533 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 546 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 534 } | 547 } |
| 535 | 548 |
| 549 // Test that an AuthMessage with a mangled namespace triggers cancelation |
| 550 // of the connection event loop. |
| 551 TEST_F(CastSocketTest, TestConnectAuthMessageCorrupted) { |
| 552 CreateCastSocketSecure(); |
| 553 SetupAuthMessage("bogus_namespace"); |
| 554 |
| 555 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 556 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 557 socket_->SetupTcp2Connect(net::ASYNC, net::OK); |
| 558 socket_->SetupSsl2Connect(net::ASYNC, net::OK); |
| 559 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); |
| 560 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); |
| 561 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 562 // Guard against VerifyChallengeResult() being triggered. |
| 563 socket_->DisallowVerifyChallengeResult(); |
| 564 |
| 565 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); |
| 566 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 567 base::Unretained(&handler_))); |
| 568 RunPendingTasks(); |
| 569 |
| 570 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 571 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 572 } |
| 573 |
| 536 // Test connection error - TCP connect fails (async) | 574 // Test connection error - TCP connect fails (async) |
| 537 TEST_F(CastSocketTest, TestConnectTcpConnectErrorAsync) { | 575 TEST_F(CastSocketTest, TestConnectTcpConnectErrorAsync) { |
| 538 CreateCastSocketSecure(); | 576 CreateCastSocketSecure(); |
| 577 SetupAuthMessage(); |
| 539 | 578 |
| 540 socket_->SetupTcp1Connect(net::ASYNC, net::ERR_FAILED); | 579 socket_->SetupTcp1Connect(net::ASYNC, net::ERR_FAILED); |
| 541 | 580 |
| 542 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); | 581 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); |
| 543 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 582 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 544 base::Unretained(&handler_))); | 583 base::Unretained(&handler_))); |
| 545 RunPendingTasks(); | 584 RunPendingTasks(); |
| 546 | 585 |
| 547 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 586 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 548 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 587 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 549 } | 588 } |
| 550 | 589 |
| 551 // Test connection error - TCP connect fails (sync) | 590 // Test connection error - TCP connect fails (sync) |
| 552 TEST_F(CastSocketTest, TestConnectTcpConnectErrorSync) { | 591 TEST_F(CastSocketTest, TestConnectTcpConnectErrorSync) { |
| 553 CreateCastSocketSecure(); | 592 CreateCastSocketSecure(); |
| 593 SetupAuthMessage(); |
| 554 | 594 |
| 555 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::ERR_FAILED); | 595 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::ERR_FAILED); |
| 556 | 596 |
| 557 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); | 597 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); |
| 558 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 598 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 559 base::Unretained(&handler_))); | 599 base::Unretained(&handler_))); |
| 560 RunPendingTasks(); | 600 RunPendingTasks(); |
| 561 | 601 |
| 562 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 602 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 563 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 603 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 578 RunPendingTasks(); | 618 RunPendingTasks(); |
| 579 | 619 |
| 580 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 620 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 581 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, | 621 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, |
| 582 socket_->error_state()); | 622 socket_->error_state()); |
| 583 } | 623 } |
| 584 | 624 |
| 585 // Test connection error - SSL connect fails (async) | 625 // Test connection error - SSL connect fails (async) |
| 586 TEST_F(CastSocketTest, TestConnectSslConnectErrorAsync) { | 626 TEST_F(CastSocketTest, TestConnectSslConnectErrorAsync) { |
| 587 CreateCastSocketSecure(); | 627 CreateCastSocketSecure(); |
| 628 SetupAuthMessage(); |
| 588 | 629 |
| 589 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 630 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 590 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_FAILED); | 631 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_FAILED); |
| 591 | 632 |
| 592 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); | 633 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); |
| 593 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 634 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 594 base::Unretained(&handler_))); | 635 base::Unretained(&handler_))); |
| 595 RunPendingTasks(); | 636 RunPendingTasks(); |
| 596 | 637 |
| 597 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 638 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 598 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 639 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 599 } | 640 } |
| 600 | 641 |
| 601 // Test connection error - SSL connect fails (sync) | 642 // Test connection error - SSL connect fails (sync) |
| 602 TEST_F(CastSocketTest, TestConnectSslConnectErrorSync) { | 643 TEST_F(CastSocketTest, TestConnectSslConnectErrorSync) { |
| 603 CreateCastSocketSecure(); | 644 CreateCastSocketSecure(); |
| 645 SetupAuthMessage(); |
| 604 | 646 |
| 605 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 647 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 606 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_FAILED); | 648 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_FAILED); |
| 607 | 649 |
| 608 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); | 650 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); |
| 609 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 651 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 610 base::Unretained(&handler_))); | 652 base::Unretained(&handler_))); |
| 611 RunPendingTasks(); | 653 RunPendingTasks(); |
| 612 | 654 |
| 613 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 655 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 614 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 656 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 615 } | 657 } |
| 616 | 658 |
| 617 // Test connection error - cert extraction error (async) | 659 // Test connection error - cert extraction error (async) |
| 618 TEST_F(CastSocketTest, TestConnectCertExtractionErrorAsync) { | 660 TEST_F(CastSocketTest, TestConnectCertExtractionErrorAsync) { |
| 619 CreateCastSocket(); | 661 CreateCastSocket(); |
| 662 SetupAuthMessage(); |
| 620 socket_->SetupTcp1Connect(net::ASYNC, net::OK); | 663 socket_->SetupTcp1Connect(net::ASYNC, net::OK); |
| 621 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); | 664 socket_->SetupSsl1Connect(net::ASYNC, net::ERR_CERT_AUTHORITY_INVALID); |
| 622 // Set cert extraction to fail | 665 // Set cert extraction to fail |
| 623 socket_->SetExtractCertResult(false); | 666 socket_->SetExtractCertResult(false); |
| 624 | 667 |
| 625 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); | 668 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); |
| 626 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 669 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 627 base::Unretained(&handler_))); | 670 base::Unretained(&handler_))); |
| 628 RunPendingTasks(); | 671 RunPendingTasks(); |
| 629 | 672 |
| 630 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 673 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 631 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 674 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 632 } | 675 } |
| 633 | 676 |
| 634 // Test connection error - cert extraction error (sync) | 677 // Test connection error - cert extraction error (sync) |
| 635 TEST_F(CastSocketTest, TestConnectCertExtractionErrorSync) { | 678 TEST_F(CastSocketTest, TestConnectCertExtractionErrorSync) { |
| 636 CreateCastSocket(); | 679 CreateCastSocket(); |
| 680 SetupAuthMessage(); |
| 637 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 681 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 638 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_CERT_AUTHORITY_INVALID); | 682 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::ERR_CERT_AUTHORITY_INVALID); |
| 639 // Set cert extraction to fail | 683 // Set cert extraction to fail |
| 640 socket_->SetExtractCertResult(false); | 684 socket_->SetExtractCertResult(false); |
| 641 | 685 |
| 642 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); | 686 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); |
| 643 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 687 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 644 base::Unretained(&handler_))); | 688 base::Unretained(&handler_))); |
| 645 RunPendingTasks(); | 689 RunPendingTasks(); |
| 646 | 690 |
| 647 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 691 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 648 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 692 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 649 } | 693 } |
| 650 | 694 |
| 651 // Test connection error - challenge send fails | 695 // Test connection error - challenge send fails |
| 652 TEST_F(CastSocketTest, TestConnectChallengeSendError) { | 696 TEST_F(CastSocketTest, TestConnectChallengeSendError) { |
| 653 CreateCastSocketSecure(); | 697 CreateCastSocketSecure(); |
| 698 SetupAuthMessage(); |
| 654 | 699 |
| 655 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 700 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 656 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); | 701 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); |
| 657 socket_->AddWriteResult(net::SYNCHRONOUS, net::ERR_FAILED); | 702 socket_->AddWriteResult(net::SYNCHRONOUS, net::ERR_FAILED); |
| 658 | 703 |
| 659 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); | 704 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); |
| 660 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 705 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 661 base::Unretained(&handler_))); | 706 base::Unretained(&handler_))); |
| 662 RunPendingTasks(); | 707 RunPendingTasks(); |
| 663 | 708 |
| 664 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 709 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 665 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 710 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 666 } | 711 } |
| 667 | 712 |
| 668 // Test connection error - challenge reply receive fails | 713 // Test connection error - challenge reply receive fails |
| 669 TEST_F(CastSocketTest, TestConnectChallengeReplyReceiveError) { | 714 TEST_F(CastSocketTest, TestConnectChallengeReplyReceiveError) { |
| 670 CreateCastSocketSecure(); | 715 CreateCastSocketSecure(); |
| 716 SetupAuthMessage(); |
| 671 | 717 |
| 672 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 718 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 673 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); | 719 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); |
| 674 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); | 720 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); |
| 675 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED); | 721 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED); |
| 676 | 722 |
| 677 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); | 723 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); |
| 678 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 724 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 679 base::Unretained(&handler_))); | 725 base::Unretained(&handler_))); |
| 680 RunPendingTasks(); | 726 RunPendingTasks(); |
| 681 | 727 |
| 682 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 728 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 683 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 729 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 684 } | 730 } |
| 685 | 731 |
| 686 // Test connection error - challenge reply verification fails | 732 // Test connection error - challenge reply verification fails |
| 687 TEST_F(CastSocketTest, TestConnectChallengeVerificationFails) { | 733 TEST_F(CastSocketTest, TestConnectChallengeVerificationFails) { |
| 688 CreateCastSocketSecure(); | 734 CreateCastSocketSecure(); |
| 735 SetupAuthMessage(); |
| 689 | 736 |
| 690 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); | 737 socket_->SetupTcp1Connect(net::SYNCHRONOUS, net::OK); |
| 691 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); | 738 socket_->SetupSsl1Connect(net::SYNCHRONOUS, net::OK); |
| 692 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); | 739 socket_->AddWriteResultForMessage(net::ASYNC, auth_request_); |
| 693 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); | 740 socket_->AddReadResultForMessage(net::ASYNC, auth_reply_); |
| 694 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); | 741 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); |
| 695 socket_->SetVerifyChallengeResult(false); | 742 socket_->SetVerifyChallengeResult(false); |
| 696 | 743 |
| 697 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); | 744 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_FAILED)); |
| 698 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 745 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 699 base::Unretained(&handler_))); | 746 base::Unretained(&handler_))); |
| 700 RunPendingTasks(); | 747 RunPendingTasks(); |
| 701 | 748 |
| 702 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 749 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 703 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 750 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
| 704 } | 751 } |
| 705 | 752 |
| 706 // Test write success - single message (async) | 753 // Test write success - single message (async) |
| 707 TEST_F(CastSocketTest, TestWriteAsync) { | 754 TEST_F(CastSocketTest, TestWriteAsync) { |
| 708 CreateCastSocket(); | 755 CreateCastSocket(); |
| 709 socket_->AddWriteResultForMessage(net::ASYNC, test_proto_strs_[0]); | 756 socket_->AddWriteResultForMessage(net::ASYNC, test_proto_strs_[0]); |
| 710 ConnectHelper(); | 757 ConnectHelper(); |
| 758 SetupAuthMessage(); |
| 711 | 759 |
| 712 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); | 760 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); |
| 713 socket_->SendMessage(test_messages_[0], | 761 socket_->SendMessage(test_messages_[0], |
| 714 base::Bind(&CompleteHandler::OnWriteComplete, | 762 base::Bind(&CompleteHandler::OnWriteComplete, |
| 715 base::Unretained(&handler_))); | 763 base::Unretained(&handler_))); |
| 716 RunPendingTasks(); | 764 RunPendingTasks(); |
| 717 | 765 |
| 718 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 766 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 719 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 767 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 720 } | 768 } |
| 721 | 769 |
| 722 // Test write success - single message (sync) | 770 // Test write success - single message (sync) |
| 723 TEST_F(CastSocketTest, TestWriteSync) { | 771 TEST_F(CastSocketTest, TestWriteSync) { |
| 724 CreateCastSocket(); | 772 CreateCastSocket(); |
| 725 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0]); | 773 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0]); |
| 726 ConnectHelper(); | 774 ConnectHelper(); |
| 775 SetupAuthMessage(); |
| 727 | 776 |
| 728 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); | 777 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); |
| 729 socket_->SendMessage(test_messages_[0], | 778 socket_->SendMessage(test_messages_[0], |
| 730 base::Bind(&CompleteHandler::OnWriteComplete, | 779 base::Bind(&CompleteHandler::OnWriteComplete, |
| 731 base::Unretained(&handler_))); | 780 base::Unretained(&handler_))); |
| 732 RunPendingTasks(); | 781 RunPendingTasks(); |
| 733 | 782 |
| 734 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 783 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 735 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 784 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 736 } | 785 } |
| 737 | 786 |
| 738 // Test write success - single message sent in multiple chunks (async) | 787 // Test write success - single message sent in multiple chunks (async) |
| 739 TEST_F(CastSocketTest, TestWriteChunkedAsync) { | 788 TEST_F(CastSocketTest, TestWriteChunkedAsync) { |
| 740 CreateCastSocket(); | 789 CreateCastSocket(); |
| 741 socket_->AddWriteResultForMessage(net::ASYNC, test_proto_strs_[0], 2); | 790 socket_->AddWriteResultForMessage(net::ASYNC, test_proto_strs_[0], 2); |
| 742 ConnectHelper(); | 791 ConnectHelper(); |
| 792 SetupAuthMessage(); |
| 743 | 793 |
| 744 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); | 794 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); |
| 745 socket_->SendMessage(test_messages_[0], | 795 socket_->SendMessage(test_messages_[0], |
| 746 base::Bind(&CompleteHandler::OnWriteComplete, | 796 base::Bind(&CompleteHandler::OnWriteComplete, |
| 747 base::Unretained(&handler_))); | 797 base::Unretained(&handler_))); |
| 748 RunPendingTasks(); | 798 RunPendingTasks(); |
| 749 | 799 |
| 750 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 800 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 751 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 801 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 752 } | 802 } |
| 753 | 803 |
| 754 // Test write success - single message sent in multiple chunks (sync) | 804 // Test write success - single message sent in multiple chunks (sync) |
| 755 TEST_F(CastSocketTest, TestWriteChunkedSync) { | 805 TEST_F(CastSocketTest, TestWriteChunkedSync) { |
| 756 CreateCastSocket(); | 806 CreateCastSocket(); |
| 757 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0], 2); | 807 socket_->AddWriteResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0], 2); |
| 758 ConnectHelper(); | 808 ConnectHelper(); |
| 809 SetupAuthMessage(); |
| 759 | 810 |
| 760 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); | 811 EXPECT_CALL(handler_, OnWriteComplete(test_proto_strs_[0].size())); |
| 761 socket_->SendMessage(test_messages_[0], | 812 socket_->SendMessage(test_messages_[0], |
| 762 base::Bind(&CompleteHandler::OnWriteComplete, | 813 base::Bind(&CompleteHandler::OnWriteComplete, |
| 763 base::Unretained(&handler_))); | 814 base::Unretained(&handler_))); |
| 764 RunPendingTasks(); | 815 RunPendingTasks(); |
| 765 | 816 |
| 766 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 817 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 767 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 818 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 768 } | 819 } |
| 769 | 820 |
| 770 // Test write success - multiple messages (async) | 821 // Test write success - multiple messages (async) |
| 771 TEST_F(CastSocketTest, TestWriteManyAsync) { | 822 TEST_F(CastSocketTest, TestWriteManyAsync) { |
| 772 CreateCastSocket(); | 823 CreateCastSocket(); |
| 773 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 824 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 774 size_t msg_size = test_proto_strs_[i].size(); | 825 size_t msg_size = test_proto_strs_[i].size(); |
| 775 socket_->AddWriteResult(net::ASYNC, msg_size); | 826 socket_->AddWriteResult(net::ASYNC, msg_size); |
| 776 EXPECT_CALL(handler_, OnWriteComplete(msg_size)); | 827 EXPECT_CALL(handler_, OnWriteComplete(msg_size)); |
| 777 } | 828 } |
| 778 ConnectHelper(); | 829 ConnectHelper(); |
| 830 SetupAuthMessage(); |
| 779 | 831 |
| 780 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 832 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 781 socket_->SendMessage(test_messages_[i], | 833 socket_->SendMessage(test_messages_[i], |
| 782 base::Bind(&CompleteHandler::OnWriteComplete, | 834 base::Bind(&CompleteHandler::OnWriteComplete, |
| 783 base::Unretained(&handler_))); | 835 base::Unretained(&handler_))); |
| 784 } | 836 } |
| 785 RunPendingTasks(); | 837 RunPendingTasks(); |
| 786 | 838 |
| 787 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 839 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 788 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 840 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 789 } | 841 } |
| 790 | 842 |
| 791 // Test write success - multiple messages (sync) | 843 // Test write success - multiple messages (sync) |
| 792 TEST_F(CastSocketTest, TestWriteManySync) { | 844 TEST_F(CastSocketTest, TestWriteManySync) { |
| 793 CreateCastSocket(); | 845 CreateCastSocket(); |
| 794 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 846 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 795 size_t msg_size = test_proto_strs_[i].size(); | 847 size_t msg_size = test_proto_strs_[i].size(); |
| 796 socket_->AddWriteResult(net::SYNCHRONOUS, msg_size); | 848 socket_->AddWriteResult(net::SYNCHRONOUS, msg_size); |
| 797 EXPECT_CALL(handler_, OnWriteComplete(msg_size)); | 849 EXPECT_CALL(handler_, OnWriteComplete(msg_size)); |
| 798 } | 850 } |
| 799 ConnectHelper(); | 851 ConnectHelper(); |
| 852 SetupAuthMessage(); |
| 800 | 853 |
| 801 for (size_t i = 0; i < arraysize(test_messages_); i++) { | 854 for (size_t i = 0; i < arraysize(test_messages_); i++) { |
| 802 socket_->SendMessage(test_messages_[i], | 855 socket_->SendMessage(test_messages_[i], |
| 803 base::Bind(&CompleteHandler::OnWriteComplete, | 856 base::Bind(&CompleteHandler::OnWriteComplete, |
| 804 base::Unretained(&handler_))); | 857 base::Unretained(&handler_))); |
| 805 } | 858 } |
| 806 RunPendingTasks(); | 859 RunPendingTasks(); |
| 807 | 860 |
| 808 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 861 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 809 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 862 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 810 } | 863 } |
| 811 | 864 |
| 812 // Test write error - not connected | 865 // Test write error - not connected |
| 813 TEST_F(CastSocketTest, TestWriteErrorNotConnected) { | 866 TEST_F(CastSocketTest, TestWriteErrorNotConnected) { |
| 814 CreateCastSocket(); | 867 CreateCastSocket(); |
| 868 SetupAuthMessage(); |
| 815 | 869 |
| 816 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 870 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 817 socket_->SendMessage(test_messages_[0], | 871 socket_->SendMessage(test_messages_[0], |
| 818 base::Bind(&CompleteHandler::OnWriteComplete, | 872 base::Bind(&CompleteHandler::OnWriteComplete, |
| 819 base::Unretained(&handler_))); | 873 base::Unretained(&handler_))); |
| 820 | 874 |
| 821 EXPECT_EQ(cast_channel::READY_STATE_NONE, socket_->ready_state()); | 875 EXPECT_EQ(cast_channel::READY_STATE_NONE, socket_->ready_state()); |
| 822 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 876 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 823 } | 877 } |
| 824 | 878 |
| 825 // Test write error - very large message | 879 // Test write error - very large message |
| 826 TEST_F(CastSocketTest, TestWriteErrorLargeMessage) { | 880 TEST_F(CastSocketTest, TestWriteErrorLargeMessage) { |
| 827 CreateCastSocket(); | 881 CreateCastSocket(); |
| 828 ConnectHelper(); | 882 ConnectHelper(); |
| 883 SetupAuthMessage(); |
| 829 | 884 |
| 830 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 885 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 831 size_t size = CastSocket::MessageHeader::max_message_size() + 1; | 886 size_t size = CastSocket::MessageHeader::max_message_size() + 1; |
| 832 test_messages_[0].data.reset( | 887 test_messages_[0].data.reset( |
| 833 new base::StringValue(std::string(size, 'a'))); | 888 new base::StringValue(std::string(size, 'a'))); |
| 834 socket_->SendMessage(test_messages_[0], | 889 socket_->SendMessage(test_messages_[0], |
| 835 base::Bind(&CompleteHandler::OnWriteComplete, | 890 base::Bind(&CompleteHandler::OnWriteComplete, |
| 836 base::Unretained(&handler_))); | 891 base::Unretained(&handler_))); |
| 837 | 892 |
| 838 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 893 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 839 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 894 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 840 } | 895 } |
| 841 | 896 |
| 842 // Test write error - network error (sync) | 897 // Test write error - network error (sync) |
| 843 TEST_F(CastSocketTest, TestWriteNetworkErrorSync) { | 898 TEST_F(CastSocketTest, TestWriteNetworkErrorSync) { |
| 844 CreateCastSocket(); | 899 CreateCastSocket(); |
| 845 socket_->AddWriteResult(net::SYNCHRONOUS, net::ERR_FAILED); | 900 socket_->AddWriteResult(net::SYNCHRONOUS, net::ERR_FAILED); |
| 846 ConnectHelper(); | 901 ConnectHelper(); |
| 902 SetupAuthMessage(); |
| 847 | 903 |
| 848 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 904 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 849 EXPECT_CALL(mock_delegate_, | 905 EXPECT_CALL(mock_delegate_, |
| 850 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); | 906 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); |
| 851 socket_->SendMessage(test_messages_[0], | 907 socket_->SendMessage(test_messages_[0], |
| 852 base::Bind(&CompleteHandler::OnWriteComplete, | 908 base::Bind(&CompleteHandler::OnWriteComplete, |
| 853 base::Unretained(&handler_))); | 909 base::Unretained(&handler_))); |
| 854 RunPendingTasks(); | 910 RunPendingTasks(); |
| 855 | 911 |
| 856 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 912 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 857 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 913 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 858 } | 914 } |
| 859 | 915 |
| 860 // Test write error - network error (async) | 916 // Test write error - network error (async) |
| 861 TEST_F(CastSocketTest, TestWriteErrorAsync) { | 917 TEST_F(CastSocketTest, TestWriteErrorAsync) { |
| 862 CreateCastSocket(); | 918 CreateCastSocket(); |
| 863 socket_->AddWriteResult(net::ASYNC, net::ERR_FAILED); | 919 socket_->AddWriteResult(net::ASYNC, net::ERR_FAILED); |
| 864 ConnectHelper(); | 920 ConnectHelper(); |
| 921 SetupAuthMessage(); |
| 865 | 922 |
| 866 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 923 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 867 EXPECT_CALL(mock_delegate_, | 924 EXPECT_CALL(mock_delegate_, |
| 868 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); | 925 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); |
| 869 socket_->SendMessage(test_messages_[0], | 926 socket_->SendMessage(test_messages_[0], |
| 870 base::Bind(&CompleteHandler::OnWriteComplete, | 927 base::Bind(&CompleteHandler::OnWriteComplete, |
| 871 base::Unretained(&handler_))); | 928 base::Unretained(&handler_))); |
| 872 RunPendingTasks(); | 929 RunPendingTasks(); |
| 873 | 930 |
| 874 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 931 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 875 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 932 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 876 } | 933 } |
| 877 | 934 |
| 878 // Test write error - 0 bytes written should be considered an error | 935 // Test write error - 0 bytes written should be considered an error |
| 879 TEST_F(CastSocketTest, TestWriteErrorZeroBytesWritten) { | 936 TEST_F(CastSocketTest, TestWriteErrorZeroBytesWritten) { |
| 880 CreateCastSocket(); | 937 CreateCastSocket(); |
| 881 socket_->AddWriteResult(net::SYNCHRONOUS, 0); | 938 socket_->AddWriteResult(net::SYNCHRONOUS, 0); |
| 882 ConnectHelper(); | 939 ConnectHelper(); |
| 940 SetupAuthMessage(); |
| 883 | 941 |
| 884 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); | 942 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); |
| 885 EXPECT_CALL(mock_delegate_, | 943 EXPECT_CALL(mock_delegate_, |
| 886 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); | 944 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); |
| 887 socket_->SendMessage(test_messages_[0], | 945 socket_->SendMessage(test_messages_[0], |
| 888 base::Bind(&CompleteHandler::OnWriteComplete, | 946 base::Bind(&CompleteHandler::OnWriteComplete, |
| 889 base::Unretained(&handler_))); | 947 base::Unretained(&handler_))); |
| 890 RunPendingTasks(); | 948 RunPendingTasks(); |
| 891 | 949 |
| 892 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 950 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 893 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 951 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 894 } | 952 } |
| 895 | 953 |
| 896 // Test that when an error occurrs in one write, write callback is invoked for | 954 // Test that when an error occurrs in one write, write callback is invoked for |
| 897 // all pending writes with the error | 955 // all pending writes with the error |
| 898 TEST_F(CastSocketTest, TestWriteErrorWithMultiplePendingWritesAsync) { | 956 TEST_F(CastSocketTest, TestWriteErrorWithMultiplePendingWritesAsync) { |
| 899 CreateCastSocket(); | 957 CreateCastSocket(); |
| 900 socket_->AddWriteResult(net::ASYNC, net::ERR_SOCKET_NOT_CONNECTED); | 958 socket_->AddWriteResult(net::ASYNC, net::ERR_SOCKET_NOT_CONNECTED); |
| 901 ConnectHelper(); | 959 ConnectHelper(); |
| 960 SetupAuthMessage(); |
| 902 | 961 |
| 903 const int num_writes = arraysize(test_messages_); | 962 const int num_writes = arraysize(test_messages_); |
| 904 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_SOCKET_NOT_CONNECTED)) | 963 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_SOCKET_NOT_CONNECTED)) |
| 905 .Times(num_writes); | 964 .Times(num_writes); |
| 906 EXPECT_CALL(mock_delegate_, | 965 EXPECT_CALL(mock_delegate_, |
| 907 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); | 966 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); |
| 908 for (int i = 0; i < num_writes; i++) { | 967 for (int i = 0; i < num_writes; i++) { |
| 909 socket_->SendMessage(test_messages_[i], | 968 socket_->SendMessage(test_messages_[i], |
| 910 base::Bind(&CompleteHandler::OnWriteComplete, | 969 base::Bind(&CompleteHandler::OnWriteComplete, |
| 911 base::Unretained(&handler_))); | 970 base::Unretained(&handler_))); |
| 912 } | 971 } |
| 913 RunPendingTasks(); | 972 RunPendingTasks(); |
| 914 | 973 |
| 915 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 974 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 916 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 975 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 917 } | 976 } |
| 918 | 977 |
| 919 // Test read success - single message (async) | 978 // Test read success - single message (async) |
| 920 TEST_F(CastSocketTest, TestReadAsync) { | 979 TEST_F(CastSocketTest, TestReadAsync) { |
| 921 CreateCastSocket(); | 980 CreateCastSocket(); |
| 922 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[0]); | 981 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[0]); |
| 923 EXPECT_CALL(mock_delegate_, | 982 EXPECT_CALL(mock_delegate_, |
| 924 OnMessage(socket_.get(), A<const MessageInfo&>())); | 983 OnMessage(socket_.get(), A<const MessageInfo&>())); |
| 925 ConnectHelper(); | 984 ConnectHelper(); |
| 985 SetupAuthMessage(); |
| 926 | 986 |
| 927 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 987 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 928 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 988 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 929 } | 989 } |
| 930 | 990 |
| 931 // Test read success - single message (sync) | 991 // Test read success - single message (sync) |
| 932 TEST_F(CastSocketTest, TestReadSync) { | 992 TEST_F(CastSocketTest, TestReadSync) { |
| 933 CreateCastSocket(); | 993 CreateCastSocket(); |
| 994 SetupAuthMessage(); |
| 934 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0]); | 995 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0]); |
| 935 EXPECT_CALL(mock_delegate_, | 996 EXPECT_CALL(mock_delegate_, |
| 936 OnMessage(socket_.get(), A<const MessageInfo&>())); | 997 OnMessage(socket_.get(), A<const MessageInfo&>())); |
| 937 ConnectHelper(); | 998 ConnectHelper(); |
| 938 | 999 |
| 939 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1000 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 940 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1001 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 941 } | 1002 } |
| 942 | 1003 |
| 943 // Test read success - single message received in multiple chunks (async) | 1004 // Test read success - single message received in multiple chunks (async) |
| 944 TEST_F(CastSocketTest, TestReadChunkedAsync) { | 1005 TEST_F(CastSocketTest, TestReadChunkedAsync) { |
| 945 CreateCastSocket(); | 1006 CreateCastSocket(); |
| 1007 SetupAuthMessage(); |
| 946 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[0], 2); | 1008 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[0], 2); |
| 947 EXPECT_CALL(mock_delegate_, | 1009 EXPECT_CALL(mock_delegate_, |
| 948 OnMessage(socket_.get(), A<const MessageInfo&>())); | 1010 OnMessage(socket_.get(), A<const MessageInfo&>())); |
| 949 ConnectHelper(); | 1011 ConnectHelper(); |
| 950 | 1012 |
| 951 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1013 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 952 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1014 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 953 } | 1015 } |
| 954 | 1016 |
| 955 // Test read success - single message received in multiple chunks (sync) | 1017 // Test read success - single message received in multiple chunks (sync) |
| 956 TEST_F(CastSocketTest, TestReadChunkedSync) { | 1018 TEST_F(CastSocketTest, TestReadChunkedSync) { |
| 957 CreateCastSocket(); | 1019 CreateCastSocket(); |
| 1020 SetupAuthMessage(); |
| 958 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0], 2); | 1021 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[0], 2); |
| 959 EXPECT_CALL(mock_delegate_, | 1022 EXPECT_CALL(mock_delegate_, |
| 960 OnMessage(socket_.get(), A<const MessageInfo&>())); | 1023 OnMessage(socket_.get(), A<const MessageInfo&>())); |
| 961 ConnectHelper(); | 1024 ConnectHelper(); |
| 962 | 1025 |
| 963 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1026 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 964 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1027 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 965 } | 1028 } |
| 966 | 1029 |
| 967 // Test read success - multiple messages (async) | 1030 // Test read success - multiple messages (async) |
| 968 TEST_F(CastSocketTest, TestReadManyAsync) { | 1031 TEST_F(CastSocketTest, TestReadManyAsync) { |
| 969 CreateCastSocket(); | 1032 CreateCastSocket(); |
| 1033 SetupAuthMessage(); |
| 970 size_t num_reads = arraysize(test_proto_strs_); | 1034 size_t num_reads = arraysize(test_proto_strs_); |
| 971 for (size_t i = 0; i < num_reads; i++) | 1035 for (size_t i = 0; i < num_reads; i++) |
| 972 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[i]); | 1036 socket_->AddReadResultForMessage(net::ASYNC, test_proto_strs_[i]); |
| 973 EXPECT_CALL(mock_delegate_, | 1037 EXPECT_CALL(mock_delegate_, |
| 974 OnMessage(socket_.get(), A<const MessageInfo&>())) | 1038 OnMessage(socket_.get(), A<const MessageInfo&>())) |
| 975 .Times(num_reads); | 1039 .Times(num_reads); |
| 976 ConnectHelper(); | 1040 ConnectHelper(); |
| 977 | 1041 |
| 978 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1042 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 979 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1043 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 980 } | 1044 } |
| 981 | 1045 |
| 982 // Test read success - multiple messages (sync) | 1046 // Test read success - multiple messages (sync) |
| 983 TEST_F(CastSocketTest, TestReadManySync) { | 1047 TEST_F(CastSocketTest, TestReadManySync) { |
| 984 CreateCastSocket(); | 1048 CreateCastSocket(); |
| 1049 SetupAuthMessage(); |
| 985 size_t num_reads = arraysize(test_proto_strs_); | 1050 size_t num_reads = arraysize(test_proto_strs_); |
| 986 for (size_t i = 0; i < num_reads; i++) | 1051 for (size_t i = 0; i < num_reads; i++) |
| 987 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[i]); | 1052 socket_->AddReadResultForMessage(net::SYNCHRONOUS, test_proto_strs_[i]); |
| 988 EXPECT_CALL(mock_delegate_, | 1053 EXPECT_CALL(mock_delegate_, |
| 989 OnMessage(socket_.get(), A<const MessageInfo&>())) | 1054 OnMessage(socket_.get(), A<const MessageInfo&>())) |
| 990 .Times(num_reads); | 1055 .Times(num_reads); |
| 991 ConnectHelper(); | 1056 ConnectHelper(); |
| 992 | 1057 |
| 993 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 1058 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 994 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 1059 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 995 } | 1060 } |
| 996 | 1061 |
| 997 // Test read error - network error (async) | 1062 // Test read error - network error (async) |
| 998 TEST_F(CastSocketTest, TestReadErrorAsync) { | 1063 TEST_F(CastSocketTest, TestReadErrorAsync) { |
| 999 CreateCastSocket(); | 1064 CreateCastSocket(); |
| 1065 SetupAuthMessage(); |
| 1000 socket_->AddReadResult(net::ASYNC, net::ERR_SOCKET_NOT_CONNECTED); | 1066 socket_->AddReadResult(net::ASYNC, net::ERR_SOCKET_NOT_CONNECTED); |
| 1001 EXPECT_CALL(mock_delegate_, | 1067 EXPECT_CALL(mock_delegate_, |
| 1002 OnError(socket_.get(), | 1068 OnError(socket_.get(), |
| 1003 cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); | 1069 cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); |
| 1004 ConnectHelper(); | 1070 ConnectHelper(); |
| 1005 | 1071 |
| 1006 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1072 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1007 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 1073 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 1008 } | 1074 } |
| 1009 | 1075 |
| 1010 // Test read error - network error (sync) | 1076 // Test read error - network error (sync) |
| 1011 TEST_F(CastSocketTest, TestReadErrorSync) { | 1077 TEST_F(CastSocketTest, TestReadErrorSync) { |
| 1012 CreateCastSocket(); | 1078 CreateCastSocket(); |
| 1079 SetupAuthMessage(); |
| 1013 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_SOCKET_NOT_CONNECTED); | 1080 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_SOCKET_NOT_CONNECTED); |
| 1014 EXPECT_CALL(mock_delegate_, | 1081 EXPECT_CALL(mock_delegate_, |
| 1015 OnError(socket_.get(), | 1082 OnError(socket_.get(), |
| 1016 cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); | 1083 cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); |
| 1017 ConnectHelper(); | 1084 ConnectHelper(); |
| 1018 | 1085 |
| 1019 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1086 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1020 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 1087 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
| 1021 } | 1088 } |
| 1022 | 1089 |
| 1023 // Test read error - header parse error | 1090 // Test read error - header parse error |
| 1024 TEST_F(CastSocketTest, TestReadHeaderParseError) { | 1091 TEST_F(CastSocketTest, TestReadHeaderParseError) { |
| 1025 CreateCastSocket(); | 1092 CreateCastSocket(); |
| 1093 SetupAuthMessage(); |
| 1026 uint32 body_size = base::HostToNet32( | 1094 uint32 body_size = base::HostToNet32( |
| 1027 CastSocket::MessageHeader::max_message_size() + 1); | 1095 CastSocket::MessageHeader::max_message_size() + 1); |
| 1028 // TODO(munjal): Add a method to cast_message_util.h to serialize messages | 1096 // TODO(munjal): Add a method to cast_message_util.h to serialize messages |
| 1029 char header[sizeof(body_size)]; | 1097 char header[sizeof(body_size)]; |
| 1030 memcpy(&header, &body_size, arraysize(header)); | 1098 memcpy(&header, &body_size, arraysize(header)); |
| 1031 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); | 1099 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); |
| 1032 EXPECT_CALL(mock_delegate_, | 1100 EXPECT_CALL(mock_delegate_, |
| 1033 OnError(socket_.get(), | 1101 OnError(socket_.get(), |
| 1034 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE)); | 1102 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE)); |
| 1035 ConnectHelper(); | 1103 ConnectHelper(); |
| 1036 | 1104 |
| 1037 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1105 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1038 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, | 1106 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, |
| 1039 socket_->error_state()); | 1107 socket_->error_state()); |
| 1040 } | 1108 } |
| 1041 | 1109 |
| 1042 // Test read error - body parse error | 1110 // Test read error - body parse error |
| 1043 TEST_F(CastSocketTest, TestReadBodyParseError) { | 1111 TEST_F(CastSocketTest, TestReadBodyParseError) { |
| 1044 CreateCastSocket(); | 1112 CreateCastSocket(); |
| 1113 SetupAuthMessage(); |
| 1045 char body[] = "some body"; | 1114 char body[] = "some body"; |
| 1046 uint32 body_size = base::HostToNet32(arraysize(body)); | 1115 uint32 body_size = base::HostToNet32(arraysize(body)); |
| 1047 char header[sizeof(body_size)]; | 1116 char header[sizeof(body_size)]; |
| 1048 memcpy(&header, &body_size, arraysize(header)); | 1117 memcpy(&header, &body_size, arraysize(header)); |
| 1049 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); | 1118 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); |
| 1050 socket_->AddReadResult(net::SYNCHRONOUS, body, arraysize(body)); | 1119 socket_->AddReadResult(net::SYNCHRONOUS, body, arraysize(body)); |
| 1051 EXPECT_CALL(mock_delegate_, | 1120 EXPECT_CALL(mock_delegate_, |
| 1052 OnError(socket_.get(), | 1121 OnError(socket_.get(), |
| 1053 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE)); | 1122 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE)); |
| 1054 ConnectHelper(); | 1123 ConnectHelper(); |
| 1055 | 1124 |
| 1056 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 1125 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
| 1057 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, | 1126 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, |
| 1058 socket_->error_state()); | 1127 socket_->error_state()); |
| 1059 } | 1128 } |
| 1060 | 1129 |
| 1061 } // namespace cast_channel | 1130 } // namespace cast_channel |
| 1062 } // namespace core_api | 1131 } // namespace core_api |
| 1063 } // namespace extensions | 1132 } // namespace extensions |
| OLD | NEW |