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

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

Powered by Google App Engine
This is Rietveld 408576698