OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/extensions/api/cast_channel/cast_socket.h" | 5 #include "chrome/browser/extensions/api/cast_channel/cast_socket.h" |
6 | 6 |
7 #include "chrome/browser/extensions/api/cast_channel/cast_channel.pb.h" | 7 #include "chrome/browser/extensions/api/cast_channel/cast_channel.pb.h" |
8 #include "chrome/browser/extensions/api/cast_channel/cast_message_util.h" | 8 #include "chrome/browser/extensions/api/cast_channel/cast_message_util.h" |
9 #include "net/base/address_list.h" | 9 #include "net/base/address_list.h" |
10 #include "net/base/capturing_net_log.h" | 10 #include "net/base/capturing_net_log.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 CompleteHandler() {} | 73 CompleteHandler() {} |
74 MOCK_METHOD1(OnCloseComplete, void(int result)); | 74 MOCK_METHOD1(OnCloseComplete, void(int result)); |
75 MOCK_METHOD1(OnConnectComplete, void(int result)); | 75 MOCK_METHOD1(OnConnectComplete, void(int result)); |
76 MOCK_METHOD1(OnWriteComplete, void(int result)); | 76 MOCK_METHOD1(OnWriteComplete, void(int result)); |
77 private: | 77 private: |
78 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); | 78 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); |
79 }; | 79 }; |
80 | 80 |
81 class TestCastSocket : public CastSocket { | 81 class TestCastSocket : public CastSocket { |
82 public: | 82 public: |
83 explicit TestCastSocket(MockCastSocketDelegate* delegate) : | 83 static scoped_ptr<TestCastSocket> Create( |
84 CastSocket("abcdefg", GURL("cast://192.0.0.1:8009"), delegate, | 84 MockCastSocketDelegate* delegate) { |
| 85 return scoped_ptr<TestCastSocket>( |
| 86 new TestCastSocket(delegate, "cast://192.0.0.1:8009")); |
| 87 } |
| 88 |
| 89 static scoped_ptr<TestCastSocket> CreateSecure( |
| 90 MockCastSocketDelegate* delegate) { |
| 91 return scoped_ptr<TestCastSocket>( |
| 92 new TestCastSocket(delegate, "casts://192.0.0.1:8009")); |
| 93 } |
| 94 |
| 95 explicit TestCastSocket(MockCastSocketDelegate* delegate, |
| 96 const std::string& url) : |
| 97 CastSocket("abcdefg", GURL(url), delegate, |
85 &capturing_net_log_), | 98 &capturing_net_log_), |
86 mock_tcp_socket_(new MockTCPClientSocket()), | 99 mock_tcp_socket_(new MockTCPClientSocket()), |
87 mock_ssl_socket_(new MockSSLClientSocket()), | 100 mock_ssl_socket_(new MockSSLClientSocket()), |
88 owns_tcp_socket_(true), | 101 owns_tcp_socket_(true), |
89 owns_ssl_socket_(true), | 102 owns_ssl_socket_(true), |
90 extract_cert_result_(true) { | 103 extract_cert_result_(true), |
| 104 send_auth_challenge_result_(net::ERR_IO_PENDING), |
| 105 read_auth_challenge_reply_result_(net::ERR_IO_PENDING), |
| 106 challenge_reply_result_(true) { |
91 } | 107 } |
92 | 108 |
93 virtual ~TestCastSocket() { | 109 virtual ~TestCastSocket() { |
94 if (owns_tcp_socket_) { | 110 if (owns_tcp_socket_) { |
95 DCHECK(mock_tcp_socket_); | 111 DCHECK(mock_tcp_socket_); |
96 delete mock_tcp_socket_; | 112 delete mock_tcp_socket_; |
97 } | 113 } |
98 if (owns_ssl_socket_) { | 114 if (owns_ssl_socket_) { |
99 DCHECK(mock_ssl_socket_); | 115 DCHECK(mock_ssl_socket_); |
100 delete mock_ssl_socket_; | 116 delete mock_ssl_socket_; |
(...skipping 12 matching lines...) Expand all Loading... |
113 owns_tcp_socket_ = true; | 129 owns_tcp_socket_ = true; |
114 mock_tcp_socket_ = new MockTCPClientSocket(); | 130 mock_tcp_socket_ = new MockTCPClientSocket(); |
115 owns_ssl_socket_ = true; | 131 owns_ssl_socket_ = true; |
116 mock_ssl_socket_ = new MockSSLClientSocket(); | 132 mock_ssl_socket_ = new MockSSLClientSocket(); |
117 } | 133 } |
118 | 134 |
119 void SetExtractCertResult(bool value) { | 135 void SetExtractCertResult(bool value) { |
120 extract_cert_result_ = value; | 136 extract_cert_result_ = value; |
121 } | 137 } |
122 | 138 |
| 139 void SetSendAuthChallengeResult(int result) { |
| 140 send_auth_challenge_result_ = result; |
| 141 } |
| 142 |
| 143 void SetReadAuthChallengeReplyResult(int result) { |
| 144 read_auth_challenge_reply_result_ = result; |
| 145 } |
| 146 |
| 147 void SetChallengeReplyResult(bool value) { |
| 148 challenge_reply_result_ = value; |
| 149 } |
| 150 |
123 MockTCPClientSocket* mock_tcp_socket_; | 151 MockTCPClientSocket* mock_tcp_socket_; |
124 MockSSLClientSocket* mock_ssl_socket_; | 152 MockSSLClientSocket* mock_ssl_socket_; |
125 | 153 |
126 protected: | 154 protected: |
127 virtual scoped_ptr<net::TCPClientSocket> CreateTcpSocket() OVERRIDE { | 155 virtual scoped_ptr<net::TCPClientSocket> CreateTcpSocket() OVERRIDE { |
128 owns_tcp_socket_ = false; | 156 owns_tcp_socket_ = false; |
129 return scoped_ptr<net::TCPClientSocket>(mock_tcp_socket_); | 157 return scoped_ptr<net::TCPClientSocket>(mock_tcp_socket_); |
130 } | 158 } |
131 | 159 |
132 virtual scoped_ptr<net::SSLClientSocket> CreateSslSocket() OVERRIDE { | 160 virtual scoped_ptr<net::SSLClientSocket> CreateSslSocket() OVERRIDE { |
133 owns_ssl_socket_ = false; | 161 owns_ssl_socket_ = false; |
134 return scoped_ptr<net::SSLClientSocket>(mock_ssl_socket_); | 162 return scoped_ptr<net::SSLClientSocket>(mock_ssl_socket_); |
135 } | 163 } |
136 | 164 |
137 virtual bool ExtractPeerCert(std::string* cert) OVERRIDE { | 165 virtual bool ExtractPeerCert(std::string* cert) OVERRIDE { |
138 if (extract_cert_result_) | 166 if (extract_cert_result_) |
139 cert->assign("dummy_test_cert"); | 167 cert->assign("dummy_test_cert"); |
140 return extract_cert_result_; | 168 return extract_cert_result_; |
141 } | 169 } |
142 | 170 |
| 171 virtual int SendAuthChallenge() OVERRIDE { |
| 172 return send_auth_challenge_result_; |
| 173 } |
| 174 |
| 175 virtual int ReadAuthChallengeReply() OVERRIDE { |
| 176 return read_auth_challenge_reply_result_; |
| 177 } |
| 178 |
| 179 virtual bool VerifyChallengeReply() OVERRIDE { |
| 180 return challenge_reply_result_; |
| 181 } |
| 182 |
143 private: | 183 private: |
144 net::CapturingNetLog capturing_net_log_; | 184 net::CapturingNetLog capturing_net_log_; |
145 // Whether this object or the parent owns |mock_tcp_socket_|. | 185 // Whether this object or the parent owns |mock_tcp_socket_|. |
146 bool owns_tcp_socket_; | 186 bool owns_tcp_socket_; |
147 // Whether this object or the parent owns |mock_ssl_socket_|. | 187 // Whether this object or the parent owns |mock_ssl_socket_|. |
148 bool owns_ssl_socket_; | 188 bool owns_ssl_socket_; |
149 // Simulated result of peer cert extraction. | 189 // Simulated result of peer cert extraction. |
150 bool extract_cert_result_; | 190 bool extract_cert_result_; |
| 191 // Simulated result to be returned by SendAuthChallenge. |
| 192 int send_auth_challenge_result_; |
| 193 // Simulated result to be returned by ReadAuthChallengeReply. |
| 194 int read_auth_challenge_reply_result_; |
| 195 // Simulated result of verifying challenge reply. |
| 196 bool challenge_reply_result_; |
151 }; | 197 }; |
152 | 198 |
153 class CastSocketTest : public testing::Test { | 199 class CastSocketTest : public testing::Test { |
154 public: | 200 public: |
155 CastSocketTest() {} | 201 CastSocketTest() {} |
156 virtual ~CastSocketTest() {} | 202 virtual ~CastSocketTest() {} |
157 | 203 |
158 virtual void SetUp() OVERRIDE { | 204 virtual void SetUp() OVERRIDE { |
159 socket_.reset(new TestCastSocket(&mock_delegate_)); | |
160 test_message_.namespace_ = "urn:test"; | 205 test_message_.namespace_ = "urn:test"; |
161 test_message_.source_id = "1"; | 206 test_message_.source_id = "1"; |
162 test_message_.destination_id = "2"; | 207 test_message_.destination_id = "2"; |
163 test_message_.data.reset(new base::StringValue("Hello, World!")); | 208 test_message_.data.reset(new base::StringValue("Hello, World!")); |
164 ASSERT_TRUE(MessageInfoToCastMessage(test_message_, &test_proto_)); | 209 ASSERT_TRUE(MessageInfoToCastMessage(test_message_, &test_proto_)); |
165 } | 210 } |
166 | 211 |
167 virtual void TearDown() OVERRIDE { | 212 virtual void TearDown() OVERRIDE { |
168 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); | 213 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); |
169 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, | 214 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, |
170 base::Unretained(&handler_))); | 215 base::Unretained(&handler_))); |
171 } | 216 } |
172 | 217 |
173 // Sets an expectation on the TCP socket Connect method. Connect method is | 218 void CreateCastSocket() { |
174 // setup to return net::ERR_IO_PENDING and store the callback passed to it | 219 socket_ = TestCastSocket::Create(&mock_delegate_); |
175 // in |callback|. | 220 } |
176 void ExpectTCPConnect(net::CompletionCallback* callback) { | 221 |
| 222 void CreateCastSocketSecure() { |
| 223 socket_ = TestCastSocket::CreateSecure(&mock_delegate_); |
| 224 } |
| 225 |
| 226 // Sets an expectation that TCPClientSocket::Connect is called and |
| 227 // returns |result| and stores the callback passed to it in |callback|. |
| 228 void ExpectTcpConnect(net::CompletionCallback* callback, int result) { |
177 EXPECT_CALL(mock_tcp_socket(), Connect(A<const net::CompletionCallback&>())) | 229 EXPECT_CALL(mock_tcp_socket(), Connect(A<const net::CompletionCallback&>())) |
178 .Times(1) | 230 .Times(1) |
179 .WillOnce(DoAll(SaveArg<0>(callback), Return(net::ERR_IO_PENDING))); | 231 .WillOnce(DoAll(SaveArg<0>(callback), Return(result))); |
180 } | 232 } |
181 | 233 |
182 // Sets an expectation on the SSL socket Connect method. Connect method is | 234 // Same as ExpectTcpConnect but to return net::ERR_IO_PENDING. |
183 // setup to return net::ERR_IO_PENDING and store the callback passed to it | 235 void ExpectTcpConnectPending(net::CompletionCallback* callback) { |
184 // in |callback|. | 236 ExpectTcpConnect(callback, net::ERR_IO_PENDING); |
185 void ExpectSSLConnect(net::CompletionCallback* callback) { | 237 } |
| 238 |
| 239 // Sets an expectation that SSLClientSocket::Connect is called and |
| 240 // returns |result| and stores the callback passed to it in |callback|. |
| 241 void ExpectSslConnect(net::CompletionCallback* callback, int result) { |
186 EXPECT_CALL(mock_ssl_socket(), Connect(A<const net::CompletionCallback&>())) | 242 EXPECT_CALL(mock_ssl_socket(), Connect(A<const net::CompletionCallback&>())) |
187 .Times(1) | 243 .Times(1) |
188 .WillOnce(DoAll(SaveArg<0>(callback), Return(net::ERR_IO_PENDING))); | 244 .WillOnce(DoAll(SaveArg<0>(callback), Return(result))); |
189 } | 245 } |
190 | 246 |
191 // Sets an expectation on the SSL socket Read method. Read method is setup | 247 // Same as ExpectSslConnect but to return net::ERR_IO_PENDING. |
192 // to return net::ERR_IO_PENDING and to be called |times| number of times. | 248 void ExpectSslConnectPending(net::CompletionCallback* callback) { |
193 void ExpectSSLRead(int times) { | 249 ExpectSslConnect(callback, net::ERR_IO_PENDING); |
| 250 } |
| 251 |
| 252 // Sets an expectation that SSLClientSocket::Read is called |times| number |
| 253 // of times and returns net::ERR_IO_PENDING. |
| 254 void ExpectSslRead(int times) { |
194 EXPECT_CALL(mock_ssl_socket(), Read(A<net::IOBuffer*>(), | 255 EXPECT_CALL(mock_ssl_socket(), Read(A<net::IOBuffer*>(), |
195 A<int>(), | 256 A<int>(), |
196 A<const net::CompletionCallback&>())) | 257 A<const net::CompletionCallback&>())) |
197 .Times(times) | 258 .Times(times) |
198 .WillOnce(Return(net::ERR_IO_PENDING)); | 259 .WillOnce(Return(net::ERR_IO_PENDING)); |
199 } | 260 } |
200 | 261 |
201 // Sets expectations when the socket is connected. Connecting the socket also | 262 // Sets up CastSocket::Connect to succeed. |
202 // starts the read loop; we expect the call to Read(), but never fire the read | 263 // Connecting the socket also starts the read loop; we expect the call to |
203 // callback. | 264 // Read(), but never fire the read callback. |
204 void ConnectHelper() { | 265 void ConnectHelper() { |
205 net::CompletionCallback connect_callback1; | 266 net::CompletionCallback connect_callback1; |
206 net::CompletionCallback connect_callback2; | 267 net::CompletionCallback connect_callback2; |
207 | 268 |
208 ExpectTCPConnect(&connect_callback1); | 269 ExpectTcpConnect(&connect_callback1, net::OK); |
209 ExpectSSLConnect(&connect_callback2); | 270 ExpectSslConnect(&connect_callback2, net::OK); |
210 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 271 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
211 ExpectSSLRead(1); | 272 ExpectSslRead(1); |
212 | 273 |
213 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 274 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
214 base::Unretained(&handler_))); | 275 base::Unretained(&handler_))); |
215 connect_callback1.Run(net::OK); | |
216 connect_callback2.Run(net::OK); | |
217 | 276 |
218 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 277 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
219 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 278 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
220 } | 279 } |
221 | 280 |
222 protected: | 281 protected: |
223 MockTCPClientSocket& mock_tcp_socket() { | 282 MockTCPClientSocket& mock_tcp_socket() { |
224 MockTCPClientSocket* mock_socket = socket_->mock_tcp_socket_; | 283 MockTCPClientSocket* mock_socket = socket_->mock_tcp_socket_; |
225 DCHECK(mock_socket); | 284 DCHECK(mock_socket); |
226 return *mock_socket; | 285 return *mock_socket; |
227 } | 286 } |
228 | 287 |
229 MockSSLClientSocket& mock_ssl_socket() { | 288 MockSSLClientSocket& mock_ssl_socket() { |
230 MockSSLClientSocket* mock_socket = socket_->mock_ssl_socket_; | 289 MockSSLClientSocket* mock_socket = socket_->mock_ssl_socket_; |
231 DCHECK(mock_socket); | 290 DCHECK(mock_socket); |
232 return *mock_socket; | 291 return *mock_socket; |
233 } | 292 } |
234 | 293 |
| 294 void CallOnChallengeEvent(int result) { |
| 295 socket_->OnChallengeEvent(result); |
| 296 } |
| 297 |
235 MockCastSocketDelegate mock_delegate_; | 298 MockCastSocketDelegate mock_delegate_; |
236 scoped_ptr<TestCastSocket> socket_; | 299 scoped_ptr<TestCastSocket> socket_; |
237 CompleteHandler handler_; | 300 CompleteHandler handler_; |
238 MessageInfo test_message_; | 301 MessageInfo test_message_; |
239 CastMessage test_proto_; | 302 CastMessage test_proto_; |
240 }; | 303 }; |
241 | 304 |
242 // Tests URL parsing and validation. | 305 // Tests URL parsing and validation. |
243 TEST_F(CastSocketTest, TestCastURLs) { | 306 TEST_F(CastSocketTest, TestCastURLs) { |
| 307 CreateCastSocket(); |
244 EXPECT_TRUE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:8009"))); | 308 EXPECT_TRUE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:8009"))); |
245 EXPECT_FALSE(socket_->is_secure_); | 309 EXPECT_FALSE(socket_->is_secure_); |
246 EXPECT_EQ(socket_->ip_endpoint_.ToString(), "192.0.0.1:8009"); | 310 EXPECT_EQ(socket_->ip_endpoint_.ToString(), "192.0.0.1:8009"); |
247 | 311 |
248 EXPECT_TRUE(socket_->ParseChannelUrl(GURL("casts://192.0.0.1:12345"))); | 312 EXPECT_TRUE(socket_->ParseChannelUrl(GURL("casts://192.0.0.1:12345"))); |
249 EXPECT_TRUE(socket_->is_secure_); | 313 EXPECT_TRUE(socket_->is_secure_); |
250 EXPECT_EQ(socket_->ip_endpoint_.ToString(), "192.0.0.1:12345"); | 314 EXPECT_EQ(socket_->ip_endpoint_.ToString(), "192.0.0.1:12345"); |
251 | 315 |
252 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("http://192.0.0.1:12345"))); | 316 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("http://192.0.0.1:12345"))); |
253 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:192.0.0.1:12345"))); | 317 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:192.0.0.1:12345"))); |
254 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:///192.0.0.1:12345"))); | 318 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:///192.0.0.1:12345"))); |
255 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://:12345"))); | 319 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://:12345"))); |
256 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://abcd:8009"))); | 320 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://abcd:8009"))); |
257 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:abcd"))); | 321 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:abcd"))); |
258 EXPECT_FALSE(socket_->ParseChannelUrl(GURL(""))); | 322 EXPECT_FALSE(socket_->ParseChannelUrl(GURL(""))); |
259 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("foo"))); | 323 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("foo"))); |
260 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:"))); | 324 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:"))); |
261 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast::"))); | 325 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast::"))); |
262 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1"))); | 326 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1"))); |
263 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://:"))); | 327 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://:"))); |
264 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:"))); | 328 EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:"))); |
265 } | 329 } |
266 | 330 |
267 // Tests connecting and closing the socket. | 331 // Tests connecting and closing the socket. |
268 TEST_F(CastSocketTest, TestConnectAndClose) { | 332 TEST_F(CastSocketTest, TestConnectAndClose) { |
| 333 CreateCastSocket(); |
269 ConnectHelper(); | 334 ConnectHelper(); |
270 | 335 |
271 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); | 336 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); |
272 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, | 337 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, |
273 base::Unretained(&handler_))); | 338 base::Unretained(&handler_))); |
274 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 339 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
275 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 340 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
276 } | 341 } |
277 | 342 |
278 // Test that when first connection attempt fails with certificate authority | 343 // Tests that the following connection flow works: |
279 // invalid error, a second connection attempt is made with peer cert | 344 // - TCP connection succeeds (async) |
280 // whitelisted. | 345 // - SSL connection succeeds (async) |
| 346 TEST_F(CastSocketTest, TestConnect) { |
| 347 CreateCastSocket(); |
| 348 |
| 349 net::CompletionCallback connect_callback1; |
| 350 net::CompletionCallback connect_callback2; |
| 351 |
| 352 ExpectTcpConnectPending(&connect_callback1); |
| 353 ExpectSslConnectPending(&connect_callback2); |
| 354 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 355 ExpectSslRead(1); |
| 356 |
| 357 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 358 base::Unretained(&handler_))); |
| 359 connect_callback1.Run(net::OK); |
| 360 connect_callback2.Run(net::OK); |
| 361 |
| 362 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 363 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 364 } |
| 365 |
| 366 // Test that the following connection flow works: |
| 367 // - TCP connection succeeds (async) |
| 368 // - SSL connection fails with cert error (async) |
| 369 // - Cert is extracted successfully |
| 370 // - Second TCP connection succeeds (async) |
| 371 // - Second SSL connection succeeds (async) |
281 TEST_F(CastSocketTest, TestTwoStepConnect) { | 372 TEST_F(CastSocketTest, TestTwoStepConnect) { |
| 373 CreateCastSocket(); |
| 374 |
282 // Expectations for the initial connect call | 375 // Expectations for the initial connect call |
283 net::CompletionCallback tcp_connect_callback1; | 376 net::CompletionCallback tcp_connect_callback1; |
284 net::CompletionCallback ssl_connect_callback1; | 377 net::CompletionCallback ssl_connect_callback1; |
285 | 378 |
286 ExpectTCPConnect(&tcp_connect_callback1); | 379 ExpectTcpConnectPending(&tcp_connect_callback1); |
287 ExpectSSLConnect(&ssl_connect_callback1); | 380 ExpectSslConnectPending(&ssl_connect_callback1); |
288 | 381 |
289 // Start connect flow | 382 // Start connect flow |
290 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 383 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
291 base::Unretained(&handler_))); | 384 base::Unretained(&handler_))); |
292 tcp_connect_callback1.Run(net::OK); | 385 tcp_connect_callback1.Run(net::OK); |
293 | 386 |
294 // Expectations for the second connect call | 387 // Expectations for the second connect call |
295 socket_->CreateNewSockets(); | 388 socket_->CreateNewSockets(); |
296 net::CompletionCallback tcp_connect_callback2; | 389 net::CompletionCallback tcp_connect_callback2; |
297 net::CompletionCallback ssl_connect_callback2; | 390 net::CompletionCallback ssl_connect_callback2; |
298 ExpectTCPConnect(&tcp_connect_callback2); | 391 ExpectTcpConnectPending(&tcp_connect_callback2); |
299 ExpectSSLConnect(&ssl_connect_callback2); | 392 ExpectSslConnectPending(&ssl_connect_callback2); |
300 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); | 393 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
301 ExpectSSLRead(1); | 394 ExpectSslRead(1); |
302 | 395 |
303 // Trigger callbacks for the first connect | 396 // Trigger callbacks for the first connect |
304 ssl_connect_callback1.Run(net::ERR_CERT_AUTHORITY_INVALID); | 397 ssl_connect_callback1.Run(net::ERR_CERT_AUTHORITY_INVALID); |
305 | 398 |
306 // Trigger callbacks for the second connect | 399 // Trigger callbacks for the second connect |
307 tcp_connect_callback2.Run(net::OK); | 400 tcp_connect_callback2.Run(net::OK); |
308 ssl_connect_callback2.Run(net::OK); | 401 ssl_connect_callback2.Run(net::OK); |
309 | 402 |
310 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 403 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
311 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 404 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
312 } | 405 } |
313 | 406 |
314 // Test that connection will be attempted a maximum of 2 times even if the | 407 // Test that the following connection flow works: |
315 // second attempt also returns certificate authority invalid error. | 408 // - TCP connection succeeds (async) |
| 409 // - SSL connection fails with cert error (async) |
| 410 // - Cert is extracted successfully |
| 411 // - Second TCP connection succeeds (async) |
| 412 // - Second SSL connection fails (async) |
| 413 // - The flow should NOT be tried again |
316 TEST_F(CastSocketTest, TestMaxTwoConnectAttempts) { | 414 TEST_F(CastSocketTest, TestMaxTwoConnectAttempts) { |
| 415 CreateCastSocket(); |
| 416 |
317 net::CompletionCallback tcp_connect_callback1; | 417 net::CompletionCallback tcp_connect_callback1; |
318 net::CompletionCallback ssl_connect_callback1; | 418 net::CompletionCallback ssl_connect_callback1; |
319 | 419 |
320 // Expectations for the initial connect call | 420 // Expectations for the initial connect call |
321 ExpectTCPConnect(&tcp_connect_callback1); | 421 ExpectTcpConnectPending(&tcp_connect_callback1); |
322 ExpectSSLConnect(&ssl_connect_callback1); | 422 ExpectSslConnectPending(&ssl_connect_callback1); |
323 | 423 |
324 // Start connect flow | 424 // Start connect flow |
325 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 425 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
326 base::Unretained(&handler_))); | 426 base::Unretained(&handler_))); |
327 tcp_connect_callback1.Run(net::OK); | 427 tcp_connect_callback1.Run(net::OK); |
328 | 428 |
329 socket_->CreateNewSockets(); | 429 socket_->CreateNewSockets(); |
330 net::CompletionCallback tcp_connect_callback2; | 430 net::CompletionCallback tcp_connect_callback2; |
331 net::CompletionCallback ssl_connect_callback2; | 431 net::CompletionCallback ssl_connect_callback2; |
332 | 432 |
333 // Expectations for the second connect call | 433 // Expectations for the second connect call |
334 ExpectTCPConnect(&tcp_connect_callback2); | 434 ExpectTcpConnectPending(&tcp_connect_callback2); |
335 ExpectSSLConnect(&ssl_connect_callback2); | 435 ExpectSslConnectPending(&ssl_connect_callback2); |
336 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); | 436 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); |
337 | 437 |
338 // Trigger callbacks for the first connect | 438 // Trigger callbacks for the first connect |
339 ssl_connect_callback1.Run(net::ERR_CERT_AUTHORITY_INVALID); | 439 ssl_connect_callback1.Run(net::ERR_CERT_AUTHORITY_INVALID); |
340 | 440 |
341 // Trigger callbacks for the second connect | 441 // Trigger callbacks for the second connect |
342 tcp_connect_callback2.Run(net::OK); | 442 tcp_connect_callback2.Run(net::OK); |
343 ssl_connect_callback2.Run(net::ERR_CERT_AUTHORITY_INVALID); | 443 ssl_connect_callback2.Run(net::ERR_CERT_AUTHORITY_INVALID); |
344 | 444 |
345 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 445 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
346 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 446 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
347 } | 447 } |
348 | 448 |
| 449 // Test that when cert extraction fails the connection flow stops. |
349 TEST_F(CastSocketTest, TestCertExtractionFailure) { | 450 TEST_F(CastSocketTest, TestCertExtractionFailure) { |
| 451 CreateCastSocket(); |
| 452 |
350 net::CompletionCallback connect_callback1; | 453 net::CompletionCallback connect_callback1; |
351 net::CompletionCallback connect_callback2; | 454 net::CompletionCallback connect_callback2; |
352 | 455 |
353 ExpectTCPConnect(&connect_callback1); | 456 ExpectTcpConnectPending(&connect_callback1); |
354 ExpectSSLConnect(&connect_callback2); | 457 ExpectSslConnectPending(&connect_callback2); |
355 | 458 |
356 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, | 459 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
357 base::Unretained(&handler_))); | 460 base::Unretained(&handler_))); |
358 connect_callback1.Run(net::OK); | 461 connect_callback1.Run(net::OK); |
359 | 462 |
360 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); | 463 EXPECT_CALL(handler_, OnConnectComplete(net::ERR_CERT_AUTHORITY_INVALID)); |
361 | 464 |
362 // Set cert extraction to fail | 465 // Set cert extraction to fail |
363 socket_->SetExtractCertResult(false); | 466 socket_->SetExtractCertResult(false); |
364 // Attempt to connect results in ERR_CERT_AUTHORTY_INVALID | 467 // Attempt to connect results in ERR_CERT_AUTHORTY_INVALID |
365 connect_callback2.Run(net::ERR_CERT_AUTHORITY_INVALID); | 468 connect_callback2.Run(net::ERR_CERT_AUTHORITY_INVALID); |
366 | 469 |
367 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 470 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
368 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); | 471 EXPECT_EQ(cast_channel::CHANNEL_ERROR_CONNECT_ERROR, socket_->error_state()); |
369 } | 472 } |
370 | 473 |
| 474 // Tests that the following connection flow works: |
| 475 // - TCP connection succeeds (async) |
| 476 // - SSL connection fails with cert error (async) |
| 477 // - Cert is extracted successfully |
| 478 // - Second TCP connection succeeds (async) |
| 479 // - Second SSL connection succeeds (async) |
| 480 // - Challenge request is sent (async) |
| 481 // - Challenge response is received (async) |
| 482 // - Credentials are verified successfuly |
| 483 TEST_F(CastSocketTest, TestFullSecureConnectionFlowAsync) { |
| 484 CreateCastSocketSecure(); |
| 485 |
| 486 net::CompletionCallback tcp_connect_callback1; |
| 487 net::CompletionCallback ssl_connect_callback1; |
| 488 |
| 489 // Expectations for the initial connect call |
| 490 ExpectTcpConnectPending(&tcp_connect_callback1); |
| 491 ExpectSslConnectPending(&ssl_connect_callback1); |
| 492 |
| 493 // Start connect flow |
| 494 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 495 base::Unretained(&handler_))); |
| 496 tcp_connect_callback1.Run(net::OK); |
| 497 |
| 498 socket_->CreateNewSockets(); |
| 499 net::CompletionCallback tcp_connect_callback2; |
| 500 net::CompletionCallback ssl_connect_callback2; |
| 501 |
| 502 // Expectations for the second connect call |
| 503 ExpectTcpConnectPending(&tcp_connect_callback2); |
| 504 ExpectSslConnectPending(&ssl_connect_callback2); |
| 505 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 506 ExpectSslRead(1); |
| 507 |
| 508 // Trigger callbacks for the first connect |
| 509 ssl_connect_callback1.Run(net::ERR_CERT_AUTHORITY_INVALID); |
| 510 |
| 511 // Trigger callbacks for the second connect |
| 512 tcp_connect_callback2.Run(net::OK); |
| 513 ssl_connect_callback2.Run(net::OK); |
| 514 |
| 515 // Trigger callbacks for auth events. |
| 516 CallOnChallengeEvent(net::OK); // Sent challenge |
| 517 CallOnChallengeEvent(net::OK); // Received reply |
| 518 |
| 519 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 520 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 521 } |
| 522 |
| 523 // Same as TestFullSecureConnectionFlowAsync, but operations are synchronous. |
| 524 TEST_F(CastSocketTest, TestFullSecureConnectionFlowSync) { |
| 525 CreateCastSocketSecure(); |
| 526 |
| 527 net::CompletionCallback tcp_connect_callback; |
| 528 net::CompletionCallback ssl_connect_callback; |
| 529 |
| 530 // Expectations for the connect calls |
| 531 ExpectTcpConnect(&tcp_connect_callback, net::OK); |
| 532 ExpectSslConnect(&ssl_connect_callback, net::OK); |
| 533 EXPECT_CALL(handler_, OnConnectComplete(net::OK)); |
| 534 ExpectSslRead(1); |
| 535 |
| 536 socket_->SetSendAuthChallengeResult(net::OK); |
| 537 socket_->SetReadAuthChallengeReplyResult(net::OK); |
| 538 |
| 539 // Start connect flow |
| 540 socket_->Connect(base::Bind(&CompleteHandler::OnConnectComplete, |
| 541 base::Unretained(&handler_))); |
| 542 |
| 543 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
| 544 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
| 545 } |
| 546 |
371 // Tests writing a single message where the completion is signaled via | 547 // Tests writing a single message where the completion is signaled via |
372 // callback. | 548 // callback. |
373 TEST_F(CastSocketTest, TestWriteViaCallback) { | 549 TEST_F(CastSocketTest, TestWriteViaCallback) { |
| 550 CreateCastSocket(); |
374 ConnectHelper(); | 551 ConnectHelper(); |
| 552 |
375 net::CompletionCallback write_callback; | 553 net::CompletionCallback write_callback; |
376 | 554 |
377 EXPECT_CALL(mock_ssl_socket(), | 555 EXPECT_CALL(mock_ssl_socket(), |
378 Write(A<net::IOBuffer*>(), | 556 Write(A<net::IOBuffer*>(), |
379 39, | 557 39, |
380 A<const net::CompletionCallback&>())) | 558 A<const net::CompletionCallback&>())) |
381 .Times(1) | 559 .Times(1) |
382 .WillOnce(DoAll(SaveArg<2>(&write_callback), | 560 .WillOnce(DoAll(SaveArg<2>(&write_callback), |
383 Return(net::ERR_IO_PENDING))); | 561 Return(net::ERR_IO_PENDING))); |
384 EXPECT_CALL(handler_, OnWriteComplete(39)); | 562 EXPECT_CALL(handler_, OnWriteComplete(39)); |
385 socket_->SendMessage(test_message_, | 563 socket_->SendMessage(test_message_, |
386 base::Bind(&CompleteHandler::OnWriteComplete, | 564 base::Bind(&CompleteHandler::OnWriteComplete, |
387 base::Unretained(&handler_))); | 565 base::Unretained(&handler_))); |
388 write_callback.Run(39); | 566 write_callback.Run(39); |
389 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 567 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
390 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 568 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
391 } | 569 } |
392 | 570 |
393 // Tests writing a single message where the Write() returns directly. | 571 // Tests writing a single message where the Write() returns directly. |
394 TEST_F(CastSocketTest, TestWrite) { | 572 TEST_F(CastSocketTest, TestWrite) { |
| 573 CreateCastSocket(); |
395 ConnectHelper(); | 574 ConnectHelper(); |
396 | 575 |
397 EXPECT_CALL(mock_ssl_socket(), | 576 EXPECT_CALL(mock_ssl_socket(), |
398 Write(A<net::IOBuffer*>(), | 577 Write(A<net::IOBuffer*>(), |
399 39, | 578 39, |
400 A<const net::CompletionCallback&>())) | 579 A<const net::CompletionCallback&>())) |
401 .Times(1) | 580 .Times(1) |
402 .WillOnce(Return(39)); | 581 .WillOnce(Return(39)); |
403 EXPECT_CALL(handler_, OnWriteComplete(39)); | 582 EXPECT_CALL(handler_, OnWriteComplete(39)); |
404 socket_->SendMessage(test_message_, | 583 socket_->SendMessage(test_message_, |
405 base::Bind(&CompleteHandler::OnWriteComplete, | 584 base::Bind(&CompleteHandler::OnWriteComplete, |
406 base::Unretained(&handler_))); | 585 base::Unretained(&handler_))); |
407 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 586 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
408 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 587 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
409 } | 588 } |
410 | 589 |
411 // Tests writing multiple messages. | 590 // Tests writing multiple messages. |
412 TEST_F(CastSocketTest, TestWriteMany) { | 591 TEST_F(CastSocketTest, TestWriteMany) { |
| 592 CreateCastSocket(); |
413 ConnectHelper(); | 593 ConnectHelper(); |
414 std::string messages[4]; | 594 std::string messages[4]; |
415 messages[0] = "Hello, World!"; | 595 messages[0] = "Hello, World!"; |
416 messages[1] = "Goodbye, World!"; | 596 messages[1] = "Goodbye, World!"; |
417 messages[2] = "Hello, Sky!"; | 597 messages[2] = "Hello, Sky!"; |
418 messages[3] = "Goodbye, Volcano!"; | 598 messages[3] = "Goodbye, Volcano!"; |
419 int sizes[4] = {39, 41, 37, 43}; | 599 int sizes[4] = {39, 41, 37, 43}; |
420 MessageInfo message_info[4]; | 600 MessageInfo message_info[4]; |
421 net::CompletionCallback write_callback; | 601 net::CompletionCallback write_callback; |
422 | 602 |
(...skipping 18 matching lines...) Expand all Loading... |
441 } | 621 } |
442 for (int i = 0; i < 4; i++) { | 622 for (int i = 0; i < 4; i++) { |
443 write_callback.Run(sizes[i]); | 623 write_callback.Run(sizes[i]); |
444 } | 624 } |
445 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 625 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
446 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 626 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
447 } | 627 } |
448 | 628 |
449 // Tests error on writing. | 629 // Tests error on writing. |
450 TEST_F(CastSocketTest, TestWriteError) { | 630 TEST_F(CastSocketTest, TestWriteError) { |
| 631 CreateCastSocket(); |
451 ConnectHelper(); | 632 ConnectHelper(); |
452 net::CompletionCallback write_callback; | 633 net::CompletionCallback write_callback; |
453 | 634 |
454 EXPECT_CALL(mock_ssl_socket(), | 635 EXPECT_CALL(mock_ssl_socket(), |
455 Write(A<net::IOBuffer*>(), | 636 Write(A<net::IOBuffer*>(), |
456 39, | 637 39, |
457 A<const net::CompletionCallback&>())) | 638 A<const net::CompletionCallback&>())) |
458 .Times(1) | 639 .Times(1) |
459 .WillOnce(DoAll(SaveArg<2>(&write_callback), | 640 .WillOnce(DoAll(SaveArg<2>(&write_callback), |
460 Return(net::ERR_SOCKET_NOT_CONNECTED))); | 641 Return(net::ERR_SOCKET_NOT_CONNECTED))); |
461 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_SOCKET_NOT_CONNECTED)); | 642 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_SOCKET_NOT_CONNECTED)); |
462 EXPECT_CALL(mock_delegate_, | 643 EXPECT_CALL(mock_delegate_, |
463 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); | 644 OnError(socket_.get(), cast_channel::CHANNEL_ERROR_SOCKET_ERROR)); |
464 socket_->SendMessage(test_message_, | 645 socket_->SendMessage(test_message_, |
465 base::Bind(&CompleteHandler::OnWriteComplete, | 646 base::Bind(&CompleteHandler::OnWriteComplete, |
466 base::Unretained(&handler_))); | 647 base::Unretained(&handler_))); |
467 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 648 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
468 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 649 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
469 } | 650 } |
470 | 651 |
471 // Tests reading a single message. | 652 // Tests reading a single message. |
472 TEST_F(CastSocketTest, TestRead) { | 653 TEST_F(CastSocketTest, TestRead) { |
| 654 CreateCastSocket(); |
| 655 |
473 net::CompletionCallback connect_callback1; | 656 net::CompletionCallback connect_callback1; |
474 net::CompletionCallback connect_callback2; | 657 net::CompletionCallback connect_callback2; |
475 net::CompletionCallback read_callback; | 658 net::CompletionCallback read_callback; |
476 | 659 |
477 std::string message_data; | 660 std::string message_data; |
478 ASSERT_TRUE(CastSocket::Serialize(test_proto_, &message_data)); | 661 ASSERT_TRUE(CastSocket::Serialize(test_proto_, &message_data)); |
479 | 662 |
480 EXPECT_CALL(mock_tcp_socket(), Connect(A<const net::CompletionCallback&>())) | 663 EXPECT_CALL(mock_tcp_socket(), Connect(A<const net::CompletionCallback&>())) |
481 .Times(1) | 664 .Times(1) |
482 .WillOnce(DoAll(SaveArg<0>(&connect_callback1), | 665 .WillOnce(DoAll(SaveArg<0>(&connect_callback1), |
(...skipping 28 matching lines...) Expand all Loading... |
511 memcpy(socket_->body_read_buffer_->StartOfBuffer(), | 694 memcpy(socket_->body_read_buffer_->StartOfBuffer(), |
512 message_data.c_str() + 4, 35); | 695 message_data.c_str() + 4, 35); |
513 read_callback.Run(35); | 696 read_callback.Run(35); |
514 | 697 |
515 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 698 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
516 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 699 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
517 } | 700 } |
518 | 701 |
519 // Tests reading multiple messages. | 702 // Tests reading multiple messages. |
520 TEST_F(CastSocketTest, TestReadMany) { | 703 TEST_F(CastSocketTest, TestReadMany) { |
| 704 CreateCastSocket(); |
| 705 |
521 net::CompletionCallback connect_callback1; | 706 net::CompletionCallback connect_callback1; |
522 net::CompletionCallback connect_callback2; | 707 net::CompletionCallback connect_callback2; |
523 net::CompletionCallback read_callback; | 708 net::CompletionCallback read_callback; |
524 | 709 |
525 std::string messages[4]; | 710 std::string messages[4]; |
526 messages[0] = "Hello, World!"; | 711 messages[0] = "Hello, World!"; |
527 messages[1] = "Goodbye, World!"; | 712 messages[1] = "Goodbye, World!"; |
528 messages[2] = "Hello, Sky!"; | 713 messages[2] = "Hello, Sky!"; |
529 messages[3] = "Goodbye, Volcano!"; | 714 messages[3] = "Goodbye, Volcano!"; |
530 int sizes[4] = {35, 37, 33, 39}; | 715 int sizes[4] = {35, 37, 33, 39}; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 message_data[i].c_str() + 4, sizes[i]); | 758 message_data[i].c_str() + 4, sizes[i]); |
574 read_callback.Run(sizes[i]); | 759 read_callback.Run(sizes[i]); |
575 } | 760 } |
576 | 761 |
577 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); | 762 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); |
578 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); | 763 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); |
579 } | 764 } |
580 | 765 |
581 // Tests error on reading. | 766 // Tests error on reading. |
582 TEST_F(CastSocketTest, TestReadError) { | 767 TEST_F(CastSocketTest, TestReadError) { |
| 768 CreateCastSocket(); |
| 769 |
583 net::CompletionCallback connect_callback1; | 770 net::CompletionCallback connect_callback1; |
584 net::CompletionCallback connect_callback2; | 771 net::CompletionCallback connect_callback2; |
585 net::CompletionCallback read_callback; | 772 net::CompletionCallback read_callback; |
586 | 773 |
587 EXPECT_CALL(mock_tcp_socket(), Connect(A<const net::CompletionCallback&>())) | 774 EXPECT_CALL(mock_tcp_socket(), Connect(A<const net::CompletionCallback&>())) |
588 .Times(1) | 775 .Times(1) |
589 .WillOnce(DoAll(SaveArg<0>(&connect_callback1), | 776 .WillOnce(DoAll(SaveArg<0>(&connect_callback1), |
590 Return(net::ERR_IO_PENDING))); | 777 Return(net::ERR_IO_PENDING))); |
591 EXPECT_CALL(mock_ssl_socket(), Connect(A<const net::CompletionCallback&>())) | 778 EXPECT_CALL(mock_ssl_socket(), Connect(A<const net::CompletionCallback&>())) |
592 .Times(1) | 779 .Times(1) |
(...skipping 17 matching lines...) Expand all Loading... |
610 // Cause an error. | 797 // Cause an error. |
611 read_callback.Run(net::ERR_SOCKET_NOT_CONNECTED); | 798 read_callback.Run(net::ERR_SOCKET_NOT_CONNECTED); |
612 | 799 |
613 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); | 800 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); |
614 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); | 801 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); |
615 } | 802 } |
616 | 803 |
617 } // namespace cast_channel | 804 } // namespace cast_channel |
618 } // namespace api | 805 } // namespace api |
619 } // namespace extensions | 806 } // namespace extensions |
OLD | NEW |