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

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: Created 4 years, 6 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"
33 #include "net/log/test_net_log.h" 36 #include "net/log/test_net_log.h"
34 #include "net/socket/socket_test_util.h" 37 #include "net/socket/socket_test_util.h"
35 #include "net/socket/ssl_client_socket.h" 38 #include "net/socket/ssl_client_socket.h"
39 #include "net/socket/ssl_server_socket.h"
36 #include "net/socket/tcp_client_socket.h" 40 #include "net/socket/tcp_client_socket.h"
37 #include "net/ssl/ssl_info.h" 41 #include "net/ssl/ssl_info.h"
42 #include "net/ssl/ssl_server_config.h"
38 #include "net/test/cert_test_util.h" 43 #include "net/test/cert_test_util.h"
39 #include "net/test/test_data_directory.h" 44 #include "net/test/test_data_directory.h"
40 #include "testing/gmock/include/gmock/gmock.h" 45 #include "testing/gmock/include/gmock/gmock.h"
41 #include "testing/gtest/include/gtest/gtest.h" 46 #include "testing/gtest/include/gtest/gtest.h"
42 47
43 const int64_t kDistantTimeoutMillis = 100000; // 100 seconds (never hit). 48 const int64_t kDistantTimeoutMillis = 100000; // 100 seconds (never hit).
44 49
45 using ::testing::_; 50 using ::testing::_;
46 using ::testing::A; 51 using ::testing::A;
47 using ::testing::DoAll; 52 using ::testing::DoAll;
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 CompleteHandler() {} 169 CompleteHandler() {}
165 MOCK_METHOD1(OnCloseComplete, void(int result)); 170 MOCK_METHOD1(OnCloseComplete, void(int result));
166 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state)); 171 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state));
167 MOCK_METHOD1(OnWriteComplete, void(int result)); 172 MOCK_METHOD1(OnWriteComplete, void(int result));
168 MOCK_METHOD1(OnReadComplete, void(int result)); 173 MOCK_METHOD1(OnReadComplete, void(int result));
169 174
170 private: 175 private:
171 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); 176 DISALLOW_COPY_AND_ASSIGN(CompleteHandler);
172 }; 177 };
173 178
179 class FakeTCPClientSocket : public net::TCPClientSocket {
180 public:
181 FakeTCPClientSocket(net::FakeSocket* socket)
182 : net::TCPClientSocket(net::AddressList(),
183 nullptr,
184 nullptr,
185 net::NetLog::Source()),
186 socket_(socket) {
187 DCHECK(socket_);
188 }
189
190 int Read(net::IOBuffer* buf,
191 int buf_len,
192 const net::CompletionCallback& callback) override {
193 return socket_->Read(buf, buf_len, callback);
194 }
195
196 int Write(net::IOBuffer* buf,
197 int buf_len,
198 const net::CompletionCallback& callback) override {
199 return socket_->Write(buf, buf_len, callback);
200 }
201
202 int SetReceiveBufferSize(int32_t size) override {
203 return socket_->SetReceiveBufferSize(size);
204 }
205
206 int SetSendBufferSize(int32_t size) override {
207 return socket_->SetSendBufferSize(size);
208 }
209
210 int Connect(const net::CompletionCallback& callback) override {
211 return socket_->Connect(callback);
212 }
213
214 void Disconnect() override { return socket_->Disconnect(); }
215
216 bool IsConnected() const override { return socket_->IsConnected(); }
217
218 bool IsConnectedAndIdle() const override {
219 return socket_->IsConnectedAndIdle();
220 }
221
222 int GetPeerAddress(net::IPEndPoint* address) const override {
223 return socket_->GetPeerAddress(address);
224 }
225
226 int GetLocalAddress(net::IPEndPoint* address) const override {
227 return socket_->GetLocalAddress(address);
228 }
229
230 const net::BoundNetLog& NetLog() const override { return socket_->NetLog(); }
231
232 void SetSubresourceSpeculation() override {
233 socket_->SetSubresourceSpeculation();
234 }
235
236 void SetOmniboxSpeculation() override { socket_->SetOmniboxSpeculation(); }
237
238 bool WasEverUsed() const override { return socket_->WasEverUsed(); }
239
240 bool WasNpnNegotiated() const override { return socket_->WasNpnNegotiated(); }
241
242 net::NextProto GetNegotiatedProtocol() const override {
243 return socket_->GetNegotiatedProtocol();
244 }
245
246 bool GetSSLInfo(net::SSLInfo* ssl_info) override {
247 return socket_->GetSSLInfo(ssl_info);
248 }
249
250 void GetConnectionAttempts(net::ConnectionAttempts* out) const override {
251 socket_->GetConnectionAttempts(out);
252 }
253
254 void ClearConnectionAttempts() override {
255 socket_->ClearConnectionAttempts();
256 }
257
258 void AddConnectionAttempts(const net::ConnectionAttempts& attempts) override {
259 socket_->AddConnectionAttempts(attempts);
260 }
261
262 int64_t GetTotalReceivedBytes() const override {
263 return socket_->GetTotalReceivedBytes();
264 }
265
266 private:
267 net::FakeSocket* socket_;
268 };
269
174 class TestCastSocket : public CastSocketImpl { 270 class TestCastSocket : public CastSocketImpl {
175 public: 271 public:
176 static std::unique_ptr<TestCastSocket> Create( 272 static std::unique_ptr<TestCastSocket> Create(
177 Logger* logger, 273 Logger* logger,
178 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) { 274 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
179 return std::unique_ptr<TestCastSocket>( 275 return std::unique_ptr<TestCastSocket>(
180 new TestCastSocket(CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL, 276 new TestCastSocket(CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL,
181 kDistantTimeoutMillis, logger, device_capabilities)); 277 kDistantTimeoutMillis, logger, device_capabilities));
182 } 278 }
183 279
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 false, 311 false,
216 logger, 312 logger,
217 device_capabilities), 313 device_capabilities),
218 capturing_net_log_(capturing_net_log), 314 capturing_net_log_(capturing_net_log),
219 ip_(ip_endpoint), 315 ip_(ip_endpoint),
220 extract_cert_result_(true), 316 extract_cert_result_(true),
221 verify_challenge_result_(true), 317 verify_challenge_result_(true),
222 verify_challenge_disallow_(false), 318 verify_challenge_disallow_(false),
223 tcp_unresponsive_(false), 319 tcp_unresponsive_(false),
224 mock_timer_(new base::MockTimer(false, false)), 320 mock_timer_(new base::MockTimer(false, false)),
225 mock_transport_(nullptr) {} 321 mock_transport_(nullptr),
322 fake_socket_(nullptr) {}
Ryan Sleevi 2016/06/24 21:44:51 Need more documentation throughout this file. It's
btolsch 2016/06/25 00:19:28 Done.
226 323
227 ~TestCastSocket() override {} 324 ~TestCastSocket() override {}
228 325
229 void SetupMockTransport() { 326 void SetupMockTransport() {
230 mock_transport_ = new MockCastTransport; 327 mock_transport_ = new MockCastTransport;
231 SetTransportForTesting(base::WrapUnique(mock_transport_)); 328 SetTransportForTesting(base::WrapUnique(mock_transport_));
232 } 329 }
233 330
331 void SetFakeSocket(net::FakeSocket* fake_socket) {
332 fake_socket_ = fake_socket;
333 }
334
234 // Socket connection helpers. 335 // Socket connection helpers.
235 void SetupTcpConnect(net::IoMode mode, int result) { 336 void SetupTcpConnect(net::IoMode mode, int result) {
236 tcp_connect_data_.reset(new net::MockConnect(mode, result)); 337 tcp_connect_data_.reset(new net::MockConnect(mode, result));
237 } 338 }
238 void SetupSslConnect(net::IoMode mode, int result) { 339 void SetupSslConnect(net::IoMode mode, int result) {
239 ssl_connect_data_.reset(new net::MockConnect(mode, result)); 340 ssl_connect_data_.reset(new net::MockConnect(mode, result));
240 } 341 }
241 342
242 // Socket I/O helpers. 343 // Socket I/O helpers.
243 void AddWriteResult(const net::MockWrite& write) { 344 void AddWriteResult(const net::MockWrite& write) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 390
290 MockCastTransport* GetMockTransport() { 391 MockCastTransport* GetMockTransport() {
291 CHECK(mock_transport_); 392 CHECK(mock_transport_);
292 return mock_transport_; 393 return mock_transport_;
293 } 394 }
294 395
295 private: 396 private:
296 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override { 397 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override {
297 if (tcp_unresponsive_) { 398 if (tcp_unresponsive_) {
298 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); 399 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true));
400 } else if (fake_socket_) {
401 return std::unique_ptr<net::TCPClientSocket>(
402 new FakeTCPClientSocket(fake_socket_));
299 } else { 403 } else {
300 net::MockConnect* connect_data = tcp_connect_data_.get(); 404 net::MockConnect* connect_data = tcp_connect_data_.get();
301 connect_data->peer_addr = ip_; 405 connect_data->peer_addr = ip_;
302 return std::unique_ptr<net::TCPClientSocket>( 406 return std::unique_ptr<net::TCPClientSocket>(
303 new MockTCPSocket(*connect_data)); 407 new MockTCPSocket(*connect_data));
304 } 408 }
305 } 409 }
306 410
307 std::unique_ptr<net::SSLClientSocket> CreateSslSocket( 411 std::unique_ptr<net::SSLClientSocket> CreateSslSocket(
308 std::unique_ptr<net::StreamSocket> socket) override { 412 std::unique_ptr<net::StreamSocket> socket) override {
413 if (fake_socket_) {
414 return CastSocketImpl::CreateSslSocket(std::move(socket));
415 }
309 net::MockConnect* connect_data = ssl_connect_data_.get(); 416 net::MockConnect* connect_data = ssl_connect_data_.get();
310 connect_data->peer_addr = ip_; 417 connect_data->peer_addr = ip_;
311 418
312 ssl_data_.reset(new net::StaticSocketDataProvider( 419 ssl_data_.reset(new net::StaticSocketDataProvider(
313 reads_.data(), reads_.size(), writes_.data(), writes_.size())); 420 reads_.data(), reads_.size(), writes_.data(), writes_.size()));
314 ssl_data_->set_connect_data(*connect_data); 421 ssl_data_->set_connect_data(*connect_data);
315 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !! 422 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !!
316 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket( 423 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket(
317 net::AddressList(), capturing_net_log_.get(), ssl_data_.get())); 424 net::AddressList(), capturing_net_log_.get(), ssl_data_.get()));
318 } 425 }
(...skipping 24 matching lines...) Expand all
343 // Simulated result of peer cert extraction. 450 // Simulated result of peer cert extraction.
344 bool extract_cert_result_; 451 bool extract_cert_result_;
345 // Simulated result of verifying challenge reply. 452 // Simulated result of verifying challenge reply.
346 bool verify_challenge_result_; 453 bool verify_challenge_result_;
347 bool verify_challenge_disallow_; 454 bool verify_challenge_disallow_;
348 // If true, makes TCP connection process stall. For timeout testing. 455 // If true, makes TCP connection process stall. For timeout testing.
349 bool tcp_unresponsive_; 456 bool tcp_unresponsive_;
350 std::unique_ptr<base::MockTimer> mock_timer_; 457 std::unique_ptr<base::MockTimer> mock_timer_;
351 MockCastTransport* mock_transport_; 458 MockCastTransport* mock_transport_;
352 459
460 net::FakeSocket* fake_socket_;
461
353 DISALLOW_COPY_AND_ASSIGN(TestCastSocket); 462 DISALLOW_COPY_AND_ASSIGN(TestCastSocket);
354 }; 463 };
355 464
356 class CastSocketTest : public testing::Test { 465 class CastSocketTest : public testing::Test {
357 public: 466 public:
358 CastSocketTest() 467 CastSocketTest()
359 : logger_( 468 : logger_(
360 new Logger(base::WrapUnique<base::Clock>(new base::SimpleTestClock), 469 new Logger(base::WrapUnique<base::Clock>(new base::SimpleTestClock),
361 base::Time())), 470 base::Time())),
362 delegate_(new MockDelegate) {} 471 delegate_(new MockDelegate) {}
363 ~CastSocketTest() override {} 472 ~CastSocketTest() override {}
364 473
365 void SetUp() override { EXPECT_CALL(*delegate_, OnMessage(_)).Times(0); } 474 void SetUp() override { EXPECT_CALL(*delegate_, OnMessage(_)).Times(0); }
366 475
367 void TearDown() override { 476 void TearDown() override {
368 if (socket_.get()) { 477 if (socket_.get()) {
369 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); 478 EXPECT_CALL(handler_, OnCloseComplete(net::OK));
370 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, 479 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
371 base::Unretained(&handler_))); 480 base::Unretained(&handler_)));
372 } 481 }
373 } 482 }
374 483
375 void CreateCastSocket() { socket_ = TestCastSocket::Create(logger_); } 484 void CreateCastSocket() { socket_ = TestCastSocket::Create(logger_); }
376 485
377 void CreateCastSocketSecure() { 486 void CreateCastSocketSecure() {
378 socket_ = TestCastSocket::CreateSecure(logger_); 487 socket_ = TestCastSocket::CreateSecure(logger_);
379 } 488 }
380 489
490 void CreateFakeSockets() {
491 channel_1_.reset(new net::FakeDataChannel());
492 channel_2_.reset(new net::FakeDataChannel());
493 server_cert_ = net::ImportCertFromFile(net::GetTestCertsDirectory(),
494 "unittest.selfsigned.der");
Ryan Sleevi 2016/06/24 21:44:51 I have no idea why we've got this cert. I've added
btolsch 2016/06/25 00:19:28 Done. This, among other things, was taken from SSL
495 ASSERT_TRUE(server_cert_);
496 server_private_key_ = ReadTestKey("unittest.key.bin");
497 ASSERT_TRUE(server_private_key_);
498 server_context_ = CreateSSLServerContext(
499 server_cert_.get(), *server_private_key_, server_ssl_config_);
500
501 fake_client_socket_.reset(
502 new net::FakeSocket(channel_1_.get(), channel_2_.get()));
503 std::unique_ptr<net::StreamSocket> server_socket(
504 new net::FakeSocket(channel_2_.get(), channel_1_.get()));
505
506 server_socket_ =
507 server_context_->CreateSSLServerSocket(std::move(server_socket));
508 ASSERT_TRUE(server_socket_);
509 }
510
511 std::unique_ptr<crypto::RSAPrivateKey> ReadTestKey(
512 const base::StringPiece& name) {
513 base::FilePath certs_dir(net::GetTestCertsDirectory());
514 base::FilePath key_path = certs_dir.AppendASCII(name);
515 std::string key_string;
516 if (!base::ReadFileToString(key_path, &key_string))
517 return nullptr;
518 std::vector<uint8_t> key_vector(
519 reinterpret_cast<const uint8_t*>(key_string.data()),
520 reinterpret_cast<const uint8_t*>(key_string.data() +
521 key_string.length()));
522 std::unique_ptr<crypto::RSAPrivateKey> key(
523 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector));
524 return key;
525 }
526
381 void HandleAuthHandshake() { 527 void HandleAuthHandshake() {
382 socket_->SetupMockTransport(); 528 socket_->SetupMockTransport();
383 CastMessage challenge_proto = CreateAuthChallenge(); 529 CastMessage challenge_proto = CreateAuthChallenge();
384 EXPECT_CALL(*socket_->GetMockTransport(), 530 EXPECT_CALL(*socket_->GetMockTransport(),
385 SendMessage(EqualsProto(challenge_proto), _)) 531 SendMessage(EqualsProto(challenge_proto), _))
386 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 532 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
387 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 533 EXPECT_CALL(*socket_->GetMockTransport(), Start());
388 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE)); 534 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
389 socket_->Connect(std::move(delegate_), 535 socket_->Connect(std::move(delegate_),
390 base::Bind(&CompleteHandler::OnConnectComplete, 536 base::Bind(&CompleteHandler::OnConnectComplete,
391 base::Unretained(&handler_))); 537 base::Unretained(&handler_)));
392 RunPendingTasks(); 538 RunPendingTasks();
393 socket_->GetMockTransport()->current_delegate()->OnMessage( 539 socket_->GetMockTransport()->current_delegate()->OnMessage(
394 CreateAuthReply()); 540 CreateAuthReply());
395 RunPendingTasks(); 541 RunPendingTasks();
396 } 542 }
397 543
398 protected: 544 protected:
399 // Runs all pending tasks in the message loop. 545 // Runs all pending tasks in the message loop.
400 void RunPendingTasks() { 546 void RunPendingTasks() {
401 base::RunLoop run_loop; 547 base::RunLoop run_loop;
402 run_loop.RunUntilIdle(); 548 run_loop.RunUntilIdle();
403 } 549 }
404 550
405 base::MessageLoop message_loop_; 551 content::TestBrowserThreadBundle thread_bundle_{
552 content::TestBrowserThreadBundle::IO_MAINLOOP};
406 Logger* logger_; 553 Logger* logger_;
407 std::unique_ptr<TestCastSocket> socket_; 554 std::unique_ptr<TestCastSocket> socket_;
408 CompleteHandler handler_; 555 CompleteHandler handler_;
409 std::unique_ptr<MockDelegate> delegate_; 556 std::unique_ptr<MockDelegate> delegate_;
410 557
558 std::unique_ptr<net::FakeDataChannel> channel_1_;
559 std::unique_ptr<net::FakeDataChannel> channel_2_;
560 std::unique_ptr<net::FakeSocket> fake_client_socket_;
561 std::unique_ptr<net::SSLServerSocket> server_socket_;
562 std::unique_ptr<net::SSLServerContext> server_context_;
563 std::unique_ptr<crypto::RSAPrivateKey> server_private_key_;
564 scoped_refptr<net::X509Certificate> server_cert_;
565 net::SSLServerConfig server_ssl_config_;
566
411 private: 567 private:
412 DISALLOW_COPY_AND_ASSIGN(CastSocketTest); 568 DISALLOW_COPY_AND_ASSIGN(CastSocketTest);
413 }; 569 };
414 570
415 // Tests connecting and closing the socket. 571 // Tests connecting and closing the socket.
416 TEST_F(CastSocketTest, TestConnectAndClose) { 572 TEST_F(CastSocketTest, TestConnectAndClose) {
417 CreateCastSocket(); 573 CreateCastSocket();
418 socket_->SetupMockTransport(); 574 socket_->SetupMockTransport();
419 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 575 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
420 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 576 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 base::Unretained(&handler_))); 952 base::Unretained(&handler_)));
797 RunPendingTasks(); 953 RunPendingTasks();
798 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply()); 954 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply());
799 RunPendingTasks(); 955 RunPendingTasks();
800 956
801 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 957 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state());
802 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR, 958 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR,
803 socket_->error_state()); 959 socket_->error_state());
804 } 960 }
805 961
962 // Tests connecting through an actual non-mocked CastTransport object and
963 // non-mocked SSLClientSocket, testing the components in integration.
964 TEST_F(CastSocketTest, TestConnectEndToEndWithRealSSL) {
965 CreateCastSocketSecure();
966 CreateFakeSockets();
967 socket_->SetFakeSocket(fake_client_socket_.get());
968
969 net::TestCompletionCallback handshake_callback;
970 int server_ret = server_socket_->Handshake(handshake_callback.callback());
971
972 socket_->Connect(std::move(delegate_),
973 base::Bind(&CompleteHandler::OnConnectComplete,
974 base::Unretained(&handler_)));
Ryan Sleevi 2016/06/24 21:44:51 BUG?: You should be checking/storing the result co
btolsch 2016/06/25 00:19:28 This is CastSocket::Connect and it returns void.
975 server_ret = handshake_callback.GetResult(server_ret);
Ryan Sleevi 2016/06/24 21:44:51 DESIGN: server_ret = handshake_callback.GetResult(
btolsch 2016/06/25 00:19:28 Done.
976
977 ASSERT_EQ(net::OK, server_ret);
978
979 // Set low-level auth challenge expectations.
980 CastMessage challenge = CreateAuthChallenge();
981 std::string challenge_str;
982 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
983
984 int challenge_buffer_length = challenge_str.size();
985 scoped_refptr<net::IOBuffer> challenge_buffer(
986 new net::IOBuffer(challenge_buffer_length));
987 net::TestCompletionCallback read_callback;
988 int read_result =
989 server_socket_->Read(challenge_buffer.get(), challenge_buffer_length,
990 read_callback.callback());
991
992 EXPECT_TRUE(read_result > 0 || read_result == net::ERR_IO_PENDING);
993 read_result = read_callback.GetResult(read_result);
994 EXPECT_GT(read_result, 0);
Ryan Sleevi 2016/06/24 21:44:51 DESIGN: Replace 992-994 with read_result = read_c
btolsch 2016/06/25 00:19:28 Done.
995
996 EXPECT_EQ(challenge_str,
997 std::string(challenge_buffer->data(), challenge_buffer_length));
Ryan Sleevi 2016/06/24 21:44:51 BUG: Note |read_result| may be <= challenge_buffer
btolsch 2016/06/25 00:19:28 Done.
998
999 // Set low-level auth reply expectations.
1000 CastMessage reply = CreateAuthReply();
1001 std::string reply_str;
1002 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1003
1004 scoped_refptr<net::StringIOBuffer> reply_buffer(
1005 new net::StringIOBuffer(reply_str));
1006 net::TestCompletionCallback write_callback;
1007 int write_result = server_socket_->Write(
1008 reply_buffer.get(), reply_buffer->size(), write_callback.callback());
Ryan Sleevi 2016/06/24 21:44:51 Same remarks about write & write sizes
btolsch 2016/06/25 00:19:28 Done.
1009
1010 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
1011 EXPECT_TRUE(write_result > 0 || write_result == net::ERR_IO_PENDING);
1012 write_result = write_callback.GetResult(write_result);
Ryan Sleevi 2016/06/24 21:44:51 Same remarks about coalescing the GetResult()
btolsch 2016/06/25 00:19:28 Done.
1013 EXPECT_GT(write_result, 0);
1014 RunPendingTasks();
1015
1016 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
1017 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
1018 }
1019
1020 // Sends message data through an actual non-mocked CastTransport object and
1021 // non-mocked SSLClientSocket, testing the components in integration.
1022 TEST_F(CastSocketTest, TestMessageEndToEndWithRealSSL) {
1023 CreateCastSocketSecure();
1024 CreateFakeSockets();
1025 socket_->SetFakeSocket(fake_client_socket_.get());
1026
1027 net::TestCompletionCallback handshake_callback;
1028 int server_ret = server_socket_->Handshake(handshake_callback.callback());
1029
1030 socket_->Connect(std::move(delegate_),
1031 base::Bind(&CompleteHandler::OnConnectComplete,
1032 base::Unretained(&handler_)));
1033 server_ret = handshake_callback.GetResult(server_ret);
1034
1035 ASSERT_EQ(net::OK, server_ret);
1036
1037 // Set low-level auth challenge expectations.
1038 CastMessage challenge = CreateAuthChallenge();
1039 std::string challenge_str;
1040 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
1041
1042 int challenge_buffer_length = challenge_str.size();
1043 scoped_refptr<net::IOBuffer> challenge_buffer(
1044 new net::IOBuffer(challenge_buffer_length));
1045 net::TestCompletionCallback read_callback;
1046 int read_result =
1047 server_socket_->Read(challenge_buffer.get(), challenge_buffer_length,
1048 read_callback.callback());
1049
1050 EXPECT_TRUE(read_result > 0 || read_result == net::ERR_IO_PENDING);
1051 read_result = read_callback.GetResult(read_result);
1052 EXPECT_GT(read_result, 0);
1053
1054 EXPECT_EQ(challenge_str,
1055 std::string(challenge_buffer->data(), challenge_buffer_length));
1056
1057 // Set low-level auth reply expectations.
1058 CastMessage reply = CreateAuthReply();
1059 std::string reply_str;
1060 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1061
1062 scoped_refptr<net::StringIOBuffer> reply_buffer(
1063 new net::StringIOBuffer(reply_str));
1064 net::TestCompletionCallback write_callback;
1065 int write_result = server_socket_->Write(
1066 reply_buffer.get(), reply_buffer->size(), write_callback.callback());
1067
1068 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
1069 EXPECT_TRUE(write_result > 0 || write_result == net::ERR_IO_PENDING);
1070 write_result = write_callback.GetResult(write_result);
1071 EXPECT_GT(write_result, 0);
1072 RunPendingTasks();
1073
1074 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
1075 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
1076
1077 // Send a test message through the ssl socket.
1078 CastMessage test_message = CreateTestMessage();
1079 std::string test_message_str;
1080 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
1081
1082 int test_message_length = test_message_str.size();
1083 scoped_refptr<net::IOBuffer> test_message_buffer(
1084 new net::IOBuffer(test_message_length));
1085
1086 EXPECT_CALL(handler_, OnWriteComplete(net::OK));
1087 socket_->transport()->SendMessage(
1088 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
1089 base::Unretained(&handler_)));
1090 RunPendingTasks();
1091
1092 net::TestCompletionCallback test_message_callback;
1093 read_result =
1094 server_socket_->Read(test_message_buffer.get(), test_message_length,
1095 test_message_callback.callback());
1096
1097 EXPECT_TRUE(read_result > 0 || read_result == net::ERR_IO_PENDING);
1098 read_result = read_callback.GetResult(read_result);
1099 EXPECT_GT(read_result, 0);
1100
1101 EXPECT_EQ(test_message_str,
1102 std::string(test_message_buffer->data(), test_message_length));
1103
1104 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
1105 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
1106 }
1107
806 // Sends message data through an actual non-mocked CastTransport object, 1108 // Sends message data through an actual non-mocked CastTransport object,
807 // testing the two components in integration. 1109 // testing the two components in integration.
808 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) { 1110 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) {
809 CreateCastSocketSecure(); 1111 CreateCastSocketSecure();
810 socket_->SetupTcpConnect(net::ASYNC, net::OK); 1112 socket_->SetupTcpConnect(net::ASYNC, net::OK);
811 socket_->SetupSslConnect(net::ASYNC, net::OK); 1113 socket_->SetupSslConnect(net::ASYNC, net::OK);
812 1114
813 // Set low-level auth challenge expectations. 1115 // Set low-level auth challenge expectations.
814 CastMessage challenge = CreateAuthChallenge(); 1116 CastMessage challenge = CreateAuthChallenge();
815 std::string challenge_str; 1117 std::string challenge_str;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT); 1206 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT);
905 EXPECT_FALSE(socket_->audio_only()); 1207 EXPECT_FALSE(socket_->audio_only());
906 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone()); 1208 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone());
907 EXPECT_FALSE(socket_->audio_only()); 1209 EXPECT_FALSE(socket_->audio_only());
908 EXPECT_FALSE(socket_->TestVerifyChannelPolicyAudioOnly()); 1210 EXPECT_FALSE(socket_->TestVerifyChannelPolicyAudioOnly());
909 EXPECT_TRUE(socket_->audio_only()); 1211 EXPECT_TRUE(socket_->audio_only());
910 } 1212 }
911 } // namespace cast_channel 1213 } // namespace cast_channel
912 } // namespace api 1214 } // namespace api
913 } // namespace extensions 1215 } // 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