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