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