Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: extensions/browser/api/cast_channel/cast_socket_unittest.cc

Issue 555283002: Create new class "CastTransport", which encapsulates the message read and write event loops. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed wez's feedback. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698