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

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