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

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 continuous loop to accept TCP connection Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « extensions/browser/api/cast_channel/cast_socket.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/api/cast_channel/cast_socket.h" 5 #include "extensions/browser/api/cast_channel/cast_socket.h"
6 6
7 #include <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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 CompleteHandler() {} 171 CompleteHandler() {}
165 MOCK_METHOD1(OnCloseComplete, void(int result)); 172 MOCK_METHOD1(OnCloseComplete, void(int result));
166 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state)); 173 MOCK_METHOD1(OnConnectComplete, void(ChannelError error_state));
167 MOCK_METHOD1(OnWriteComplete, void(int result)); 174 MOCK_METHOD1(OnWriteComplete, void(int result));
168 MOCK_METHOD1(OnReadComplete, void(int result)); 175 MOCK_METHOD1(OnReadComplete, void(int result));
169 176
170 private: 177 private:
171 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); 178 DISALLOW_COPY_AND_ASSIGN(CompleteHandler);
172 }; 179 };
173 180
174 class TestCastSocket : public CastSocketImpl { 181 class TestCastSocketBase : public CastSocketImpl {
175 public: 182 public:
176 static std::unique_ptr<TestCastSocket> Create( 183 TestCastSocketBase(const net::IPEndPoint& ip_endpoint,
177 Logger* logger, 184 ChannelAuthType channel_auth,
178 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) { 185 int64_t timeout_ms,
179 return std::unique_ptr<TestCastSocket>( 186 Logger* logger,
180 new TestCastSocket(CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL, 187 uint64_t device_capabilities)
181 kDistantTimeoutMillis, logger, device_capabilities)); 188 : TestCastSocketBase(ip_endpoint,
182 } 189 channel_auth,
190 timeout_ms,
191 logger,
192 new net::TestNetLog(),
193 device_capabilities) {}
183 194
184 static std::unique_ptr<TestCastSocket> CreateSecure( 195 TestCastSocketBase(const net::IPEndPoint& ip_endpoint,
185 Logger* logger, 196 ChannelAuthType channel_auth,
186 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) { 197 int64_t timeout_ms,
187 return std::unique_ptr<TestCastSocket>(new TestCastSocket( 198 Logger* logger,
188 CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL_VERIFIED, 199 net::TestNetLog* capturing_net_log,
189 kDistantTimeoutMillis, logger, device_capabilities)); 200 uint64_t device_capabilities)
190 }
191
192 TestCastSocket(const net::IPEndPoint& ip_endpoint,
193 ChannelAuthType channel_auth,
194 int64_t timeout_ms,
195 Logger* logger,
196 uint64_t device_capabilities)
197 : TestCastSocket(ip_endpoint,
198 channel_auth,
199 timeout_ms,
200 logger,
201 new net::TestNetLog(),
202 device_capabilities) {}
203
204 TestCastSocket(const net::IPEndPoint& ip_endpoint,
205 ChannelAuthType channel_auth,
206 int64_t timeout_ms,
207 Logger* logger,
208 net::TestNetLog* capturing_net_log,
209 uint64_t device_capabilities)
210 : CastSocketImpl("some_extension_id", 201 : CastSocketImpl("some_extension_id",
211 ip_endpoint, 202 ip_endpoint,
212 channel_auth, 203 channel_auth,
213 capturing_net_log, 204 capturing_net_log,
214 base::TimeDelta::FromMilliseconds(timeout_ms), 205 base::TimeDelta::FromMilliseconds(timeout_ms),
215 false, 206 false,
216 logger, 207 logger,
217 device_capabilities), 208 device_capabilities),
218 capturing_net_log_(capturing_net_log), 209 capturing_net_log_(capturing_net_log),
219 ip_(ip_endpoint), 210 ip_(ip_endpoint),
220 extract_cert_result_(true), 211 extract_cert_result_(true),
221 verify_challenge_result_(true), 212 verify_challenge_result_(true),
222 verify_challenge_disallow_(false), 213 verify_challenge_disallow_(false),
214 mock_timer_(new base::MockTimer(false, false)) {}
215
216 ~TestCastSocketBase() override {}
217
218 void SetExtractCertResult(bool extract_result) {
219 extract_cert_result_ = extract_result;
220 }
221
222 void SetVerifyChallengeResult(bool verify_challenge) {
223 verify_challenge_result_ = verify_challenge;
224 }
225
226 void TriggerTimeout() { mock_timer_->Fire(); }
227
228 bool HasChannelPolicyNone() {
229 AuthResult authResult;
230 return VerifyChannelPolicy(authResult);
231 }
232
233 bool HasChannelPolicyAudioOnly() {
234 AuthResult authResult;
235 authResult.channel_policies |= AuthResult::POLICY_AUDIO_ONLY;
236 return VerifyChannelPolicy(authResult);
237 }
238
239 protected:
240 scoped_refptr<net::X509Certificate> ExtractPeerCert() override {
241 if (!extract_cert_result_) {
242 return nullptr;
243 }
244 auto cert =
245 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
246 EXPECT_NE(nullptr, cert);
247 return cert;
248 }
249
250 bool VerifyChallengeReply() override {
251 EXPECT_FALSE(verify_challenge_disallow_);
252 return verify_challenge_result_;
253 }
254
255 base::Timer* GetTimer() override { return mock_timer_.get(); }
256
257 std::unique_ptr<net::TestNetLog> capturing_net_log_;
258 net::IPEndPoint ip_;
259 // Simulated result of peer cert extraction.
260 bool extract_cert_result_;
261 // Simulated result of verifying challenge reply.
262 bool verify_challenge_result_;
263 bool verify_challenge_disallow_;
264 std::unique_ptr<base::MockTimer> mock_timer_;
265
266 DISALLOW_COPY_AND_ASSIGN(TestCastSocketBase);
267 };
268
269 class MockTestCastSocket : public TestCastSocketBase {
270 public:
271 static std::unique_ptr<MockTestCastSocket> Create(
272 Logger* logger,
273 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
274 return std::unique_ptr<MockTestCastSocket>(new MockTestCastSocket(
275 CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL, kDistantTimeoutMillis,
276 logger, device_capabilities));
277 }
278
279 static std::unique_ptr<MockTestCastSocket> CreateSecure(
280 Logger* logger,
281 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
282 return std::unique_ptr<MockTestCastSocket>(new MockTestCastSocket(
283 CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL_VERIFIED,
284 kDistantTimeoutMillis, logger, device_capabilities));
285 }
286
287 MockTestCastSocket(const net::IPEndPoint& ip_endpoint,
288 ChannelAuthType channel_auth,
289 int64_t timeout_ms,
290 Logger* logger,
291 uint64_t device_capabilities)
292 : MockTestCastSocket(ip_endpoint,
293 channel_auth,
294 timeout_ms,
295 logger,
296 new net::TestNetLog(),
297 device_capabilities) {}
298
299 MockTestCastSocket(const net::IPEndPoint& ip_endpoint,
300 ChannelAuthType channel_auth,
301 int64_t timeout_ms,
302 Logger* logger,
303 net::TestNetLog* capturing_net_log,
304 uint64_t device_capabilities)
305 : TestCastSocketBase(ip_endpoint,
306 channel_auth,
307 timeout_ms,
308 logger,
309 capturing_net_log,
310 device_capabilities),
223 tcp_unresponsive_(false), 311 tcp_unresponsive_(false),
224 mock_timer_(new base::MockTimer(false, false)),
225 mock_transport_(nullptr) {} 312 mock_transport_(nullptr) {}
226 313
227 ~TestCastSocket() override {}
228
229 void SetupMockTransport() { 314 void SetupMockTransport() {
230 mock_transport_ = new MockCastTransport; 315 mock_transport_ = new MockCastTransport;
231 SetTransportForTesting(base::WrapUnique(mock_transport_)); 316 SetTransportForTesting(base::WrapUnique(mock_transport_));
232 } 317 }
233 318
234 // Socket connection helpers. 319 // Socket connection helpers.
235 void SetupTcpConnect(net::IoMode mode, int result) { 320 void SetupTcpConnect(net::IoMode mode, int result) {
236 tcp_connect_data_.reset(new net::MockConnect(mode, result)); 321 tcp_connect_data_.reset(new net::MockConnect(mode, result));
237 } 322 }
238 void SetupSslConnect(net::IoMode mode, int result) { 323 void SetupSslConnect(net::IoMode mode, int result) {
(...skipping 16 matching lines...) Expand all
255 void AddReadResult(net::IoMode mode, int result) { 340 void AddReadResult(net::IoMode mode, int result) {
256 AddReadResult(net::MockRead(mode, result)); 341 AddReadResult(net::MockRead(mode, result));
257 } 342 }
258 void AddReadResultForData(net::IoMode mode, const std::string& data) { 343 void AddReadResultForData(net::IoMode mode, const std::string& data) {
259 AddReadResult(net::MockRead(mode, data.c_str(), data.size())); 344 AddReadResult(net::MockRead(mode, data.c_str(), data.size()));
260 } 345 }
261 346
262 // Helpers for modifying other connection-related behaviors. 347 // Helpers for modifying other connection-related behaviors.
263 void SetupTcpConnectUnresponsive() { tcp_unresponsive_ = true; } 348 void SetupTcpConnectUnresponsive() { tcp_unresponsive_ = true; }
264 349
265 void SetExtractCertResult(bool value) {
266 extract_cert_result_ = value;
267 }
268
269 void SetVerifyChallengeResult(bool value) {
270 verify_challenge_result_ = value;
271 }
272
273 void TriggerTimeout() {
274 mock_timer_->Fire();
275 }
276
277 bool TestVerifyChannelPolicyNone() {
278 AuthResult authResult;
279 return VerifyChannelPolicy(authResult);
280 }
281
282 bool TestVerifyChannelPolicyAudioOnly() {
283 AuthResult authResult;
284 authResult.channel_policies |= AuthResult::POLICY_AUDIO_ONLY;
285 return VerifyChannelPolicy(authResult);
286 }
287
288 void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; }
289
290 MockCastTransport* GetMockTransport() { 350 MockCastTransport* GetMockTransport() {
291 CHECK(mock_transport_); 351 CHECK(mock_transport_);
292 return mock_transport_; 352 return mock_transport_;
293 } 353 }
294 354
295 private: 355 private:
296 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override { 356 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override {
297 if (tcp_unresponsive_) { 357 if (tcp_unresponsive_) {
298 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); 358 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true));
299 } else { 359 } else {
(...skipping 10 matching lines...) Expand all
310 connect_data->peer_addr = ip_; 370 connect_data->peer_addr = ip_;
311 371
312 ssl_data_.reset(new net::StaticSocketDataProvider( 372 ssl_data_.reset(new net::StaticSocketDataProvider(
313 reads_.data(), reads_.size(), writes_.data(), writes_.size())); 373 reads_.data(), reads_.size(), writes_.data(), writes_.size()));
314 ssl_data_->set_connect_data(*connect_data); 374 ssl_data_->set_connect_data(*connect_data);
315 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !! 375 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !!
316 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket( 376 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket(
317 net::AddressList(), capturing_net_log_.get(), ssl_data_.get())); 377 net::AddressList(), capturing_net_log_.get(), ssl_data_.get()));
318 } 378 }
319 379
320 scoped_refptr<net::X509Certificate> ExtractPeerCert() override {
321 return extract_cert_result_
322 ? net::ImportCertFromFile(net::GetTestCertsDirectory(),
323 "ok_cert.pem")
324 : nullptr;
325 }
326
327 bool VerifyChallengeReply() override {
328 EXPECT_FALSE(verify_challenge_disallow_);
329 return verify_challenge_result_;
330 }
331
332 base::Timer* GetTimer() override { return mock_timer_.get(); }
333
334 std::unique_ptr<net::TestNetLog> capturing_net_log_;
335 net::IPEndPoint ip_;
336 // Simulated connect data 380 // Simulated connect data
337 std::unique_ptr<net::MockConnect> tcp_connect_data_; 381 std::unique_ptr<net::MockConnect> tcp_connect_data_;
338 std::unique_ptr<net::MockConnect> ssl_connect_data_; 382 std::unique_ptr<net::MockConnect> ssl_connect_data_;
339 // Simulated read / write data 383 // Simulated read / write data
340 std::vector<net::MockWrite> writes_; 384 std::vector<net::MockWrite> writes_;
341 std::vector<net::MockRead> reads_; 385 std::vector<net::MockRead> reads_;
342 std::unique_ptr<net::SocketDataProvider> ssl_data_; 386 std::unique_ptr<net::SocketDataProvider> ssl_data_;
343 // Simulated result of peer cert extraction.
344 bool extract_cert_result_;
345 // Simulated result of verifying challenge reply.
346 bool verify_challenge_result_;
347 bool verify_challenge_disallow_;
348 // If true, makes TCP connection process stall. For timeout testing. 387 // If true, makes TCP connection process stall. For timeout testing.
349 bool tcp_unresponsive_; 388 bool tcp_unresponsive_;
350 std::unique_ptr<base::MockTimer> mock_timer_;
351 MockCastTransport* mock_transport_; 389 MockCastTransport* mock_transport_;
352
353 DISALLOW_COPY_AND_ASSIGN(TestCastSocket);
354 }; 390 };
355 391
356 class CastSocketTest : public testing::Test { 392 class SslTestCastSocket : public TestCastSocketBase {
357 public: 393 public:
358 CastSocketTest() 394 static std::unique_ptr<SslTestCastSocket> Create(
359 : logger_( 395 Logger* logger,
396 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
397 return std::unique_ptr<SslTestCastSocket>(new SslTestCastSocket(
398 CreateIPEndPointForTest(), CHANNEL_AUTH_TYPE_SSL_VERIFIED,
399 kDistantTimeoutMillis, logger, device_capabilities));
400 }
401
402 using TestCastSocketBase::TestCastSocketBase;
Ryan Sleevi 2016/09/16 01:39:06 I've rarely seen this pattern in Chrome, and when
btolsch 2017/06/22 04:23:53 This line is just so I don't have to repeat the co
403
404 void SetTcpSocket(std::unique_ptr<net::TCPClientSocket> tcp_client_socket) {
405 tcp_client_socket_ = std::move(tcp_client_socket);
406 }
407
408 private:
409 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override {
410 return std::move(tcp_client_socket_);
411 }
412
413 using CastSocketImpl::CreateSslSocket;
414
415 std::unique_ptr<net::TCPClientSocket> tcp_client_socket_;
416 };
417
418 class CastSocketTestBase : public testing::Test {
419 public:
420 CastSocketTestBase()
421 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
422 logger_(
360 new Logger(base::WrapUnique<base::Clock>(new base::SimpleTestClock), 423 new Logger(base::WrapUnique<base::Clock>(new base::SimpleTestClock),
361 base::Time())), 424 base::Time())),
362 delegate_(new MockDelegate) {} 425 delegate_(new MockDelegate) {}
363 ~CastSocketTest() override {} 426 ~CastSocketTestBase() override {}
364 427
365 void SetUp() override { EXPECT_CALL(*delegate_, OnMessage(_)).Times(0); } 428 void SetUp() override { EXPECT_CALL(*delegate_, OnMessage(_)).Times(0); }
366 429
367 void TearDown() override { 430 void TearDown() override {
368 if (socket_.get()) { 431 if (socket_.get()) {
369 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); 432 EXPECT_CALL(handler_, OnCloseComplete(net::OK));
370 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, 433 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
371 base::Unretained(&handler_))); 434 base::Unretained(&handler_)));
372 } 435 }
373 } 436 }
374 437
375 void CreateCastSocket() { socket_ = TestCastSocket::Create(logger_); }
376
377 void CreateCastSocketSecure() {
378 socket_ = TestCastSocket::CreateSecure(logger_);
379 }
380
381 void HandleAuthHandshake() {
382 socket_->SetupMockTransport();
383 CastMessage challenge_proto = CreateAuthChallenge();
384 EXPECT_CALL(*socket_->GetMockTransport(),
385 SendMessage(EqualsProto(challenge_proto), _))
386 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
387 EXPECT_CALL(*socket_->GetMockTransport(), Start());
388 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
389 socket_->Connect(std::move(delegate_),
390 base::Bind(&CompleteHandler::OnConnectComplete,
391 base::Unretained(&handler_)));
392 RunPendingTasks();
393 socket_->GetMockTransport()->current_delegate()->OnMessage(
394 CreateAuthReply());
395 RunPendingTasks();
396 }
397
398 protected: 438 protected:
399 // Runs all pending tasks in the message loop. 439 // Runs all pending tasks in the message loop.
400 void RunPendingTasks() { 440 void RunPendingTasks() {
401 base::RunLoop run_loop; 441 base::RunLoop run_loop;
402 run_loop.RunUntilIdle(); 442 run_loop.RunUntilIdle();
403 } 443 }
404 444
405 base::MessageLoop message_loop_; 445 content::TestBrowserThreadBundle thread_bundle_;
406 Logger* logger_; 446 Logger* logger_;
407 std::unique_ptr<TestCastSocket> socket_;
408 CompleteHandler handler_; 447 CompleteHandler handler_;
409 std::unique_ptr<MockDelegate> delegate_; 448 std::unique_ptr<MockDelegate> delegate_;
410 449 std::unique_ptr<TestCastSocketBase> socket_;
411 private:
412 DISALLOW_COPY_AND_ASSIGN(CastSocketTest);
413 }; 450 };
414 451
452 class MockCastSocketTest : public CastSocketTestBase {
453 protected:
454 void CreateCastSocket() { socket_ = MockTestCastSocket::Create(logger_); }
455
456 void CreateCastSocketSecure() {
457 socket_ = MockTestCastSocket::CreateSecure(logger_);
458 }
459
460 void HandleAuthHandshake() {
461 socket()->SetupMockTransport();
462 CastMessage challenge_proto = CreateAuthChallenge();
463 EXPECT_CALL(*socket()->GetMockTransport(),
464 SendMessage(EqualsProto(challenge_proto), _))
465 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
466 EXPECT_CALL(*socket()->GetMockTransport(), Start());
467 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
468 socket()->Connect(std::move(delegate_),
Ryan Sleevi 2016/09/16 01:39:06 It still continues to surprise me that Cast socket
btolsch 2017/06/22 04:23:52 Acknowledged.
469 base::Bind(&CompleteHandler::OnConnectComplete,
470 base::Unretained(&handler_)));
471 RunPendingTasks();
Ryan Sleevi 2016/09/16 01:39:06 What happens if Connect() failed? Isn't line 472 i
btolsch 2017/06/22 04:23:53 This is existing code that I just moved here. 472
472 socket()->GetMockTransport()->current_delegate()->OnMessage(
473 CreateAuthReply());
474 RunPendingTasks();
475 }
476
477 MockTestCastSocket* socket() {
478 return static_cast<MockTestCastSocket*>(socket_.get());
479 }
480 };
481
482 class SslCastSocketTest : public CastSocketTestBase {
483 protected:
484 void CreateSslCastSocket() { socket_ = SslTestCastSocket::Create(logger_); }
485
486 // Initializes the SSLServerSocket |server_socket_| and the TCP socket
487 // |tcp_client_socket_| to be used by the CastSocket |socket_| as transport
488 // to |server_socket_|.
489 void CreateSslSockets() {
490 server_cert_ =
491 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
Ryan Sleevi 2016/09/16 01:39:06 net::GetTestCertsDirectory() is more of an 'intern
btolsch 2017/06/22 04:23:53 Added a new cert to //components/test/data/cast_ch
492 ASSERT_TRUE(server_cert_);
493 server_private_key_ = ReadTestKeyFromPEM("ok_cert.pem");
494 ASSERT_TRUE(server_private_key_);
495 server_context_ = CreateSSLServerContext(
496 server_cert_.get(), *server_private_key_, server_ssl_config_);
497
498 tcp_server_socket_.reset(
499 new net::TCPServerSocket(nullptr, net::NetLog::Source()));
500 ASSERT_EQ(net::OK,
501 tcp_server_socket_->ListenWithAddressAndPort("127.0.0.1", 0, 1));
502 net::IPEndPoint server_address;
503 ASSERT_EQ(net::OK, tcp_server_socket_->GetLocalAddress(&server_address));
504 tcp_client_socket_.reset(
505 new net::TCPClientSocket(net::AddressList(server_address), nullptr,
506 nullptr, net::NetLog::Source()));
507
508 std::unique_ptr<net::StreamSocket> accepted_socket;
509 tcp_server_socket_->Accept(&accepted_socket,
510 base::Bind(&SslCastSocketTest::TcpAcceptCallback,
511 base::Unretained(this)));
512 tcp_client_socket_->Connect(base::Bind(
513 &SslCastSocketTest::TcpConnectCallback, base::Unretained(this)));
514 while (!accept_succeeded_ && !connect_succeeded_) {
515 RunPendingTasks();
Ryan Sleevi 2016/09/16 01:39:06 This will run indefinitely if either Accept() or C
btolsch 2017/06/22 04:23:53 Done.
516 }
Ryan Sleevi 2016/09/16 01:39:06 Because of how you've structured TcpAcceptCallback
btolsch 2017/06/22 04:23:53 I revised this to simply save the result so the ma
517 ASSERT_TRUE(accepted_socket);
518 ASSERT_TRUE(tcp_client_socket_->IsConnected());
519
520 server_socket_ =
521 server_context_->CreateSSLServerSocket(std::move(accepted_socket));
522 ASSERT_TRUE(server_socket_);
523 }
524
525 void TcpAcceptCallback(int result) {
526 ASSERT_EQ(net::OK, result);
527 accept_succeeded_ = true;
528 }
529
530 void TcpConnectCallback(int result) {
531 ASSERT_EQ(net::OK, result);
532 connect_succeeded_ = true;
533 }
534
535 std::unique_ptr<crypto::RSAPrivateKey> ReadTestKeyFromPEM(
536 const base::StringPiece& name) {
537 base::FilePath certs_dir(net::GetTestCertsDirectory());
538 base::FilePath key_path = certs_dir.AppendASCII(name);
539 std::vector<std::string> headers;
540 headers.push_back("PRIVATE KEY");
541 std::string pem_data;
542 if (!base::ReadFileToString(key_path, &pem_data)) {
543 return nullptr;
544 }
545 net::PEMTokenizer pem_tokenizer(pem_data, headers);
546 if (!pem_tokenizer.GetNext()) {
547 return nullptr;
548 }
549 std::vector<uint8_t> key_vector(pem_tokenizer.data().begin(),
550 pem_tokenizer.data().end());
551
552 std::unique_ptr<crypto::RSAPrivateKey> key(
553 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector));
554 return key;
555 }
556
557 int ReadExactLength(net::IOBuffer* buffer,
558 int buffer_length,
559 net::Socket* socket) {
560 scoped_refptr<net::DrainableIOBuffer> draining_buffer(
561 new net::DrainableIOBuffer(buffer, buffer_length));
562 while (draining_buffer->BytesRemaining() > 0) {
563 net::TestCompletionCallback read_callback;
564 int read_result = read_callback.GetResult(server_socket_->Read(
565 draining_buffer.get(), buffer_length, read_callback.callback()));
566 EXPECT_GT(read_result, 0);
567 draining_buffer->DidConsume(read_result);
568 }
569 return buffer_length;
570 }
571
572 int WriteExactLength(net::IOBuffer* buffer,
573 int buffer_length,
574 net::Socket* socket) {
575 scoped_refptr<net::DrainableIOBuffer> draining_buffer(
576 new net::DrainableIOBuffer(buffer, buffer_length));
577 while (draining_buffer->BytesRemaining() > 0) {
578 net::TestCompletionCallback write_callback;
579 int write_result = write_callback.GetResult(server_socket_->Write(
580 draining_buffer.get(), buffer_length, write_callback.callback()));
581 EXPECT_GT(write_result, 0);
582 draining_buffer->DidConsume(write_result);
583 }
584 return buffer_length;
585 }
586
587 SslTestCastSocket* socket() {
588 return static_cast<SslTestCastSocket*>(socket_.get());
589 }
590
591 // Booleans used for TCP socket setup.
592 bool accept_succeeded_ = false;
593 bool connect_succeeded_ = false;
594
595 // Underlying TCP sockets for |socket_| to communicate with |server_socket_|
596 // when testing with the real SSL implementation.
597 std::unique_ptr<net::TCPClientSocket> tcp_client_socket_;
598 std::unique_ptr<net::TCPServerSocket> tcp_server_socket_;
599
600 // |server_socket_| is used for the *RealSSL tests in order to test the
601 // CastSocket over a real SSL socket. The other members below are used to
602 // initialize |server_socket_|.
603 std::unique_ptr<net::SSLServerSocket> server_socket_;
604 std::unique_ptr<net::SSLServerContext> server_context_;
605 std::unique_ptr<crypto::RSAPrivateKey> server_private_key_;
606 scoped_refptr<net::X509Certificate> server_cert_;
607 net::SSLServerConfig server_ssl_config_;
608 };
609
415 // Tests connecting and closing the socket. 610 // Tests connecting and closing the socket.
416 TEST_F(CastSocketTest, TestConnectAndClose) { 611 TEST_F(MockCastSocketTest, TestConnectAndClose) {
417 CreateCastSocket(); 612 CreateCastSocket();
418 socket_->SetupMockTransport(); 613 socket()->SetupMockTransport();
419 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 614 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
420 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 615 socket()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
421 616
422 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE)); 617 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
423 socket_->Connect(std::move(delegate_), 618 socket()->Connect(std::move(delegate_),
424 base::Bind(&CompleteHandler::OnConnectComplete, 619 base::Bind(&CompleteHandler::OnConnectComplete,
425 base::Unretained(&handler_))); 620 base::Unretained(&handler_)));
426 RunPendingTasks(); 621 RunPendingTasks();
427 622
428 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 623 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
429 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 624 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
430 625
431 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); 626 EXPECT_CALL(handler_, OnCloseComplete(net::OK));
432 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, 627 socket()->Close(base::Bind(&CompleteHandler::OnCloseComplete,
433 base::Unretained(&handler_))); 628 base::Unretained(&handler_)));
434 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 629 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
435 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 630 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
436 } 631 }
437 632
438 // Tests that the following connection flow works: 633 // Tests that the following connection flow works:
439 // - TCP connection succeeds (async) 634 // - TCP connection succeeds (async)
440 // - SSL connection succeeds (async) 635 // - SSL connection succeeds (async)
441 TEST_F(CastSocketTest, TestConnect) { 636 TEST_F(MockCastSocketTest, TestConnect) {
442 CreateCastSocket(); 637 CreateCastSocket();
443 socket_->SetupTcpConnect(net::ASYNC, net::OK); 638 socket()->SetupTcpConnect(net::ASYNC, net::OK);
444 socket_->SetupSslConnect(net::ASYNC, net::OK); 639 socket()->SetupSslConnect(net::ASYNC, net::OK);
445 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); 640 socket()->AddReadResult(net::ASYNC, net::ERR_IO_PENDING);
446 641
447 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE)); 642 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
448 socket_->Connect(std::move(delegate_), 643 socket()->Connect(std::move(delegate_),
449 base::Bind(&CompleteHandler::OnConnectComplete, 644 base::Bind(&CompleteHandler::OnConnectComplete,
450 base::Unretained(&handler_))); 645 base::Unretained(&handler_)));
451 RunPendingTasks(); 646 RunPendingTasks();
452 647
453 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 648 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
454 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 649 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
455 } 650 }
456 651
457 // Tests that the following connection flow works: 652 // Tests that the following connection flow works:
458 // - TCP connection fails (async) 653 // - TCP connection fails (async)
459 TEST_F(CastSocketTest, TestConnectFails) { 654 TEST_F(MockCastSocketTest, TestConnectFails) {
460 CreateCastSocket(); 655 CreateCastSocket();
461 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED); 656 socket()->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
462 657
463 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_ERROR)); 658 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_ERROR));
464 socket_->Connect(std::move(delegate_), 659 socket()->Connect(std::move(delegate_),
465 base::Bind(&CompleteHandler::OnConnectComplete, 660 base::Bind(&CompleteHandler::OnConnectComplete,
466 base::Unretained(&handler_))); 661 base::Unretained(&handler_)));
467 RunPendingTasks(); 662 RunPendingTasks();
468 663
469 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 664 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
470 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); 665 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket()->error_state());
471 EXPECT_EQ(proto::TCP_SOCKET_CONNECT_COMPLETE, 666 EXPECT_EQ(proto::TCP_SOCKET_CONNECT_COMPLETE,
472 logger_->GetLastErrors(socket_->id()).event_type); 667 logger_->GetLastErrors(socket()->id()).event_type);
473 EXPECT_EQ(net::ERR_FAILED, 668 EXPECT_EQ(net::ERR_FAILED,
474 logger_->GetLastErrors(socket_->id()).net_return_value); 669 logger_->GetLastErrors(socket()->id()).net_return_value);
475 } 670 }
476 671
477 // Tests that the following connection flow works: 672 // Tests that the following connection flow works:
478 // - TCP connection succeeds (async) 673 // - TCP connection succeeds (async)
479 // - SSL connection succeeds (async) 674 // - SSL connection succeeds (async)
480 // - Cert is extracted successfully 675 // - Cert is extracted successfully
481 // - Challenge request is sent (async) 676 // - Challenge request is sent (async)
482 // - Challenge response is received (async) 677 // - Challenge response is received (async)
483 // - Credentials are verified successfuly 678 // - Credentials are verified successfuly
484 TEST_F(CastSocketTest, TestConnectFullSecureFlowAsync) { 679 TEST_F(MockCastSocketTest, TestConnectFullSecureFlowAsync) {
485 CreateCastSocketSecure(); 680 CreateCastSocketSecure();
486 socket_->SetupTcpConnect(net::ASYNC, net::OK); 681 socket()->SetupTcpConnect(net::ASYNC, net::OK);
487 socket_->SetupSslConnect(net::ASYNC, net::OK); 682 socket()->SetupSslConnect(net::ASYNC, net::OK);
488 683
489 HandleAuthHandshake(); 684 HandleAuthHandshake();
490 685
491 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 686 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
492 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 687 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
493 } 688 }
494 689
495 // Tests that the following connection flow works: 690 // Tests that the following connection flow works:
496 // - TCP connection succeeds (sync) 691 // - TCP connection succeeds (sync)
497 // - SSL connection succeeds (sync) 692 // - SSL connection succeeds (sync)
498 // - Cert is extracted successfully 693 // - Cert is extracted successfully
499 // - Challenge request is sent (sync) 694 // - Challenge request is sent (sync)
500 // - Challenge response is received (sync) 695 // - Challenge response is received (sync)
501 // - Credentials are verified successfuly 696 // - Credentials are verified successfuly
502 TEST_F(CastSocketTest, TestConnectFullSecureFlowSync) { 697 TEST_F(MockCastSocketTest, TestConnectFullSecureFlowSync) {
503 CreateCastSocketSecure(); 698 CreateCastSocketSecure();
504 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 699 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
505 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 700 socket()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
506 701
507 HandleAuthHandshake(); 702 HandleAuthHandshake();
508 703
509 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 704 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
510 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 705 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
511 } 706 }
512 707
513 // Test that an AuthMessage with a mangled namespace triggers cancelation 708 // Test that an AuthMessage with a mangled namespace triggers cancelation
514 // of the connection event loop. 709 // of the connection event loop.
515 TEST_F(CastSocketTest, TestConnectAuthMessageCorrupted) { 710 TEST_F(MockCastSocketTest, TestConnectAuthMessageCorrupted) {
516 CreateCastSocketSecure(); 711 CreateCastSocketSecure();
517 socket_->SetupMockTransport(); 712 socket()->SetupMockTransport();
518 713
519 socket_->SetupTcpConnect(net::ASYNC, net::OK); 714 socket()->SetupTcpConnect(net::ASYNC, net::OK);
520 socket_->SetupSslConnect(net::ASYNC, net::OK); 715 socket()->SetupSslConnect(net::ASYNC, net::OK);
521 716
522 CastMessage challenge_proto = CreateAuthChallenge(); 717 CastMessage challenge_proto = CreateAuthChallenge();
523 EXPECT_CALL(*socket_->GetMockTransport(), 718 EXPECT_CALL(*socket()->GetMockTransport(),
524 SendMessage(EqualsProto(challenge_proto), _)) 719 SendMessage(EqualsProto(challenge_proto), _))
525 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 720 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
526 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 721 EXPECT_CALL(*socket()->GetMockTransport(), Start());
527 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_TRANSPORT_ERROR)); 722 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_TRANSPORT_ERROR));
528 socket_->Connect(std::move(delegate_), 723 socket()->Connect(std::move(delegate_),
529 base::Bind(&CompleteHandler::OnConnectComplete, 724 base::Bind(&CompleteHandler::OnConnectComplete,
530 base::Unretained(&handler_))); 725 base::Unretained(&handler_)));
531 RunPendingTasks(); 726 RunPendingTasks();
532 CastMessage mangled_auth_reply = CreateAuthReply(); 727 CastMessage mangled_auth_reply = CreateAuthReply();
533 mangled_auth_reply.set_namespace_("BOGUS_NAMESPACE"); 728 mangled_auth_reply.set_namespace_("BOGUS_NAMESPACE");
534 729
535 socket_->GetMockTransport()->current_delegate()->OnMessage( 730 socket()->GetMockTransport()->current_delegate()->OnMessage(
536 mangled_auth_reply); 731 mangled_auth_reply);
537 RunPendingTasks(); 732 RunPendingTasks();
538 733
539 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 734 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
540 EXPECT_EQ(cast_channel::CHANNEL_ERROR_TRANSPORT_ERROR, 735 EXPECT_EQ(cast_channel::CHANNEL_ERROR_TRANSPORT_ERROR,
541 socket_->error_state()); 736 socket()->error_state());
542 737
543 // Verifies that the CastSocket's resources were torn down during channel 738 // Verifies that the CastSocket's resources were torn down during channel
544 // close. (see http://crbug.com/504078) 739 // close. (see http://crbug.com/504078)
545 EXPECT_EQ(nullptr, socket_->transport()); 740 EXPECT_EQ(nullptr, socket()->transport());
546 } 741 }
547 742
548 // Test connection error - TCP connect fails (async) 743 // Test connection error - TCP connect fails (async)
549 TEST_F(CastSocketTest, TestConnectTcpConnectErrorAsync) { 744 TEST_F(MockCastSocketTest, TestConnectTcpConnectErrorAsync) {
550 CreateCastSocketSecure(); 745 CreateCastSocketSecure();
551 746
552 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED); 747 socket()->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
553 748
554 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_ERROR)); 749 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_ERROR));
555 socket_->Connect(std::move(delegate_), 750 socket()->Connect(std::move(delegate_),
556 base::Bind(&CompleteHandler::OnConnectComplete, 751 base::Bind(&CompleteHandler::OnConnectComplete,
557 base::Unretained(&handler_))); 752 base::Unretained(&handler_)));
558 RunPendingTasks(); 753 RunPendingTasks();
559 754
560 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 755 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
561 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); 756 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket()->error_state());
562 } 757 }
563 758
564 // Test connection error - TCP connect fails (sync) 759 // Test connection error - TCP connect fails (sync)
565 TEST_F(CastSocketTest, TestConnectTcpConnectErrorSync) { 760 TEST_F(MockCastSocketTest, TestConnectTcpConnectErrorSync) {
566 CreateCastSocketSecure(); 761 CreateCastSocketSecure();
567 762
568 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED); 763 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED);
569 764
570 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_ERROR)); 765 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_ERROR));
571 socket_->Connect(std::move(delegate_), 766 socket()->Connect(std::move(delegate_),
572 base::Bind(&CompleteHandler::OnConnectComplete, 767 base::Bind(&CompleteHandler::OnConnectComplete,
573 base::Unretained(&handler_))); 768 base::Unretained(&handler_)));
574 RunPendingTasks(); 769 RunPendingTasks();
575 770
576 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 771 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
577 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); 772 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket()->error_state());
578 } 773 }
579 774
580 // Test connection error - timeout 775 // Test connection error - timeout
581 TEST_F(CastSocketTest, TestConnectTcpTimeoutError) { 776 TEST_F(MockCastSocketTest, TestConnectTcpTimeoutError) {
582 CreateCastSocketSecure(); 777 CreateCastSocketSecure();
583 socket_->SetupTcpConnectUnresponsive(); 778 socket()->SetupTcpConnectUnresponsive();
584 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_TIMEOUT)); 779 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_TIMEOUT));
585 EXPECT_CALL(*delegate_, OnError(CHANNEL_ERROR_CONNECT_TIMEOUT)); 780 EXPECT_CALL(*delegate_, OnError(CHANNEL_ERROR_CONNECT_TIMEOUT));
586 socket_->Connect(std::move(delegate_), 781 socket()->Connect(std::move(delegate_),
587 base::Bind(&CompleteHandler::OnConnectComplete, 782 base::Bind(&CompleteHandler::OnConnectComplete,
588 base::Unretained(&handler_))); 783 base::Unretained(&handler_)));
589 RunPendingTasks(); 784 RunPendingTasks();
590 785
591 EXPECT_EQ(cast_channel::READY_STATE_CONNECTING, socket_->ready_state()); 786 EXPECT_EQ(cast_channel::READY_STATE_CONNECTING, socket()->ready_state());
592 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 787 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
593 socket_->TriggerTimeout(); 788 socket()->TriggerTimeout();
594 RunPendingTasks(); 789 RunPendingTasks();
595 790
596 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 791 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
597 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, 792 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT,
598 socket_->error_state()); 793 socket()->error_state());
599 } 794 }
600 795
601 // Test connection error - TCP socket returns timeout 796 // Test connection error - TCP socket returns timeout
602 TEST_F(CastSocketTest, TestConnectTcpSocketTimeoutError) { 797 TEST_F(MockCastSocketTest, TestConnectTcpSocketTimeoutError) {
603 CreateCastSocketSecure(); 798 CreateCastSocketSecure();
604 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT); 799 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT);
605 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_TIMEOUT)); 800 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_TIMEOUT));
606 EXPECT_CALL(*delegate_, OnError(CHANNEL_ERROR_CONNECT_TIMEOUT)); 801 EXPECT_CALL(*delegate_, OnError(CHANNEL_ERROR_CONNECT_TIMEOUT));
607 socket_->Connect(std::move(delegate_), 802 socket()->Connect(std::move(delegate_),
608 base::Bind(&CompleteHandler::OnConnectComplete, 803 base::Bind(&CompleteHandler::OnConnectComplete,
609 base::Unretained(&handler_))); 804 base::Unretained(&handler_)));
610 RunPendingTasks(); 805 RunPendingTasks();
611 806
612 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 807 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
613 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, 808 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT,
614 socket_->error_state()); 809 socket()->error_state());
615 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT, 810 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT,
616 logger_->GetLastErrors(socket_->id()).net_return_value); 811 logger_->GetLastErrors(socket()->id()).net_return_value);
617 } 812 }
618 813
619 // Test connection error - SSL connect fails (async) 814 // Test connection error - SSL connect fails (async)
620 TEST_F(CastSocketTest, TestConnectSslConnectErrorAsync) { 815 TEST_F(MockCastSocketTest, TestConnectSslConnectErrorAsync) {
621 CreateCastSocketSecure(); 816 CreateCastSocketSecure();
622 817
623 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 818 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
624 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED); 819 socket()->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED);
625 820
626 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR)); 821 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR));
627 socket_->Connect(std::move(delegate_), 822 socket()->Connect(std::move(delegate_),
628 base::Bind(&CompleteHandler::OnConnectComplete, 823 base::Bind(&CompleteHandler::OnConnectComplete,
629 base::Unretained(&handler_))); 824 base::Unretained(&handler_)));
630 RunPendingTasks(); 825 RunPendingTasks();
631 826
632 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 827 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
633 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR, 828 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR,
634 socket_->error_state()); 829 socket()->error_state());
635 } 830 }
636 831
637 // Test connection error - SSL connect fails (sync) 832 // Test connection error - SSL connect fails (sync)
638 TEST_F(CastSocketTest, TestConnectSslConnectErrorSync) { 833 TEST_F(MockCastSocketTest, TestConnectSslConnectErrorSync) {
639 CreateCastSocketSecure(); 834 CreateCastSocketSecure();
640 835
641 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 836 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
642 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED); 837 socket()->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED);
643 838
644 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR)); 839 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR));
645 socket_->Connect(std::move(delegate_), 840 socket()->Connect(std::move(delegate_),
646 base::Bind(&CompleteHandler::OnConnectComplete, 841 base::Bind(&CompleteHandler::OnConnectComplete,
647 base::Unretained(&handler_))); 842 base::Unretained(&handler_)));
648 RunPendingTasks(); 843 RunPendingTasks();
649 844
650 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 845 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
651 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR, 846 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR,
652 socket_->error_state()); 847 socket()->error_state());
653 EXPECT_EQ(net::ERR_FAILED, 848 EXPECT_EQ(net::ERR_FAILED,
654 logger_->GetLastErrors(socket_->id()).net_return_value); 849 logger_->GetLastErrors(socket()->id()).net_return_value);
655 } 850 }
656 851
657 // Test connection error - SSL connect times out (sync) 852 // Test connection error - SSL connect times out (sync)
658 TEST_F(CastSocketTest, TestConnectSslConnectTimeoutSync) { 853 TEST_F(MockCastSocketTest, TestConnectSslConnectTimeoutSync) {
659 CreateCastSocketSecure(); 854 CreateCastSocketSecure();
660 855
661 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 856 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
662 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT); 857 socket()->SetupSslConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT);
663 858
664 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_TIMEOUT)); 859 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_TIMEOUT));
665 socket_->Connect(std::move(delegate_), 860 socket()->Connect(std::move(delegate_),
666 base::Bind(&CompleteHandler::OnConnectComplete, 861 base::Bind(&CompleteHandler::OnConnectComplete,
667 base::Unretained(&handler_))); 862 base::Unretained(&handler_)));
668 RunPendingTasks(); 863 RunPendingTasks();
669 864
670 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 865 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
671 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, 866 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT,
672 socket_->error_state()); 867 socket()->error_state());
673 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT, 868 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT,
674 logger_->GetLastErrors(socket_->id()).net_return_value); 869 logger_->GetLastErrors(socket()->id()).net_return_value);
675 } 870 }
676 871
677 // Test connection error - SSL connect times out (async) 872 // Test connection error - SSL connect times out (async)
678 TEST_F(CastSocketTest, TestConnectSslConnectTimeoutAsync) { 873 TEST_F(MockCastSocketTest, TestConnectSslConnectTimeoutAsync) {
679 CreateCastSocketSecure(); 874 CreateCastSocketSecure();
680 875
681 socket_->SetupTcpConnect(net::ASYNC, net::OK); 876 socket()->SetupTcpConnect(net::ASYNC, net::OK);
682 socket_->SetupSslConnect(net::ASYNC, net::ERR_CONNECTION_TIMED_OUT); 877 socket()->SetupSslConnect(net::ASYNC, net::ERR_CONNECTION_TIMED_OUT);
683 878
684 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_TIMEOUT)); 879 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_CONNECT_TIMEOUT));
685 socket_->Connect(std::move(delegate_), 880 socket()->Connect(std::move(delegate_),
686 base::Bind(&CompleteHandler::OnConnectComplete, 881 base::Bind(&CompleteHandler::OnConnectComplete,
687 base::Unretained(&handler_))); 882 base::Unretained(&handler_)));
688 RunPendingTasks(); 883 RunPendingTasks();
689 884
690 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 885 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
691 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT, 886 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_TIMEOUT,
692 socket_->error_state()); 887 socket()->error_state());
693 } 888 }
694 889
695 // Test connection error - cert extraction error (async) 890 // Test connection error - cert extraction error (async)
696 TEST_F(CastSocketTest, TestConnectCertExtractionErrorAsync) { 891 TEST_F(MockCastSocketTest, TestConnectCertExtractionErrorAsync) {
697 CreateCastSocket(); 892 CreateCastSocket();
698 socket_->SetupTcpConnect(net::ASYNC, net::OK); 893 socket()->SetupTcpConnect(net::ASYNC, net::OK);
699 socket_->SetupSslConnect(net::ASYNC, net::OK); 894 socket()->SetupSslConnect(net::ASYNC, net::OK);
700 // Set cert extraction to fail 895 // Set cert extraction to fail
701 socket_->SetExtractCertResult(false); 896 socket()->SetExtractCertResult(false);
702 897
703 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR)); 898 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR));
704 socket_->Connect(std::move(delegate_), 899 socket()->Connect(std::move(delegate_),
705 base::Bind(&CompleteHandler::OnConnectComplete, 900 base::Bind(&CompleteHandler::OnConnectComplete,
706 base::Unretained(&handler_))); 901 base::Unretained(&handler_)));
707 RunPendingTasks(); 902 RunPendingTasks();
708 903
709 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 904 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
710 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR, 905 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR,
711 socket_->error_state()); 906 socket()->error_state());
712 } 907 }
713 908
714 // Test connection error - cert extraction error (sync) 909 // Test connection error - cert extraction error (sync)
715 TEST_F(CastSocketTest, TestConnectCertExtractionErrorSync) { 910 TEST_F(MockCastSocketTest, TestConnectCertExtractionErrorSync) {
716 CreateCastSocket(); 911 CreateCastSocket();
717 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 912 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
718 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 913 socket()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
719 // Set cert extraction to fail 914 // Set cert extraction to fail
720 socket_->SetExtractCertResult(false); 915 socket()->SetExtractCertResult(false);
721 916
722 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR)); 917 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR));
723 socket_->Connect(std::move(delegate_), 918 socket()->Connect(std::move(delegate_),
724 base::Bind(&CompleteHandler::OnConnectComplete, 919 base::Bind(&CompleteHandler::OnConnectComplete,
725 base::Unretained(&handler_))); 920 base::Unretained(&handler_)));
726 RunPendingTasks(); 921 RunPendingTasks();
727 922
728 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 923 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
729 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR, 924 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR,
730 socket_->error_state()); 925 socket()->error_state());
731 } 926 }
732 927
733 // Test connection error - challenge send fails 928 // Test connection error - challenge send fails
734 TEST_F(CastSocketTest, TestConnectChallengeSendError) { 929 TEST_F(MockCastSocketTest, TestConnectChallengeSendError) {
735 CreateCastSocketSecure(); 930 CreateCastSocketSecure();
736 socket_->SetupMockTransport(); 931 socket()->SetupMockTransport();
737 932
738 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 933 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
739 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 934 socket()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
740 EXPECT_CALL(*socket_->GetMockTransport(), 935 EXPECT_CALL(*socket()->GetMockTransport(),
741 SendMessage(EqualsProto(CreateAuthChallenge()), _)) 936 SendMessage(EqualsProto(CreateAuthChallenge()), _))
742 .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET)); 937 .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET));
743 938
744 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_SOCKET_ERROR)); 939 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_SOCKET_ERROR));
745 socket_->Connect(std::move(delegate_), 940 socket()->Connect(std::move(delegate_),
746 base::Bind(&CompleteHandler::OnConnectComplete, 941 base::Bind(&CompleteHandler::OnConnectComplete,
747 base::Unretained(&handler_))); 942 base::Unretained(&handler_)));
748 RunPendingTasks(); 943 RunPendingTasks();
749 944
750 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 945 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
751 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); 946 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket()->error_state());
752 } 947 }
753 948
754 // Test connection error - challenge reply receive fails 949 // Test connection error - challenge reply receive fails
755 TEST_F(CastSocketTest, TestConnectChallengeReplyReceiveError) { 950 TEST_F(MockCastSocketTest, TestConnectChallengeReplyReceiveError) {
756 CreateCastSocketSecure(); 951 CreateCastSocketSecure();
757 socket_->SetupMockTransport(); 952 socket()->SetupMockTransport();
758 953
759 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 954 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
760 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 955 socket()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
761 EXPECT_CALL(*socket_->GetMockTransport(), 956 EXPECT_CALL(*socket()->GetMockTransport(),
762 SendMessage(EqualsProto(CreateAuthChallenge()), _)) 957 SendMessage(EqualsProto(CreateAuthChallenge()), _))
763 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 958 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
764 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED); 959 socket()->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED);
765 EXPECT_CALL(*delegate_, OnError(CHANNEL_ERROR_SOCKET_ERROR)); 960 EXPECT_CALL(*delegate_, OnError(CHANNEL_ERROR_SOCKET_ERROR));
766 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_SOCKET_ERROR)); 961 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_SOCKET_ERROR));
767 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 962 EXPECT_CALL(*socket()->GetMockTransport(), Start());
768 socket_->Connect(std::move(delegate_), 963 socket()->Connect(std::move(delegate_),
769 base::Bind(&CompleteHandler::OnConnectComplete, 964 base::Bind(&CompleteHandler::OnConnectComplete,
770 base::Unretained(&handler_))); 965 base::Unretained(&handler_)));
771 RunPendingTasks(); 966 RunPendingTasks();
772 socket_->GetMockTransport()->current_delegate()->OnError( 967 socket()->GetMockTransport()->current_delegate()->OnError(
773 CHANNEL_ERROR_SOCKET_ERROR); 968 CHANNEL_ERROR_SOCKET_ERROR);
774 RunPendingTasks(); 969 RunPendingTasks();
775 970
776 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 971 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
777 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); 972 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket()->error_state());
778 } 973 }
779 974
780 TEST_F(CastSocketTest, TestConnectChallengeVerificationFails) { 975 TEST_F(MockCastSocketTest, TestConnectChallengeVerificationFails) {
781 CreateCastSocketSecure(); 976 CreateCastSocketSecure();
782 socket_->SetupMockTransport(); 977 socket()->SetupMockTransport();
783 socket_->SetupTcpConnect(net::ASYNC, net::OK); 978 socket()->SetupTcpConnect(net::ASYNC, net::OK);
784 socket_->SetupSslConnect(net::ASYNC, net::OK); 979 socket()->SetupSslConnect(net::ASYNC, net::OK);
785 socket_->SetVerifyChallengeResult(false); 980 socket()->SetVerifyChallengeResult(false);
786 981
787 EXPECT_CALL(*delegate_, OnError(CHANNEL_ERROR_AUTHENTICATION_ERROR)); 982 EXPECT_CALL(*delegate_, OnError(CHANNEL_ERROR_AUTHENTICATION_ERROR));
788 CastMessage challenge_proto = CreateAuthChallenge(); 983 CastMessage challenge_proto = CreateAuthChallenge();
789 EXPECT_CALL(*socket_->GetMockTransport(), 984 EXPECT_CALL(*socket()->GetMockTransport(),
790 SendMessage(EqualsProto(challenge_proto), _)) 985 SendMessage(EqualsProto(challenge_proto), _))
791 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 986 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
792 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR)); 987 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_AUTHENTICATION_ERROR));
793 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 988 EXPECT_CALL(*socket()->GetMockTransport(), Start());
794 socket_->Connect(std::move(delegate_), 989 socket()->Connect(std::move(delegate_),
795 base::Bind(&CompleteHandler::OnConnectComplete, 990 base::Bind(&CompleteHandler::OnConnectComplete,
796 base::Unretained(&handler_))); 991 base::Unretained(&handler_)));
797 RunPendingTasks(); 992 RunPendingTasks();
798 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply()); 993 socket()->GetMockTransport()->current_delegate()->OnMessage(
799 RunPendingTasks(); 994 CreateAuthReply());
800 995 RunPendingTasks();
801 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 996
997 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket()->ready_state());
802 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR, 998 EXPECT_EQ(cast_channel::CHANNEL_ERROR_AUTHENTICATION_ERROR,
803 socket_->error_state()); 999 socket()->error_state());
804 } 1000 }
805 1001
806 // Sends message data through an actual non-mocked CastTransport object, 1002 // Tests connecting through an actual non-mocked CastTransport object and
807 // testing the two components in integration. 1003 // non-mocked SSLClientSocket, testing the components in integration.
808 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) { 1004 TEST_F(SslCastSocketTest, TestConnectEndToEndWithRealSSL) {
809 CreateCastSocketSecure(); 1005 CreateSslCastSocket();
810 socket_->SetupTcpConnect(net::ASYNC, net::OK); 1006 CreateSslSockets();
811 socket_->SetupSslConnect(net::ASYNC, net::OK); 1007 socket()->SetTcpSocket(std::move(tcp_client_socket_));
1008
1009 socket()->Connect(std::move(delegate_),
1010 base::Bind(&CompleteHandler::OnConnectComplete,
1011 base::Unretained(&handler_)));
1012
1013 net::TestCompletionCallback handshake_callback;
1014 int server_ret = handshake_callback.GetResult(
1015 server_socket_->Handshake(handshake_callback.callback()));
1016
1017 ASSERT_EQ(net::OK, server_ret);
812 1018
813 // Set low-level auth challenge expectations. 1019 // Set low-level auth challenge expectations.
814 CastMessage challenge = CreateAuthChallenge(); 1020 CastMessage challenge = CreateAuthChallenge();
815 std::string challenge_str; 1021 std::string challenge_str;
816 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str)); 1022 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
817 socket_->AddWriteResultForData(net::ASYNC, challenge_str); 1023
1024 int challenge_buffer_length = challenge_str.size();
1025 scoped_refptr<net::IOBuffer> challenge_buffer(
1026 new net::IOBuffer(challenge_buffer_length));
1027 int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
1028 server_socket_.get());
1029
1030 EXPECT_EQ(challenge_buffer_length, read);
1031 EXPECT_EQ(challenge_str,
1032 std::string(challenge_buffer->data(), challenge_buffer_length));
818 1033
819 // Set low-level auth reply expectations. 1034 // Set low-level auth reply expectations.
820 CastMessage reply = CreateAuthReply(); 1035 CastMessage reply = CreateAuthReply();
821 std::string reply_str; 1036 std::string reply_str;
822 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str)); 1037 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
823 socket_->AddReadResultForData(net::ASYNC, reply_str); 1038
824 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); 1039 scoped_refptr<net::StringIOBuffer> reply_buffer(
825 1040 new net::StringIOBuffer(reply_str));
826 CastMessage test_message = CreateTestMessage(); 1041 int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
827 std::string test_message_str; 1042 server_socket_.get());
828 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str)); 1043
829 socket_->AddWriteResultForData(net::ASYNC, test_message_str); 1044 EXPECT_EQ(reply_buffer->size(), written);
830
831 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE)); 1045 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
832 socket_->Connect(std::move(delegate_), 1046 RunPendingTasks();
833 base::Bind(&CompleteHandler::OnConnectComplete, 1047
834 base::Unretained(&handler_))); 1048 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
835 RunPendingTasks(); 1049 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
836 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 1050 }
837 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 1051
838 1052 // Sends message data through an actual non-mocked CastTransport object and
839 // Send the test message through a real transport object. 1053 // non-mocked SSLClientSocket, testing the components in integration.
840 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); 1054 TEST_F(SslCastSocketTest, TestMessageEndToEndWithRealSSL) {
841 socket_->transport()->SendMessage( 1055 CreateSslCastSocket();
842 test_message, base::Bind(&CompleteHandler::OnWriteComplete, 1056 CreateSslSockets();
843 base::Unretained(&handler_))); 1057 socket()->SetTcpSocket(std::move(tcp_client_socket_));
844 RunPendingTasks(); 1058
845 1059 socket()->Connect(std::move(delegate_),
846 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 1060 base::Bind(&CompleteHandler::OnConnectComplete,
847 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 1061 base::Unretained(&handler_)));
848 } 1062
849 1063 net::TestCompletionCallback handshake_callback;
850 // Same as TestConnectEndToEndWithRealTransportAsync, except synchronous. 1064 int server_ret = handshake_callback.GetResult(
851 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportSync) { 1065 server_socket_->Handshake(handshake_callback.callback()));
852 CreateCastSocketSecure(); 1066
853 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 1067 ASSERT_EQ(net::OK, server_ret);
854 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
855 1068
856 // Set low-level auth challenge expectations. 1069 // Set low-level auth challenge expectations.
857 CastMessage challenge = CreateAuthChallenge(); 1070 CastMessage challenge = CreateAuthChallenge();
858 std::string challenge_str; 1071 std::string challenge_str;
859 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str)); 1072 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
860 socket_->AddWriteResultForData(net::SYNCHRONOUS, challenge_str); 1073
1074 int challenge_buffer_length = challenge_str.size();
1075 scoped_refptr<net::IOBuffer> challenge_buffer(
1076 new net::IOBuffer(challenge_buffer_length));
1077
1078 int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
1079 server_socket_.get());
1080
1081 EXPECT_EQ(challenge_buffer_length, read);
1082 EXPECT_EQ(challenge_str,
1083 std::string(challenge_buffer->data(), challenge_buffer_length));
861 1084
862 // Set low-level auth reply expectations. 1085 // Set low-level auth reply expectations.
863 CastMessage reply = CreateAuthReply(); 1086 CastMessage reply = CreateAuthReply();
864 std::string reply_str; 1087 std::string reply_str;
865 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str)); 1088 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
866 socket_->AddReadResultForData(net::SYNCHRONOUS, reply_str); 1089
867 socket_->AddReadResult(net::ASYNC, net::ERR_IO_PENDING); 1090 scoped_refptr<net::StringIOBuffer> reply_buffer(
868 1091 new net::StringIOBuffer(reply_str));
1092 int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
1093 server_socket_.get());
1094
1095 EXPECT_EQ(reply_buffer->size(), written);
1096 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
1097 RunPendingTasks();
1098
1099 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
1100 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
1101
1102 // Send a test message through the ssl socket.
869 CastMessage test_message = CreateTestMessage(); 1103 CastMessage test_message = CreateTestMessage();
870 std::string test_message_str; 1104 std::string test_message_str;
871 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str)); 1105 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
872 socket_->AddWriteResultForData(net::SYNCHRONOUS, test_message_str); 1106
1107 int test_message_length = test_message_str.size();
1108 scoped_refptr<net::IOBuffer> test_message_buffer(
1109 new net::IOBuffer(test_message_length));
1110
1111 EXPECT_CALL(handler_, OnWriteComplete(net::OK));
1112 socket()->transport()->SendMessage(
1113 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
1114 base::Unretained(&handler_)));
1115 RunPendingTasks();
1116
1117 read = ReadExactLength(test_message_buffer.get(), test_message_length,
1118 server_socket_.get());
1119
1120 EXPECT_EQ(test_message_length, read);
1121 EXPECT_EQ(test_message_str,
1122 std::string(test_message_buffer->data(), test_message_length));
1123
1124 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
1125 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
1126 }
1127
1128 // Sends message data through an actual non-mocked CastTransport object,
1129 // testing the two components in integration.
1130 TEST_F(MockCastSocketTest, TestConnectEndToEndWithRealTransportAsync) {
1131 CreateCastSocketSecure();
1132 socket()->SetupTcpConnect(net::ASYNC, net::OK);
1133 socket()->SetupSslConnect(net::ASYNC, net::OK);
1134
1135 // Set low-level auth challenge expectations.
1136 CastMessage challenge = CreateAuthChallenge();
1137 std::string challenge_str;
1138 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
1139 socket()->AddWriteResultForData(net::ASYNC, challenge_str);
1140
1141 // Set low-level auth reply expectations.
1142 CastMessage reply = CreateAuthReply();
1143 std::string reply_str;
1144 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1145 socket()->AddReadResultForData(net::ASYNC, reply_str);
1146 socket()->AddReadResult(net::ASYNC, net::ERR_IO_PENDING);
1147
1148 CastMessage test_message = CreateTestMessage();
1149 std::string test_message_str;
1150 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
1151 socket()->AddWriteResultForData(net::ASYNC, test_message_str);
873 1152
874 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE)); 1153 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
875 socket_->Connect(std::move(delegate_), 1154 socket()->Connect(std::move(delegate_),
876 base::Bind(&CompleteHandler::OnConnectComplete, 1155 base::Bind(&CompleteHandler::OnConnectComplete,
877 base::Unretained(&handler_))); 1156 base::Unretained(&handler_)));
878 RunPendingTasks(); 1157 RunPendingTasks();
879 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 1158 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
880 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 1159 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
881 1160
882 // Send the test message through a real transport object. 1161 // Send the test message through a real transport object.
883 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); 1162 EXPECT_CALL(handler_, OnWriteComplete(net::OK));
884 socket_->transport()->SendMessage( 1163 socket()->transport()->SendMessage(
885 test_message, base::Bind(&CompleteHandler::OnWriteComplete, 1164 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
886 base::Unretained(&handler_))); 1165 base::Unretained(&handler_)));
887 RunPendingTasks(); 1166 RunPendingTasks();
888 1167
889 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 1168 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
890 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 1169 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
1170 }
1171
1172 // Same as TestConnectEndToEndWithRealTransportAsync, except synchronous.
1173 TEST_F(MockCastSocketTest, TestConnectEndToEndWithRealTransportSync) {
1174 CreateCastSocketSecure();
1175 socket()->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
1176 socket()->SetupSslConnect(net::SYNCHRONOUS, net::OK);
1177
1178 // Set low-level auth challenge expectations.
1179 CastMessage challenge = CreateAuthChallenge();
1180 std::string challenge_str;
1181 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
1182 socket()->AddWriteResultForData(net::SYNCHRONOUS, challenge_str);
1183
1184 // Set low-level auth reply expectations.
1185 CastMessage reply = CreateAuthReply();
1186 std::string reply_str;
1187 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1188 socket()->AddReadResultForData(net::SYNCHRONOUS, reply_str);
1189 socket()->AddReadResult(net::ASYNC, net::ERR_IO_PENDING);
1190
1191 CastMessage test_message = CreateTestMessage();
1192 std::string test_message_str;
1193 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
1194 socket()->AddWriteResultForData(net::SYNCHRONOUS, test_message_str);
1195
1196 EXPECT_CALL(handler_, OnConnectComplete(CHANNEL_ERROR_NONE));
1197 socket()->Connect(std::move(delegate_),
1198 base::Bind(&CompleteHandler::OnConnectComplete,
1199 base::Unretained(&handler_)));
1200 RunPendingTasks();
1201 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
1202 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
1203
1204 // Send the test message through a real transport object.
1205 EXPECT_CALL(handler_, OnWriteComplete(net::OK));
1206 socket()->transport()->SendMessage(
1207 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
1208 base::Unretained(&handler_)));
1209 RunPendingTasks();
1210
1211 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket()->ready_state());
1212 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket()->error_state());
891 } 1213 }
892 1214
893 // Tests channel policy verification for device with no capabilities. 1215 // Tests channel policy verification for device with no capabilities.
894 TEST_F(CastSocketTest, TestChannelPolicyVerificationCapabilitiesNone) { 1216 TEST_F(MockCastSocketTest, TestChannelPolicyVerificationCapabilitiesNone) {
895 socket_ = 1217 socket_ = MockTestCastSocket::Create(
896 TestCastSocket::Create(logger_, cast_channel::CastDeviceCapability::NONE); 1218 logger_, cast_channel::CastDeviceCapability::NONE);
897 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone()); 1219 EXPECT_TRUE(socket()->HasChannelPolicyNone());
898 EXPECT_TRUE(socket_->TestVerifyChannelPolicyAudioOnly()); 1220 EXPECT_TRUE(socket()->HasChannelPolicyAudioOnly());
899 } 1221 }
900 1222
901 // Tests channel policy verification for device with video out capability. 1223 // Tests channel policy verification for device with video out capability.
902 TEST_F(CastSocketTest, TestChannelPolicyVerificationCapabilitiesVideoOut) { 1224 TEST_F(MockCastSocketTest, TestChannelPolicyVerificationCapabilitiesVideoOut) {
903 socket_ = TestCastSocket::Create( 1225 socket_ = MockTestCastSocket::Create(
904 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT); 1226 logger_, cast_channel::CastDeviceCapability::VIDEO_OUT);
905 EXPECT_FALSE(socket_->audio_only()); 1227 EXPECT_FALSE(socket()->audio_only());
906 EXPECT_TRUE(socket_->TestVerifyChannelPolicyNone()); 1228 EXPECT_TRUE(socket()->HasChannelPolicyNone());
907 EXPECT_FALSE(socket_->audio_only()); 1229 EXPECT_FALSE(socket()->audio_only());
908 EXPECT_FALSE(socket_->TestVerifyChannelPolicyAudioOnly()); 1230 EXPECT_FALSE(socket()->HasChannelPolicyAudioOnly());
909 EXPECT_TRUE(socket_->audio_only()); 1231 EXPECT_TRUE(socket()->audio_only());
910 } 1232 }
911 } // namespace cast_channel 1233 } // namespace cast_channel
912 } // namespace api 1234 } // namespace api
913 } // namespace extensions 1235 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/api/cast_channel/cast_socket.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698