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

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: Responding to rsleevi's comments 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 | net/socket/socket_test_util.h » ('j') | 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"
37 #include "net/ssl/ssl_info.h" 42 #include "net/ssl/ssl_info.h"
43 #include "net/ssl/ssl_server_config.h"
38 #include "net/test/cert_test_util.h" 44 #include "net/test/cert_test_util.h"
39 #include "net/test/test_data_directory.h" 45 #include "net/test/test_data_directory.h"
40 #include "testing/gmock/include/gmock/gmock.h" 46 #include "testing/gmock/include/gmock/gmock.h"
41 #include "testing/gtest/include/gtest/gtest.h" 47 #include "testing/gtest/include/gtest/gtest.h"
42 48
43 const int64_t kDistantTimeoutMillis = 100000; // 100 seconds (never hit). 49 const int64_t kDistantTimeoutMillis = 100000; // 100 seconds (never hit).
44 50
45 using ::testing::_; 51 using ::testing::_;
46 using ::testing::A; 52 using ::testing::A;
47 using ::testing::DoAll; 53 using ::testing::DoAll;
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 CompleteHandler() {} 170 CompleteHandler() {}
165 MOCK_METHOD1(OnCloseComplete, void(int result)); 171 MOCK_METHOD1(OnCloseComplete, void(int result));
166 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state)); 172 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state));
167 MOCK_METHOD1(OnWriteComplete, void(int result)); 173 MOCK_METHOD1(OnWriteComplete, void(int result));
168 MOCK_METHOD1(OnReadComplete, void(int result)); 174 MOCK_METHOD1(OnReadComplete, void(int result));
169 175
170 private: 176 private:
171 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); 177 DISALLOW_COPY_AND_ASSIGN(CompleteHandler);
172 }; 178 };
173 179
180 class FakeTCPClientSocket : public net::TCPClientSocket {
181 public:
182 FakeTCPClientSocket(net::FakeSocket* socket)
183 : net::TCPClientSocket(net::AddressList(),
184 nullptr,
185 nullptr,
186 net::NetLog::Source()),
187 socket_(socket) {
188 DCHECK(socket_);
189 }
190
191 int Read(net::IOBuffer* buf,
192 int buf_len,
193 const net::CompletionCallback& callback) override {
194 return socket_->Read(buf, buf_len, callback);
195 }
196
197 int Write(net::IOBuffer* buf,
198 int buf_len,
199 const net::CompletionCallback& callback) override {
200 return socket_->Write(buf, buf_len, callback);
201 }
202
203 int SetReceiveBufferSize(int32_t size) override {
204 return socket_->SetReceiveBufferSize(size);
205 }
206
207 int SetSendBufferSize(int32_t size) override {
208 return socket_->SetSendBufferSize(size);
209 }
210
211 int Connect(const net::CompletionCallback& callback) override {
212 return socket_->Connect(callback);
213 }
214
215 void Disconnect() override { return socket_->Disconnect(); }
216
217 bool IsConnected() const override { return socket_->IsConnected(); }
218
219 bool IsConnectedAndIdle() const override {
220 return socket_->IsConnectedAndIdle();
221 }
222
223 int GetPeerAddress(net::IPEndPoint* address) const override {
224 return socket_->GetPeerAddress(address);
225 }
226
227 int GetLocalAddress(net::IPEndPoint* address) const override {
228 return socket_->GetLocalAddress(address);
229 }
230
231 const net::BoundNetLog& NetLog() const override { return socket_->NetLog(); }
232
233 void SetSubresourceSpeculation() override {
234 socket_->SetSubresourceSpeculation();
235 }
236
237 void SetOmniboxSpeculation() override { socket_->SetOmniboxSpeculation(); }
238
239 bool WasEverUsed() const override { return socket_->WasEverUsed(); }
240
241 bool WasNpnNegotiated() const override { return socket_->WasNpnNegotiated(); }
242
243 net::NextProto GetNegotiatedProtocol() const override {
244 return socket_->GetNegotiatedProtocol();
245 }
246
247 bool GetSSLInfo(net::SSLInfo* ssl_info) override {
248 return socket_->GetSSLInfo(ssl_info);
249 }
250
251 void GetConnectionAttempts(net::ConnectionAttempts* out) const override {
252 socket_->GetConnectionAttempts(out);
253 }
254
255 void ClearConnectionAttempts() override {
256 socket_->ClearConnectionAttempts();
257 }
258
259 void AddConnectionAttempts(const net::ConnectionAttempts& attempts) override {
260 socket_->AddConnectionAttempts(attempts);
261 }
262
263 int64_t GetTotalReceivedBytes() const override {
264 return socket_->GetTotalReceivedBytes();
265 }
266
267 private:
268 net::FakeSocket* socket_;
269 };
270
174 class TestCastSocket : public CastSocketImpl { 271 class TestCastSocket : public CastSocketImpl {
175 public: 272 public:
176 static std::unique_ptr<TestCastSocket> Create( 273 static std::unique_ptr<TestCastSocket> Create(
177 Logger* logger, 274 Logger* logger,
178 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) { 275 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
179 return std::unique_ptr<TestCastSocket>( 276 return std::unique_ptr<TestCastSocket>(
180 new TestCastSocket(CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL, 277 new TestCastSocket(CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL,
181 kDistantTimeoutMillis, logger, device_capabilities)); 278 kDistantTimeoutMillis, logger, device_capabilities));
182 } 279 }
183 280
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 false, 312 false,
216 logger, 313 logger,
217 device_capabilities), 314 device_capabilities),
218 capturing_net_log_(capturing_net_log), 315 capturing_net_log_(capturing_net_log),
219 ip_(ip_endpoint), 316 ip_(ip_endpoint),
220 extract_cert_result_(true), 317 extract_cert_result_(true),
221 verify_challenge_result_(true), 318 verify_challenge_result_(true),
222 verify_challenge_disallow_(false), 319 verify_challenge_disallow_(false),
223 tcp_unresponsive_(false), 320 tcp_unresponsive_(false),
224 mock_timer_(new base::MockTimer(false, false)), 321 mock_timer_(new base::MockTimer(false, false)),
225 mock_transport_(nullptr) {} 322 mock_transport_(nullptr),
323 fake_socket_(nullptr) {}
226 324
227 ~TestCastSocket() override {} 325 ~TestCastSocket() override {}
228 326
229 void SetupMockTransport() { 327 void SetupMockTransport() {
230 mock_transport_ = new MockCastTransport; 328 mock_transport_ = new MockCastTransport;
231 SetTransportForTesting(base::WrapUnique(mock_transport_)); 329 SetTransportForTesting(base::WrapUnique(mock_transport_));
232 } 330 }
233 331
332 void SetFakeSocket(net::FakeSocket* fake_socket) {
333 fake_socket_ = fake_socket;
334 }
335
234 // Socket connection helpers. 336 // Socket connection helpers.
235 void SetupTcpConnect(net::IoMode mode, int result) { 337 void SetupTcpConnect(net::IoMode mode, int result) {
236 tcp_connect_data_.reset(new net::MockConnect(mode, result)); 338 tcp_connect_data_.reset(new net::MockConnect(mode, result));
237 } 339 }
238 void SetupSslConnect(net::IoMode mode, int result) { 340 void SetupSslConnect(net::IoMode mode, int result) {
239 ssl_connect_data_.reset(new net::MockConnect(mode, result)); 341 ssl_connect_data_.reset(new net::MockConnect(mode, result));
240 } 342 }
241 343
242 // Socket I/O helpers. 344 // Socket I/O helpers.
243 void AddWriteResult(const net::MockWrite& write) { 345 void AddWriteResult(const net::MockWrite& write) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 391
290 MockCastTransport* GetMockTransport() { 392 MockCastTransport* GetMockTransport() {
291 CHECK(mock_transport_); 393 CHECK(mock_transport_);
292 return mock_transport_; 394 return mock_transport_;
293 } 395 }
294 396
295 private: 397 private:
296 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override { 398 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override {
297 if (tcp_unresponsive_) { 399 if (tcp_unresponsive_) {
298 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); 400 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true));
401 } else if (fake_socket_) {
402 return std::unique_ptr<net::TCPClientSocket>(
403 new FakeTCPClientSocket(fake_socket_));
299 } else { 404 } else {
300 net::MockConnect* connect_data = tcp_connect_data_.get(); 405 net::MockConnect* connect_data = tcp_connect_data_.get();
301 connect_data->peer_addr = ip_; 406 connect_data->peer_addr = ip_;
302 return std::unique_ptr<net::TCPClientSocket>( 407 return std::unique_ptr<net::TCPClientSocket>(
303 new MockTCPSocket(*connect_data)); 408 new MockTCPSocket(*connect_data));
304 } 409 }
305 } 410 }
306 411
307 std::unique_ptr<net::SSLClientSocket> CreateSslSocket( 412 std::unique_ptr<net::SSLClientSocket> CreateSslSocket(
308 std::unique_ptr<net::StreamSocket> socket) override { 413 std::unique_ptr<net::StreamSocket> socket) override {
414 if (fake_socket_) {
415 return CastSocketImpl::CreateSslSocket(std::move(socket));
416 }
309 net::MockConnect* connect_data = ssl_connect_data_.get(); 417 net::MockConnect* connect_data = ssl_connect_data_.get();
310 connect_data->peer_addr = ip_; 418 connect_data->peer_addr = ip_;
311 419
312 ssl_data_.reset(new net::StaticSocketDataProvider( 420 ssl_data_.reset(new net::StaticSocketDataProvider(
313 reads_.data(), reads_.size(), writes_.data(), writes_.size())); 421 reads_.data(), reads_.size(), writes_.data(), writes_.size()));
314 ssl_data_->set_connect_data(*connect_data); 422 ssl_data_->set_connect_data(*connect_data);
315 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !! 423 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !!
316 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket( 424 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket(
317 net::AddressList(), capturing_net_log_.get(), ssl_data_.get())); 425 net::AddressList(), capturing_net_log_.get(), ssl_data_.get()));
318 } 426 }
(...skipping 24 matching lines...) Expand all
343 // Simulated result of peer cert extraction. 451 // Simulated result of peer cert extraction.
344 bool extract_cert_result_; 452 bool extract_cert_result_;
345 // Simulated result of verifying challenge reply. 453 // Simulated result of verifying challenge reply.
346 bool verify_challenge_result_; 454 bool verify_challenge_result_;
347 bool verify_challenge_disallow_; 455 bool verify_challenge_disallow_;
348 // If true, makes TCP connection process stall. For timeout testing. 456 // If true, makes TCP connection process stall. For timeout testing.
349 bool tcp_unresponsive_; 457 bool tcp_unresponsive_;
350 std::unique_ptr<base::MockTimer> mock_timer_; 458 std::unique_ptr<base::MockTimer> mock_timer_;
351 MockCastTransport* mock_transport_; 459 MockCastTransport* mock_transport_;
352 460
461 // A fake socket that is used instead of the mocks when testing with the real
462 // SSL implementation. When this is set, CreateTCPSocket() will use this as
463 // the underlying transport and CreateSSLSocket() will call the base
464 // implementation in CastSocketImpl.
465 net::FakeSocket* fake_socket_;
466
353 DISALLOW_COPY_AND_ASSIGN(TestCastSocket); 467 DISALLOW_COPY_AND_ASSIGN(TestCastSocket);
354 }; 468 };
355 469
356 class CastSocketTest : public testing::Test { 470 class CastSocketTest : public testing::Test {
357 public: 471 public:
358 CastSocketTest() 472 CastSocketTest()
359 : logger_( 473 : logger_(
360 new Logger(base::WrapUnique<base::Clock>(new base::SimpleTestClock), 474 new Logger(base::WrapUnique<base::Clock>(new base::SimpleTestClock),
361 base::Time())), 475 base::Time())),
362 delegate_(new MockDelegate) {} 476 delegate_(new MockDelegate) {}
363 ~CastSocketTest() override {} 477 ~CastSocketTest() override {}
364 478
365 void SetUp() override { EXPECT_CALL(*delegate_, OnMessage(_)).Times(0); } 479 void SetUp() override { EXPECT_CALL(*delegate_, OnMessage(_)).Times(0); }
366 480
367 void TearDown() override { 481 void TearDown() override {
368 if (socket_.get()) { 482 if (socket_.get()) {
369 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); 483 EXPECT_CALL(handler_, OnCloseComplete(net::OK));
370 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, 484 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
371 base::Unretained(&handler_))); 485 base::Unretained(&handler_)));
372 } 486 }
373 } 487 }
374 488
375 void CreateCastSocket() { socket_ = TestCastSocket::Create(logger_); } 489 void CreateCastSocket() { socket_ = TestCastSocket::Create(logger_); }
376 490
377 void CreateCastSocketSecure() { 491 void CreateCastSocketSecure() {
378 socket_ = TestCastSocket::CreateSecure(logger_); 492 socket_ = TestCastSocket::CreateSecure(logger_);
379 } 493 }
380 494
495 // Initializes the SSLServerSocket |server_socket_| and the fake socket
496 // |fake_client_socket_| to be used by the CastSocket |socket_| as transport
497 // to |server_socket_|.
498 void CreateFakeSockets() {
499 channel_1_.reset(new net::FakeDataChannel());
500 channel_2_.reset(new net::FakeDataChannel());
501 server_cert_ =
502 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
503 ASSERT_TRUE(server_cert_);
504 server_private_key_ = ReadTestKeyFromPEM("ok_cert.pem");
505 ASSERT_TRUE(server_private_key_);
506 server_context_ = CreateSSLServerContext(
507 server_cert_.get(), *server_private_key_, server_ssl_config_);
508
509 fake_client_socket_.reset(
510 new net::FakeSocket(channel_1_.get(), channel_2_.get()));
511 std::unique_ptr<net::StreamSocket> server_socket(
Wez 2016/07/01 01:27:56 nit: fake_server_socket?
btolsch 2016/07/01 03:21:08 This was effectively changed to |accepted_socket|.
512 new net::FakeSocket(channel_2_.get(), channel_1_.get()));
513
514 server_socket_ =
515 server_context_->CreateSSLServerSocket(std::move(server_socket));
516 ASSERT_TRUE(server_socket_);
517 }
518
519 std::unique_ptr<crypto::RSAPrivateKey> ReadTestKeyFromPEM(
520 const base::StringPiece& name) {
521 base::FilePath certs_dir(net::GetTestCertsDirectory());
522 base::FilePath key_path = certs_dir.AppendASCII(name);
523 std::vector<std::string> headers;
524 headers.push_back("PRIVATE KEY");
525 std::string pem_data;
526 if (!base::ReadFileToString(key_path, &pem_data)) {
527 return nullptr;
528 }
529 net::PEMTokenizer pem_tokenizer(pem_data, headers);
530 if (!pem_tokenizer.GetNext()) {
531 return nullptr;
532 }
533 std::vector<uint8_t> key_vector(pem_tokenizer.data().begin(),
534 pem_tokenizer.data().end());
535
536 std::unique_ptr<crypto::RSAPrivateKey> key(
537 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector));
538 return key;
539 }
540
381 void HandleAuthHandshake() { 541 void HandleAuthHandshake() {
382 socket_->SetupMockTransport(); 542 socket_->SetupMockTransport();
383 CastMessage challenge_proto = CreateAuthChallenge(); 543 CastMessage challenge_proto = CreateAuthChallenge();
384 EXPECT_CALL(*socket_->GetMockTransport(), 544 EXPECT_CALL(*socket_->GetMockTransport(),
385 SendMessage(EqualsProto(challenge_proto), _)) 545 SendMessage(EqualsProto(challenge_proto), _))
386 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 546 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
387 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 547 EXPECT_CALL(*socket_->GetMockTransport(), Start());
388 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE)); 548 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
389 socket_->Connect(std::move(delegate_), 549 socket_->Connect(std::move(delegate_),
390 base::Bind(&CompleteHandler::OnConnectComplete, 550 base::Bind(&CompleteHandler::OnConnectComplete,
391 base::Unretained(&handler_))); 551 base::Unretained(&handler_)));
392 RunPendingTasks(); 552 RunPendingTasks();
393 socket_->GetMockTransport()->current_delegate()->OnMessage( 553 socket_->GetMockTransport()->current_delegate()->OnMessage(
394 CreateAuthReply()); 554 CreateAuthReply());
395 RunPendingTasks(); 555 RunPendingTasks();
396 } 556 }
397 557
558 int ReadExactLength(net::IOBuffer* buffer,
559 int buffer_length,
560 net::Socket* socket) {
561 scoped_refptr<net::DrainableIOBuffer> draining_buffer(
562 new net::DrainableIOBuffer(buffer, buffer_length));
563 while (draining_buffer->BytesRemaining() > 0) {
564 net::TestCompletionCallback read_callback;
565 int read_result = read_callback.GetResult(server_socket_->Read(
566 draining_buffer.get(), buffer_length, read_callback.callback()));
567 EXPECT_GT(read_result, 0);
568 draining_buffer->DidConsume(read_result);
569 }
570 return buffer_length;
571 }
572
573 int WriteExactLength(net::IOBuffer* buffer,
574 int buffer_length,
575 net::Socket* socket) {
576 scoped_refptr<net::DrainableIOBuffer> draining_buffer(
577 new net::DrainableIOBuffer(buffer, buffer_length));
578 while (draining_buffer->BytesRemaining() > 0) {
579 net::TestCompletionCallback write_callback;
580 int write_result = write_callback.GetResult(server_socket_->Write(
581 draining_buffer.get(), buffer_length, write_callback.callback()));
582 EXPECT_GT(write_result, 0);
583 draining_buffer->DidConsume(write_result);
584 }
585 return buffer_length;
586 }
587
398 protected: 588 protected:
399 // Runs all pending tasks in the message loop. 589 // Runs all pending tasks in the message loop.
400 void RunPendingTasks() { 590 void RunPendingTasks() {
401 base::RunLoop run_loop; 591 base::RunLoop run_loop;
402 run_loop.RunUntilIdle(); 592 run_loop.RunUntilIdle();
403 } 593 }
404 594
405 base::MessageLoop message_loop_; 595 content::TestBrowserThreadBundle thread_bundle_{
596 content::TestBrowserThreadBundle::IO_MAINLOOP};
Wez 2016/07/01 01:27:56 nit: Is there a good reason to use {} init rather
btolsch 2016/07/01 03:21:08 No, just a habit that slipped through. Moved to c
406 Logger* logger_; 597 Logger* logger_;
407 std::unique_ptr<TestCastSocket> socket_; 598 std::unique_ptr<TestCastSocket> socket_;
408 CompleteHandler handler_; 599 CompleteHandler handler_;
409 std::unique_ptr<MockDelegate> delegate_; 600 std::unique_ptr<MockDelegate> delegate_;
410 601
602 // |channel_1_| and |channel_2_| form a full duplex connection between
603 // |socket_| and |server_socket_|. Passing data through them requires pumping
604 // the message loop.
605 std::unique_ptr<net::FakeDataChannel> channel_1_;
606 std::unique_ptr<net::FakeDataChannel> channel_2_;
607
608 // Used to create the fake TCP socket for |socket_| when communicating with
609 // |server_socket_|.
610 std::unique_ptr<net::FakeSocket> fake_client_socket_;
611
612 // |server_socket_| is used for the *RealSSL tests in order to test the
613 // CastSocket over a real SSL socket. The other members below are used to
614 // initialize |server_socket_|.
615 std::unique_ptr<net::SSLServerSocket> server_socket_;
616 std::unique_ptr<net::SSLServerContext> server_context_;
617 std::unique_ptr<crypto::RSAPrivateKey> server_private_key_;
618 scoped_refptr<net::X509Certificate> server_cert_;
619 net::SSLServerConfig server_ssl_config_;
620
411 private: 621 private:
412 DISALLOW_COPY_AND_ASSIGN(CastSocketTest); 622 DISALLOW_COPY_AND_ASSIGN(CastSocketTest);
413 }; 623 };
414 624
415 // Tests connecting and closing the socket. 625 // Tests connecting and closing the socket.
416 TEST_F(CastSocketTest, TestConnectAndClose) { 626 TEST_F(CastSocketTest, TestConnectAndClose) {
417 CreateCastSocket(); 627 CreateCastSocket();
418 socket_->SetupMockTransport(); 628 socket_->SetupMockTransport();
419 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 629 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
420 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 630 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 base::Unretained(&handler_))); 1006 base::Unretained(&handler_)));
797 RunPendingTasks(); 1007 RunPendingTasks();
798 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply()); 1008 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply());
799 RunPendingTasks(); 1009 RunPendingTasks();
800 1010
801 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 1011 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state());
802 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR, 1012 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR,
803 socket_->error_state()); 1013 socket_->error_state());
804 } 1014 }
805 1015
1016 // Tests connecting through an actual non-mocked CastTransport object and
1017 // non-mocked SSLClientSocket, testing the components in integration.
1018 TEST_F(CastSocketTest, TestConnectEndToEndWithRealSSL) {
1019 CreateCastSocketSecure();
1020 CreateFakeSockets();
1021 socket_->SetFakeSocket(fake_client_socket_.get());
1022
1023 socket_->Connect(std::move(delegate_),
1024 base::Bind(&CompleteHandler::OnConnectComplete,
1025 base::Unretained(&handler_)));
1026
1027 net::TestCompletionCallback handshake_callback;
1028 int server_ret = handshake_callback.GetResult(
1029 server_socket_->Handshake(handshake_callback.callback()));
1030
1031 ASSERT_EQ(net::OK, server_ret);
1032
1033 // Set low-level auth challenge expectations.
1034 CastMessage challenge = CreateAuthChallenge();
1035 std::string challenge_str;
1036 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
1037
1038 int challenge_buffer_length = challenge_str.size();
1039 scoped_refptr<net::IOBuffer> challenge_buffer(
1040 new net::IOBuffer(challenge_buffer_length));
1041 int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
1042 server_socket_.get());
1043
1044 EXPECT_EQ(challenge_buffer_length, read);
1045 EXPECT_EQ(challenge_str,
1046 std::string(challenge_buffer->data(), challenge_buffer_length));
1047
1048 // Set low-level auth reply expectations.
1049 CastMessage reply = CreateAuthReply();
1050 std::string reply_str;
1051 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1052
1053 scoped_refptr<net::StringIOBuffer> reply_buffer(
1054 new net::StringIOBuffer(reply_str));
1055 int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
1056 server_socket_.get());
1057
1058 EXPECT_EQ(reply_buffer->size(), written);
1059 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
1060 RunPendingTasks();
1061
1062 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
1063 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
1064 }
1065
1066 // Sends message data through an actual non-mocked CastTransport object and
1067 // non-mocked SSLClientSocket, testing the components in integration.
1068 TEST_F(CastSocketTest, TestMessageEndToEndWithRealSSL) {
1069 CreateCastSocketSecure();
1070 CreateFakeSockets();
1071 socket_->SetFakeSocket(fake_client_socket_.get());
Wez 2016/07/01 01:27:56 Is it necessary for the test to retain ownership o
btolsch 2016/07/01 03:21:08 Done (passed ownership to |socket_|).
1072
1073 socket_->Connect(std::move(delegate_),
1074 base::Bind(&CompleteHandler::OnConnectComplete,
1075 base::Unretained(&handler_)));
1076
1077 net::TestCompletionCallback handshake_callback;
1078 int server_ret = handshake_callback.GetResult(
1079 server_socket_->Handshake(handshake_callback.callback()));
1080
1081 ASSERT_EQ(net::OK, server_ret);
1082
1083 // Set low-level auth challenge expectations.
1084 CastMessage challenge = CreateAuthChallenge();
1085 std::string challenge_str;
1086 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
1087
1088 int challenge_buffer_length = challenge_str.size();
1089 scoped_refptr<net::IOBuffer> challenge_buffer(
1090 new net::IOBuffer(challenge_buffer_length));
1091
1092 int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
1093 server_socket_.get());
1094
1095 EXPECT_EQ(challenge_buffer_length, read);
1096 EXPECT_EQ(challenge_str,
1097 std::string(challenge_buffer->data(), challenge_buffer_length));
1098
1099 // Set low-level auth reply expectations.
1100 CastMessage reply = CreateAuthReply();
1101 std::string reply_str;
1102 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1103
1104 scoped_refptr<net::StringIOBuffer> reply_buffer(
1105 new net::StringIOBuffer(reply_str));
1106 int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
1107 server_socket_.get());
1108
1109 EXPECT_EQ(reply_buffer->size(), written);
1110 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
1111 RunPendingTasks();
1112
1113 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
1114 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
1115
1116 // Send a test message through the ssl socket.
1117 CastMessage test_message = CreateTestMessage();
1118 std::string test_message_str;
1119 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
1120
1121 int test_message_length = test_message_str.size();
1122 scoped_refptr<net::IOBuffer> test_message_buffer(
1123 new net::IOBuffer(test_message_length));
1124
1125 EXPECT_CALL(handler_, OnWriteComplete(net::OK));
1126 socket_->transport()->SendMessage(
1127 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
1128 base::Unretained(&handler_)));
1129 RunPendingTasks();
1130
1131 read = ReadExactLength(test_message_buffer.get(), test_message_length,
1132 server_socket_.get());
1133
1134 EXPECT_EQ(test_message_length, read);
1135 EXPECT_EQ(test_message_str,
1136 std::string(test_message_buffer->data(), test_message_length));
1137
1138 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
1139 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
1140 }
1141
806 // Sends message data through an actual non-mocked CastTransport object, 1142 // Sends message data through an actual non-mocked CastTransport object,
807 // testing the two components in integration. 1143 // testing the two components in integration.
808 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) { 1144 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) {
809 CreateCastSocketSecure(); 1145 CreateCastSocketSecure();
810 socket_->SetupTcpConnect(net::ASYNC, net::OK); 1146 socket_->SetupTcpConnect(net::ASYNC, net::OK);
811 socket_->SetupSslConnect(net::ASYNC, net::OK); 1147 socket_->SetupSslConnect(net::ASYNC, net::OK);
812 1148
813 // Set low-level auth challenge expectations. 1149 // Set low-level auth challenge expectations.
814 CastMessage challenge = CreateAuthChallenge(); 1150 CastMessage challenge = CreateAuthChallenge();
815 std::string challenge_str; 1151 std::string challenge_str;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT); 1240 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT);
905 EXPECT_FALSE(socket_->audio_only()); 1241 EXPECT_FALSE(socket_->audio_only());
906 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone()); 1242 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone());
907 EXPECT_FALSE(socket_->audio_only()); 1243 EXPECT_FALSE(socket_->audio_only());
908 EXPECT_FALSE(socket_->TestVerifyChannelPolicyAudioOnly()); 1244 EXPECT_FALSE(socket_->TestVerifyChannelPolicyAudioOnly());
909 EXPECT_TRUE(socket_->audio_only()); 1245 EXPECT_TRUE(socket_->audio_only());
910 } 1246 }
911 } // namespace cast_channel 1247 } // namespace cast_channel
912 } // namespace api 1248 } // namespace api
913 } // namespace extensions 1249 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | net/socket/socket_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698