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

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

Issue 7185032: WebSocket over SPDY: WebSocketJob handling SpdyWebSocketStream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: leak fixed (don't call AddRef) Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/socket_stream/socket_stream.cc ('k') | net/websockets/websocket_job.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
14 #include "net/base/auth.h" 14 #include "net/base/auth.h"
15 #include "net/base/mock_host_resolver.h" 15 #include "net/base/mock_host_resolver.h"
16 #include "net/base/net_log.h" 16 #include "net/base/net_log.h"
17 #include "net/base/net_log_unittest.h" 17 #include "net/base/net_log_unittest.h"
18 #include "net/base/test_completion_callback.h" 18 #include "net/base/test_completion_callback.h"
19 #include "net/socket/socket_test_util.h" 19 #include "net/socket/socket_test_util.h"
20 #include "net/url_request/url_request_test_util.h" 20 #include "net/url_request/url_request_test_util.h"
21 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
22 #include "testing/platform_test.h" 22 #include "testing/platform_test.h"
23 23
24 struct SocketStreamEvent { 24 struct SocketStreamEvent {
25 enum EventType { 25 enum EventType {
26 EVENT_START_OPEN_CONNECTION, EVENT_CONNECTED, EVENT_SENT_DATA, 26 EVENT_START_OPEN_CONNECTION, EVENT_CONNECTED, EVENT_SENT_DATA,
27 EVENT_RECEIVED_DATA, EVENT_CLOSE, EVENT_AUTH_REQUIRED, 27 EVENT_RECEIVED_DATA, EVENT_CLOSE, EVENT_AUTH_REQUIRED, EVENT_ERROR,
28 }; 28 };
29 29
30 SocketStreamEvent(EventType type, 30 SocketStreamEvent(EventType type,
31 net::SocketStream* socket_stream, 31 net::SocketStream* socket_stream,
32 int num, 32 int num,
33 const std::string& str, 33 const std::string& str,
34 net::AuthChallengeInfo* auth_challenge_info, 34 net::AuthChallengeInfo* auth_challenge_info,
35 net::CompletionCallback* callback) 35 net::CompletionCallback* callback,
36 int error)
36 : event_type(type), socket(socket_stream), number(num), data(str), 37 : event_type(type), socket(socket_stream), number(num), data(str),
37 auth_info(auth_challenge_info) {} 38 auth_info(auth_challenge_info), error_code(error) {}
38 39
39 EventType event_type; 40 EventType event_type;
40 net::SocketStream* socket; 41 net::SocketStream* socket;
41 int number; 42 int number;
42 std::string data; 43 std::string data;
43 scoped_refptr<net::AuthChallengeInfo> auth_info; 44 scoped_refptr<net::AuthChallengeInfo> auth_info;
45 int error_code;
44 }; 46 };
45 47
46 class SocketStreamEventRecorder : public net::SocketStream::Delegate { 48 class SocketStreamEventRecorder : public net::SocketStream::Delegate {
47 public: 49 public:
48 explicit SocketStreamEventRecorder(net::CompletionCallback* callback) 50 explicit SocketStreamEventRecorder(net::CompletionCallback* callback)
49 : callback_(callback) {} 51 : callback_(callback) {}
50 virtual ~SocketStreamEventRecorder() {} 52 virtual ~SocketStreamEventRecorder() {}
51 53
52 void SetOnStartOpenConnection( 54 void SetOnStartOpenConnection(
53 const base::Callback<int(SocketStreamEvent*)>& callback) { 55 const base::Callback<int(SocketStreamEvent*)>& callback) {
(...skipping 11 matching lines...) Expand all
65 const base::Callback<void(SocketStreamEvent*)>& callback) { 67 const base::Callback<void(SocketStreamEvent*)>& callback) {
66 on_received_data_ = callback; 68 on_received_data_ = callback;
67 } 69 }
68 void SetOnClose(const base::Callback<void(SocketStreamEvent*)>& callback) { 70 void SetOnClose(const base::Callback<void(SocketStreamEvent*)>& callback) {
69 on_close_ = callback; 71 on_close_ = callback;
70 } 72 }
71 void SetOnAuthRequired( 73 void SetOnAuthRequired(
72 const base::Callback<void(SocketStreamEvent*)>& callback) { 74 const base::Callback<void(SocketStreamEvent*)>& callback) {
73 on_auth_required_ = callback; 75 on_auth_required_ = callback;
74 } 76 }
77 void SetOnError(const base::Callback<void(SocketStreamEvent*)>& callback) {
78 on_error_ = callback;
79 }
75 80
76 virtual int OnStartOpenConnection(net::SocketStream* socket, 81 virtual int OnStartOpenConnection(net::SocketStream* socket,
77 net::CompletionCallback* callback) { 82 net::CompletionCallback* callback) {
78 connection_callback_ = callback; 83 connection_callback_ = callback;
79 events_.push_back( 84 events_.push_back(
80 SocketStreamEvent(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 85 SocketStreamEvent(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
81 socket, 0, std::string(), NULL, callback)); 86 socket, 0, std::string(), NULL, callback, net::OK));
82 if (!on_start_open_connection_.is_null()) 87 if (!on_start_open_connection_.is_null())
83 return on_start_open_connection_.Run(&events_.back()); 88 return on_start_open_connection_.Run(&events_.back());
84 return net::OK; 89 return net::OK;
85 } 90 }
86 virtual void OnConnected(net::SocketStream* socket, 91 virtual void OnConnected(net::SocketStream* socket,
87 int num_pending_send_allowed) { 92 int num_pending_send_allowed) {
88 events_.push_back( 93 events_.push_back(
89 SocketStreamEvent(SocketStreamEvent::EVENT_CONNECTED, 94 SocketStreamEvent(SocketStreamEvent::EVENT_CONNECTED,
90 socket, num_pending_send_allowed, std::string(), 95 socket, num_pending_send_allowed, std::string(),
91 NULL, NULL)); 96 NULL, NULL, net::OK));
92 if (!on_connected_.is_null()) 97 if (!on_connected_.is_null())
93 on_connected_.Run(&events_.back()); 98 on_connected_.Run(&events_.back());
94 } 99 }
95 virtual void OnSentData(net::SocketStream* socket, 100 virtual void OnSentData(net::SocketStream* socket,
96 int amount_sent) { 101 int amount_sent) {
97 events_.push_back( 102 events_.push_back(
98 SocketStreamEvent(SocketStreamEvent::EVENT_SENT_DATA, 103 SocketStreamEvent(SocketStreamEvent::EVENT_SENT_DATA, socket,
99 socket, amount_sent, std::string(), NULL, NULL)); 104 amount_sent, std::string(), NULL, NULL, net::OK));
100 if (!on_sent_data_.is_null()) 105 if (!on_sent_data_.is_null())
101 on_sent_data_.Run(&events_.back()); 106 on_sent_data_.Run(&events_.back());
102 } 107 }
103 virtual void OnReceivedData(net::SocketStream* socket, 108 virtual void OnReceivedData(net::SocketStream* socket,
104 const char* data, int len) { 109 const char* data, int len) {
105 events_.push_back( 110 events_.push_back(
106 SocketStreamEvent(SocketStreamEvent::EVENT_RECEIVED_DATA, 111 SocketStreamEvent(SocketStreamEvent::EVENT_RECEIVED_DATA, socket, len,
107 socket, len, std::string(data, len), NULL, NULL)); 112 std::string(data, len), NULL, NULL, net::OK));
108 if (!on_received_data_.is_null()) 113 if (!on_received_data_.is_null())
109 on_received_data_.Run(&events_.back()); 114 on_received_data_.Run(&events_.back());
110 } 115 }
111 virtual void OnClose(net::SocketStream* socket) { 116 virtual void OnClose(net::SocketStream* socket) {
112 events_.push_back( 117 events_.push_back(
113 SocketStreamEvent(SocketStreamEvent::EVENT_CLOSE, 118 SocketStreamEvent(SocketStreamEvent::EVENT_CLOSE, socket, 0,
114 socket, 0, std::string(), NULL, NULL)); 119 std::string(), NULL, NULL, net::OK));
115 if (!on_close_.is_null()) 120 if (!on_close_.is_null())
116 on_close_.Run(&events_.back()); 121 on_close_.Run(&events_.back());
117 if (callback_) 122 if (callback_)
118 callback_->Run(net::OK); 123 callback_->Run(net::OK);
119 } 124 }
120 virtual void OnAuthRequired(net::SocketStream* socket, 125 virtual void OnAuthRequired(net::SocketStream* socket,
121 net::AuthChallengeInfo* auth_info) { 126 net::AuthChallengeInfo* auth_info) {
122 events_.push_back( 127 events_.push_back(
123 SocketStreamEvent(SocketStreamEvent::EVENT_AUTH_REQUIRED, 128 SocketStreamEvent(SocketStreamEvent::EVENT_AUTH_REQUIRED, socket, 0,
124 socket, 0, std::string(), auth_info, NULL)); 129 std::string(), auth_info, NULL, net::OK));
125 if (!on_auth_required_.is_null()) 130 if (!on_auth_required_.is_null())
126 on_auth_required_.Run(&events_.back()); 131 on_auth_required_.Run(&events_.back());
127 } 132 }
133 virtual void OnError(const net::SocketStream* socket, int error) {
134 events_.push_back(
135 SocketStreamEvent(SocketStreamEvent::EVENT_ERROR, NULL, 0,
136 std::string(), NULL, NULL, error));
137 if (!on_error_.is_null())
138 on_error_.Run(&events_.back());
139 if (callback_)
140 callback_->Run(error);
141 }
128 142
129 void DoClose(SocketStreamEvent* event) { 143 void DoClose(SocketStreamEvent* event) {
130 event->socket->Close(); 144 event->socket->Close();
131 } 145 }
132 void DoRestartWithAuth(SocketStreamEvent* event) { 146 void DoRestartWithAuth(SocketStreamEvent* event) {
133 VLOG(1) << "RestartWithAuth username=" << username_ 147 VLOG(1) << "RestartWithAuth username=" << username_
134 << " password=" << password_; 148 << " password=" << password_;
135 event->socket->RestartWithAuth(username_, password_); 149 event->socket->RestartWithAuth(username_, password_);
136 } 150 }
137 void SetAuthInfo(const string16& username, 151 void SetAuthInfo(const string16& username,
(...skipping 10 matching lines...) Expand all
148 } 162 }
149 163
150 private: 164 private:
151 std::vector<SocketStreamEvent> events_; 165 std::vector<SocketStreamEvent> events_;
152 base::Callback<int(SocketStreamEvent*)> on_start_open_connection_; 166 base::Callback<int(SocketStreamEvent*)> on_start_open_connection_;
153 base::Callback<void(SocketStreamEvent*)> on_connected_; 167 base::Callback<void(SocketStreamEvent*)> on_connected_;
154 base::Callback<void(SocketStreamEvent*)> on_sent_data_; 168 base::Callback<void(SocketStreamEvent*)> on_sent_data_;
155 base::Callback<void(SocketStreamEvent*)> on_received_data_; 169 base::Callback<void(SocketStreamEvent*)> on_received_data_;
156 base::Callback<void(SocketStreamEvent*)> on_close_; 170 base::Callback<void(SocketStreamEvent*)> on_close_;
157 base::Callback<void(SocketStreamEvent*)> on_auth_required_; 171 base::Callback<void(SocketStreamEvent*)> on_auth_required_;
172 base::Callback<void(SocketStreamEvent*)> on_error_;
158 net::CompletionCallback* callback_; 173 net::CompletionCallback* callback_;
159 net::CompletionCallback* connection_callback_; 174 net::CompletionCallback* connection_callback_;
160 175
161 string16 username_; 176 string16 username_;
162 string16 password_; 177 string16 password_;
163 178
164 DISALLOW_COPY_AND_ASSIGN(SocketStreamEventRecorder); 179 DISALLOW_COPY_AND_ASSIGN(SocketStreamEventRecorder);
165 }; 180 };
166 181
167 namespace net { 182 namespace net {
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 GetMockClientSocketFactory(); 312 GetMockClientSocketFactory();
298 mock_socket_factory->AddSocketDataProvider(data_provider.get()); 313 mock_socket_factory->AddSocketDataProvider(data_provider.get());
299 314
300 socket_stream->SetClientSocketFactory(mock_socket_factory); 315 socket_stream->SetClientSocketFactory(mock_socket_factory);
301 316
302 socket_stream->Connect(); 317 socket_stream->Connect();
303 318
304 callback.WaitForResult(); 319 callback.WaitForResult();
305 320
306 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 321 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
307 ASSERT_EQ(7U, events.size()); 322 ASSERT_EQ(8U, events.size());
308 323
309 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 324 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
310 events[0].event_type); 325 events[0].event_type);
311 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); 326 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type);
312 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type); 327 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type);
313 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type); 328 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type);
314 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[4].event_type); 329 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[4].event_type);
315 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[5].event_type); 330 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[5].event_type);
316 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[6].event_type); 331 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[6].event_type);
332 EXPECT_EQ(net::ERR_CONNECTION_CLOSED, events[6].error_code);
333 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[7].event_type);
317 } 334 }
318 335
319 TEST_F(SocketStreamTest, BasicAuthProxy) { 336 TEST_F(SocketStreamTest, BasicAuthProxy) {
320 MockClientSocketFactory mock_socket_factory; 337 MockClientSocketFactory mock_socket_factory;
321 MockWrite data_writes1[] = { 338 MockWrite data_writes1[] = {
322 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n" 339 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n"
323 "Host: example.com\r\n" 340 "Host: example.com\r\n"
324 "Proxy-Connection: keep-alive\r\n\r\n"), 341 "Proxy-Connection: keep-alive\r\n\r\n"),
325 }; 342 };
326 MockRead data_reads1[] = { 343 MockRead data_reads1[] = {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 socket_stream->set_context(new TestURLRequestContext("myproxy:70")); 385 socket_stream->set_context(new TestURLRequestContext("myproxy:70"));
369 MockHostResolver host_resolver; 386 MockHostResolver host_resolver;
370 socket_stream->SetHostResolver(&host_resolver); 387 socket_stream->SetHostResolver(&host_resolver);
371 socket_stream->SetClientSocketFactory(&mock_socket_factory); 388 socket_stream->SetClientSocketFactory(&mock_socket_factory);
372 389
373 socket_stream->Connect(); 390 socket_stream->Connect();
374 391
375 callback.WaitForResult(); 392 callback.WaitForResult();
376 393
377 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 394 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
378 ASSERT_EQ(4U, events.size()); 395 ASSERT_EQ(5U, events.size());
379 396
380 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 397 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
381 events[0].event_type); 398 events[0].event_type);
382 EXPECT_EQ(SocketStreamEvent::EVENT_AUTH_REQUIRED, events[1].event_type); 399 EXPECT_EQ(SocketStreamEvent::EVENT_AUTH_REQUIRED, events[1].event_type);
383 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[2].event_type); 400 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[2].event_type);
384 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); 401 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[3].event_type);
402 EXPECT_EQ(net::ERR_ABORTED, events[3].error_code);
403 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[4].event_type);
385 404
386 // TODO(eroman): Add back NetLogTest here... 405 // TODO(eroman): Add back NetLogTest here...
387 } 406 }
388 407
389 TEST_F(SocketStreamTest, IOPending) { 408 TEST_F(SocketStreamTest, IOPending) {
390 TestCompletionCallback callback; 409 TestCompletionCallback callback;
391 410
392 scoped_ptr<SocketStreamEventRecorder> delegate( 411 scoped_ptr<SocketStreamEventRecorder> delegate(
393 new SocketStreamEventRecorder(&callback)); 412 new SocketStreamEventRecorder(&callback));
394 delegate->SetOnConnected(base::Bind( 413 delegate->SetOnConnected(base::Bind(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 452
434 socket_stream->Connect(); 453 socket_stream->Connect();
435 io_callback_.WaitForResult(); 454 io_callback_.WaitForResult();
436 EXPECT_EQ(net::SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE, 455 EXPECT_EQ(net::SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE,
437 socket_stream->next_state_); 456 socket_stream->next_state_);
438 delegate->CompleteConnection(net::OK); 457 delegate->CompleteConnection(net::OK);
439 458
440 EXPECT_EQ(net::OK, callback.WaitForResult()); 459 EXPECT_EQ(net::OK, callback.WaitForResult());
441 460
442 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 461 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
443 ASSERT_EQ(7U, events.size()); 462 ASSERT_EQ(8U, events.size());
444 463
445 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 464 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
446 events[0].event_type); 465 events[0].event_type);
447 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); 466 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type);
448 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type); 467 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[2].event_type);
449 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type); 468 EXPECT_EQ(SocketStreamEvent::EVENT_RECEIVED_DATA, events[3].event_type);
450 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[4].event_type); 469 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[4].event_type);
451 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[5].event_type); 470 EXPECT_EQ(SocketStreamEvent::EVENT_SENT_DATA, events[5].event_type);
452 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[6].event_type); 471 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[6].event_type);
472 EXPECT_EQ(net::ERR_CONNECTION_CLOSED, events[6].error_code);
473 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[7].event_type);
453 } 474 }
454 475
455 TEST_F(SocketStreamTest, SwitchToSpdy) { 476 TEST_F(SocketStreamTest, SwitchToSpdy) {
456 TestCompletionCallback callback; 477 TestCompletionCallback callback;
457 478
458 scoped_ptr<SocketStreamEventRecorder> delegate( 479 scoped_ptr<SocketStreamEventRecorder> delegate(
459 new SocketStreamEventRecorder(&callback)); 480 new SocketStreamEventRecorder(&callback));
460 delegate->SetOnStartOpenConnection(base::Bind( 481 delegate->SetOnStartOpenConnection(base::Bind(
461 &SocketStreamTest::DoSwitchToSpdyTest, base::Unretained(this))); 482 &SocketStreamTest::DoSwitchToSpdyTest, base::Unretained(this)));
462 483
463 MockHostResolver host_resolver; 484 MockHostResolver host_resolver;
464 485
465 scoped_refptr<SocketStream> socket_stream( 486 scoped_refptr<SocketStream> socket_stream(
466 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); 487 new SocketStream(GURL("ws://example.com/demo"), delegate.get()));
467 488
468 socket_stream->set_context(new TestURLRequestContext()); 489 socket_stream->set_context(new TestURLRequestContext());
469 socket_stream->SetHostResolver(&host_resolver); 490 socket_stream->SetHostResolver(&host_resolver);
470 491
471 socket_stream->Connect(); 492 socket_stream->Connect();
472 493
473 EXPECT_EQ(net::OK, callback.WaitForResult()); 494 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, callback.WaitForResult());
474 495
475 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 496 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
476 ASSERT_EQ(2U, events.size()); 497 ASSERT_EQ(2U, events.size());
477 498
478 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 499 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
479 events[0].event_type); 500 events[0].event_type);
480 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type); 501 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type);
502 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code);
481 } 503 }
482 504
483 TEST_F(SocketStreamTest, SwitchAfterPending) { 505 TEST_F(SocketStreamTest, SwitchAfterPending) {
484 TestCompletionCallback callback; 506 TestCompletionCallback callback;
485 507
486 scoped_ptr<SocketStreamEventRecorder> delegate( 508 scoped_ptr<SocketStreamEventRecorder> delegate(
487 new SocketStreamEventRecorder(&callback)); 509 new SocketStreamEventRecorder(&callback));
488 delegate->SetOnStartOpenConnection(base::Bind( 510 delegate->SetOnStartOpenConnection(base::Bind(
489 &SocketStreamTest::DoIOPending, base::Unretained(this))); 511 &SocketStreamTest::DoIOPending, base::Unretained(this)));
490 512
491 MockHostResolver host_resolver; 513 MockHostResolver host_resolver;
492 514
493 scoped_refptr<SocketStream> socket_stream( 515 scoped_refptr<SocketStream> socket_stream(
494 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); 516 new SocketStream(GURL("ws://example.com/demo"), delegate.get()));
495 517
496 socket_stream->set_context(new TestURLRequestContext()); 518 socket_stream->set_context(new TestURLRequestContext());
497 socket_stream->SetHostResolver(&host_resolver); 519 socket_stream->SetHostResolver(&host_resolver);
498 520
499 socket_stream->Connect(); 521 socket_stream->Connect();
500 io_callback_.WaitForResult(); 522 io_callback_.WaitForResult();
501 EXPECT_EQ(net::SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE, 523 EXPECT_EQ(net::SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE,
502 socket_stream->next_state_); 524 socket_stream->next_state_);
503 delegate->CompleteConnection(net::ERR_PROTOCOL_SWITCHED); 525 delegate->CompleteConnection(net::ERR_PROTOCOL_SWITCHED);
504 526
505 int result = callback.WaitForResult(); 527 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, callback.WaitForResult());
506 528
507 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); 529 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
508 ASSERT_EQ(2U, events.size()); 530 ASSERT_EQ(2U, events.size());
509 531
510 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, 532 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
511 events[0].event_type); 533 events[0].event_type);
512 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[1].event_type); 534 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type);
513 EXPECT_EQ(net::OK, result); 535 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code);
514 } 536 }
515 537
516 } // namespace net 538 } // namespace net
OLDNEW
« no previous file with comments | « net/socket_stream/socket_stream.cc ('k') | net/websockets/websocket_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698