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

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

Issue 2093923004: [Cast Channel] Add real SSL tests to CastSocketTest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use real TCP sockets instead of fakes Created 4 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
« no previous file with comments | « no previous file | 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 <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/files/file_util.h"
12 #include "base/location.h" 13 #include "base/location.h"
13 #include "base/macros.h" 14 #include "base/macros.h"
14 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
15 #include "base/memory/weak_ptr.h" 16 #include "base/memory/weak_ptr.h"
16 #include "base/message_loop/message_loop.h" 17 #include "base/message_loop/message_loop.h"
17 #include "base/run_loop.h" 18 #include "base/run_loop.h"
18 #include "base/single_thread_task_runner.h" 19 #include "base/single_thread_task_runner.h"
19 #include "base/strings/string_number_conversions.h" 20 #include "base/strings/string_number_conversions.h"
20 #include "base/sys_byteorder.h" 21 #include "base/sys_byteorder.h"
21 #include "base/test/simple_test_clock.h" 22 #include "base/test/simple_test_clock.h"
22 #include "base/threading/thread_task_runner_handle.h" 23 #include "base/threading/thread_task_runner_handle.h"
23 #include "base/timer/mock_timer.h" 24 #include "base/timer/mock_timer.h"
25 #include "content/public/test/test_browser_thread_bundle.h"
26 #include "crypto/rsa_private_key.h"
24 #include "extensions/browser/api/cast_channel/cast_auth_util.h" 27 #include "extensions/browser/api/cast_channel/cast_auth_util.h"
25 #include "extensions/browser/api/cast_channel/cast_framer.h" 28 #include "extensions/browser/api/cast_channel/cast_framer.h"
26 #include "extensions/browser/api/cast_channel/cast_message_util.h" 29 #include "extensions/browser/api/cast_channel/cast_message_util.h"
27 #include "extensions/browser/api/cast_channel/cast_test_util.h" 30 #include "extensions/browser/api/cast_channel/cast_test_util.h"
28 #include "extensions/browser/api/cast_channel/cast_transport.h" 31 #include "extensions/browser/api/cast_channel/cast_transport.h"
29 #include "extensions/browser/api/cast_channel/logger.h" 32 #include "extensions/browser/api/cast_channel/logger.h"
30 #include "extensions/common/api/cast_channel/cast_channel.pb.h" 33 #include "extensions/common/api/cast_channel/cast_channel.pb.h"
31 #include "net/base/address_list.h" 34 #include "net/base/address_list.h"
32 #include "net/base/net_errors.h" 35 #include "net/base/net_errors.h"
36 #include "net/cert/pem_tokenizer.h"
33 #include "net/log/test_net_log.h" 37 #include "net/log/test_net_log.h"
34 #include "net/socket/socket_test_util.h" 38 #include "net/socket/socket_test_util.h"
35 #include "net/socket/ssl_client_socket.h" 39 #include "net/socket/ssl_client_socket.h"
40 #include "net/socket/ssl_server_socket.h"
36 #include "net/socket/tcp_client_socket.h" 41 #include "net/socket/tcp_client_socket.h"
42 #include "net/socket/tcp_server_socket.h"
37 #include "net/ssl/ssl_info.h" 43 #include "net/ssl/ssl_info.h"
44 #include "net/ssl/ssl_server_config.h"
38 #include "net/test/cert_test_util.h" 45 #include "net/test/cert_test_util.h"
39 #include "net/test/test_data_directory.h" 46 #include "net/test/test_data_directory.h"
40 #include "testing/gmock/include/gmock/gmock.h" 47 #include "testing/gmock/include/gmock/gmock.h"
41 #include "testing/gtest/include/gtest/gtest.h" 48 #include "testing/gtest/include/gtest/gtest.h"
42 49
43 const int64_t kDistantTimeoutMillis = 100000; // 100 seconds (never hit). 50 const int64_t kDistantTimeoutMillis = 100000; // 100 seconds (never hit).
44 51
45 using ::testing::_; 52 using ::testing::_;
46 using ::testing::A; 53 using ::testing::A;
47 using ::testing::DoAll; 54 using ::testing::DoAll;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 false, 222 false,
216 logger, 223 logger,
217 device_capabilities), 224 device_capabilities),
218 capturing_net_log_(capturing_net_log), 225 capturing_net_log_(capturing_net_log),
219 ip_(ip_endpoint), 226 ip_(ip_endpoint),
220 extract_cert_result_(true), 227 extract_cert_result_(true),
221 verify_challenge_result_(true), 228 verify_challenge_result_(true),
222 verify_challenge_disallow_(false), 229 verify_challenge_disallow_(false),
223 tcp_unresponsive_(false), 230 tcp_unresponsive_(false),
224 mock_timer_(new base::MockTimer(false, false)), 231 mock_timer_(new base::MockTimer(false, false)),
225 mock_transport_(nullptr) {} 232 mock_transport_(nullptr),
233 tcp_client_socket_(nullptr),
234 use_tcp_socket_(false) {}
mark a. foltz 2016/07/02 01:44:55 This looks like it could be removed and replaced w
btolsch 2016/07/13 02:59:49 The boolean has been removed by splitting the test
226 235
227 ~TestCastSocket() override {} 236 ~TestCastSocket() override {}
228 237
229 void SetupMockTransport() { 238 void SetupMockTransport() {
230 mock_transport_ = new MockCastTransport; 239 mock_transport_ = new MockCastTransport;
231 SetTransportForTesting(base::WrapUnique(mock_transport_)); 240 SetTransportForTesting(base::WrapUnique(mock_transport_));
232 } 241 }
233 242
243 void SetTcpSocket(std::unique_ptr<net::TCPClientSocket> tcp_client_socket) {
244 tcp_client_socket_ = std::move(tcp_client_socket);
245 use_tcp_socket_ = true;
246 }
247
234 // Socket connection helpers. 248 // Socket connection helpers.
235 void SetupTcpConnect(net::IoMode mode, int result) { 249 void SetupTcpConnect(net::IoMode mode, int result) {
236 tcp_connect_data_.reset(new net::MockConnect(mode, result)); 250 tcp_connect_data_.reset(new net::MockConnect(mode, result));
237 } 251 }
238 void SetupSslConnect(net::IoMode mode, int result) { 252 void SetupSslConnect(net::IoMode mode, int result) {
239 ssl_connect_data_.reset(new net::MockConnect(mode, result)); 253 ssl_connect_data_.reset(new net::MockConnect(mode, result));
240 } 254 }
241 255
242 // Socket I/O helpers. 256 // Socket I/O helpers.
243 void AddWriteResult(const net::MockWrite& write) { 257 void AddWriteResult(const net::MockWrite& write) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 303
290 MockCastTransport* GetMockTransport() { 304 MockCastTransport* GetMockTransport() {
291 CHECK(mock_transport_); 305 CHECK(mock_transport_);
292 return mock_transport_; 306 return mock_transport_;
293 } 307 }
294 308
295 private: 309 private:
296 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override { 310 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override {
297 if (tcp_unresponsive_) { 311 if (tcp_unresponsive_) {
298 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); 312 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true));
313 } else if (tcp_client_socket_) {
314 return std::move(tcp_client_socket_);
299 } else { 315 } else {
300 net::MockConnect* connect_data = tcp_connect_data_.get(); 316 net::MockConnect* connect_data = tcp_connect_data_.get();
301 connect_data->peer_addr = ip_; 317 connect_data->peer_addr = ip_;
302 return std::unique_ptr<net::TCPClientSocket>( 318 return std::unique_ptr<net::TCPClientSocket>(
303 new MockTCPSocket(*connect_data)); 319 new MockTCPSocket(*connect_data));
304 } 320 }
305 } 321 }
306 322
307 std::unique_ptr<net::SSLClientSocket> CreateSslSocket( 323 std::unique_ptr<net::SSLClientSocket> CreateSslSocket(
308 std::unique_ptr<net::StreamSocket> socket) override { 324 std::unique_ptr<net::StreamSocket> socket) override {
325 if (use_tcp_socket_) {
326 return CastSocketImpl::CreateSslSocket(std::move(socket));
327 }
309 net::MockConnect* connect_data = ssl_connect_data_.get(); 328 net::MockConnect* connect_data = ssl_connect_data_.get();
310 connect_data->peer_addr = ip_; 329 connect_data->peer_addr = ip_;
311 330
312 ssl_data_.reset(new net::StaticSocketDataProvider( 331 ssl_data_.reset(new net::StaticSocketDataProvider(
313 reads_.data(), reads_.size(), writes_.data(), writes_.size())); 332 reads_.data(), reads_.size(), writes_.data(), writes_.size()));
314 ssl_data_->set_connect_data(*connect_data); 333 ssl_data_->set_connect_data(*connect_data);
315 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !! 334 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !!
316 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket( 335 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket(
317 net::AddressList(), capturing_net_log_.get(), ssl_data_.get())); 336 net::AddressList(), capturing_net_log_.get(), ssl_data_.get()));
318 } 337 }
(...skipping 24 matching lines...) Expand all
343 // Simulated result of peer cert extraction. 362 // Simulated result of peer cert extraction.
344 bool extract_cert_result_; 363 bool extract_cert_result_;
345 // Simulated result of verifying challenge reply. 364 // Simulated result of verifying challenge reply.
346 bool verify_challenge_result_; 365 bool verify_challenge_result_;
347 bool verify_challenge_disallow_; 366 bool verify_challenge_disallow_;
348 // If true, makes TCP connection process stall. For timeout testing. 367 // If true, makes TCP connection process stall. For timeout testing.
349 bool tcp_unresponsive_; 368 bool tcp_unresponsive_;
350 std::unique_ptr<base::MockTimer> mock_timer_; 369 std::unique_ptr<base::MockTimer> mock_timer_;
351 MockCastTransport* mock_transport_; 370 MockCastTransport* mock_transport_;
352 371
372 // A real TCP socket that is used instead of the mocks when testing with the
373 // real SSL implementation. When this is set, CreateTcpSocket() will use this
374 // as the underlying transport and CreateSslSocket() will call the base
375 // implementation in CastSocketImpl.
376 std::unique_ptr<net::TCPClientSocket> tcp_client_socket_;
377 bool use_tcp_socket_;
378
353 DISALLOW_COPY_AND_ASSIGN(TestCastSocket); 379 DISALLOW_COPY_AND_ASSIGN(TestCastSocket);
354 }; 380 };
355 381
356 class CastSocketTest : public testing::Test { 382 class CastSocketTest : public testing::Test {
357 public: 383 public:
358 CastSocketTest() 384 CastSocketTest()
359 : logger_( 385 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
386 logger_(
360 new Logger(base::WrapUnique<base::Clock>(new base::SimpleTestClock), 387 new Logger(base::WrapUnique<base::Clock>(new base::SimpleTestClock),
361 base::Time())), 388 base::Time())),
362 delegate_(new MockDelegate) {} 389 delegate_(new MockDelegate) {}
363 ~CastSocketTest() override {} 390 ~CastSocketTest() override {}
364 391
365 void SetUp() override { EXPECT_CALL(*delegate_, OnMessage(_)).Times(0); } 392 void SetUp() override { EXPECT_CALL(*delegate_, OnMessage(_)).Times(0); }
366 393
367 void TearDown() override { 394 void TearDown() override {
368 if (socket_.get()) { 395 if (socket_.get()) {
369 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); 396 EXPECT_CALL(handler_, OnCloseComplete(net::OK));
370 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, 397 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
371 base::Unretained(&handler_))); 398 base::Unretained(&handler_)));
372 } 399 }
373 } 400 }
374 401
375 void CreateCastSocket() { socket_ = TestCastSocket::Create(logger_); } 402 void CreateCastSocket() { socket_ = TestCastSocket::Create(logger_); }
376 403
377 void CreateCastSocketSecure() { 404 void CreateCastSocketSecure() {
378 socket_ = TestCastSocket::CreateSecure(logger_); 405 socket_ = TestCastSocket::CreateSecure(logger_);
379 } 406 }
380 407
408 // Initializes the SSLServerSocket |server_socket_| and the TCP socket
409 // |tcp_client_socket_| to be used by the CastSocket |socket_| as transport
410 // to |server_socket_|.
411 void CreateSslSockets() {
412 server_cert_ =
413 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
414 ASSERT_TRUE(server_cert_);
415 server_private_key_ = ReadTestKeyFromPEM("ok_cert.pem");
416 ASSERT_TRUE(server_private_key_);
417 server_context_ = CreateSSLServerContext(
418 server_cert_.get(), *server_private_key_, server_ssl_config_);
419
420 tcp_server_socket_.reset(
421 new net::TCPServerSocket(nullptr, net::NetLog::Source()));
422 ASSERT_EQ(net::OK,
423 tcp_server_socket_->ListenWithAddressAndPort("127.0.0.1", 0, 1));
424 net::IPEndPoint server_address;
425 ASSERT_EQ(net::OK, tcp_server_socket_->GetLocalAddress(&server_address));
426 tcp_client_socket_.reset(
427 new net::TCPClientSocket(net::AddressList(server_address), nullptr,
428 nullptr, net::NetLog::Source()));
429
430 std::unique_ptr<net::StreamSocket> accepted_socket;
431 ASSERT_EQ(
432 net::ERR_IO_PENDING,
433 tcp_server_socket_->Accept(
434 &accepted_socket, base::Bind(&CastSocketTest::TcpAcceptCallback,
435 base::Unretained(this))));
436 ASSERT_EQ(net::ERR_IO_PENDING, tcp_client_socket_->Connect(base::Bind(
437 &CastSocketTest::TcpConnectCallback,
438 base::Unretained(this))));
439 RunPendingTasks();
440 ASSERT_TRUE(accepted_socket);
441 ASSERT_TRUE(tcp_client_socket_->IsConnected());
442
443 server_socket_ =
444 server_context_->CreateSSLServerSocket(std::move(accepted_socket));
445 ASSERT_TRUE(server_socket_);
446 }
447
448 void TcpAcceptCallback(int result) { ASSERT_EQ(net::OK, result); }
449
450 void TcpConnectCallback(int result) { ASSERT_EQ(net::OK, result); }
451
452 std::unique_ptr<crypto::RSAPrivateKey> ReadTestKeyFromPEM(
453 const base::StringPiece& name) {
454 base::FilePath certs_dir(net::GetTestCertsDirectory());
455 base::FilePath key_path = certs_dir.AppendASCII(name);
456 std::vector<std::string> headers;
457 headers.push_back("PRIVATE KEY");
458 std::string pem_data;
459 if (!base::ReadFileToString(key_path, &pem_data)) {
460 return nullptr;
461 }
462 net::PEMTokenizer pem_tokenizer(pem_data, headers);
463 if (!pem_tokenizer.GetNext()) {
464 return nullptr;
465 }
466 std::vector<uint8_t> key_vector(pem_tokenizer.data().begin(),
467 pem_tokenizer.data().end());
468
469 std::unique_ptr<crypto::RSAPrivateKey> key(
470 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector));
471 return key;
472 }
473
381 void HandleAuthHandshake() { 474 void HandleAuthHandshake() {
382 socket_->SetupMockTransport(); 475 socket_->SetupMockTransport();
383 CastMessage challenge_proto = CreateAuthChallenge(); 476 CastMessage challenge_proto = CreateAuthChallenge();
384 EXPECT_CALL(*socket_->GetMockTransport(), 477 EXPECT_CALL(*socket_->GetMockTransport(),
385 SendMessage(EqualsProto(challenge_proto), _)) 478 SendMessage(EqualsProto(challenge_proto), _))
386 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 479 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
387 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 480 EXPECT_CALL(*socket_->GetMockTransport(), Start());
388 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE)); 481 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
389 socket_->Connect(std::move(delegate_), 482 socket_->Connect(std::move(delegate_),
390 base::Bind(&CompleteHandler::OnConnectComplete, 483 base::Bind(&CompleteHandler::OnConnectComplete,
391 base::Unretained(&handler_))); 484 base::Unretained(&handler_)));
392 RunPendingTasks(); 485 RunPendingTasks();
393 socket_->GetMockTransport()->current_delegate()->OnMessage( 486 socket_->GetMockTransport()->current_delegate()->OnMessage(
394 CreateAuthReply()); 487 CreateAuthReply());
395 RunPendingTasks(); 488 RunPendingTasks();
396 } 489 }
397 490
491 int ReadExactLength(net::IOBuffer* buffer,
492 int buffer_length,
493 net::Socket* socket) {
494 scoped_refptr<net::DrainableIOBuffer> draining_buffer(
495 new net::DrainableIOBuffer(buffer, buffer_length));
496 while (draining_buffer->BytesRemaining() > 0) {
497 net::TestCompletionCallback read_callback;
498 int read_result = read_callback.GetResult(server_socket_->Read(
499 draining_buffer.get(), buffer_length, read_callback.callback()));
500 EXPECT_GT(read_result, 0);
501 draining_buffer->DidConsume(read_result);
502 }
503 return buffer_length;
504 }
505
506 int WriteExactLength(net::IOBuffer* buffer,
507 int buffer_length,
508 net::Socket* socket) {
509 scoped_refptr<net::DrainableIOBuffer> draining_buffer(
510 new net::DrainableIOBuffer(buffer, buffer_length));
511 while (draining_buffer->BytesRemaining() > 0) {
512 net::TestCompletionCallback write_callback;
513 int write_result = write_callback.GetResult(server_socket_->Write(
514 draining_buffer.get(), buffer_length, write_callback.callback()));
515 EXPECT_GT(write_result, 0);
516 draining_buffer->DidConsume(write_result);
517 }
518 return buffer_length;
519 }
520
398 protected: 521 protected:
399 // Runs all pending tasks in the message loop. 522 // Runs all pending tasks in the message loop.
400 void RunPendingTasks() { 523 void RunPendingTasks() {
401 base::RunLoop run_loop; 524 base::RunLoop run_loop;
402 run_loop.RunUntilIdle(); 525 run_loop.RunUntilIdle();
403 } 526 }
404 527
405 base::MessageLoop message_loop_; 528 content::TestBrowserThreadBundle thread_bundle_;
406 Logger* logger_; 529 Logger* logger_;
407 std::unique_ptr<TestCastSocket> socket_; 530 std::unique_ptr<TestCastSocket> socket_;
408 CompleteHandler handler_; 531 CompleteHandler handler_;
409 std::unique_ptr<MockDelegate> delegate_; 532 std::unique_ptr<MockDelegate> delegate_;
410 533
534 // Underlying TCP sockets for |socket_| to communicate with |server_socket_|
535 // when testing with the real SSL implementation.
536 std::unique_ptr<net::TCPClientSocket> tcp_client_socket_;
537 std::unique_ptr<net::TCPServerSocket> tcp_server_socket_;
538
539 // |server_socket_| is used for the *RealSSL tests in order to test the
540 // CastSocket over a real SSL socket. The other members below are used to
541 // initialize |server_socket_|.
542 std::unique_ptr<net::SSLServerSocket> server_socket_;
543 std::unique_ptr<net::SSLServerContext> server_context_;
544 std::unique_ptr<crypto::RSAPrivateKey> server_private_key_;
545 scoped_refptr<net::X509Certificate> server_cert_;
546 net::SSLServerConfig server_ssl_config_;
547
411 private: 548 private:
412 DISALLOW_COPY_AND_ASSIGN(CastSocketTest); 549 DISALLOW_COPY_AND_ASSIGN(CastSocketTest);
413 }; 550 };
414 551
415 // Tests connecting and closing the socket. 552 // Tests connecting and closing the socket.
416 TEST_F(CastSocketTest, TestConnectAndClose) { 553 TEST_F(CastSocketTest, TestConnectAndClose) {
417 CreateCastSocket(); 554 CreateCastSocket();
418 socket_->SetupMockTransport(); 555 socket_->SetupMockTransport();
419 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 556 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
420 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 557 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 base::Unretained(&handler_))); 933 base::Unretained(&handler_)));
797 RunPendingTasks(); 934 RunPendingTasks();
798 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply()); 935 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply());
799 RunPendingTasks(); 936 RunPendingTasks();
800 937
801 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 938 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state());
802 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR, 939 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR,
803 socket_->error_state()); 940 socket_->error_state());
804 } 941 }
805 942
943 // Tests connecting through an actual non-mocked CastTransport object and
944 // non-mocked SSLClientSocket, testing the components in integration.
945 TEST_F(CastSocketTest, TestConnectEndToEndWithRealSSL) {
946 CreateCastSocketSecure();
947 CreateSslSockets();
948 socket_->SetTcpSocket(std::move(tcp_client_socket_));
949
950 socket_->Connect(std::move(delegate_),
951 base::Bind(&CompleteHandler::OnConnectComplete,
952 base::Unretained(&handler_)));
953
954 net::TestCompletionCallback handshake_callback;
955 int server_ret = handshake_callback.GetResult(
956 server_socket_->Handshake(handshake_callback.callback()));
957
958 ASSERT_EQ(net::OK, server_ret);
959
960 // Set low-level auth challenge expectations.
961 CastMessage challenge = CreateAuthChallenge();
962 std::string challenge_str;
963 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
964
965 int challenge_buffer_length = challenge_str.size();
966 scoped_refptr<net::IOBuffer> challenge_buffer(
967 new net::IOBuffer(challenge_buffer_length));
968 int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
969 server_socket_.get());
970
971 EXPECT_EQ(challenge_buffer_length, read);
972 EXPECT_EQ(challenge_str,
973 std::string(challenge_buffer->data(), challenge_buffer_length));
974
975 // Set low-level auth reply expectations.
976 CastMessage reply = CreateAuthReply();
977 std::string reply_str;
978 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
979
980 scoped_refptr<net::StringIOBuffer> reply_buffer(
981 new net::StringIOBuffer(reply_str));
982 int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
983 server_socket_.get());
984
985 EXPECT_EQ(reply_buffer->size(), written);
986 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
987 RunPendingTasks();
988
989 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
990 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
991 }
992
993 // Sends message data through an actual non-mocked CastTransport object and
994 // non-mocked SSLClientSocket, testing the components in integration.
995 TEST_F(CastSocketTest, TestMessageEndToEndWithRealSSL) {
996 CreateCastSocketSecure();
997 CreateSslSockets();
998 socket_->SetTcpSocket(std::move(tcp_client_socket_));
999
1000 socket_->Connect(std::move(delegate_),
1001 base::Bind(&CompleteHandler::OnConnectComplete,
1002 base::Unretained(&handler_)));
1003
1004 net::TestCompletionCallback handshake_callback;
1005 int server_ret = handshake_callback.GetResult(
1006 server_socket_->Handshake(handshake_callback.callback()));
1007
1008 ASSERT_EQ(net::OK, server_ret);
1009
1010 // Set low-level auth challenge expectations.
1011 CastMessage challenge = CreateAuthChallenge();
1012 std::string challenge_str;
1013 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
1014
1015 int challenge_buffer_length = challenge_str.size();
1016 scoped_refptr<net::IOBuffer> challenge_buffer(
1017 new net::IOBuffer(challenge_buffer_length));
1018
1019 int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
1020 server_socket_.get());
1021
1022 EXPECT_EQ(challenge_buffer_length, read);
1023 EXPECT_EQ(challenge_str,
1024 std::string(challenge_buffer->data(), challenge_buffer_length));
1025
1026 // Set low-level auth reply expectations.
1027 CastMessage reply = CreateAuthReply();
1028 std::string reply_str;
1029 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1030
1031 scoped_refptr<net::StringIOBuffer> reply_buffer(
1032 new net::StringIOBuffer(reply_str));
1033 int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
1034 server_socket_.get());
1035
1036 EXPECT_EQ(reply_buffer->size(), written);
1037 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
1038 RunPendingTasks();
1039
1040 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
1041 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
1042
1043 // Send a test message through the ssl socket.
1044 CastMessage test_message = CreateTestMessage();
1045 std::string test_message_str;
1046 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
1047
1048 int test_message_length = test_message_str.size();
1049 scoped_refptr<net::IOBuffer> test_message_buffer(
1050 new net::IOBuffer(test_message_length));
1051
1052 EXPECT_CALL(handler_, OnWriteComplete(net::OK));
1053 socket_->transport()->SendMessage(
1054 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
1055 base::Unretained(&handler_)));
1056 RunPendingTasks();
1057
1058 read = ReadExactLength(test_message_buffer.get(), test_message_length,
1059 server_socket_.get());
1060
1061 EXPECT_EQ(test_message_length, read);
1062 EXPECT_EQ(test_message_str,
1063 std::string(test_message_buffer->data(), test_message_length));
1064
1065 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
1066 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
1067 }
1068
806 // Sends message data through an actual non-mocked CastTransport object, 1069 // Sends message data through an actual non-mocked CastTransport object,
807 // testing the two components in integration. 1070 // testing the two components in integration.
808 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) { 1071 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) {
809 CreateCastSocketSecure(); 1072 CreateCastSocketSecure();
810 socket_->SetupTcpConnect(net::ASYNC, net::OK); 1073 socket_->SetupTcpConnect(net::ASYNC, net::OK);
811 socket_->SetupSslConnect(net::ASYNC, net::OK); 1074 socket_->SetupSslConnect(net::ASYNC, net::OK);
812 1075
813 // Set low-level auth challenge expectations. 1076 // Set low-level auth challenge expectations.
814 CastMessage challenge = CreateAuthChallenge(); 1077 CastMessage challenge = CreateAuthChallenge();
815 std::string challenge_str; 1078 std::string challenge_str;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT); 1167 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT);
905 EXPECT_FALSE(socket_->audio_only()); 1168 EXPECT_FALSE(socket_->audio_only());
906 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone()); 1169 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone());
907 EXPECT_FALSE(socket_->audio_only()); 1170 EXPECT_FALSE(socket_->audio_only());
908 EXPECT_FALSE(socket_->TestVerifyChannelPolicyAudioOnly()); 1171 EXPECT_FALSE(socket_->TestVerifyChannelPolicyAudioOnly());
909 EXPECT_TRUE(socket_->audio_only()); 1172 EXPECT_TRUE(socket_->audio_only());
910 } 1173 }
911 } // namespace cast_channel 1174 } // namespace cast_channel
912 } // namespace api 1175 } // namespace api
913 } // namespace extensions 1176 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698