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

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

Powered by Google App Engine
This is Rietveld 408576698