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