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

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

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

Powered by Google App Engine
This is Rietveld 408576698