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

Side by Side Diff: net/spdy/spdy_websocket_stream_spdy3_unittest.cc

Issue 10448083: Fix out of order SYN_STEAM frames. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address willchan's comments. Created 8 years, 6 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/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
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
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
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
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
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
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
OLDNEW
« net/spdy/spdy_stream.cc ('K') | « net/spdy/spdy_websocket_stream_spdy2_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698