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

Side by Side Diff: components/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: Rebase Created 3 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
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 "components/cast_channel/cast_socket.h" 5 #include "components/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"
18 #include "base/path_service.h"
17 #include "base/run_loop.h" 19 #include "base/run_loop.h"
18 #include "base/single_thread_task_runner.h" 20 #include "base/single_thread_task_runner.h"
19 #include "base/strings/string_number_conversions.h" 21 #include "base/strings/string_number_conversions.h"
20 #include "base/sys_byteorder.h" 22 #include "base/sys_byteorder.h"
21 #include "base/threading/thread_task_runner_handle.h" 23 #include "base/threading/thread_task_runner_handle.h"
22 #include "base/timer/mock_timer.h" 24 #include "base/timer/mock_timer.h"
23 #include "components/cast_channel/cast_auth_util.h" 25 #include "components/cast_channel/cast_auth_util.h"
24 #include "components/cast_channel/cast_framer.h" 26 #include "components/cast_channel/cast_framer.h"
25 #include "components/cast_channel/cast_message_util.h" 27 #include "components/cast_channel/cast_message_util.h"
26 #include "components/cast_channel/cast_test_util.h" 28 #include "components/cast_channel/cast_test_util.h"
27 #include "components/cast_channel/cast_transport.h" 29 #include "components/cast_channel/cast_transport.h"
28 #include "components/cast_channel/logger.h" 30 #include "components/cast_channel/logger.h"
29 #include "components/cast_channel/proto/cast_channel.pb.h" 31 #include "components/cast_channel/proto/cast_channel.pb.h"
32 #include "content/public/test/test_browser_thread_bundle.h"
33 #include "crypto/rsa_private_key.h"
30 #include "net/base/address_list.h" 34 #include "net/base/address_list.h"
31 #include "net/base/net_errors.h" 35 #include "net/base/net_errors.h"
36 #include "net/cert/pem_tokenizer.h"
37 #include "net/log/net_log_source.h"
32 #include "net/log/test_net_log.h" 38 #include "net/log/test_net_log.h"
33 #include "net/socket/socket_test_util.h" 39 #include "net/socket/socket_test_util.h"
34 #include "net/socket/ssl_client_socket.h" 40 #include "net/socket/ssl_client_socket.h"
41 #include "net/socket/ssl_server_socket.h"
35 #include "net/socket/tcp_client_socket.h" 42 #include "net/socket/tcp_client_socket.h"
43 #include "net/socket/tcp_server_socket.h"
36 #include "net/ssl/ssl_info.h" 44 #include "net/ssl/ssl_info.h"
45 #include "net/ssl/ssl_server_config.h"
37 #include "net/test/cert_test_util.h" 46 #include "net/test/cert_test_util.h"
38 #include "net/test/test_data_directory.h" 47 #include "net/test/test_data_directory.h"
39 #include "testing/gmock/include/gmock/gmock.h" 48 #include "testing/gmock/include/gmock/gmock.h"
40 #include "testing/gtest/include/gtest/gtest.h" 49 #include "testing/gtest/include/gtest/gtest.h"
41 50
42 const int64_t kDistantTimeoutMillis = 100000; // 100 seconds (never hit). 51 const int64_t kDistantTimeoutMillis = 100000; // 100 seconds (never hit).
43 52
44 using ::testing::_;
45 using ::testing::A; 53 using ::testing::A;
46 using ::testing::DoAll; 54 using ::testing::DoAll;
47 using ::testing::Invoke; 55 using ::testing::Invoke;
48 using ::testing::InvokeArgument; 56 using ::testing::InvokeArgument;
49 using ::testing::NotNull; 57 using ::testing::NotNull;
50 using ::testing::Return; 58 using ::testing::Return;
51 using ::testing::SaveArg; 59 using ::testing::SaveArg;
60 using ::testing::_;
52 61
53 namespace cast_channel { 62 namespace cast_channel {
63 namespace {
54 const char kAuthNamespace[] = "urn:x-cast:com.google.cast.tp.deviceauth"; 64 const char kAuthNamespace[] = "urn:x-cast:com.google.cast.tp.deviceauth";
55 65
56 // Returns an auth challenge message inline. 66 // Returns an auth challenge message inline.
57 CastMessage CreateAuthChallenge() { 67 CastMessage CreateAuthChallenge() {
58 CastMessage output; 68 CastMessage output;
59 CreateAuthChallengeMessage(&output, AuthContext::Create()); 69 CreateAuthChallengeMessage(&output, AuthContext::Create());
60 return output; 70 return output;
61 } 71 }
62 72
63 // Returns an auth challenge response message inline. 73 // Returns an auth challenge response message inline.
(...skipping 12 matching lines...) Expand all
76 CastMessage test_message; 86 CastMessage test_message;
77 test_message.set_protocol_version(CastMessage::CASTV2_1_0); 87 test_message.set_protocol_version(CastMessage::CASTV2_1_0);
78 test_message.set_namespace_("ns"); 88 test_message.set_namespace_("ns");
79 test_message.set_source_id("source"); 89 test_message.set_source_id("source");
80 test_message.set_destination_id("dest"); 90 test_message.set_destination_id("dest");
81 test_message.set_payload_type(CastMessage::STRING); 91 test_message.set_payload_type(CastMessage::STRING);
82 test_message.set_payload_utf8("payload"); 92 test_message.set_payload_utf8("payload");
83 return test_message; 93 return test_message;
84 } 94 }
85 95
96 base::FilePath GetTestCertsDirectory() {
97 base::FilePath path;
98 PathService::Get(base::DIR_SOURCE_ROOT, &path);
99 path = path.Append(FILE_PATH_LITERAL("components"));
100 path = path.Append(FILE_PATH_LITERAL("test"));
101 path = path.Append(FILE_PATH_LITERAL("data"));
102 path = path.Append(FILE_PATH_LITERAL("cast_channel"));
103 return path;
104 }
105
86 class MockTCPSocket : public net::TCPClientSocket { 106 class MockTCPSocket : public net::TCPClientSocket {
87 public: 107 public:
88 explicit MockTCPSocket(const net::MockConnect& connect_data) 108 explicit MockTCPSocket(const net::MockConnect& connect_data)
89 : TCPClientSocket(net::AddressList(), 109 : TCPClientSocket(net::AddressList(),
90 nullptr, 110 nullptr,
91 nullptr, 111 nullptr,
92 net::NetLogSource()), 112 net::NetLogSource()),
93 connect_data_(connect_data), 113 connect_data_(connect_data),
94 do_nothing_(false) {} 114 do_nothing_(false) {}
95 115
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 // Do nothing in tests 155 // Do nothing in tests
136 } 156 }
137 157
138 private: 158 private:
139 net::MockConnect connect_data_; 159 net::MockConnect connect_data_;
140 bool do_nothing_; 160 bool do_nothing_;
141 161
142 DISALLOW_COPY_AND_ASSIGN(MockTCPSocket); 162 DISALLOW_COPY_AND_ASSIGN(MockTCPSocket);
143 }; 163 };
144 164
145 class MockDelegate : public CastTransport::Delegate {
146 public:
147 MockDelegate() {}
148 virtual ~MockDelegate() {}
149 MOCK_METHOD1(OnError, void(ChannelError error_state));
150 MOCK_METHOD1(OnMessage, void(const CastMessage& message));
151 MOCK_METHOD0(Start, void());
152
153 private:
154 DISALLOW_COPY_AND_ASSIGN(MockDelegate);
155 };
156
157 class CompleteHandler { 165 class CompleteHandler {
158 public: 166 public:
159 CompleteHandler() {} 167 CompleteHandler() {}
160 MOCK_METHOD1(OnCloseComplete, void(int result)); 168 MOCK_METHOD1(OnCloseComplete, void(int result));
161 MOCK_METHOD2(OnConnectComplete, 169 MOCK_METHOD2(OnConnectComplete,
162 void(int channel_id, ChannelError error_state)); 170 void(int channel_id, ChannelError error_state));
163 MOCK_METHOD1(OnWriteComplete, void(int result)); 171 MOCK_METHOD1(OnWriteComplete, void(int result));
164 MOCK_METHOD1(OnReadComplete, void(int result)); 172 MOCK_METHOD1(OnReadComplete, void(int result));
165 173
166 private: 174 private:
167 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); 175 DISALLOW_COPY_AND_ASSIGN(CompleteHandler);
168 }; 176 };
169 177
170 class TestCastSocket : public CastSocketImpl { 178 class TestCastSocketBase : public CastSocketImpl {
171 public: 179 public:
172 static std::unique_ptr<TestCastSocket> CreateSecure( 180 TestCastSocketBase(const net::IPEndPoint& ip_endpoint,
173 Logger* logger, 181 int64_t timeout_ms,
174 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) { 182 Logger* logger,
175 return std::unique_ptr<TestCastSocket>( 183 uint64_t device_capabilities)
176 new TestCastSocket(CreateIPEndPointForTest(), kDistantTimeoutMillis, 184 : TestCastSocketBase(ip_endpoint,
177 logger, device_capabilities)); 185 timeout_ms,
178 } 186 logger,
187 new net::TestNetLog(),
188 device_capabilities) {}
179 189
180 TestCastSocket(const net::IPEndPoint& ip_endpoint, 190 TestCastSocketBase(const net::IPEndPoint& ip_endpoint,
181 int64_t timeout_ms, 191 int64_t timeout_ms,
182 Logger* logger, 192 Logger* logger,
183 uint64_t device_capabilities) 193 net::TestNetLog* capturing_net_log,
184 : TestCastSocket(ip_endpoint, 194 uint64_t device_capabilities)
185 timeout_ms,
186 logger,
187 new net::TestNetLog(),
188 device_capabilities) {}
189
190 TestCastSocket(const net::IPEndPoint& ip_endpoint,
191 int64_t timeout_ms,
192 Logger* logger,
193 net::TestNetLog* capturing_net_log,
194 uint64_t device_capabilities)
195 : CastSocketImpl(ip_endpoint, 195 : CastSocketImpl(ip_endpoint,
196 capturing_net_log, 196 capturing_net_log,
197 base::TimeDelta::FromMilliseconds(timeout_ms), 197 base::TimeDelta::FromMilliseconds(timeout_ms),
198 base::TimeDelta(), 198 base::TimeDelta(),
199 base::TimeDelta(), 199 base::TimeDelta(),
200 logger, 200 logger,
201 device_capabilities, 201 device_capabilities,
202 AuthContext::Create()), 202 AuthContext::Create()),
203 capturing_net_log_(capturing_net_log), 203 capturing_net_log_(capturing_net_log),
204 ip_(ip_endpoint), 204 ip_(ip_endpoint),
205 extract_cert_result_(true), 205 extract_cert_result_(true),
206 verify_challenge_result_(true), 206 verify_challenge_result_(true),
207 verify_challenge_disallow_(false), 207 verify_challenge_disallow_(false),
208 tcp_unresponsive_(false), 208 mock_timer_(new base::MockTimer(false, false)) {}
209 mock_timer_(new base::MockTimer(false, false)),
210 mock_transport_(nullptr) {}
211 209
212 ~TestCastSocket() override {} 210 void SetExtractCertResult(bool value) { extract_cert_result_ = value; }
211
212 void SetVerifyChallengeResult(bool value) {
213 verify_challenge_result_ = value;
214 }
215
216 void TriggerTimeout() { mock_timer_->Fire(); }
217
218 bool TestVerifyChannelPolicyNone() {
219 AuthResult authResult;
220 return VerifyChannelPolicy(authResult);
221 }
222
223 void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; }
224
225 protected:
226 ~TestCastSocketBase() override {}
227
228 scoped_refptr<net::X509Certificate> ExtractPeerCert() override {
229 return extract_cert_result_
230 ? net::ImportCertFromFile(GetTestCertsDirectory(),
231 "self_signed.pem")
232 : nullptr;
233 }
234
235 bool VerifyChallengeReply() override {
236 EXPECT_FALSE(verify_challenge_disallow_);
237 return verify_challenge_result_;
238 }
239
240 base::Timer* GetTimer() override { return mock_timer_.get(); }
241
242 std::unique_ptr<net::TestNetLog> capturing_net_log_;
243 net::IPEndPoint ip_;
244 // Simulated result of peer cert extraction.
245 bool extract_cert_result_;
246 // Simulated result of verifying challenge reply.
247 bool verify_challenge_result_;
248 bool verify_challenge_disallow_;
249 std::unique_ptr<base::MockTimer> mock_timer_;
250
251 private:
252 DISALLOW_COPY_AND_ASSIGN(TestCastSocketBase);
253 };
254
255 class MockTestCastSocket : public TestCastSocketBase {
256 public:
257 static std::unique_ptr<MockTestCastSocket> CreateSecure(
258 Logger* logger,
259 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
260 return std::unique_ptr<MockTestCastSocket>(
261 new MockTestCastSocket(CreateIPEndPointForTest(), kDistantTimeoutMillis,
262 logger, device_capabilities));
263 }
264
265 using TestCastSocketBase::TestCastSocketBase;
266
267 ~MockTestCastSocket() override {}
213 268
214 void SetupMockTransport() { 269 void SetupMockTransport() {
215 mock_transport_ = new MockCastTransport; 270 mock_transport_ = new MockCastTransport;
216 SetTransportForTesting(base::WrapUnique(mock_transport_)); 271 SetTransportForTesting(base::WrapUnique(mock_transport_));
217 } 272 }
218 273
219 // Socket connection helpers. 274 // Socket connection helpers.
220 void SetupTcpConnect(net::IoMode mode, int result) { 275 void SetupTcpConnect(net::IoMode mode, int result) {
221 tcp_connect_data_.reset(new net::MockConnect(mode, result)); 276 tcp_connect_data_.reset(new net::MockConnect(mode, result, ip_));
222 } 277 }
223 void SetupSslConnect(net::IoMode mode, int result) { 278 void SetupSslConnect(net::IoMode mode, int result) {
224 ssl_connect_data_.reset(new net::MockConnect(mode, result)); 279 ssl_connect_data_.reset(new net::MockConnect(mode, result, ip_));
225 } 280 }
226 281
227 // Socket I/O helpers. 282 // Socket I/O helpers.
228 void AddWriteResult(const net::MockWrite& write) { writes_.push_back(write); } 283 void AddWriteResult(const net::MockWrite& write) { writes_.push_back(write); }
229 void AddWriteResult(net::IoMode mode, int result) { 284 void AddWriteResult(net::IoMode mode, int result) {
230 AddWriteResult(net::MockWrite(mode, result)); 285 AddWriteResult(net::MockWrite(mode, result));
231 } 286 }
232 void AddWriteResultForData(net::IoMode mode, const std::string& msg) { 287 void AddWriteResultForData(net::IoMode mode, const std::string& msg) {
233 AddWriteResult(mode, msg.size()); 288 AddWriteResult(mode, msg.size());
234 } 289 }
235 void AddReadResult(const net::MockRead& read) { reads_.push_back(read); } 290 void AddReadResult(const net::MockRead& read) { reads_.push_back(read); }
236 void AddReadResult(net::IoMode mode, int result) { 291 void AddReadResult(net::IoMode mode, int result) {
237 AddReadResult(net::MockRead(mode, result)); 292 AddReadResult(net::MockRead(mode, result));
238 } 293 }
239 void AddReadResultForData(net::IoMode mode, const std::string& data) { 294 void AddReadResultForData(net::IoMode mode, const std::string& data) {
240 AddReadResult(net::MockRead(mode, data.c_str(), data.size())); 295 AddReadResult(net::MockRead(mode, data.c_str(), data.size()));
241 } 296 }
242 297
243 // Helpers for modifying other connection-related behaviors. 298 // Helpers for modifying other connection-related behaviors.
244 void SetupTcpConnectUnresponsive() { tcp_unresponsive_ = true; } 299 void SetupTcpConnectUnresponsive() { tcp_unresponsive_ = true; }
245 300
246 void SetExtractCertResult(bool value) { extract_cert_result_ = value; }
247
248 void SetVerifyChallengeResult(bool value) {
249 verify_challenge_result_ = value;
250 }
251
252 void TriggerTimeout() { mock_timer_->Fire(); }
253
254 bool TestVerifyChannelPolicyNone() {
255 AuthResult authResult;
256 return VerifyChannelPolicy(authResult);
257 }
258
259 bool TestVerifyChannelPolicyAudioOnly() { 301 bool TestVerifyChannelPolicyAudioOnly() {
260 AuthResult authResult; 302 AuthResult authResult;
261 authResult.channel_policies |= AuthResult::POLICY_AUDIO_ONLY; 303 authResult.channel_policies |= AuthResult::POLICY_AUDIO_ONLY;
262 return VerifyChannelPolicy(authResult); 304 return VerifyChannelPolicy(authResult);
263 } 305 }
264 306
265 void DisallowVerifyChallengeResult() { verify_challenge_disallow_ = true; }
266
267 MockCastTransport* GetMockTransport() { 307 MockCastTransport* GetMockTransport() {
268 CHECK(mock_transport_); 308 CHECK(mock_transport_);
269 return mock_transport_; 309 return mock_transport_;
270 } 310 }
271 311
272 private: 312 private:
273 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override { 313 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override {
274 if (tcp_unresponsive_) { 314 if (tcp_unresponsive_) {
275 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true)); 315 return std::unique_ptr<net::TCPClientSocket>(new MockTCPSocket(true));
276 } else { 316 } else {
277 net::MockConnect* connect_data = tcp_connect_data_.get();
278 connect_data->peer_addr = ip_;
279 return std::unique_ptr<net::TCPClientSocket>( 317 return std::unique_ptr<net::TCPClientSocket>(
280 new MockTCPSocket(*connect_data)); 318 new MockTCPSocket(*tcp_connect_data_));
281 } 319 }
282 } 320 }
283 321
284 std::unique_ptr<net::SSLClientSocket> CreateSslSocket( 322 std::unique_ptr<net::SSLClientSocket> CreateSslSocket(
285 std::unique_ptr<net::StreamSocket> socket) override { 323 std::unique_ptr<net::StreamSocket>) override {
286 net::MockConnect* connect_data = ssl_connect_data_.get();
287 connect_data->peer_addr = ip_;
288
289 ssl_data_.reset(new net::StaticSocketDataProvider( 324 ssl_data_.reset(new net::StaticSocketDataProvider(
290 reads_.data(), reads_.size(), writes_.data(), writes_.size())); 325 reads_.data(), reads_.size(), writes_.data(), writes_.size()));
291 ssl_data_->set_connect_data(*connect_data); 326 ssl_data_->set_connect_data(*ssl_connect_data_);
292 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !! 327 // NOTE: net::MockTCPClientSocket inherits from net::SSLClientSocket !!
293 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket( 328 return std::unique_ptr<net::SSLClientSocket>(new net::MockTCPClientSocket(
294 net::AddressList(), capturing_net_log_.get(), ssl_data_.get())); 329 net::AddressList(), capturing_net_log_.get(), ssl_data_.get()));
295 } 330 }
296 331
297 scoped_refptr<net::X509Certificate> ExtractPeerCert() override {
298 return extract_cert_result_
299 ? net::ImportCertFromFile(net::GetTestCertsDirectory(),
300 "ok_cert.pem")
301 : nullptr;
302 }
303
304 bool VerifyChallengeReply() override {
305 EXPECT_FALSE(verify_challenge_disallow_);
306 return verify_challenge_result_;
307 }
308
309 base::Timer* GetTimer() override { return mock_timer_.get(); }
310
311 std::unique_ptr<net::TestNetLog> capturing_net_log_;
312 net::IPEndPoint ip_;
313 // Simulated connect data 332 // Simulated connect data
314 std::unique_ptr<net::MockConnect> tcp_connect_data_; 333 std::unique_ptr<net::MockConnect> tcp_connect_data_;
315 std::unique_ptr<net::MockConnect> ssl_connect_data_; 334 std::unique_ptr<net::MockConnect> ssl_connect_data_;
316 // Simulated read / write data 335 // Simulated read / write data
317 std::vector<net::MockWrite> writes_; 336 std::vector<net::MockWrite> writes_;
318 std::vector<net::MockRead> reads_; 337 std::vector<net::MockRead> reads_;
319 std::unique_ptr<net::SocketDataProvider> ssl_data_; 338 std::unique_ptr<net::SocketDataProvider> ssl_data_;
320 // Simulated result of peer cert extraction.
321 bool extract_cert_result_;
322 // Simulated result of verifying challenge reply.
323 bool verify_challenge_result_;
324 bool verify_challenge_disallow_;
325 // If true, makes TCP connection process stall. For timeout testing. 339 // If true, makes TCP connection process stall. For timeout testing.
326 bool tcp_unresponsive_; 340 bool tcp_unresponsive_ = false;
327 std::unique_ptr<base::MockTimer> mock_timer_; 341 MockCastTransport* mock_transport_ = nullptr;
328 MockCastTransport* mock_transport_;
329 342
330 DISALLOW_COPY_AND_ASSIGN(TestCastSocket); 343 DISALLOW_COPY_AND_ASSIGN(MockTestCastSocket);
331 }; 344 };
332 345
333 class CastSocketTest : public testing::Test { 346 class SslTestCastSocket : public TestCastSocketBase {
334 public: 347 public:
335 CastSocketTest() 348 static std::unique_ptr<SslTestCastSocket> CreateSecure(
336 : logger_(new Logger()), observer_(new MockCastSocketObserver()) {} 349 Logger* logger,
337 ~CastSocketTest() override {} 350 uint64_t device_capabilities = cast_channel::CastDeviceCapability::NONE) {
351 return std::unique_ptr<SslTestCastSocket>(
352 new SslTestCastSocket(CreateIPEndPointForTest(), kDistantTimeoutMillis,
353 logger, device_capabilities));
354 }
355
356 using TestCastSocketBase::TestCastSocketBase;
357
358 void SetTcpSocket(std::unique_ptr<net::TCPClientSocket> tcp_client_socket) {
359 tcp_client_socket_ = std::move(tcp_client_socket);
360 }
361
362 private:
363 std::unique_ptr<net::TCPClientSocket> CreateTcpSocket() override {
364 return std::move(tcp_client_socket_);
365 }
366
367 std::unique_ptr<net::TCPClientSocket> tcp_client_socket_;
368 };
369
370 class CastSocketTestBase : public testing::Test {
371 protected:
372 CastSocketTestBase()
373 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
374 logger_(new Logger()),
375 observer_(new MockCastSocketObserver()) {}
376 ~CastSocketTestBase() override {}
338 377
339 void SetUp() override { EXPECT_CALL(*observer_, OnMessage(_, _)).Times(0); } 378 void SetUp() override { EXPECT_CALL(*observer_, OnMessage(_, _)).Times(0); }
340 379
380 // Runs all pending tasks in the message loop.
381 void RunPendingTasks() {
382 base::RunLoop run_loop;
383 run_loop.RunUntilIdle();
384 }
385
386 content::TestBrowserThreadBundle thread_bundle_;
387 Logger* logger_;
388 CompleteHandler handler_;
389 std::unique_ptr<MockCastSocketObserver> observer_;
390
391 private:
392 DISALLOW_COPY_AND_ASSIGN(CastSocketTestBase);
393 };
394
395 class MockCastSocketTest : public CastSocketTestBase {
396 protected:
397 MockCastSocketTest() {}
398
341 void TearDown() override { 399 void TearDown() override {
342 if (socket_.get()) { 400 if (socket_.get()) {
343 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); 401 EXPECT_CALL(handler_, OnCloseComplete(net::OK));
344 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, 402 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
345 base::Unretained(&handler_))); 403 base::Unretained(&handler_)));
346 } 404 }
347 } 405 }
348 406
349 void CreateCastSocketSecure() { 407 void CreateCastSocketSecure() {
350 socket_ = TestCastSocket::CreateSecure(logger_); 408 socket_ = MockTestCastSocket::CreateSecure(logger_);
351 } 409 }
352 410
353 void HandleAuthHandshake() { 411 void HandleAuthHandshake() {
354 socket_->SetupMockTransport(); 412 socket_->SetupMockTransport();
355 CastMessage challenge_proto = CreateAuthChallenge(); 413 CastMessage challenge_proto = CreateAuthChallenge();
356 EXPECT_CALL(*socket_->GetMockTransport(), 414 EXPECT_CALL(*socket_->GetMockTransport(),
357 SendMessage(EqualsProto(challenge_proto), _)) 415 SendMessage(EqualsProto(challenge_proto), _))
358 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 416 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
359 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 417 EXPECT_CALL(*socket_->GetMockTransport(), Start());
360 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE)); 418 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE));
419 socket_->AddObserver(observer_.get());
361 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 420 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
362 base::Unretained(&handler_))); 421 base::Unretained(&handler_)));
363 RunPendingTasks(); 422 RunPendingTasks();
364 socket_->GetMockTransport()->current_delegate()->OnMessage( 423 socket_->GetMockTransport()->current_delegate()->OnMessage(
365 CreateAuthReply()); 424 CreateAuthReply());
366 RunPendingTasks(); 425 RunPendingTasks();
367 } 426 }
368 427
428 std::unique_ptr<MockTestCastSocket> socket_;
429
430 private:
431 DISALLOW_COPY_AND_ASSIGN(MockCastSocketTest);
432 };
433
434 class SslCastSocketTest : public CastSocketTestBase {
369 protected: 435 protected:
370 // Runs all pending tasks in the message loop. 436 SslCastSocketTest() {}
371 void RunPendingTasks() { 437
372 base::RunLoop run_loop; 438 void TearDown() override {
373 run_loop.RunUntilIdle(); 439 if (socket_.get()) {
440 EXPECT_CALL(handler_, OnCloseComplete(net::OK));
441 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
442 base::Unretained(&handler_)));
443 }
374 } 444 }
375 445
376 base::MessageLoop message_loop_; 446 void CreateSockets() {
377 Logger* logger_; 447 socket_ = SslTestCastSocket::CreateSecure(logger_);
378 std::unique_ptr<TestCastSocket> socket_; 448
379 CompleteHandler handler_; 449 server_cert_ =
380 std::unique_ptr<MockCastSocketObserver> observer_; 450 net::ImportCertFromFile(GetTestCertsDirectory(), "self_signed.pem");
451 ASSERT_TRUE(server_cert_);
452 server_private_key_ = ReadTestKeyFromPEM("self_signed.pem");
453 ASSERT_TRUE(server_private_key_);
454 server_context_ = CreateSSLServerContext(
455 server_cert_.get(), *server_private_key_, server_ssl_config_);
456
457 tcp_server_socket_.reset(
458 new net::TCPServerSocket(nullptr, net::NetLogSource()));
459 ASSERT_EQ(net::OK,
460 tcp_server_socket_->ListenWithAddressAndPort("127.0.0.1", 0, 1));
461 net::IPEndPoint server_address;
462 ASSERT_EQ(net::OK, tcp_server_socket_->GetLocalAddress(&server_address));
463 tcp_client_socket_.reset(
464 new net::TCPClientSocket(net::AddressList(server_address), nullptr,
465 nullptr, net::NetLogSource()));
466
467 std::unique_ptr<net::StreamSocket> accepted_socket;
468 accept_result_ = tcp_server_socket_->Accept(
469 &accepted_socket, base::Bind(&SslCastSocketTest::TcpAcceptCallback,
470 base::Unretained(this)));
471 connect_result_ = tcp_client_socket_->Connect(base::Bind(
472 &SslCastSocketTest::TcpConnectCallback, base::Unretained(this)));
473 while (accept_result_ == net::ERR_IO_PENDING ||
474 connect_result_ == net::ERR_IO_PENDING) {
475 RunPendingTasks();
476 }
477 ASSERT_EQ(net::OK, accept_result_);
478 ASSERT_EQ(net::OK, connect_result_);
479 ASSERT_TRUE(accepted_socket);
480 ASSERT_TRUE(tcp_client_socket_->IsConnected());
481
482 server_socket_ =
483 server_context_->CreateSSLServerSocket(std::move(accepted_socket));
484 ASSERT_TRUE(server_socket_);
485
486 socket_->SetTcpSocket(std::move(tcp_client_socket_));
487 }
488
489 void ConnectSockets() {
490 socket_->AddObserver(observer_.get());
491 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
492 base::Unretained(&handler_)));
493
494 net::TestCompletionCallback handshake_callback;
495 int server_ret = handshake_callback.GetResult(
496 server_socket_->Handshake(handshake_callback.callback()));
497
498 ASSERT_EQ(net::OK, server_ret);
499 }
500
501 void TcpAcceptCallback(int result) { accept_result_ = result; }
502
503 void TcpConnectCallback(int result) { connect_result_ = result; }
504
505 std::unique_ptr<crypto::RSAPrivateKey> ReadTestKeyFromPEM(
506 const base::StringPiece& name) {
507 base::FilePath key_path = GetTestCertsDirectory().AppendASCII(name);
508 std::vector<std::string> headers({"PRIVATE KEY"});
509 std::string pem_data;
510 if (!base::ReadFileToString(key_path, &pem_data)) {
511 return nullptr;
512 }
513 net::PEMTokenizer pem_tokenizer(pem_data, headers);
514 if (!pem_tokenizer.GetNext()) {
515 return nullptr;
516 }
517 std::vector<uint8_t> key_vector(pem_tokenizer.data().begin(),
518 pem_tokenizer.data().end());
519 std::unique_ptr<crypto::RSAPrivateKey> key(
520 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector));
521 return key;
522 }
523
524 int ReadExactLength(net::IOBuffer* buffer,
525 int buffer_length,
526 net::Socket* socket) {
527 scoped_refptr<net::DrainableIOBuffer> draining_buffer(
528 new net::DrainableIOBuffer(buffer, buffer_length));
529 while (draining_buffer->BytesRemaining() > 0) {
530 net::TestCompletionCallback read_callback;
531 int read_result = read_callback.GetResult(server_socket_->Read(
532 draining_buffer.get(), draining_buffer->BytesRemaining(),
533 read_callback.callback()));
534 EXPECT_GT(read_result, 0);
535 draining_buffer->DidConsume(read_result);
536 }
537 return buffer_length;
538 }
539
540 int WriteExactLength(net::IOBuffer* buffer,
541 int buffer_length,
542 net::Socket* socket) {
543 scoped_refptr<net::DrainableIOBuffer> draining_buffer(
544 new net::DrainableIOBuffer(buffer, buffer_length));
545 while (draining_buffer->BytesRemaining() > 0) {
546 net::TestCompletionCallback write_callback;
547 int write_result = write_callback.GetResult(server_socket_->Write(
548 draining_buffer.get(), draining_buffer->BytesRemaining(),
549 write_callback.callback()));
550 EXPECT_GT(write_result, 0);
551 draining_buffer->DidConsume(write_result);
552 }
553 return buffer_length;
554 }
555
556 // Result values used for TCP socket setup. These should contain values from
557 // net::Error.
558 int accept_result_;
559 int connect_result_;
560
561 // Underlying TCP sockets for |socket_| to communicate with |server_socket_|
562 // when testing with the real SSL implementation.
563 std::unique_ptr<net::TCPClientSocket> tcp_client_socket_;
564 std::unique_ptr<net::TCPServerSocket> tcp_server_socket_;
565
566 std::unique_ptr<SslTestCastSocket> socket_;
567
568 // |server_socket_| is used for the *RealSSL tests in order to test the
569 // CastSocket over a real SSL socket. The other members below are used to
570 // initialize |server_socket_|.
571 std::unique_ptr<net::SSLServerSocket> server_socket_;
572 std::unique_ptr<net::SSLServerContext> server_context_;
573 std::unique_ptr<crypto::RSAPrivateKey> server_private_key_;
574 scoped_refptr<net::X509Certificate> server_cert_;
575 net::SSLServerConfig server_ssl_config_;
381 576
382 private: 577 private:
383 DISALLOW_COPY_AND_ASSIGN(CastSocketTest); 578 DISALLOW_COPY_AND_ASSIGN(SslCastSocketTest);
384 }; 579 };
385 580
581 } // namespace
582
386 // Tests that the following connection flow works: 583 // Tests that the following connection flow works:
387 // - TCP connection succeeds (async) 584 // - TCP connection succeeds (async)
388 // - SSL connection succeeds (async) 585 // - SSL connection succeeds (async)
389 // - Cert is extracted successfully 586 // - Cert is extracted successfully
390 // - Challenge request is sent (async) 587 // - Challenge request is sent (async)
391 // - Challenge response is received (async) 588 // - Challenge response is received (async)
392 // - Credentials are verified successfuly 589 // - Credentials are verified successfuly
393 TEST_F(CastSocketTest, TestConnectFullSecureFlowAsync) { 590 TEST_F(MockCastSocketTest, TestConnectFullSecureFlowAsync) {
394 CreateCastSocketSecure(); 591 CreateCastSocketSecure();
395 socket_->SetupTcpConnect(net::ASYNC, net::OK); 592 socket_->SetupTcpConnect(net::ASYNC, net::OK);
396 socket_->SetupSslConnect(net::ASYNC, net::OK); 593 socket_->SetupSslConnect(net::ASYNC, net::OK);
397 594
398 HandleAuthHandshake(); 595 HandleAuthHandshake();
399 596
400 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state()); 597 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
401 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); 598 EXPECT_EQ(ChannelError::NONE, socket_->error_state());
402 } 599 }
403 600
404 // Tests that the following connection flow works: 601 // Tests that the following connection flow works:
405 // - TCP connection succeeds (sync) 602 // - TCP connection succeeds (sync)
406 // - SSL connection succeeds (sync) 603 // - SSL connection succeeds (sync)
407 // - Cert is extracted successfully 604 // - Cert is extracted successfully
408 // - Challenge request is sent (sync) 605 // - Challenge request is sent (sync)
409 // - Challenge response is received (sync) 606 // - Challenge response is received (sync)
410 // - Credentials are verified successfuly 607 // - Credentials are verified successfuly
411 TEST_F(CastSocketTest, TestConnectFullSecureFlowSync) { 608 TEST_F(MockCastSocketTest, TestConnectFullSecureFlowSync) {
412 CreateCastSocketSecure(); 609 CreateCastSocketSecure();
413 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 610 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
414 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 611 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
415 612
416 HandleAuthHandshake(); 613 HandleAuthHandshake();
417 614
418 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state()); 615 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
419 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); 616 EXPECT_EQ(ChannelError::NONE, socket_->error_state());
420 } 617 }
421 618
422 // Test that an AuthMessage with a mangled namespace triggers cancelation 619 // Test that an AuthMessage with a mangled namespace triggers cancelation
423 // of the connection event loop. 620 // of the connection event loop.
424 TEST_F(CastSocketTest, TestConnectAuthMessageCorrupted) { 621 TEST_F(MockCastSocketTest, TestConnectAuthMessageCorrupted) {
425 CreateCastSocketSecure(); 622 CreateCastSocketSecure();
426 socket_->SetupMockTransport(); 623 socket_->SetupMockTransport();
427 624
428 socket_->SetupTcpConnect(net::ASYNC, net::OK); 625 socket_->SetupTcpConnect(net::ASYNC, net::OK);
429 socket_->SetupSslConnect(net::ASYNC, net::OK); 626 socket_->SetupSslConnect(net::ASYNC, net::OK);
430 627
431 CastMessage challenge_proto = CreateAuthChallenge(); 628 CastMessage challenge_proto = CreateAuthChallenge();
432 EXPECT_CALL(*socket_->GetMockTransport(), 629 EXPECT_CALL(*socket_->GetMockTransport(),
433 SendMessage(EqualsProto(challenge_proto), _)) 630 SendMessage(EqualsProto(challenge_proto), _))
434 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 631 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
(...skipping 11 matching lines...) Expand all
446 643
447 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 644 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
448 EXPECT_EQ(ChannelError::TRANSPORT_ERROR, socket_->error_state()); 645 EXPECT_EQ(ChannelError::TRANSPORT_ERROR, socket_->error_state());
449 646
450 // Verifies that the CastSocket's resources were torn down during channel 647 // Verifies that the CastSocket's resources were torn down during channel
451 // close. (see http://crbug.com/504078) 648 // close. (see http://crbug.com/504078)
452 EXPECT_EQ(nullptr, socket_->transport()); 649 EXPECT_EQ(nullptr, socket_->transport());
453 } 650 }
454 651
455 // Test connection error - TCP connect fails (async) 652 // Test connection error - TCP connect fails (async)
456 TEST_F(CastSocketTest, TestConnectTcpConnectErrorAsync) { 653 TEST_F(MockCastSocketTest, TestConnectTcpConnectErrorAsync) {
457 CreateCastSocketSecure(); 654 CreateCastSocketSecure();
458 655
459 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED); 656 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
460 657
461 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR)); 658 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR));
462 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 659 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
463 base::Unretained(&handler_))); 660 base::Unretained(&handler_)));
464 RunPendingTasks(); 661 RunPendingTasks();
465 662
466 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 663 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
467 EXPECT_EQ(ChannelError::CONNECT_ERROR, socket_->error_state()); 664 EXPECT_EQ(ChannelError::CONNECT_ERROR, socket_->error_state());
468 } 665 }
469 666
470 // Test connection error - TCP connect fails (sync) 667 // Test connection error - TCP connect fails (sync)
471 TEST_F(CastSocketTest, TestConnectTcpConnectErrorSync) { 668 TEST_F(MockCastSocketTest, TestConnectTcpConnectErrorSync) {
472 CreateCastSocketSecure(); 669 CreateCastSocketSecure();
473 670
474 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED); 671 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_FAILED);
475 672
476 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR)); 673 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR));
477 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 674 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
478 base::Unretained(&handler_))); 675 base::Unretained(&handler_)));
479 RunPendingTasks(); 676 RunPendingTasks();
480 677
481 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 678 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
482 EXPECT_EQ(ChannelError::CONNECT_ERROR, socket_->error_state()); 679 EXPECT_EQ(ChannelError::CONNECT_ERROR, socket_->error_state());
483 } 680 }
484 681
485 // Test connection error - timeout 682 // Test connection error - timeout
486 TEST_F(CastSocketTest, TestConnectTcpTimeoutError) { 683 TEST_F(MockCastSocketTest, TestConnectTcpTimeoutError) {
487 CreateCastSocketSecure(); 684 CreateCastSocketSecure();
488 socket_->SetupTcpConnectUnresponsive(); 685 socket_->SetupTcpConnectUnresponsive();
489 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)); 686 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT));
490 EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT)); 687 EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT));
491 socket_->AddObserver(observer_.get()); 688 socket_->AddObserver(observer_.get());
492 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 689 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
493 base::Unretained(&handler_))); 690 base::Unretained(&handler_)));
494 RunPendingTasks(); 691 RunPendingTasks();
495 692
496 EXPECT_EQ(ReadyState::CONNECTING, socket_->ready_state()); 693 EXPECT_EQ(ReadyState::CONNECTING, socket_->ready_state());
497 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); 694 EXPECT_EQ(ChannelError::NONE, socket_->error_state());
498 socket_->TriggerTimeout(); 695 socket_->TriggerTimeout();
499 RunPendingTasks(); 696 RunPendingTasks();
500 697
501 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 698 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
502 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); 699 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state());
503 } 700 }
504 701
505 // Test connection error - TCP socket returns timeout 702 // Test connection error - TCP socket returns timeout
506 TEST_F(CastSocketTest, TestConnectTcpSocketTimeoutError) { 703 TEST_F(MockCastSocketTest, TestConnectTcpSocketTimeoutError) {
507 CreateCastSocketSecure(); 704 CreateCastSocketSecure();
508 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT); 705 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT);
509 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)); 706 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT));
510 EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT)); 707 EXPECT_CALL(*observer_, OnError(_, ChannelError::CONNECT_TIMEOUT));
511 socket_->AddObserver(observer_.get()); 708 socket_->AddObserver(observer_.get());
512 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 709 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
513 base::Unretained(&handler_))); 710 base::Unretained(&handler_)));
514 RunPendingTasks(); 711 RunPendingTasks();
515 712
516 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 713 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
517 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); 714 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state());
518 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT, 715 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT,
519 logger_->GetLastError(socket_->id()).net_return_value); 716 logger_->GetLastError(socket_->id()).net_return_value);
520 } 717 }
521 718
522 // Test connection error - SSL connect fails (async) 719 // Test connection error - SSL connect fails (async)
523 TEST_F(CastSocketTest, TestConnectSslConnectErrorAsync) { 720 TEST_F(MockCastSocketTest, TestConnectSslConnectErrorAsync) {
524 CreateCastSocketSecure(); 721 CreateCastSocketSecure();
525 722
526 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 723 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
527 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED); 724 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED);
528 725
529 EXPECT_CALL(handler_, 726 EXPECT_CALL(handler_,
530 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR)); 727 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR));
531 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 728 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
532 base::Unretained(&handler_))); 729 base::Unretained(&handler_)));
533 RunPendingTasks(); 730 RunPendingTasks();
534 731
535 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 732 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
536 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); 733 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state());
537 } 734 }
538 735
539 // Test connection error - SSL connect fails (sync) 736 // Test connection error - SSL connect fails (sync)
540 TEST_F(CastSocketTest, TestConnectSslConnectErrorSync) { 737 TEST_F(MockCastSocketTest, TestConnectSslConnectErrorSync) {
541 CreateCastSocketSecure(); 738 CreateCastSocketSecure();
542 739
543 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 740 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
544 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED); 741 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_FAILED);
545 742
546 EXPECT_CALL(handler_, 743 EXPECT_CALL(handler_,
547 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR)); 744 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR));
548 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 745 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
549 base::Unretained(&handler_))); 746 base::Unretained(&handler_)));
550 RunPendingTasks(); 747 RunPendingTasks();
551 748
552 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 749 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
553 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); 750 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state());
554 EXPECT_EQ(net::ERR_FAILED, 751 EXPECT_EQ(net::ERR_FAILED,
555 logger_->GetLastError(socket_->id()).net_return_value); 752 logger_->GetLastError(socket_->id()).net_return_value);
556 } 753 }
557 754
558 // Test connection error - SSL connect times out (sync) 755 // Test connection error - SSL connect times out (sync)
559 TEST_F(CastSocketTest, TestConnectSslConnectTimeoutSync) { 756 TEST_F(MockCastSocketTest, TestConnectSslConnectTimeoutSync) {
560 CreateCastSocketSecure(); 757 CreateCastSocketSecure();
561 758
562 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 759 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
563 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT); 760 socket_->SetupSslConnect(net::SYNCHRONOUS, net::ERR_CONNECTION_TIMED_OUT);
564 761
565 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)); 762 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT));
566 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 763 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
567 base::Unretained(&handler_))); 764 base::Unretained(&handler_)));
568 RunPendingTasks(); 765 RunPendingTasks();
569 766
570 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 767 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
571 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); 768 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state());
572 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT, 769 EXPECT_EQ(net::ERR_CONNECTION_TIMED_OUT,
573 logger_->GetLastError(socket_->id()).net_return_value); 770 logger_->GetLastError(socket_->id()).net_return_value);
574 } 771 }
575 772
576 // Test connection error - SSL connect times out (async) 773 // Test connection error - SSL connect times out (async)
577 TEST_F(CastSocketTest, TestConnectSslConnectTimeoutAsync) { 774 TEST_F(MockCastSocketTest, TestConnectSslConnectTimeoutAsync) {
578 CreateCastSocketSecure(); 775 CreateCastSocketSecure();
579 776
580 socket_->SetupTcpConnect(net::ASYNC, net::OK); 777 socket_->SetupTcpConnect(net::ASYNC, net::OK);
581 socket_->SetupSslConnect(net::ASYNC, net::ERR_CONNECTION_TIMED_OUT); 778 socket_->SetupSslConnect(net::ASYNC, net::ERR_CONNECTION_TIMED_OUT);
582 779
583 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)); 780 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT));
584 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 781 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
585 base::Unretained(&handler_))); 782 base::Unretained(&handler_)));
586 RunPendingTasks(); 783 RunPendingTasks();
587 784
588 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 785 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
589 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state()); 786 EXPECT_EQ(ChannelError::CONNECT_TIMEOUT, socket_->error_state());
590 } 787 }
591 788
592 // Test connection error - challenge send fails 789 // Test connection error - challenge send fails
593 TEST_F(CastSocketTest, TestConnectChallengeSendError) { 790 TEST_F(MockCastSocketTest, TestConnectChallengeSendError) {
594 CreateCastSocketSecure(); 791 CreateCastSocketSecure();
595 socket_->SetupMockTransport(); 792 socket_->SetupMockTransport();
596 793
597 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 794 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
598 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 795 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
599 EXPECT_CALL(*socket_->GetMockTransport(), 796 EXPECT_CALL(*socket_->GetMockTransport(),
600 SendMessage(EqualsProto(CreateAuthChallenge()), _)) 797 SendMessage(EqualsProto(CreateAuthChallenge()), _))
601 .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET)); 798 .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET));
602 799
603 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CAST_SOCKET_ERROR)); 800 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CAST_SOCKET_ERROR));
604 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 801 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
605 base::Unretained(&handler_))); 802 base::Unretained(&handler_)));
606 RunPendingTasks(); 803 RunPendingTasks();
607 804
608 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 805 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
609 EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state()); 806 EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state());
610 } 807 }
611 808
612 // Test connection error - connection is destroyed after the challenge is 809 // Test connection error - connection is destroyed after the challenge is
613 // sent, with the async result still lurking in the task queue. 810 // sent, with the async result still lurking in the task queue.
614 TEST_F(CastSocketTest, TestConnectDestroyedAfterChallengeSent) { 811 TEST_F(MockCastSocketTest, TestConnectDestroyedAfterChallengeSent) {
615 CreateCastSocketSecure(); 812 CreateCastSocketSecure();
616 socket_->SetupMockTransport(); 813 socket_->SetupMockTransport();
617 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 814 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
618 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 815 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
619 EXPECT_CALL(*socket_->GetMockTransport(), 816 EXPECT_CALL(*socket_->GetMockTransport(),
620 SendMessage(EqualsProto(CreateAuthChallenge()), _)) 817 SendMessage(EqualsProto(CreateAuthChallenge()), _))
621 .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET)); 818 .WillOnce(PostCompletionCallbackTask<1>(net::ERR_CONNECTION_RESET));
622 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 819 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
623 base::Unretained(&handler_))); 820 base::Unretained(&handler_)));
624 socket_.reset(); 821 socket_.reset();
625 RunPendingTasks(); 822 RunPendingTasks();
626 } 823 }
627 824
628 // Test connection error - challenge reply receive fails 825 // Test connection error - challenge reply receive fails
629 TEST_F(CastSocketTest, TestConnectChallengeReplyReceiveError) { 826 TEST_F(MockCastSocketTest, TestConnectChallengeReplyReceiveError) {
630 CreateCastSocketSecure(); 827 CreateCastSocketSecure();
631 socket_->SetupMockTransport(); 828 socket_->SetupMockTransport();
632 829
633 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 830 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
634 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 831 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
635 EXPECT_CALL(*socket_->GetMockTransport(), 832 EXPECT_CALL(*socket_->GetMockTransport(),
636 SendMessage(EqualsProto(CreateAuthChallenge()), _)) 833 SendMessage(EqualsProto(CreateAuthChallenge()), _))
637 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 834 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
638 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED); 835 socket_->AddReadResult(net::SYNCHRONOUS, net::ERR_FAILED);
639 EXPECT_CALL(*observer_, OnError(_, ChannelError::CAST_SOCKET_ERROR)); 836 EXPECT_CALL(*observer_, OnError(_, ChannelError::CAST_SOCKET_ERROR));
640 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CAST_SOCKET_ERROR)); 837 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CAST_SOCKET_ERROR));
641 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 838 EXPECT_CALL(*socket_->GetMockTransport(), Start());
642 socket_->AddObserver(observer_.get()); 839 socket_->AddObserver(observer_.get());
643 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 840 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
644 base::Unretained(&handler_))); 841 base::Unretained(&handler_)));
645 RunPendingTasks(); 842 RunPendingTasks();
646 socket_->GetMockTransport()->current_delegate()->OnError( 843 socket_->GetMockTransport()->current_delegate()->OnError(
647 ChannelError::CAST_SOCKET_ERROR); 844 ChannelError::CAST_SOCKET_ERROR);
648 RunPendingTasks(); 845 RunPendingTasks();
649 846
650 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 847 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
651 EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state()); 848 EXPECT_EQ(ChannelError::CAST_SOCKET_ERROR, socket_->error_state());
652 } 849 }
653 850
654 TEST_F(CastSocketTest, TestConnectChallengeVerificationFails) { 851 TEST_F(MockCastSocketTest, TestConnectChallengeVerificationFails) {
655 CreateCastSocketSecure(); 852 CreateCastSocketSecure();
656 socket_->SetupMockTransport(); 853 socket_->SetupMockTransport();
657 socket_->SetupTcpConnect(net::ASYNC, net::OK); 854 socket_->SetupTcpConnect(net::ASYNC, net::OK);
658 socket_->SetupSslConnect(net::ASYNC, net::OK); 855 socket_->SetupSslConnect(net::ASYNC, net::OK);
659 socket_->SetVerifyChallengeResult(false); 856 socket_->SetVerifyChallengeResult(false);
660 857
661 EXPECT_CALL(*observer_, OnError(_, ChannelError::AUTHENTICATION_ERROR)); 858 EXPECT_CALL(*observer_, OnError(_, ChannelError::AUTHENTICATION_ERROR));
662 CastMessage challenge_proto = CreateAuthChallenge(); 859 CastMessage challenge_proto = CreateAuthChallenge();
663 EXPECT_CALL(*socket_->GetMockTransport(), 860 EXPECT_CALL(*socket_->GetMockTransport(),
664 SendMessage(EqualsProto(challenge_proto), _)) 861 SendMessage(EqualsProto(challenge_proto), _))
665 .WillOnce(PostCompletionCallbackTask<1>(net::OK)); 862 .WillOnce(PostCompletionCallbackTask<1>(net::OK));
666 EXPECT_CALL(handler_, 863 EXPECT_CALL(handler_,
667 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR)); 864 OnConnectComplete(_, ChannelError::AUTHENTICATION_ERROR));
668 EXPECT_CALL(*socket_->GetMockTransport(), Start()); 865 EXPECT_CALL(*socket_->GetMockTransport(), Start());
669 socket_->AddObserver(observer_.get()); 866 socket_->AddObserver(observer_.get());
670 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 867 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
671 base::Unretained(&handler_))); 868 base::Unretained(&handler_)));
672 RunPendingTasks(); 869 RunPendingTasks();
673 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply()); 870 socket_->GetMockTransport()->current_delegate()->OnMessage(CreateAuthReply());
674 RunPendingTasks(); 871 RunPendingTasks();
675 872
676 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state()); 873 EXPECT_EQ(ReadyState::CLOSED, socket_->ready_state());
677 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state()); 874 EXPECT_EQ(ChannelError::AUTHENTICATION_ERROR, socket_->error_state());
678 } 875 }
679 876
680 // Sends message data through an actual non-mocked CastTransport object, 877 // Sends message data through an actual non-mocked CastTransport object,
681 // testing the two components in integration. 878 // testing the two components in integration.
682 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportAsync) { 879 TEST_F(MockCastSocketTest, TestConnectEndToEndWithRealTransportAsync) {
683 CreateCastSocketSecure(); 880 CreateCastSocketSecure();
684 socket_->SetupTcpConnect(net::ASYNC, net::OK); 881 socket_->SetupTcpConnect(net::ASYNC, net::OK);
685 socket_->SetupSslConnect(net::ASYNC, net::OK); 882 socket_->SetupSslConnect(net::ASYNC, net::OK);
686 883
687 // Set low-level auth challenge expectations. 884 // Set low-level auth challenge expectations.
688 CastMessage challenge = CreateAuthChallenge(); 885 CastMessage challenge = CreateAuthChallenge();
689 std::string challenge_str; 886 std::string challenge_str;
690 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str)); 887 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
691 socket_->AddWriteResultForData(net::ASYNC, challenge_str); 888 socket_->AddWriteResultForData(net::ASYNC, challenge_str);
692 889
(...skipping 21 matching lines...) Expand all
714 socket_->transport()->SendMessage( 911 socket_->transport()->SendMessage(
715 test_message, base::Bind(&CompleteHandler::OnWriteComplete, 912 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
716 base::Unretained(&handler_))); 913 base::Unretained(&handler_)));
717 RunPendingTasks(); 914 RunPendingTasks();
718 915
719 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state()); 916 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
720 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); 917 EXPECT_EQ(ChannelError::NONE, socket_->error_state());
721 } 918 }
722 919
723 // Same as TestConnectEndToEndWithRealTransportAsync, except synchronous. 920 // Same as TestConnectEndToEndWithRealTransportAsync, except synchronous.
724 TEST_F(CastSocketTest, TestConnectEndToEndWithRealTransportSync) { 921 TEST_F(MockCastSocketTest, TestConnectEndToEndWithRealTransportSync) {
725 CreateCastSocketSecure(); 922 CreateCastSocketSecure();
726 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK); 923 socket_->SetupTcpConnect(net::SYNCHRONOUS, net::OK);
727 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK); 924 socket_->SetupSslConnect(net::SYNCHRONOUS, net::OK);
728 925
729 // Set low-level auth challenge expectations. 926 // Set low-level auth challenge expectations.
730 CastMessage challenge = CreateAuthChallenge(); 927 CastMessage challenge = CreateAuthChallenge();
731 std::string challenge_str; 928 std::string challenge_str;
732 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str)); 929 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
733 socket_->AddWriteResultForData(net::SYNCHRONOUS, challenge_str); 930 socket_->AddWriteResultForData(net::SYNCHRONOUS, challenge_str);
734 931
(...skipping 20 matching lines...) Expand all
755 EXPECT_CALL(handler_, OnWriteComplete(net::OK)); 952 EXPECT_CALL(handler_, OnWriteComplete(net::OK));
756 socket_->transport()->SendMessage( 953 socket_->transport()->SendMessage(
757 test_message, base::Bind(&CompleteHandler::OnWriteComplete, 954 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
758 base::Unretained(&handler_))); 955 base::Unretained(&handler_)));
759 RunPendingTasks(); 956 RunPendingTasks();
760 957
761 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state()); 958 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
762 EXPECT_EQ(ChannelError::NONE, socket_->error_state()); 959 EXPECT_EQ(ChannelError::NONE, socket_->error_state());
763 } 960 }
764 961
765 TEST_F(CastSocketTest, TestObservers) { 962 TEST_F(MockCastSocketTest, TestObservers) {
766 CreateCastSocketSecure(); 963 CreateCastSocketSecure();
767 // Test AddObserever 964 // Test AddObserever
768 MockCastSocketObserver observer1; 965 MockCastSocketObserver observer1;
769 MockCastSocketObserver observer2; 966 MockCastSocketObserver observer2;
770 socket_->AddObserver(&observer1); 967 socket_->AddObserver(&observer1);
771 socket_->AddObserver(&observer1); 968 socket_->AddObserver(&observer1);
772 socket_->AddObserver(&observer2); 969 socket_->AddObserver(&observer2);
773 socket_->AddObserver(&observer2); 970 socket_->AddObserver(&observer2);
774 971
775 // Test notify observers 972 // Test notify observers
776 EXPECT_CALL(observer1, OnError(_, cast_channel::ChannelError::CONNECT_ERROR)); 973 EXPECT_CALL(observer1, OnError(_, cast_channel::ChannelError::CONNECT_ERROR));
777 EXPECT_CALL(observer2, OnError(_, cast_channel::ChannelError::CONNECT_ERROR)); 974 EXPECT_CALL(observer2, OnError(_, cast_channel::ChannelError::CONNECT_ERROR));
778 CastSocketImpl::CastSocketMessageDelegate delegate(socket_.get()); 975 CastSocketImpl::CastSocketMessageDelegate delegate(socket_.get());
779 delegate.OnError(cast_channel::ChannelError::CONNECT_ERROR); 976 delegate.OnError(cast_channel::ChannelError::CONNECT_ERROR);
780 } 977 }
781 978
782 TEST_F(CastSocketTest, TestOpenChannelConnectingSocket) { 979 TEST_F(MockCastSocketTest, TestOpenChannelConnectingSocket) {
783 CreateCastSocketSecure(); 980 CreateCastSocketSecure();
784 socket_->SetupTcpConnectUnresponsive(); 981 socket_->SetupTcpConnectUnresponsive();
785 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 982 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
786 base::Unretained(&handler_))); 983 base::Unretained(&handler_)));
787 RunPendingTasks(); 984 RunPendingTasks();
788 985
789 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT)) 986 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_TIMEOUT))
790 .Times(2); 987 .Times(2);
791 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 988 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
792 base::Unretained(&handler_))); 989 base::Unretained(&handler_)));
793 socket_->TriggerTimeout(); 990 socket_->TriggerTimeout();
794 RunPendingTasks(); 991 RunPendingTasks();
795 } 992 }
796 993
797 TEST_F(CastSocketTest, TestOpenChannelConnectedSocket) { 994 TEST_F(MockCastSocketTest, TestOpenChannelConnectedSocket) {
798 CreateCastSocketSecure(); 995 CreateCastSocketSecure();
799 socket_->SetupTcpConnect(net::ASYNC, net::OK); 996 socket_->SetupTcpConnect(net::ASYNC, net::OK);
800 socket_->SetupSslConnect(net::ASYNC, net::OK); 997 socket_->SetupSslConnect(net::ASYNC, net::OK);
801 998
802 HandleAuthHandshake(); 999 HandleAuthHandshake();
803 1000
804 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE)); 1001 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE));
805 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 1002 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
806 base::Unretained(&handler_))); 1003 base::Unretained(&handler_)));
807 } 1004 }
808 1005
809 TEST_F(CastSocketTest, TestOpenChannelClosedSocket) { 1006 TEST_F(MockCastSocketTest, TestOpenChannelClosedSocket) {
810 CreateCastSocketSecure(); 1007 CreateCastSocketSecure();
811 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED); 1008 socket_->SetupTcpConnect(net::ASYNC, net::ERR_FAILED);
812 1009
813 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR)); 1010 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR));
814 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 1011 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
815 base::Unretained(&handler_))); 1012 base::Unretained(&handler_)));
816 RunPendingTasks(); 1013 RunPendingTasks();
817 1014
818 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR)); 1015 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::CONNECT_ERROR));
819 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, 1016 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete,
820 base::Unretained(&handler_))); 1017 base::Unretained(&handler_)));
821 } 1018 }
822 1019
1020 // Tests connecting through an actual non-mocked CastTransport object and
1021 // non-mocked SSLClientSocket, testing the components in integration.
1022 TEST_F(SslCastSocketTest, TestConnectEndToEndWithRealSSL) {
1023 CreateSockets();
1024 ConnectSockets();
1025
1026 // Set low-level auth challenge expectations.
1027 CastMessage challenge = CreateAuthChallenge();
1028 std::string challenge_str;
1029 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
1030
1031 int challenge_buffer_length = challenge_str.size();
1032 scoped_refptr<net::IOBuffer> challenge_buffer(
1033 new net::IOBuffer(challenge_buffer_length));
1034 int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
1035 server_socket_.get());
1036
1037 EXPECT_EQ(challenge_buffer_length, read);
1038 EXPECT_EQ(challenge_str,
1039 std::string(challenge_buffer->data(), challenge_buffer_length));
1040
1041 // Set low-level auth reply expectations.
1042 CastMessage reply = CreateAuthReply();
1043 std::string reply_str;
1044 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1045
1046 scoped_refptr<net::StringIOBuffer> reply_buffer(
1047 new net::StringIOBuffer(reply_str));
1048 int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
1049 server_socket_.get());
1050
1051 EXPECT_EQ(reply_buffer->size(), written);
1052 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE));
1053 RunPendingTasks();
1054
1055 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
1056 EXPECT_EQ(ChannelError::NONE, socket_->error_state());
1057 }
1058
1059 // Sends message data through an actual non-mocked CastTransport object and
1060 // non-mocked SSLClientSocket, testing the components in integration.
1061 TEST_F(SslCastSocketTest, TestMessageEndToEndWithRealSSL) {
1062 CreateSockets();
1063 ConnectSockets();
1064
1065 // Set low-level auth challenge expectations.
1066 CastMessage challenge = CreateAuthChallenge();
1067 std::string challenge_str;
1068 EXPECT_TRUE(MessageFramer::Serialize(challenge, &challenge_str));
1069
1070 int challenge_buffer_length = challenge_str.size();
1071 scoped_refptr<net::IOBuffer> challenge_buffer(
1072 new net::IOBuffer(challenge_buffer_length));
1073
1074 int read = ReadExactLength(challenge_buffer.get(), challenge_buffer_length,
1075 server_socket_.get());
1076
1077 EXPECT_EQ(challenge_buffer_length, read);
1078 EXPECT_EQ(challenge_str,
1079 std::string(challenge_buffer->data(), challenge_buffer_length));
1080
1081 // Set low-level auth reply expectations.
1082 CastMessage reply = CreateAuthReply();
1083 std::string reply_str;
1084 EXPECT_TRUE(MessageFramer::Serialize(reply, &reply_str));
1085
1086 scoped_refptr<net::StringIOBuffer> reply_buffer(
1087 new net::StringIOBuffer(reply_str));
1088 int written = WriteExactLength(reply_buffer.get(), reply_buffer->size(),
1089 server_socket_.get());
1090
1091 EXPECT_EQ(reply_buffer->size(), written);
1092 EXPECT_CALL(handler_, OnConnectComplete(_, ChannelError::NONE));
1093 RunPendingTasks();
1094
1095 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
1096 EXPECT_EQ(ChannelError::NONE, socket_->error_state());
1097
1098 // Send a test message through the ssl socket.
1099 CastMessage test_message = CreateTestMessage();
1100 std::string test_message_str;
1101 EXPECT_TRUE(MessageFramer::Serialize(test_message, &test_message_str));
1102
1103 int test_message_length = test_message_str.size();
1104 scoped_refptr<net::IOBuffer> test_message_buffer(
1105 new net::IOBuffer(test_message_length));
1106
1107 EXPECT_CALL(handler_, OnWriteComplete(net::OK));
1108 socket_->transport()->SendMessage(
1109 test_message, base::Bind(&CompleteHandler::OnWriteComplete,
1110 base::Unretained(&handler_)));
1111 RunPendingTasks();
1112
1113 read = ReadExactLength(test_message_buffer.get(), test_message_length,
1114 server_socket_.get());
1115
1116 EXPECT_EQ(test_message_length, read);
1117 EXPECT_EQ(test_message_str,
1118 std::string(test_message_buffer->data(), test_message_length));
1119
1120 EXPECT_EQ(ReadyState::OPEN, socket_->ready_state());
1121 EXPECT_EQ(ChannelError::NONE, socket_->error_state());
1122 }
1123
823 } // namespace cast_channel 1124 } // namespace cast_channel
OLDNEW
« no previous file with comments | « components/cast_channel/cast_socket.h ('k') | components/test/data/cast_channel/self_signed.pem » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698