OLD | NEW |
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/spdy/spdy_websocket_stream.h" | 5 #include "net/spdy/spdy_websocket_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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 DISALLOW_COPY_AND_ASSIGN(SpdyWebSocketStreamEventRecorder); | 158 DISALLOW_COPY_AND_ASSIGN(SpdyWebSocketStreamEventRecorder); |
159 }; | 159 }; |
160 | 160 |
161 } // namespace | 161 } // namespace |
162 | 162 |
163 class SpdyWebSocketStreamSpdy3Test : public testing::Test { | 163 class SpdyWebSocketStreamSpdy3Test : public testing::Test { |
164 public: | 164 public: |
165 OrderedSocketData* data() { return data_.get(); } | 165 OrderedSocketData* data() { return data_.get(); } |
166 | 166 |
167 void DoSendHelloFrame(SpdyWebSocketStreamEvent* event) { | 167 void DoSendHelloFrame(SpdyWebSocketStreamEvent* event) { |
| 168 // Record the actual stream_id. |
| 169 created_stream_id_ = websocket_stream_->stream_->stream_id(); |
168 websocket_stream_->SendData(kMessageFrame, kMessageFrameLength); | 170 websocket_stream_->SendData(kMessageFrame, kMessageFrameLength); |
169 } | 171 } |
170 | 172 |
171 void DoSendClosingFrame(SpdyWebSocketStreamEvent* event) { | 173 void DoSendClosingFrame(SpdyWebSocketStreamEvent* event) { |
172 websocket_stream_->SendData(kClosingFrame, kClosingFrameLength); | 174 websocket_stream_->SendData(kClosingFrame, kClosingFrameLength); |
173 } | 175 } |
174 | 176 |
175 void DoClose(SpdyWebSocketStreamEvent* event) { | 177 void DoClose(SpdyWebSocketStreamEvent* event) { |
176 websocket_stream_->Close(); | 178 websocket_stream_->Close(); |
177 } | 179 } |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 SpdySettingsFlags spdy_settings_flags_to_set_; | 294 SpdySettingsFlags spdy_settings_flags_to_set_; |
293 uint32 spdy_settings_value_to_set_; | 295 uint32 spdy_settings_value_to_set_; |
294 SettingsMap spdy_settings_to_send_; | 296 SettingsMap spdy_settings_to_send_; |
295 SpdySessionDependencies session_deps_; | 297 SpdySessionDependencies session_deps_; |
296 scoped_ptr<OrderedSocketData> data_; | 298 scoped_ptr<OrderedSocketData> data_; |
297 scoped_refptr<HttpNetworkSession> http_session_; | 299 scoped_refptr<HttpNetworkSession> http_session_; |
298 scoped_refptr<SpdySession> session_; | 300 scoped_refptr<SpdySession> session_; |
299 scoped_refptr<TransportSocketParams> transport_params_; | 301 scoped_refptr<TransportSocketParams> transport_params_; |
300 scoped_ptr<SpdyWebSocketStream> websocket_stream_; | 302 scoped_ptr<SpdyWebSocketStream> websocket_stream_; |
301 SpdyStreamId stream_id_; | 303 SpdyStreamId stream_id_; |
| 304 SpdyStreamId created_stream_id_; |
302 scoped_ptr<SpdyFrame> request_frame_; | 305 scoped_ptr<SpdyFrame> request_frame_; |
303 scoped_ptr<SpdyFrame> response_frame_; | 306 scoped_ptr<SpdyFrame> response_frame_; |
304 scoped_ptr<SpdyFrame> message_frame_; | 307 scoped_ptr<SpdyFrame> message_frame_; |
305 scoped_ptr<SpdyFrame> closing_frame_; | 308 scoped_ptr<SpdyFrame> closing_frame_; |
306 HostPortPair host_port_pair_; | 309 HostPortPair host_port_pair_; |
307 HostPortProxyPair host_port_proxy_pair_; | 310 HostPortProxyPair host_port_proxy_pair_; |
308 TestCompletionCallback completion_callback_; | 311 TestCompletionCallback completion_callback_; |
309 TestCompletionCallback sync_callback_; | 312 TestCompletionCallback sync_callback_; |
310 | 313 |
311 static const char kMessageFrame[]; | 314 static const char kMessageFrame[]; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 base::Bind(&SpdyWebSocketStreamSpdy3Test::DoSendClosingFrame, | 354 base::Bind(&SpdyWebSocketStreamSpdy3Test::DoSendClosingFrame, |
352 base::Unretained(this))); | 355 base::Unretained(this))); |
353 | 356 |
354 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); | 357 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); |
355 | 358 |
356 BoundNetLog net_log; | 359 BoundNetLog net_log; |
357 GURL url("ws://example.com/echo"); | 360 GURL url("ws://example.com/echo"); |
358 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log)); | 361 ASSERT_EQ(OK, websocket_stream_->InitializeStream(url, HIGHEST, net_log)); |
359 | 362 |
360 ASSERT_TRUE(websocket_stream_->stream_); | 363 ASSERT_TRUE(websocket_stream_->stream_); |
361 EXPECT_EQ(stream_id_, websocket_stream_->stream_->stream_id()); | |
362 | 364 |
363 SendRequest(); | 365 SendRequest(); |
364 | 366 |
365 completion_callback_.WaitForResult(); | 367 completion_callback_.WaitForResult(); |
366 | 368 |
| 369 EXPECT_EQ(stream_id_, created_stream_id_); |
| 370 |
367 websocket_stream_.reset(); | 371 websocket_stream_.reset(); |
368 | 372 |
369 const std::vector<SpdyWebSocketStreamEvent>& events = | 373 const std::vector<SpdyWebSocketStreamEvent>& events = |
370 delegate.GetSeenEvents(); | 374 delegate.GetSeenEvents(); |
371 ASSERT_EQ(7U, events.size()); | 375 ASSERT_EQ(7U, events.size()); |
372 | 376 |
373 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, | 377 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_SENT_HEADERS, |
374 events[0].event_type); | 378 events[0].event_type); |
375 EXPECT_LT(0, events[0].result); | 379 EXPECT_LT(0, events[0].result); |
376 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, | 380 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_HEADER, |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, | 520 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_RECEIVED_DATA, |
517 events[3].event_type); | 521 events[3].event_type); |
518 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result); | 522 EXPECT_EQ(static_cast<int>(kMessageFrameLength), events[3].result); |
519 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[4].event_type); | 523 EXPECT_EQ(SpdyWebSocketStreamEvent::EVENT_CLOSE, events[4].event_type); |
520 | 524 |
521 EXPECT_TRUE(http_session_->spdy_session_pool()->HasSession( | 525 EXPECT_TRUE(http_session_->spdy_session_pool()->HasSession( |
522 host_port_proxy_pair_)); | 526 host_port_proxy_pair_)); |
523 } | 527 } |
524 | 528 |
525 TEST_F(SpdyWebSocketStreamSpdy3Test, IOPending) { | 529 TEST_F(SpdyWebSocketStreamSpdy3Test, IOPending) { |
526 Prepare(3); | 530 Prepare(1); |
527 scoped_ptr<SpdyFrame> settings_frame( | 531 scoped_ptr<SpdyFrame> settings_frame( |
528 ConstructSpdySettings(spdy_settings_to_send_)); | 532 ConstructSpdySettings(spdy_settings_to_send_)); |
529 MockWrite writes[] = { | 533 MockWrite writes[] = { |
530 // Setting throttling make SpdySession send settings frame automatically. | 534 // Setting throttling make SpdySession send settings frame automatically. |
531 CreateMockWrite(*settings_frame.get(), 1), | 535 CreateMockWrite(*settings_frame.get(), 1), |
532 CreateMockWrite(*request_frame_.get(), 3), | 536 CreateMockWrite(*request_frame_.get(), 3), |
533 CreateMockWrite(*message_frame_.get(), 6), | 537 CreateMockWrite(*message_frame_.get(), 6), |
534 CreateMockWrite(*closing_frame_.get(), 9) | 538 CreateMockWrite(*closing_frame_.get(), 9) |
535 }; | 539 }; |
536 | 540 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 delegate.SetOnReceivedData( | 573 delegate.SetOnReceivedData( |
570 base::Bind(&SpdyWebSocketStreamSpdy3Test::DoSendClosingFrame, | 574 base::Bind(&SpdyWebSocketStreamSpdy3Test::DoSendClosingFrame, |
571 base::Unretained(this))); | 575 base::Unretained(this))); |
572 | 576 |
573 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); | 577 websocket_stream_.reset(new SpdyWebSocketStream(session_, &delegate)); |
574 BoundNetLog net_log; | 578 BoundNetLog net_log; |
575 GURL url("ws://example.com/echo"); | 579 GURL url("ws://example.com/echo"); |
576 ASSERT_EQ(ERR_IO_PENDING, websocket_stream_->InitializeStream( | 580 ASSERT_EQ(ERR_IO_PENDING, websocket_stream_->InitializeStream( |
577 url, HIGHEST, net_log)); | 581 url, HIGHEST, net_log)); |
578 | 582 |
579 // Delete the fist stream to allow create the second stream. | 583 // Delete the first stream to allow create the second stream. |
580 block_stream.reset(); | 584 block_stream.reset(); |
581 ASSERT_EQ(OK, sync_callback_.WaitForResult()); | 585 ASSERT_EQ(OK, sync_callback_.WaitForResult()); |
582 | 586 |
583 SendRequest(); | 587 SendRequest(); |
584 | 588 |
585 completion_callback_.WaitForResult(); | 589 completion_callback_.WaitForResult(); |
586 | 590 |
587 websocket_stream_.reset(); | 591 websocket_stream_.reset(); |
588 | 592 |
589 const std::vector<SpdyWebSocketStreamEvent>& block_events = | 593 const std::vector<SpdyWebSocketStreamEvent>& block_events = |
(...skipping 29 matching lines...) Expand all Loading... |
619 EXPECT_EQ(OK, events[7].result); | 623 EXPECT_EQ(OK, events[7].result); |
620 | 624 |
621 // EOF close SPDY session. | 625 // EOF close SPDY session. |
622 EXPECT_TRUE(!http_session_->spdy_session_pool()->HasSession( | 626 EXPECT_TRUE(!http_session_->spdy_session_pool()->HasSession( |
623 host_port_proxy_pair_)); | 627 host_port_proxy_pair_)); |
624 EXPECT_TRUE(data()->at_read_eof()); | 628 EXPECT_TRUE(data()->at_read_eof()); |
625 EXPECT_TRUE(data()->at_write_eof()); | 629 EXPECT_TRUE(data()->at_write_eof()); |
626 } | 630 } |
627 | 631 |
628 } // namespace net | 632 } // namespace net |
OLD | NEW |