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

Side by Side Diff: net/socket_stream/socket_stream_unittest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/socket_stream/socket_stream.h" 5 #include "net/socket_stream/socket_stream.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 13 matching lines...) Expand all
24 #include "testing/platform_test.h" 24 #include "testing/platform_test.h"
25 25
26 using base::ASCIIToUTF16; 26 using base::ASCIIToUTF16;
27 27
28 namespace net { 28 namespace net {
29 29
30 namespace { 30 namespace {
31 31
32 struct SocketStreamEvent { 32 struct SocketStreamEvent {
33 enum EventType { 33 enum EventType {
34 EVENT_START_OPEN_CONNECTION, EVENT_CONNECTED, EVENT_SENT_DATA, 34 EVENT_START_OPEN_CONNECTION,
35 EVENT_RECEIVED_DATA, EVENT_CLOSE, EVENT_AUTH_REQUIRED, EVENT_ERROR, 35 EVENT_CONNECTED,
36 EVENT_SENT_DATA,
37 EVENT_RECEIVED_DATA,
38 EVENT_CLOSE,
39 EVENT_AUTH_REQUIRED,
40 EVENT_ERROR,
36 }; 41 };
37 42
38 SocketStreamEvent(EventType type, 43 SocketStreamEvent(EventType type,
39 SocketStream* socket_stream, 44 SocketStream* socket_stream,
40 int num, 45 int num,
41 const std::string& str, 46 const std::string& str,
42 AuthChallengeInfo* auth_challenge_info, 47 AuthChallengeInfo* auth_challenge_info,
43 int error) 48 int error)
44 : event_type(type), socket(socket_stream), number(num), data(str), 49 : event_type(type),
45 auth_info(auth_challenge_info), error_code(error) {} 50 socket(socket_stream),
51 number(num),
52 data(str),
53 auth_info(auth_challenge_info),
54 error_code(error) {}
46 55
47 EventType event_type; 56 EventType event_type;
48 SocketStream* socket; 57 SocketStream* socket;
49 int number; 58 int number;
50 std::string data; 59 std::string data;
51 scoped_refptr<AuthChallengeInfo> auth_info; 60 scoped_refptr<AuthChallengeInfo> auth_info;
52 int error_code; 61 int error_code;
53 }; 62 };
54 63
55 class SocketStreamEventRecorder : public SocketStream::Delegate { 64 class SocketStreamEventRecorder : public SocketStream::Delegate {
56 public: 65 public:
57 // |callback| will be run when the OnClose() or OnError() method is called. 66 // |callback| will be run when the OnClose() or OnError() method is called.
58 // For OnClose(), |callback| is called with OK. For OnError(), it's called 67 // For OnClose(), |callback| is called with OK. For OnError(), it's called
59 // with the error code. 68 // with the error code.
60 explicit SocketStreamEventRecorder(const CompletionCallback& callback) 69 explicit SocketStreamEventRecorder(const CompletionCallback& callback)
61 : callback_(callback) {} 70 : callback_(callback) {}
62 virtual ~SocketStreamEventRecorder() {} 71 virtual ~SocketStreamEventRecorder() {}
63 72
64 void SetOnStartOpenConnection( 73 void SetOnStartOpenConnection(
65 const base::Callback<int(SocketStreamEvent*)>& callback) { 74 const base::Callback<int(SocketStreamEvent*)>& callback) {
66 on_start_open_connection_ = callback; 75 on_start_open_connection_ = callback;
67 } 76 }
68 void SetOnConnected( 77 void SetOnConnected(
69 const base::Callback<void(SocketStreamEvent*)>& callback) { 78 const base::Callback<void(SocketStreamEvent*)>& callback) {
70 on_connected_ = callback; 79 on_connected_ = callback;
71 } 80 }
72 void SetOnSentData( 81 void SetOnSentData(const base::Callback<void(SocketStreamEvent*)>& callback) {
73 const base::Callback<void(SocketStreamEvent*)>& callback) {
74 on_sent_data_ = callback; 82 on_sent_data_ = callback;
75 } 83 }
76 void SetOnReceivedData( 84 void SetOnReceivedData(
77 const base::Callback<void(SocketStreamEvent*)>& callback) { 85 const base::Callback<void(SocketStreamEvent*)>& callback) {
78 on_received_data_ = callback; 86 on_received_data_ = callback;
79 } 87 }
80 void SetOnClose(const base::Callback<void(SocketStreamEvent*)>& callback) { 88 void SetOnClose(const base::Callback<void(SocketStreamEvent*)>& callback) {
81 on_close_ = callback; 89 on_close_ = callback;
82 } 90 }
83 void SetOnAuthRequired( 91 void SetOnAuthRequired(
84 const base::Callback<void(SocketStreamEvent*)>& callback) { 92 const base::Callback<void(SocketStreamEvent*)>& callback) {
85 on_auth_required_ = callback; 93 on_auth_required_ = callback;
86 } 94 }
87 void SetOnError(const base::Callback<void(SocketStreamEvent*)>& callback) { 95 void SetOnError(const base::Callback<void(SocketStreamEvent*)>& callback) {
88 on_error_ = callback; 96 on_error_ = callback;
89 } 97 }
90 98
91 virtual int OnStartOpenConnection( 99 virtual int OnStartOpenConnection(
92 SocketStream* socket, 100 SocketStream* socket,
93 const CompletionCallback& callback) OVERRIDE { 101 const CompletionCallback& callback) OVERRIDE {
94 connection_callback_ = callback; 102 connection_callback_ = callback;
95 events_.push_back( 103 events_.push_back(
96 SocketStreamEvent(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 104 SocketStreamEvent(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
97 socket, 0, std::string(), NULL, OK)); 105 socket,
106 0,
107 std::string(),
108 NULL,
109 OK));
98 if (!on_start_open_connection_.is_null()) 110 if (!on_start_open_connection_.is_null())
99 return on_start_open_connection_.Run(&events_.back()); 111 return on_start_open_connection_.Run(&events_.back());
100 return OK; 112 return OK;
101 } 113 }
102 virtual void OnConnected(SocketStream* socket, 114 virtual void OnConnected(SocketStream* socket,
103 int num_pending_send_allowed) OVERRIDE { 115 int num_pending_send_allowed) OVERRIDE {
104 events_.push_back( 116 events_.push_back(SocketStreamEvent(SocketStreamEvent::EVENT_CONNECTED,
105 SocketStreamEvent(SocketStreamEvent::EVENT_CONNECTED, 117 socket,
106 socket, num_pending_send_allowed, std::string(), 118 num_pending_send_allowed,
107 NULL, OK)); 119 std::string(),
120 NULL,
121 OK));
108 if (!on_connected_.is_null()) 122 if (!on_connected_.is_null())
109 on_connected_.Run(&events_.back()); 123 on_connected_.Run(&events_.back());
110 } 124 }
111 virtual void OnSentData(SocketStream* socket, 125 virtual void OnSentData(SocketStream* socket, int amount_sent) OVERRIDE {
112 int amount_sent) OVERRIDE { 126 events_.push_back(SocketStreamEvent(SocketStreamEvent::EVENT_SENT_DATA,
113 events_.push_back( 127 socket,
114 SocketStreamEvent(SocketStreamEvent::EVENT_SENT_DATA, socket, 128 amount_sent,
115 amount_sent, std::string(), NULL, OK)); 129 std::string(),
130 NULL,
131 OK));
116 if (!on_sent_data_.is_null()) 132 if (!on_sent_data_.is_null())
117 on_sent_data_.Run(&events_.back()); 133 on_sent_data_.Run(&events_.back());
118 } 134 }
119 virtual void OnReceivedData(SocketStream* socket, 135 virtual void OnReceivedData(SocketStream* socket,
120 const char* data, int len) OVERRIDE { 136 const char* data,
121 events_.push_back( 137 int len) OVERRIDE {
122 SocketStreamEvent(SocketStreamEvent::EVENT_RECEIVED_DATA, socket, len, 138 events_.push_back(SocketStreamEvent(SocketStreamEvent::EVENT_RECEIVED_DATA,
123 std::string(data, len), NULL, OK)); 139 socket,
140 len,
141 std::string(data, len),
142 NULL,
143 OK));
124 if (!on_received_data_.is_null()) 144 if (!on_received_data_.is_null())
125 on_received_data_.Run(&events_.back()); 145 on_received_data_.Run(&events_.back());
126 } 146 }
127 virtual void OnClose(SocketStream* socket) OVERRIDE { 147 virtual void OnClose(SocketStream* socket) OVERRIDE {
128 events_.push_back( 148 events_.push_back(SocketStreamEvent(
129 SocketStreamEvent(SocketStreamEvent::EVENT_CLOSE, socket, 0, 149 SocketStreamEvent::EVENT_CLOSE, socket, 0, std::string(), NULL, OK));
130 std::string(), NULL, OK));
131 if (!on_close_.is_null()) 150 if (!on_close_.is_null())
132 on_close_.Run(&events_.back()); 151 on_close_.Run(&events_.back());
133 if (!callback_.is_null()) 152 if (!callback_.is_null())
134 callback_.Run(OK); 153 callback_.Run(OK);
135 } 154 }
136 virtual void OnAuthRequired(SocketStream* socket, 155 virtual void OnAuthRequired(SocketStream* socket,
137 AuthChallengeInfo* auth_info) OVERRIDE { 156 AuthChallengeInfo* auth_info) OVERRIDE {
138 events_.push_back( 157 events_.push_back(SocketStreamEvent(SocketStreamEvent::EVENT_AUTH_REQUIRED,
139 SocketStreamEvent(SocketStreamEvent::EVENT_AUTH_REQUIRED, socket, 0, 158 socket,
140 std::string(), auth_info, OK)); 159 0,
160 std::string(),
161 auth_info,
162 OK));
141 if (!on_auth_required_.is_null()) 163 if (!on_auth_required_.is_null())
142 on_auth_required_.Run(&events_.back()); 164 on_auth_required_.Run(&events_.back());
143 } 165 }
144 virtual void OnError(const SocketStream* socket, int error) OVERRIDE { 166 virtual void OnError(const SocketStream* socket, int error) OVERRIDE {
145 events_.push_back( 167 events_.push_back(SocketStreamEvent(
146 SocketStreamEvent(SocketStreamEvent::EVENT_ERROR, NULL, 0, 168 SocketStreamEvent::EVENT_ERROR, NULL, 0, std::string(), NULL, error));
147 std::string(), NULL, error));
148 if (!on_error_.is_null()) 169 if (!on_error_.is_null())
149 on_error_.Run(&events_.back()); 170 on_error_.Run(&events_.back());
150 if (!callback_.is_null()) 171 if (!callback_.is_null())
151 callback_.Run(error); 172 callback_.Run(error);
152 } 173 }
153 174
154 void DoClose(SocketStreamEvent* event) { 175 void DoClose(SocketStreamEvent* event) { event->socket->Close(); }
155 event->socket->Close();
156 }
157 void DoRestartWithAuth(SocketStreamEvent* event) { 176 void DoRestartWithAuth(SocketStreamEvent* event) {
158 VLOG(1) << "RestartWithAuth username=" << credentials_.username() 177 VLOG(1) << "RestartWithAuth username=" << credentials_.username()
159 << " password=" << credentials_.password(); 178 << " password=" << credentials_.password();
160 event->socket->RestartWithAuth(credentials_); 179 event->socket->RestartWithAuth(credentials_);
161 } 180 }
162 void SetAuthInfo(const AuthCredentials& credentials) { 181 void SetAuthInfo(const AuthCredentials& credentials) {
163 credentials_ = credentials; 182 credentials_ = credentials;
164 } 183 }
165 // Wakes up the SocketStream waiting for completion of OnStartOpenConnection() 184 // Wakes up the SocketStream waiting for completion of OnStartOpenConnection()
166 // of its delegate. 185 // of its delegate.
167 void CompleteConnection(int result) { 186 void CompleteConnection(int result) { connection_callback_.Run(result); }
168 connection_callback_.Run(result);
169 }
170 187
171 const std::vector<SocketStreamEvent>& GetSeenEvents() const { 188 const std::vector<SocketStreamEvent>& GetSeenEvents() const {
172 return events_; 189 return events_;
173 } 190 }
174 191
175 private: 192 private:
176 std::vector<SocketStreamEvent> events_; 193 std::vector<SocketStreamEvent> events_;
177 base::Callback<int(SocketStreamEvent*)> on_start_open_connection_; 194 base::Callback<int(SocketStreamEvent*)> on_start_open_connection_;
178 base::Callback<void(SocketStreamEvent*)> on_connected_; 195 base::Callback<void(SocketStreamEvent*)> on_connected_;
179 base::Callback<void(SocketStreamEvent*)> on_sent_data_; 196 base::Callback<void(SocketStreamEvent*)> on_sent_data_;
(...skipping 27 matching lines...) Expand all
207 callback.Run(OK); 224 callback.Run(OK);
208 } 225 }
209 226
210 // This can't be passed in the constructor because this object needs to be 227 // This can't be passed in the constructor because this object needs to be
211 // created before SocketStream. 228 // created before SocketStream.
212 void set_socket_stream(const scoped_refptr<SocketStream>& socket_stream) { 229 void set_socket_stream(const scoped_refptr<SocketStream>& socket_stream) {
213 socket_stream_ = socket_stream; 230 socket_stream_ = socket_stream;
214 EXPECT_EQ(socket_stream_->delegate(), this); 231 EXPECT_EQ(socket_stream_->delegate(), this);
215 } 232 }
216 233
217 virtual void OnConnected(SocketStream* socket, int max_pending_send_allowed) 234 virtual void OnConnected(SocketStream* socket,
218 OVERRIDE { 235 int max_pending_send_allowed) OVERRIDE {
219 ADD_FAILURE() << "OnConnected() should not be called"; 236 ADD_FAILURE() << "OnConnected() should not be called";
220 } 237 }
221 virtual void OnSentData(SocketStream* socket, int amount_sent) OVERRIDE { 238 virtual void OnSentData(SocketStream* socket, int amount_sent) OVERRIDE {
222 ADD_FAILURE() << "OnSentData() should not be called"; 239 ADD_FAILURE() << "OnSentData() should not be called";
223 } 240 }
224 virtual void OnReceivedData(SocketStream* socket, const char* data, int len) 241 virtual void OnReceivedData(SocketStream* socket,
225 OVERRIDE { 242 const char* data,
243 int len) OVERRIDE {
226 ADD_FAILURE() << "OnReceivedData() should not be called"; 244 ADD_FAILURE() << "OnReceivedData() should not be called";
227 } 245 }
228 virtual void OnClose(SocketStream* socket) OVERRIDE { 246 virtual void OnClose(SocketStream* socket) OVERRIDE {
229 ADD_FAILURE() << "OnClose() should not be called"; 247 ADD_FAILURE() << "OnClose() should not be called";
230 } 248 }
231 249
232 private: 250 private:
233 scoped_refptr<SocketStream> socket_stream_; 251 scoped_refptr<SocketStream> socket_stream_;
234 const CompletionCallback callback_; 252 const CompletionCallback callback_;
235 253
236 DISALLOW_COPY_AND_ASSIGN(SelfDeletingDelegate); 254 DISALLOW_COPY_AND_ASSIGN(SelfDeletingDelegate);
237 }; 255 };
238 256
239 class TestURLRequestContextWithProxy : public TestURLRequestContext { 257 class TestURLRequestContextWithProxy : public TestURLRequestContext {
240 public: 258 public:
241 explicit TestURLRequestContextWithProxy(const std::string& proxy) 259 explicit TestURLRequestContextWithProxy(const std::string& proxy)
242 : TestURLRequestContext(true) { 260 : TestURLRequestContext(true) {
243 context_storage_.set_proxy_service(ProxyService::CreateFixed(proxy)); 261 context_storage_.set_proxy_service(ProxyService::CreateFixed(proxy));
244 Init(); 262 Init();
245 } 263 }
246 virtual ~TestURLRequestContextWithProxy() {} 264 virtual ~TestURLRequestContextWithProxy() {}
247 }; 265 };
248 266
249 class TestSocketStreamNetworkDelegate : public TestNetworkDelegate { 267 class TestSocketStreamNetworkDelegate : public TestNetworkDelegate {
250 public: 268 public:
251 TestSocketStreamNetworkDelegate() 269 TestSocketStreamNetworkDelegate() : before_connect_result_(OK) {}
252 : before_connect_result_(OK) {}
253 virtual ~TestSocketStreamNetworkDelegate() {} 270 virtual ~TestSocketStreamNetworkDelegate() {}
254 271
255 virtual int OnBeforeSocketStreamConnect( 272 virtual int OnBeforeSocketStreamConnect(
256 SocketStream* stream, 273 SocketStream* stream,
257 const CompletionCallback& callback) OVERRIDE { 274 const CompletionCallback& callback) OVERRIDE {
258 return before_connect_result_; 275 return before_connect_result_;
259 } 276 }
260 277
261 void SetBeforeConnectResult(int result) { 278 void SetBeforeConnectResult(int result) { before_connect_result_ = result; }
262 before_connect_result_ = result;
263 }
264 279
265 private: 280 private:
266 int before_connect_result_; 281 int before_connect_result_;
267 }; 282 };
268 283
269 } // namespace 284 } // namespace
270 285
271 class SocketStreamTest : public PlatformTest { 286 class SocketStreamTest : public PlatformTest {
272 public: 287 public:
273 virtual ~SocketStreamTest() {} 288 virtual ~SocketStreamTest() {}
274 virtual void SetUp() { 289 virtual void SetUp() {
275 mock_socket_factory_.reset(); 290 mock_socket_factory_.reset();
276 handshake_request_ = kWebSocketHandshakeRequest; 291 handshake_request_ = kWebSocketHandshakeRequest;
277 handshake_response_ = kWebSocketHandshakeResponse; 292 handshake_response_ = kWebSocketHandshakeResponse;
278 } 293 }
279 virtual void TearDown() { 294 virtual void TearDown() { mock_socket_factory_.reset(); }
280 mock_socket_factory_.reset();
281 }
282 295
283 virtual void SetWebSocketHandshakeMessage( 296 virtual void SetWebSocketHandshakeMessage(const char* request,
284 const char* request, const char* response) { 297 const char* response) {
285 handshake_request_ = request; 298 handshake_request_ = request;
286 handshake_response_ = response; 299 handshake_response_ = response;
287 } 300 }
288 virtual void AddWebSocketMessage(const std::string& message) { 301 virtual void AddWebSocketMessage(const std::string& message) {
289 messages_.push_back(message); 302 messages_.push_back(message);
290 } 303 }
291 304
292 virtual MockClientSocketFactory* GetMockClientSocketFactory() { 305 virtual MockClientSocketFactory* GetMockClientSocketFactory() {
293 mock_socket_factory_.reset(new MockClientSocketFactory); 306 mock_socket_factory_.reset(new MockClientSocketFactory);
294 return mock_socket_factory_.get(); 307 return mock_socket_factory_.get();
295 } 308 }
296 309
297 // Functions for SocketStreamEventRecorder to handle calls to the 310 // Functions for SocketStreamEventRecorder to handle calls to the
298 // SocketStream::Delegate methods from the SocketStream. 311 // SocketStream::Delegate methods from the SocketStream.
299 312
300 virtual void DoSendWebSocketHandshake(SocketStreamEvent* event) { 313 virtual void DoSendWebSocketHandshake(SocketStreamEvent* event) {
301 event->socket->SendData( 314 event->socket->SendData(handshake_request_.data(),
302 handshake_request_.data(), handshake_request_.size()); 315 handshake_request_.size());
303 } 316 }
304 317
305 virtual void DoCloseFlushPendingWriteTest(SocketStreamEvent* event) { 318 virtual void DoCloseFlushPendingWriteTest(SocketStreamEvent* event) {
306 // handshake response received. 319 // handshake response received.
307 for (size_t i = 0; i < messages_.size(); i++) { 320 for (size_t i = 0; i < messages_.size(); i++) {
308 std::vector<char> frame; 321 std::vector<char> frame;
309 frame.push_back('\0'); 322 frame.push_back('\0');
310 frame.insert(frame.end(), messages_[i].begin(), messages_[i].end()); 323 frame.insert(frame.end(), messages_[i].begin(), messages_[i].end());
311 frame.push_back('\xff'); 324 frame.push_back('\xff');
312 EXPECT_TRUE(event->socket->SendData(&frame[0], frame.size())); 325 EXPECT_TRUE(event->socket->SendData(&frame[0], frame.size()));
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 "8jKS'y:G*Co,Wxa-"; 400 "8jKS'y:G*Co,Wxa-";
388 401
389 TEST_F(SocketStreamTest, CloseFlushPendingWrite) { 402 TEST_F(SocketStreamTest, CloseFlushPendingWrite) {
390 TestCompletionCallback test_callback; 403 TestCompletionCallback test_callback;
391 404
392 scoped_ptr<SocketStreamEventRecorder> delegate( 405 scoped_ptr<SocketStreamEventRecorder> delegate(
393 new SocketStreamEventRecorder(test_callback.callback())); 406 new SocketStreamEventRecorder(test_callback.callback()));
394 delegate->SetOnConnected(base::Bind( 407 delegate->SetOnConnected(base::Bind(
395 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); 408 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this)));
396 delegate->SetOnReceivedData(base::Bind( 409 delegate->SetOnReceivedData(base::Bind(
397 &SocketStreamTest::DoCloseFlushPendingWriteTest, 410 &SocketStreamTest::DoCloseFlushPendingWriteTest, base::Unretained(this)));
398 base::Unretained(this)));
399 411
400 TestURLRequestContext context; 412 TestURLRequestContext context;
401 413
402 scoped_refptr<SocketStream> socket_stream( 414 scoped_refptr<SocketStream> socket_stream(new SocketStream(
403 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 415 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
404 &context, NULL));
405 416
406 MockWrite data_writes[] = { 417 MockWrite data_writes[] = {
407 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), 418 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest),
408 MockWrite(ASYNC, "\0message1\xff", 10), 419 MockWrite(ASYNC, "\0message1\xff", 10),
409 MockWrite(ASYNC, "\0message2\xff", 10) 420 MockWrite(ASYNC, "\0message2\xff", 10)};
410 };
411 MockRead data_reads[] = { 421 MockRead data_reads[] = {
412 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), 422 MockRead(SocketStreamTest::kWebSocketHandshakeResponse),
413 // Server doesn't close the connection after handshake. 423 // Server doesn't close the connection after handshake.
414 MockRead(ASYNC, ERR_IO_PENDING) 424 MockRead(ASYNC, ERR_IO_PENDING)};
415 };
416 AddWebSocketMessage("message1"); 425 AddWebSocketMessage("message1");
417 AddWebSocketMessage("message2"); 426 AddWebSocketMessage("message2");
418 427
419 DelayedSocketData data_provider( 428 DelayedSocketData data_provider(1,
420 1, data_reads, arraysize(data_reads), 429 data_reads,
421 data_writes, arraysize(data_writes)); 430 arraysize(data_reads),
431 data_writes,
432 arraysize(data_writes));
422 433
423 MockClientSocketFactory* mock_socket_factory = 434 MockClientSocketFactory* mock_socket_factory = GetMockClientSocketFactory();
424 GetMockClientSocketFactory();
425 mock_socket_factory->AddSocketDataProvider(&data_provider); 435 mock_socket_factory->AddSocketDataProvider(&data_provider);
426 436
427 socket_stream->SetClientSocketFactory(mock_socket_factory); 437 socket_stream->SetClientSocketFactory(mock_socket_factory);
428 438
429 socket_stream->Connect(); 439 socket_stream->Connect();
430 440
431 test_callback.WaitForResult(); 441 test_callback.WaitForResult();
432 442
433 EXPECT_TRUE(data_provider.at_read_eof()); 443 EXPECT_TRUE(data_provider.at_read_eof());
434 EXPECT_TRUE(data_provider.at_write_eof()); 444 EXPECT_TRUE(data_provider.at_write_eof());
(...skipping 12 matching lines...) Expand all
447 } 457 }
448 458
449 TEST_F(SocketStreamTest, ResolveFailure) { 459 TEST_F(SocketStreamTest, ResolveFailure) {
450 TestCompletionCallback test_callback; 460 TestCompletionCallback test_callback;
451 461
452 scoped_ptr<SocketStreamEventRecorder> delegate( 462 scoped_ptr<SocketStreamEventRecorder> delegate(
453 new SocketStreamEventRecorder(test_callback.callback())); 463 new SocketStreamEventRecorder(test_callback.callback()));
454 464
455 // Make resolver fail. 465 // Make resolver fail.
456 TestURLRequestContext context; 466 TestURLRequestContext context;
457 scoped_ptr<MockHostResolver> mock_host_resolver( 467 scoped_ptr<MockHostResolver> mock_host_resolver(new MockHostResolver());
458 new MockHostResolver());
459 mock_host_resolver->rules()->AddSimulatedFailure("example.com"); 468 mock_host_resolver->rules()->AddSimulatedFailure("example.com");
460 context.set_host_resolver(mock_host_resolver.get()); 469 context.set_host_resolver(mock_host_resolver.get());
461 470
462 scoped_refptr<SocketStream> socket_stream( 471 scoped_refptr<SocketStream> socket_stream(new SocketStream(
463 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 472 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
464 &context, NULL));
465 473
466 // No read/write on socket is expected. 474 // No read/write on socket is expected.
467 StaticSocketDataProvider data_provider(NULL, 0, NULL, 0); 475 StaticSocketDataProvider data_provider(NULL, 0, NULL, 0);
468 MockClientSocketFactory* mock_socket_factory = 476 MockClientSocketFactory* mock_socket_factory = GetMockClientSocketFactory();
469 GetMockClientSocketFactory();
470 mock_socket_factory->AddSocketDataProvider(&data_provider); 477 mock_socket_factory->AddSocketDataProvider(&data_provider);
471 socket_stream->SetClientSocketFactory(mock_socket_factory); 478 socket_stream->SetClientSocketFactory(mock_socket_factory);
472 479
473 socket_stream->Connect(); 480 socket_stream->Connect();
474 481
475 test_callback.WaitForResult(); 482 test_callback.WaitForResult();
476 483
477 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 484 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
478 ASSERT_EQ(2U, events.size()); 485 ASSERT_EQ(2U, events.size());
479 486
480 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[0].event_type); 487 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[0].event_type);
481 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type); 488 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type);
482 } 489 }
483 490
484 TEST_F(SocketStreamTest, ExceedMaxPendingSendAllowed) { 491 TEST_F(SocketStreamTest, ExceedMaxPendingSendAllowed) {
485 TestCompletionCallback test_callback; 492 TestCompletionCallback test_callback;
486 493
487 scoped_ptr<SocketStreamEventRecorder> delegate( 494 scoped_ptr<SocketStreamEventRecorder> delegate(
488 new SocketStreamEventRecorder(test_callback.callback())); 495 new SocketStreamEventRecorder(test_callback.callback()));
489 delegate->SetOnConnected(base::Bind( 496 delegate->SetOnConnected(base::Bind(
490 &SocketStreamTest::DoFailByTooBigDataAndClose, base::Unretained(this))); 497 &SocketStreamTest::DoFailByTooBigDataAndClose, base::Unretained(this)));
491 498
492 TestURLRequestContext context; 499 TestURLRequestContext context;
493 500
494 scoped_refptr<SocketStream> socket_stream( 501 scoped_refptr<SocketStream> socket_stream(new SocketStream(
495 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 502 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
496 &context, NULL));
497 503
498 DelayedSocketData data_provider(1, NULL, 0, NULL, 0); 504 DelayedSocketData data_provider(1, NULL, 0, NULL, 0);
499 505
500 MockClientSocketFactory* mock_socket_factory = 506 MockClientSocketFactory* mock_socket_factory = GetMockClientSocketFactory();
501 GetMockClientSocketFactory();
502 mock_socket_factory->AddSocketDataProvider(&data_provider); 507 mock_socket_factory->AddSocketDataProvider(&data_provider);
503 508
504 socket_stream->SetClientSocketFactory(mock_socket_factory); 509 socket_stream->SetClientSocketFactory(mock_socket_factory);
505 510
506 socket_stream->Connect(); 511 socket_stream->Connect();
507 512
508 test_callback.WaitForResult(); 513 test_callback.WaitForResult();
509 514
510 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 515 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
511 ASSERT_EQ(4U, events.size()); 516 ASSERT_EQ(4U, events.size());
512 517
513 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 518 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
514 events[0].event_type); 519 events[0].event_type);
515 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); 520 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type);
516 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type); 521 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type);
517 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); 522 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type);
518 } 523 }
519 524
520 TEST_F(SocketStreamTest, BasicAuthProxy) { 525 TEST_F(SocketStreamTest, BasicAuthProxy) {
521 MockClientSocketFactory mock_socket_factory; 526 MockClientSocketFactory mock_socket_factory;
522 MockWrite data_writes1[] = { 527 MockWrite data_writes1[] = {
523 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n" 528 MockWrite(
524 "Host: example.com\r\n" 529 "CONNECT example.com:80 HTTP/1.1\r\n"
525 "Proxy-Connection: keep-alive\r\n\r\n"), 530 "Host: example.com\r\n"
531 "Proxy-Connection: keep-alive\r\n\r\n"),
526 }; 532 };
527 MockRead data_reads1[] = { 533 MockRead data_reads1[] = {
528 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), 534 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"),
529 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), 535 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"),
530 MockRead("\r\n"), 536 MockRead("\r\n"),
531 }; 537 };
532 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), 538 StaticSocketDataProvider data1(data_reads1,
533 data_writes1, arraysize(data_writes1)); 539 arraysize(data_reads1),
540 data_writes1,
541 arraysize(data_writes1));
534 mock_socket_factory.AddSocketDataProvider(&data1); 542 mock_socket_factory.AddSocketDataProvider(&data1);
535 543
536 MockWrite data_writes2[] = { 544 MockWrite data_writes2[] = {
537 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n" 545 MockWrite(
538 "Host: example.com\r\n" 546 "CONNECT example.com:80 HTTP/1.1\r\n"
539 "Proxy-Connection: keep-alive\r\n" 547 "Host: example.com\r\n"
540 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 548 "Proxy-Connection: keep-alive\r\n"
549 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
541 }; 550 };
542 MockRead data_reads2[] = { 551 MockRead data_reads2[] = {
543 MockRead("HTTP/1.1 200 Connection Established\r\n"), 552 MockRead("HTTP/1.1 200 Connection Established\r\n"),
544 MockRead("Proxy-agent: Apache/2.2.8\r\n"), 553 MockRead("Proxy-agent: Apache/2.2.8\r\n"), MockRead("\r\n"),
545 MockRead("\r\n"), 554 // SocketStream::DoClose is run asynchronously. Socket can be read after
546 // SocketStream::DoClose is run asynchronously. Socket can be read after 555 // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to
547 // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to indicate 556 // indicate
548 // server doesn't close the connection. 557 // server doesn't close the connection.
549 MockRead(ASYNC, ERR_IO_PENDING) 558 MockRead(ASYNC, ERR_IO_PENDING)};
550 }; 559 StaticSocketDataProvider data2(data_reads2,
551 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), 560 arraysize(data_reads2),
552 data_writes2, arraysize(data_writes2)); 561 data_writes2,
562 arraysize(data_writes2));
553 mock_socket_factory.AddSocketDataProvider(&data2); 563 mock_socket_factory.AddSocketDataProvider(&data2);
554 564
555 TestCompletionCallback test_callback; 565 TestCompletionCallback test_callback;
556 566
557 scoped_ptr<SocketStreamEventRecorder> delegate( 567 scoped_ptr<SocketStreamEventRecorder> delegate(
558 new SocketStreamEventRecorder(test_callback.callback())); 568 new SocketStreamEventRecorder(test_callback.callback()));
559 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, 569 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose,
560 base::Unretained(delegate.get()))); 570 base::Unretained(delegate.get())));
561 delegate->SetAuthInfo(AuthCredentials(ASCIIToUTF16("foo"), 571 delegate->SetAuthInfo(
562 ASCIIToUTF16("bar"))); 572 AuthCredentials(ASCIIToUTF16("foo"), ASCIIToUTF16("bar")));
563 delegate->SetOnAuthRequired(base::Bind( 573 delegate->SetOnAuthRequired(
564 &SocketStreamEventRecorder::DoRestartWithAuth, 574 base::Bind(&SocketStreamEventRecorder::DoRestartWithAuth,
565 base::Unretained(delegate.get()))); 575 base::Unretained(delegate.get())));
566 576
567 TestURLRequestContextWithProxy context("myproxy:70"); 577 TestURLRequestContextWithProxy context("myproxy:70");
568 578
569 scoped_refptr<SocketStream> socket_stream( 579 scoped_refptr<SocketStream> socket_stream(new SocketStream(
570 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 580 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
571 &context, NULL));
572 581
573 socket_stream->SetClientSocketFactory(&mock_socket_factory); 582 socket_stream->SetClientSocketFactory(&mock_socket_factory);
574 583
575 socket_stream->Connect(); 584 socket_stream->Connect();
576 585
577 test_callback.WaitForResult(); 586 test_callback.WaitForResult();
578 587
579 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 588 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
580 ASSERT_EQ(5U, events.size()); 589 ASSERT_EQ(5U, events.size());
581 590
582 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 591 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
583 events[0].event_type); 592 events[0].event_type);
584 EXPECT_EQ(SocketStreamEvent::EVENT_AUTH_REQUIRED, events[1].event_type); 593 EXPECT_EQ(SocketStreamEvent::EVENT_AUTH_REQUIRED, events[1].event_type);
585 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[2].event_type); 594 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[2].event_type);
586 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[3].event_type); 595 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[3].event_type);
587 EXPECT_EQ(ERR_ABORTED, events[3].error_code); 596 EXPECT_EQ(ERR_ABORTED, events[3].error_code);
588 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type); 597 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type);
589 598
590 // TODO(eroman): Add back NetLogTest here... 599 // TODO(eroman): Add back NetLogTest here...
591 } 600 }
592 601
593 TEST_F(SocketStreamTest, BasicAuthProxyWithAuthCache) { 602 TEST_F(SocketStreamTest, BasicAuthProxyWithAuthCache) {
594 MockClientSocketFactory mock_socket_factory; 603 MockClientSocketFactory mock_socket_factory;
595 MockWrite data_writes[] = { 604 MockWrite data_writes[] = {
596 // WebSocket(SocketStream) always uses CONNECT when it is configured to use 605 // WebSocket(SocketStream) always uses CONNECT when it is configured to
597 // proxy so the port may not be 443. 606 // use
598 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n" 607 // proxy so the port may not be 443.
599 "Host: example.com\r\n" 608 MockWrite(
600 "Proxy-Connection: keep-alive\r\n" 609 "CONNECT example.com:80 HTTP/1.1\r\n"
601 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 610 "Host: example.com\r\n"
611 "Proxy-Connection: keep-alive\r\n"
612 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
602 }; 613 };
603 MockRead data_reads[] = { 614 MockRead data_reads[] = {MockRead("HTTP/1.1 200 Connection Established\r\n"),
604 MockRead("HTTP/1.1 200 Connection Established\r\n"), 615 MockRead("Proxy-agent: Apache/2.2.8\r\n"),
605 MockRead("Proxy-agent: Apache/2.2.8\r\n"), 616 MockRead("\r\n"), MockRead(ASYNC, ERR_IO_PENDING)};
606 MockRead("\r\n"), 617 StaticSocketDataProvider data(
607 MockRead(ASYNC, ERR_IO_PENDING) 618 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
608 };
609 StaticSocketDataProvider data(data_reads, arraysize(data_reads),
610 data_writes, arraysize(data_writes));
611 mock_socket_factory.AddSocketDataProvider(&data); 619 mock_socket_factory.AddSocketDataProvider(&data);
612 620
613 TestCompletionCallback test_callback; 621 TestCompletionCallback test_callback;
614 scoped_ptr<SocketStreamEventRecorder> delegate( 622 scoped_ptr<SocketStreamEventRecorder> delegate(
615 new SocketStreamEventRecorder(test_callback.callback())); 623 new SocketStreamEventRecorder(test_callback.callback()));
616 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, 624 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose,
617 base::Unretained(delegate.get()))); 625 base::Unretained(delegate.get())));
618 626
619 TestURLRequestContextWithProxy context("myproxy:70"); 627 TestURLRequestContextWithProxy context("myproxy:70");
620 HttpAuthCache* auth_cache = 628 HttpAuthCache* auth_cache =
621 context.http_transaction_factory()->GetSession()->http_auth_cache(); 629 context.http_transaction_factory()->GetSession()->http_auth_cache();
622 auth_cache->Add(GURL("http://myproxy:70"), 630 auth_cache->Add(GURL("http://myproxy:70"),
623 "MyRealm1", 631 "MyRealm1",
624 HttpAuth::AUTH_SCHEME_BASIC, 632 HttpAuth::AUTH_SCHEME_BASIC,
625 "Basic realm=MyRealm1", 633 "Basic realm=MyRealm1",
626 AuthCredentials(ASCIIToUTF16("foo"), 634 AuthCredentials(ASCIIToUTF16("foo"), ASCIIToUTF16("bar")),
627 ASCIIToUTF16("bar")),
628 "/"); 635 "/");
629 636
630 scoped_refptr<SocketStream> socket_stream( 637 scoped_refptr<SocketStream> socket_stream(new SocketStream(
631 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 638 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
632 &context, NULL));
633 639
634 socket_stream->SetClientSocketFactory(&mock_socket_factory); 640 socket_stream->SetClientSocketFactory(&mock_socket_factory);
635 641
636 socket_stream->Connect(); 642 socket_stream->Connect();
637 643
638 test_callback.WaitForResult(); 644 test_callback.WaitForResult();
639 645
640 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 646 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
641 ASSERT_EQ(4U, events.size()); 647 ASSERT_EQ(4U, events.size());
642 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 648 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
643 events[0].event_type); 649 events[0].event_type);
644 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); 650 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type);
645 EXPECT_EQ(ERR_ABORTED, events[2].error_code); 651 EXPECT_EQ(ERR_ABORTED, events[2].error_code);
646 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); 652 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type);
647 } 653 }
648 654
649 TEST_F(SocketStreamTest, WSSBasicAuthProxyWithAuthCache) { 655 TEST_F(SocketStreamTest, WSSBasicAuthProxyWithAuthCache) {
650 MockClientSocketFactory mock_socket_factory; 656 MockClientSocketFactory mock_socket_factory;
651 MockWrite data_writes1[] = { 657 MockWrite data_writes1[] = {
652 MockWrite("CONNECT example.com:443 HTTP/1.1\r\n" 658 MockWrite(
653 "Host: example.com\r\n" 659 "CONNECT example.com:443 HTTP/1.1\r\n"
654 "Proxy-Connection: keep-alive\r\n" 660 "Host: example.com\r\n"
655 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 661 "Proxy-Connection: keep-alive\r\n"
662 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
656 }; 663 };
657 MockRead data_reads1[] = { 664 MockRead data_reads1[] = {MockRead("HTTP/1.1 200 Connection Established\r\n"),
658 MockRead("HTTP/1.1 200 Connection Established\r\n"), 665 MockRead("Proxy-agent: Apache/2.2.8\r\n"),
659 MockRead("Proxy-agent: Apache/2.2.8\r\n"), 666 MockRead("\r\n"), MockRead(ASYNC, ERR_IO_PENDING)};
660 MockRead("\r\n"), 667 StaticSocketDataProvider data1(data_reads1,
661 MockRead(ASYNC, ERR_IO_PENDING) 668 arraysize(data_reads1),
662 }; 669 data_writes1,
663 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), 670 arraysize(data_writes1));
664 data_writes1, arraysize(data_writes1));
665 mock_socket_factory.AddSocketDataProvider(&data1); 671 mock_socket_factory.AddSocketDataProvider(&data1);
666 672
667 SSLSocketDataProvider data2(ASYNC, OK); 673 SSLSocketDataProvider data2(ASYNC, OK);
668 mock_socket_factory.AddSSLSocketDataProvider(&data2); 674 mock_socket_factory.AddSSLSocketDataProvider(&data2);
669 675
670 TestCompletionCallback test_callback; 676 TestCompletionCallback test_callback;
671 scoped_ptr<SocketStreamEventRecorder> delegate( 677 scoped_ptr<SocketStreamEventRecorder> delegate(
672 new SocketStreamEventRecorder(test_callback.callback())); 678 new SocketStreamEventRecorder(test_callback.callback()));
673 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, 679 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose,
674 base::Unretained(delegate.get()))); 680 base::Unretained(delegate.get())));
675 681
676 TestURLRequestContextWithProxy context("myproxy:70"); 682 TestURLRequestContextWithProxy context("myproxy:70");
677 HttpAuthCache* auth_cache = 683 HttpAuthCache* auth_cache =
678 context.http_transaction_factory()->GetSession()->http_auth_cache(); 684 context.http_transaction_factory()->GetSession()->http_auth_cache();
679 auth_cache->Add(GURL("http://myproxy:70"), 685 auth_cache->Add(GURL("http://myproxy:70"),
680 "MyRealm1", 686 "MyRealm1",
681 HttpAuth::AUTH_SCHEME_BASIC, 687 HttpAuth::AUTH_SCHEME_BASIC,
682 "Basic realm=MyRealm1", 688 "Basic realm=MyRealm1",
683 AuthCredentials(ASCIIToUTF16("foo"), 689 AuthCredentials(ASCIIToUTF16("foo"), ASCIIToUTF16("bar")),
684 ASCIIToUTF16("bar")),
685 "/"); 690 "/");
686 691
687 scoped_refptr<SocketStream> socket_stream( 692 scoped_refptr<SocketStream> socket_stream(new SocketStream(
688 new SocketStream(GURL("wss://example.com/demo"), delegate.get(), 693 GURL("wss://example.com/demo"), delegate.get(), &context, NULL));
689 &context, NULL));
690 694
691 socket_stream->SetClientSocketFactory(&mock_socket_factory); 695 socket_stream->SetClientSocketFactory(&mock_socket_factory);
692 696
693 socket_stream->Connect(); 697 socket_stream->Connect();
694 698
695 test_callback.WaitForResult(); 699 test_callback.WaitForResult();
696 700
697 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 701 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
698 ASSERT_EQ(4U, events.size()); 702 ASSERT_EQ(4U, events.size());
699 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 703 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
700 events[0].event_type); 704 events[0].event_type);
701 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); 705 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type);
702 EXPECT_EQ(ERR_ABORTED, events[2].error_code); 706 EXPECT_EQ(ERR_ABORTED, events[2].error_code);
703 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); 707 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type);
704 } 708 }
705 709
706 TEST_F(SocketStreamTest, IOPending) { 710 TEST_F(SocketStreamTest, IOPending) {
707 TestCompletionCallback test_callback; 711 TestCompletionCallback test_callback;
708 712
709 scoped_ptr<SocketStreamEventRecorder> delegate( 713 scoped_ptr<SocketStreamEventRecorder> delegate(
710 new SocketStreamEventRecorder(test_callback.callback())); 714 new SocketStreamEventRecorder(test_callback.callback()));
711 delegate->SetOnStartOpenConnection(base::Bind( 715 delegate->SetOnStartOpenConnection(
712 &SocketStreamTest::DoIOPending, base::Unretained(this))); 716 base::Bind(&SocketStreamTest::DoIOPending, base::Unretained(this)));
713 delegate->SetOnConnected(base::Bind( 717 delegate->SetOnConnected(base::Bind(
714 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); 718 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this)));
715 delegate->SetOnReceivedData(base::Bind( 719 delegate->SetOnReceivedData(base::Bind(
716 &SocketStreamTest::DoCloseFlushPendingWriteTest, 720 &SocketStreamTest::DoCloseFlushPendingWriteTest, base::Unretained(this)));
717 base::Unretained(this)));
718 721
719 TestURLRequestContext context; 722 TestURLRequestContext context;
720 723
721 scoped_refptr<SocketStream> socket_stream( 724 scoped_refptr<SocketStream> socket_stream(new SocketStream(
722 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 725 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
723 &context, NULL));
724 726
725 MockWrite data_writes[] = { 727 MockWrite data_writes[] = {
726 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), 728 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest),
727 MockWrite(ASYNC, "\0message1\xff", 10), 729 MockWrite(ASYNC, "\0message1\xff", 10),
728 MockWrite(ASYNC, "\0message2\xff", 10) 730 MockWrite(ASYNC, "\0message2\xff", 10)};
729 };
730 MockRead data_reads[] = { 731 MockRead data_reads[] = {
731 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), 732 MockRead(SocketStreamTest::kWebSocketHandshakeResponse),
732 // Server doesn't close the connection after handshake. 733 // Server doesn't close the connection after handshake.
733 MockRead(ASYNC, ERR_IO_PENDING) 734 MockRead(ASYNC, ERR_IO_PENDING)};
734 };
735 AddWebSocketMessage("message1"); 735 AddWebSocketMessage("message1");
736 AddWebSocketMessage("message2"); 736 AddWebSocketMessage("message2");
737 737
738 DelayedSocketData data_provider( 738 DelayedSocketData data_provider(1,
739 1, data_reads, arraysize(data_reads), 739 data_reads,
740 data_writes, arraysize(data_writes)); 740 arraysize(data_reads),
741 data_writes,
742 arraysize(data_writes));
741 743
742 MockClientSocketFactory* mock_socket_factory = 744 MockClientSocketFactory* mock_socket_factory = GetMockClientSocketFactory();
743 GetMockClientSocketFactory();
744 mock_socket_factory->AddSocketDataProvider(&data_provider); 745 mock_socket_factory->AddSocketDataProvider(&data_provider);
745 746
746 socket_stream->SetClientSocketFactory(mock_socket_factory); 747 socket_stream->SetClientSocketFactory(mock_socket_factory);
747 748
748 socket_stream->Connect(); 749 socket_stream->Connect();
749 io_test_callback_.WaitForResult(); 750 io_test_callback_.WaitForResult();
750 EXPECT_EQ(SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE, 751 EXPECT_EQ(SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE,
751 socket_stream->next_state_); 752 socket_stream->next_state_);
752 delegate->CompleteConnection(OK); 753 delegate->CompleteConnection(OK);
753 754
(...skipping 18 matching lines...) Expand all
772 TEST_F(SocketStreamTest, SwitchToSpdy) { 773 TEST_F(SocketStreamTest, SwitchToSpdy) {
773 TestCompletionCallback test_callback; 774 TestCompletionCallback test_callback;
774 775
775 scoped_ptr<SocketStreamEventRecorder> delegate( 776 scoped_ptr<SocketStreamEventRecorder> delegate(
776 new SocketStreamEventRecorder(test_callback.callback())); 777 new SocketStreamEventRecorder(test_callback.callback()));
777 delegate->SetOnStartOpenConnection(base::Bind( 778 delegate->SetOnStartOpenConnection(base::Bind(
778 &SocketStreamTest::DoSwitchToSpdyTest, base::Unretained(this))); 779 &SocketStreamTest::DoSwitchToSpdyTest, base::Unretained(this)));
779 780
780 TestURLRequestContext context; 781 TestURLRequestContext context;
781 782
782 scoped_refptr<SocketStream> socket_stream( 783 scoped_refptr<SocketStream> socket_stream(new SocketStream(
783 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 784 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
784 &context, NULL));
785 785
786 socket_stream->Connect(); 786 socket_stream->Connect();
787 787
788 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); 788 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult());
789 789
790 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 790 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
791 ASSERT_EQ(2U, events.size()); 791 ASSERT_EQ(2U, events.size());
792 792
793 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 793 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
794 events[0].event_type); 794 events[0].event_type);
795 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); 795 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type);
796 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, events[1].error_code); 796 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, events[1].error_code);
797 } 797 }
798 798
799 TEST_F(SocketStreamTest, SwitchAfterPending) { 799 TEST_F(SocketStreamTest, SwitchAfterPending) {
800 TestCompletionCallback test_callback; 800 TestCompletionCallback test_callback;
801 801
802 scoped_ptr<SocketStreamEventRecorder> delegate( 802 scoped_ptr<SocketStreamEventRecorder> delegate(
803 new SocketStreamEventRecorder(test_callback.callback())); 803 new SocketStreamEventRecorder(test_callback.callback()));
804 delegate->SetOnStartOpenConnection(base::Bind( 804 delegate->SetOnStartOpenConnection(
805 &SocketStreamTest::DoIOPending, base::Unretained(this))); 805 base::Bind(&SocketStreamTest::DoIOPending, base::Unretained(this)));
806 806
807 TestURLRequestContext context; 807 TestURLRequestContext context;
808 808
809 scoped_refptr<SocketStream> socket_stream( 809 scoped_refptr<SocketStream> socket_stream(new SocketStream(
810 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 810 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
811 &context, NULL));
812 811
813 socket_stream->Connect(); 812 socket_stream->Connect();
814 io_test_callback_.WaitForResult(); 813 io_test_callback_.WaitForResult();
815 814
816 EXPECT_EQ(SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE, 815 EXPECT_EQ(SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE,
817 socket_stream->next_state_); 816 socket_stream->next_state_);
818 delegate->CompleteConnection(ERR_PROTOCOL_SWITCHED); 817 delegate->CompleteConnection(ERR_PROTOCOL_SWITCHED);
819 818
820 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); 819 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult());
821 820
822 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 821 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
823 ASSERT_EQ(2U, events.size()); 822 ASSERT_EQ(2U, events.size());
824 823
825 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 824 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
826 events[0].event_type); 825 events[0].event_type);
827 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); 826 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type);
828 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, events[1].error_code); 827 EXPECT_EQ(ERR_PROTOCOL_SWITCHED, events[1].error_code);
829 } 828 }
830 829
831 // Test a connection though a secure proxy. 830 // Test a connection though a secure proxy.
832 TEST_F(SocketStreamTest, SecureProxyConnectError) { 831 TEST_F(SocketStreamTest, SecureProxyConnectError) {
833 MockClientSocketFactory mock_socket_factory; 832 MockClientSocketFactory mock_socket_factory;
834 MockWrite data_writes[] = { 833 MockWrite data_writes[] = {MockWrite(
835 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n" 834 "CONNECT example.com:80 HTTP/1.1\r\n"
836 "Host: example.com\r\n" 835 "Host: example.com\r\n"
837 "Proxy-Connection: keep-alive\r\n\r\n") 836 "Proxy-Connection: keep-alive\r\n\r\n")};
838 };
839 MockRead data_reads[] = { 837 MockRead data_reads[] = {
840 MockRead("HTTP/1.1 200 Connection Established\r\n"), 838 MockRead("HTTP/1.1 200 Connection Established\r\n"),
841 MockRead("Proxy-agent: Apache/2.2.8\r\n"), 839 MockRead("Proxy-agent: Apache/2.2.8\r\n"), MockRead("\r\n"),
842 MockRead("\r\n"), 840 // SocketStream::DoClose is run asynchronously. Socket can be read after
843 // SocketStream::DoClose is run asynchronously. Socket can be read after 841 // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to
844 // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to indicate 842 // indicate
845 // server doesn't close the connection. 843 // server doesn't close the connection.
846 MockRead(ASYNC, ERR_IO_PENDING) 844 MockRead(ASYNC, ERR_IO_PENDING)};
847 }; 845 StaticSocketDataProvider data(
848 StaticSocketDataProvider data(data_reads, arraysize(data_reads), 846 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
849 data_writes, arraysize(data_writes));
850 mock_socket_factory.AddSocketDataProvider(&data); 847 mock_socket_factory.AddSocketDataProvider(&data);
851 SSLSocketDataProvider ssl(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR); 848 SSLSocketDataProvider ssl(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR);
852 mock_socket_factory.AddSSLSocketDataProvider(&ssl); 849 mock_socket_factory.AddSSLSocketDataProvider(&ssl);
853 850
854 TestCompletionCallback test_callback; 851 TestCompletionCallback test_callback;
855 TestURLRequestContextWithProxy context("https://myproxy:70"); 852 TestURLRequestContextWithProxy context("https://myproxy:70");
856 853
857 scoped_ptr<SocketStreamEventRecorder> delegate( 854 scoped_ptr<SocketStreamEventRecorder> delegate(
858 new SocketStreamEventRecorder(test_callback.callback())); 855 new SocketStreamEventRecorder(test_callback.callback()));
859 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, 856 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose,
860 base::Unretained(delegate.get()))); 857 base::Unretained(delegate.get())));
861 858
862 scoped_refptr<SocketStream> socket_stream( 859 scoped_refptr<SocketStream> socket_stream(new SocketStream(
863 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 860 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
864 &context, NULL));
865 861
866 socket_stream->SetClientSocketFactory(&mock_socket_factory); 862 socket_stream->SetClientSocketFactory(&mock_socket_factory);
867 863
868 socket_stream->Connect(); 864 socket_stream->Connect();
869 865
870 test_callback.WaitForResult(); 866 test_callback.WaitForResult();
871 867
872 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 868 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
873 ASSERT_EQ(3U, events.size()); 869 ASSERT_EQ(3U, events.size());
874 870
875 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 871 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
876 events[0].event_type); 872 events[0].event_type);
877 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); 873 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type);
878 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, events[1].error_code); 874 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, events[1].error_code);
879 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[2].event_type); 875 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[2].event_type);
880 } 876 }
881 877
882 // Test a connection though a secure proxy. 878 // Test a connection though a secure proxy.
883 TEST_F(SocketStreamTest, SecureProxyConnect) { 879 TEST_F(SocketStreamTest, SecureProxyConnect) {
884 MockClientSocketFactory mock_socket_factory; 880 MockClientSocketFactory mock_socket_factory;
885 MockWrite data_writes[] = { 881 MockWrite data_writes[] = {MockWrite(
886 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n" 882 "CONNECT example.com:80 HTTP/1.1\r\n"
887 "Host: example.com\r\n" 883 "Host: example.com\r\n"
888 "Proxy-Connection: keep-alive\r\n\r\n") 884 "Proxy-Connection: keep-alive\r\n\r\n")};
889 };
890 MockRead data_reads[] = { 885 MockRead data_reads[] = {
891 MockRead("HTTP/1.1 200 Connection Established\r\n"), 886 MockRead("HTTP/1.1 200 Connection Established\r\n"),
892 MockRead("Proxy-agent: Apache/2.2.8\r\n"), 887 MockRead("Proxy-agent: Apache/2.2.8\r\n"), MockRead("\r\n"),
893 MockRead("\r\n"), 888 // SocketStream::DoClose is run asynchronously. Socket can be read after
894 // SocketStream::DoClose is run asynchronously. Socket can be read after 889 // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to
895 // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to indicate 890 // indicate
896 // server doesn't close the connection. 891 // server doesn't close the connection.
897 MockRead(ASYNC, ERR_IO_PENDING) 892 MockRead(ASYNC, ERR_IO_PENDING)};
898 }; 893 StaticSocketDataProvider data(
899 StaticSocketDataProvider data(data_reads, arraysize(data_reads), 894 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
900 data_writes, arraysize(data_writes));
901 mock_socket_factory.AddSocketDataProvider(&data); 895 mock_socket_factory.AddSocketDataProvider(&data);
902 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); 896 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
903 mock_socket_factory.AddSSLSocketDataProvider(&ssl); 897 mock_socket_factory.AddSSLSocketDataProvider(&ssl);
904 898
905 TestCompletionCallback test_callback; 899 TestCompletionCallback test_callback;
906 TestURLRequestContextWithProxy context("https://myproxy:70"); 900 TestURLRequestContextWithProxy context("https://myproxy:70");
907 901
908 scoped_ptr<SocketStreamEventRecorder> delegate( 902 scoped_ptr<SocketStreamEventRecorder> delegate(
909 new SocketStreamEventRecorder(test_callback.callback())); 903 new SocketStreamEventRecorder(test_callback.callback()));
910 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, 904 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose,
911 base::Unretained(delegate.get()))); 905 base::Unretained(delegate.get())));
912 906
913 scoped_refptr<SocketStream> socket_stream( 907 scoped_refptr<SocketStream> socket_stream(new SocketStream(
914 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 908 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
915 &context, NULL));
916 909
917 socket_stream->SetClientSocketFactory(&mock_socket_factory); 910 socket_stream->SetClientSocketFactory(&mock_socket_factory);
918 911
919 socket_stream->Connect(); 912 socket_stream->Connect();
920 913
921 test_callback.WaitForResult(); 914 test_callback.WaitForResult();
922 915
923 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 916 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
924 ASSERT_EQ(4U, events.size()); 917 ASSERT_EQ(4U, events.size());
925 918
926 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 919 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
927 events[0].event_type); 920 events[0].event_type);
928 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); 921 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type);
929 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type); 922 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type);
930 EXPECT_EQ(ERR_ABORTED, events[2].error_code); 923 EXPECT_EQ(ERR_ABORTED, events[2].error_code);
931 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); 924 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type);
932 } 925 }
933 926
934 TEST_F(SocketStreamTest, BeforeConnectFailed) { 927 TEST_F(SocketStreamTest, BeforeConnectFailed) {
935 TestCompletionCallback test_callback; 928 TestCompletionCallback test_callback;
936 929
937 scoped_ptr<SocketStreamEventRecorder> delegate( 930 scoped_ptr<SocketStreamEventRecorder> delegate(
938 new SocketStreamEventRecorder(test_callback.callback())); 931 new SocketStreamEventRecorder(test_callback.callback()));
939 932
940 TestURLRequestContext context; 933 TestURLRequestContext context;
941 TestSocketStreamNetworkDelegate network_delegate; 934 TestSocketStreamNetworkDelegate network_delegate;
942 network_delegate.SetBeforeConnectResult(ERR_ACCESS_DENIED); 935 network_delegate.SetBeforeConnectResult(ERR_ACCESS_DENIED);
943 context.set_network_delegate(&network_delegate); 936 context.set_network_delegate(&network_delegate);
944 937
945 scoped_refptr<SocketStream> socket_stream( 938 scoped_refptr<SocketStream> socket_stream(new SocketStream(
946 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 939 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
947 &context, NULL));
948 940
949 socket_stream->Connect(); 941 socket_stream->Connect();
950 942
951 test_callback.WaitForResult(); 943 test_callback.WaitForResult();
952 944
953 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 945 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
954 ASSERT_EQ(2U, events.size()); 946 ASSERT_EQ(2U, events.size());
955 947
956 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[0].event_type); 948 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[0].event_type);
957 EXPECT_EQ(ERR_ACCESS_DENIED, events[0].error_code); 949 EXPECT_EQ(ERR_ACCESS_DENIED, events[0].error_code);
958 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type); 950 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type);
959 } 951 }
960 952
961 // Check that a connect failure, followed by the delegate calling DetachDelegate 953 // Check that a connect failure, followed by the delegate calling DetachDelegate
962 // and deleting itself in the OnError callback, is handled correctly. 954 // and deleting itself in the OnError callback, is handled correctly.
963 TEST_F(SocketStreamTest, OnErrorDetachDelegate) { 955 TEST_F(SocketStreamTest, OnErrorDetachDelegate) {
964 MockClientSocketFactory mock_socket_factory; 956 MockClientSocketFactory mock_socket_factory;
965 TestCompletionCallback test_callback; 957 TestCompletionCallback test_callback;
966 958
967 // SelfDeletingDelegate is self-owning; we just need a pointer to it to 959 // SelfDeletingDelegate is self-owning; we just need a pointer to it to
968 // connect it and the SocketStream. 960 // connect it and the SocketStream.
969 SelfDeletingDelegate* delegate = 961 SelfDeletingDelegate* delegate =
970 new SelfDeletingDelegate(test_callback.callback()); 962 new SelfDeletingDelegate(test_callback.callback());
971 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); 963 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED);
972 StaticSocketDataProvider data; 964 StaticSocketDataProvider data;
973 data.set_connect_data(mock_connect); 965 data.set_connect_data(mock_connect);
974 mock_socket_factory.AddSocketDataProvider(&data); 966 mock_socket_factory.AddSocketDataProvider(&data);
975 967
976 TestURLRequestContext context; 968 TestURLRequestContext context;
977 scoped_refptr<SocketStream> socket_stream( 969 scoped_refptr<SocketStream> socket_stream(new SocketStream(
978 new SocketStream(GURL("ws://localhost:9998/echo"), delegate, 970 GURL("ws://localhost:9998/echo"), delegate, &context, NULL));
979 &context, NULL));
980 socket_stream->SetClientSocketFactory(&mock_socket_factory); 971 socket_stream->SetClientSocketFactory(&mock_socket_factory);
981 delegate->set_socket_stream(socket_stream); 972 delegate->set_socket_stream(socket_stream);
982 // The delegate pointer will become invalid during the test. Set it to NULL to 973 // The delegate pointer will become invalid during the test. Set it to NULL to
983 // avoid holding a dangling pointer. 974 // avoid holding a dangling pointer.
984 delegate = NULL; 975 delegate = NULL;
985 976
986 socket_stream->Connect(); 977 socket_stream->Connect();
987 978
988 EXPECT_EQ(OK, test_callback.WaitForResult()); 979 EXPECT_EQ(OK, test_callback.WaitForResult());
989 } 980 }
990 981
991 TEST_F(SocketStreamTest, NullContextSocketStreamShouldNotCrash) { 982 TEST_F(SocketStreamTest, NullContextSocketStreamShouldNotCrash) {
992 TestCompletionCallback test_callback; 983 TestCompletionCallback test_callback;
993 984
994 scoped_ptr<SocketStreamEventRecorder> delegate( 985 scoped_ptr<SocketStreamEventRecorder> delegate(
995 new SocketStreamEventRecorder(test_callback.callback())); 986 new SocketStreamEventRecorder(test_callback.callback()));
996 TestURLRequestContext context; 987 TestURLRequestContext context;
997 scoped_refptr<SocketStream> socket_stream( 988 scoped_refptr<SocketStream> socket_stream(new SocketStream(
998 new SocketStream(GURL("ws://example.com/demo"), delegate.get(), 989 GURL("ws://example.com/demo"), delegate.get(), &context, NULL));
999 &context, NULL)); 990 delegate->SetOnStartOpenConnection(
1000 delegate->SetOnStartOpenConnection(base::Bind( 991 base::Bind(&SocketStreamTest::DoIOPending, base::Unretained(this)));
1001 &SocketStreamTest::DoIOPending, base::Unretained(this)));
1002 delegate->SetOnConnected(base::Bind( 992 delegate->SetOnConnected(base::Bind(
1003 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); 993 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this)));
1004 delegate->SetOnReceivedData(base::Bind( 994 delegate->SetOnReceivedData(base::Bind(
1005 &SocketStreamTest::DoCloseFlushPendingWriteTestWithSetContextNull, 995 &SocketStreamTest::DoCloseFlushPendingWriteTestWithSetContextNull,
1006 base::Unretained(this))); 996 base::Unretained(this)));
1007 997
1008 MockWrite data_writes[] = { 998 MockWrite data_writes[] = {
1009 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), 999 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest),
1010 }; 1000 };
1011 MockRead data_reads[] = { 1001 MockRead data_reads[] = {
1012 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), 1002 MockRead(SocketStreamTest::kWebSocketHandshakeResponse),
1013 }; 1003 };
1014 AddWebSocketMessage("message1"); 1004 AddWebSocketMessage("message1");
1015 AddWebSocketMessage("message2"); 1005 AddWebSocketMessage("message2");
1016 1006
1017 DelayedSocketData data_provider( 1007 DelayedSocketData data_provider(1,
1018 1, data_reads, arraysize(data_reads), 1008 data_reads,
1019 data_writes, arraysize(data_writes)); 1009 arraysize(data_reads),
1010 data_writes,
1011 arraysize(data_writes));
1020 1012
1021 MockClientSocketFactory* mock_socket_factory = GetMockClientSocketFactory(); 1013 MockClientSocketFactory* mock_socket_factory = GetMockClientSocketFactory();
1022 mock_socket_factory->AddSocketDataProvider(&data_provider); 1014 mock_socket_factory->AddSocketDataProvider(&data_provider);
1023 socket_stream->SetClientSocketFactory(mock_socket_factory); 1015 socket_stream->SetClientSocketFactory(mock_socket_factory);
1024 1016
1025 socket_stream->Connect(); 1017 socket_stream->Connect();
1026 io_test_callback_.WaitForResult(); 1018 io_test_callback_.WaitForResult();
1027 delegate->CompleteConnection(OK); 1019 delegate->CompleteConnection(OK);
1028 EXPECT_EQ(OK, test_callback.WaitForResult()); 1020 EXPECT_EQ(OK, test_callback.WaitForResult());
1029 1021
1030 EXPECT_TRUE(data_provider.at_read_eof()); 1022 EXPECT_TRUE(data_provider.at_read_eof());
1031 EXPECT_TRUE(data_provider.at_write_eof()); 1023 EXPECT_TRUE(data_provider.at_write_eof());
1032 1024
1033 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 1025 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
1034 ASSERT_EQ(5U, events.size()); 1026 ASSERT_EQ(5U, events.size());
1035 1027
1036 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 1028 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
1037 events[0].event_type); 1029 events[0].event_type);
1038 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); 1030 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type);
1039 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type); 1031 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type);
1040 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type); 1032 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type);
1041 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type); 1033 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type);
1042 } 1034 }
1043 1035
1044 } // namespace net 1036 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698