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

Side by Side Diff: net/tools/quic/quic_simple_server_stream_test.cc

Issue 2438163002: Remove SpdyFramerVisitorInterface::OnControlFrameHeaderData(). (Closed)
Patch Set: rebase Created 4 years, 2 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
« no previous file with comments | « net/tools/quic/quic_simple_server_stream.cc ('k') | no next file » | 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/tools/quic/quic_simple_server_stream.h" 5 #include "net/tools/quic/quic_simple_server_stream.h"
6 6
7 #include <list> 7 #include <list>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 using testing::Invoke; 43 using testing::Invoke;
44 using testing::InvokeArgument; 44 using testing::InvokeArgument;
45 using testing::InSequence; 45 using testing::InSequence;
46 using testing::Return; 46 using testing::Return;
47 using testing::StrictMock; 47 using testing::StrictMock;
48 using testing::WithArgs; 48 using testing::WithArgs;
49 49
50 namespace net { 50 namespace net {
51 namespace test { 51 namespace test {
52 52
53 size_t kFakeFrameLen = 60;
54
53 class QuicSimpleServerStreamPeer : public QuicSimpleServerStream { 55 class QuicSimpleServerStreamPeer : public QuicSimpleServerStream {
54 public: 56 public:
55 QuicSimpleServerStreamPeer(QuicStreamId stream_id, QuicSpdySession* session) 57 QuicSimpleServerStreamPeer(QuicStreamId stream_id, QuicSpdySession* session)
56 : QuicSimpleServerStream(stream_id, session) {} 58 : QuicSimpleServerStream(stream_id, session) {}
57 59
58 ~QuicSimpleServerStreamPeer() override{}; 60 ~QuicSimpleServerStreamPeer() override{};
59 61
60 using QuicSimpleServerStream::SendResponse; 62 using QuicSimpleServerStream::SendResponse;
61 using QuicSimpleServerStream::SendErrorResponse; 63 using QuicSimpleServerStream::SendErrorResponse;
62 64
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 const string& error_details, 114 const string& error_details,
113 ConnectionCloseSource source)); 115 ConnectionCloseSource source));
114 MOCK_METHOD1(CreateIncomingDynamicStream, QuicSpdyStream*(QuicStreamId id)); 116 MOCK_METHOD1(CreateIncomingDynamicStream, QuicSpdyStream*(QuicStreamId id));
115 MOCK_METHOD6(WritevData, 117 MOCK_METHOD6(WritevData,
116 QuicConsumedData(ReliableQuicStream* stream, 118 QuicConsumedData(ReliableQuicStream* stream,
117 QuicStreamId id, 119 QuicStreamId id,
118 QuicIOVector data, 120 QuicIOVector data,
119 QuicStreamOffset offset, 121 QuicStreamOffset offset,
120 bool fin, 122 bool fin,
121 QuicAckListenerInterface*)); 123 QuicAckListenerInterface*));
122 MOCK_METHOD2(OnStreamHeaders, 124 MOCK_METHOD4(OnStreamHeaderList,
123 void(QuicStreamId stream_id, StringPiece headers_data)); 125 void(QuicStreamId stream_id,
126 bool fin,
127 size_t frame_len,
128 const QuicHeaderList& header_list));
124 MOCK_METHOD2(OnStreamHeadersPriority, 129 MOCK_METHOD2(OnStreamHeadersPriority,
125 void(QuicStreamId stream_id, SpdyPriority priority)); 130 void(QuicStreamId stream_id, SpdyPriority priority));
126 MOCK_METHOD3(OnStreamHeadersComplete,
127 void(QuicStreamId stream_id, bool fin, size_t frame_len));
128 // Methods taking non-copyable types like SpdyHeaderBlock by value cannot be 131 // Methods taking non-copyable types like SpdyHeaderBlock by value cannot be
129 // mocked directly. 132 // mocked directly.
130 size_t WriteHeaders( 133 size_t WriteHeaders(
131 QuicStreamId id, 134 QuicStreamId id,
132 SpdyHeaderBlock headers, 135 SpdyHeaderBlock headers,
133 bool fin, 136 bool fin,
134 SpdyPriority priority, 137 SpdyPriority priority,
135 QuicAckListenerInterface* ack_notifier_delegate) override { 138 QuicAckListenerInterface* ack_notifier_delegate) override {
136 return WriteHeadersMock(id, headers, fin, priority, ack_notifier_delegate); 139 return WriteHeadersMock(id, headers, fin, priority, ack_notifier_delegate);
137 } 140 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 QuicRandom::GetInstance(), 189 QuicRandom::GetInstance(),
187 ::net::test::CryptoTestUtils::ProofSourceForTesting())), 190 ::net::test::CryptoTestUtils::ProofSourceForTesting())),
188 compressed_certs_cache_( 191 compressed_certs_cache_(
189 QuicCompressedCertsCache::kQuicCompressedCertsCacheSize), 192 QuicCompressedCertsCache::kQuicCompressedCertsCacheSize),
190 session_(connection_, 193 session_(connection_,
191 &session_owner_, 194 &session_owner_,
192 &session_helper_, 195 &session_helper_,
193 crypto_config_.get(), 196 crypto_config_.get(),
194 &compressed_certs_cache_), 197 &compressed_certs_cache_),
195 body_("hello world") { 198 body_("hello world") {
196 SpdyHeaderBlock request_headers; 199 header_list_.OnHeaderBlockStart();
197 request_headers[":host"] = ""; 200 header_list_.OnHeader(":authority", "www.google.com");
198 request_headers[":authority"] = "www.google.com"; 201 header_list_.OnHeader(":path", "/");
199 request_headers[":path"] = "/"; 202 header_list_.OnHeader(":method", "POST");
200 request_headers[":method"] = "POST"; 203 header_list_.OnHeader(":version", "HTTP/1.1");
201 request_headers[":version"] = "HTTP/1.1"; 204 header_list_.OnHeader("content-length", "11");
202 request_headers["content-length"] = "11"; 205 header_list_.OnHeaderBlockEnd(128);
203
204 headers_string_ =
205 net::SpdyUtils::SerializeUncompressedHeaders(request_headers);
206 206
207 // New streams rely on having the peer's flow control receive window 207 // New streams rely on having the peer's flow control receive window
208 // negotiated in the config. 208 // negotiated in the config.
209 session_.config()->SetInitialStreamFlowControlWindowToSend( 209 session_.config()->SetInitialStreamFlowControlWindowToSend(
210 kInitialStreamFlowControlWindowForTest); 210 kInitialStreamFlowControlWindowForTest);
211 session_.config()->SetInitialSessionFlowControlWindowToSend( 211 session_.config()->SetInitialSessionFlowControlWindowToSend(
212 kInitialSessionFlowControlWindowForTest); 212 kInitialSessionFlowControlWindowForTest);
213 stream_ = new QuicSimpleServerStreamPeer(::net::test::kClientDataStreamId1, 213 stream_ = new QuicSimpleServerStreamPeer(::net::test::kClientDataStreamId1,
214 &session_); 214 &session_);
215 // Register stream_ in dynamic_stream_map_ and pass ownership to session_. 215 // Register stream_ in dynamic_stream_map_ and pass ownership to session_.
(...skipping 19 matching lines...) Expand all
235 MockAlarmFactory alarm_factory_; 235 MockAlarmFactory alarm_factory_;
236 StrictMock<MockQuicConnection>* connection_; 236 StrictMock<MockQuicConnection>* connection_;
237 StrictMock<MockQuicServerSessionVisitor> session_owner_; 237 StrictMock<MockQuicServerSessionVisitor> session_owner_;
238 StrictMock<MockQuicCryptoServerStreamHelper> session_helper_; 238 StrictMock<MockQuicCryptoServerStreamHelper> session_helper_;
239 std::unique_ptr<QuicCryptoServerConfig> crypto_config_; 239 std::unique_ptr<QuicCryptoServerConfig> crypto_config_;
240 QuicCompressedCertsCache compressed_certs_cache_; 240 QuicCompressedCertsCache compressed_certs_cache_;
241 StrictMock<MockQuicSimpleServerSession> session_; 241 StrictMock<MockQuicSimpleServerSession> session_;
242 QuicSimpleServerStreamPeer* stream_; // Owned by session_. 242 QuicSimpleServerStreamPeer* stream_; // Owned by session_.
243 string headers_string_; 243 string headers_string_;
244 string body_; 244 string body_;
245 QuicHeaderList header_list_;
245 }; 246 };
246 247
247 INSTANTIATE_TEST_CASE_P(Tests, 248 INSTANTIATE_TEST_CASE_P(Tests,
248 QuicSimpleServerStreamTest, 249 QuicSimpleServerStreamTest,
249 ::testing::ValuesIn(AllSupportedVersions())); 250 ::testing::ValuesIn(AllSupportedVersions()));
250 251
251 TEST_P(QuicSimpleServerStreamTest, TestFraming) { 252 TEST_P(QuicSimpleServerStreamTest, TestFraming) {
252 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 253 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
253 .Times(AnyNumber()) 254 .Times(AnyNumber())
254 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 255 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
255 stream_->OnStreamHeaders(headers_string_); 256 stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
256 stream_->OnStreamHeadersComplete(false, headers_string_.size());
257 stream_->OnStreamFrame( 257 stream_->OnStreamFrame(
258 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 258 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
259 EXPECT_EQ("11", StreamHeadersValue("content-length")); 259 EXPECT_EQ("11", StreamHeadersValue("content-length"));
260 EXPECT_EQ("/", StreamHeadersValue(":path")); 260 EXPECT_EQ("/", StreamHeadersValue(":path"));
261 EXPECT_EQ("POST", StreamHeadersValue(":method")); 261 EXPECT_EQ("POST", StreamHeadersValue(":method"));
262 EXPECT_EQ(body_, StreamBody()); 262 EXPECT_EQ(body_, StreamBody());
263 } 263 }
264 264
265 TEST_P(QuicSimpleServerStreamTest, TestFramingOnePacket) { 265 TEST_P(QuicSimpleServerStreamTest, TestFramingOnePacket) {
266 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 266 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
267 .Times(AnyNumber()) 267 .Times(AnyNumber())
268 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 268 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
269 269
270 stream_->OnStreamHeaders(headers_string_); 270 stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
271 stream_->OnStreamHeadersComplete(false, headers_string_.size());
272 stream_->OnStreamFrame( 271 stream_->OnStreamFrame(
273 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 272 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
274 EXPECT_EQ("11", StreamHeadersValue("content-length")); 273 EXPECT_EQ("11", StreamHeadersValue("content-length"));
275 EXPECT_EQ("/", StreamHeadersValue(":path")); 274 EXPECT_EQ("/", StreamHeadersValue(":path"));
276 EXPECT_EQ("POST", StreamHeadersValue(":method")); 275 EXPECT_EQ("POST", StreamHeadersValue(":method"));
277 EXPECT_EQ(body_, StreamBody()); 276 EXPECT_EQ(body_, StreamBody());
278 } 277 }
279 278
280 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorInStopReading) { 279 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorInStopReading) {
281 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 280 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
(...skipping 12 matching lines...) Expand all
294 293
295 TEST_P(QuicSimpleServerStreamTest, TestFramingExtraData) { 294 TEST_P(QuicSimpleServerStreamTest, TestFramingExtraData) {
296 string large_body = "hello world!!!!!!"; 295 string large_body = "hello world!!!!!!";
297 296
298 // We'll automatically write out an error (headers + body) 297 // We'll automatically write out an error (headers + body)
299 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _)); 298 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
300 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 299 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
301 .WillOnce(Invoke(MockQuicSession::ConsumeAllData)); 300 .WillOnce(Invoke(MockQuicSession::ConsumeAllData));
302 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 301 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
303 302
304 stream_->OnStreamHeaders(headers_string_); 303 stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
305 stream_->OnStreamHeadersComplete(false, headers_string_.size());
306 stream_->OnStreamFrame( 304 stream_->OnStreamFrame(
307 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 305 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
308 // Content length is still 11. This will register as an error and we won't 306 // Content length is still 11. This will register as an error and we won't
309 // accept the bytes. 307 // accept the bytes.
310 stream_->OnStreamFrame( 308 stream_->OnStreamFrame(
311 QuicStreamFrame(stream_->id(), /*fin=*/true, body_.size(), large_body)); 309 QuicStreamFrame(stream_->id(), /*fin=*/true, body_.size(), large_body));
312 EXPECT_EQ("11", StreamHeadersValue("content-length")); 310 EXPECT_EQ("11", StreamHeadersValue("content-length"));
313 EXPECT_EQ("/", StreamHeadersValue(":path")); 311 EXPECT_EQ("/", StreamHeadersValue(":path"));
314 EXPECT_EQ("POST", StreamHeadersValue(":method")); 312 EXPECT_EQ("POST", StreamHeadersValue(":method"));
315 } 313 }
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 531 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
534 EXPECT_TRUE(stream_->reading_stopped()); 532 EXPECT_TRUE(stream_->reading_stopped());
535 EXPECT_TRUE(stream_->write_side_closed()); 533 EXPECT_TRUE(stream_->write_side_closed());
536 } 534 }
537 535
538 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) { 536 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) {
539 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 537 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
540 538
541 SpdyHeaderBlock request_headers; 539 SpdyHeaderBlock request_headers;
542 // \000 is a way to write the null byte when followed by a literal digit. 540 // \000 is a way to write the null byte when followed by a literal digit.
543 request_headers["content-length"] = StringPiece("11\00012", 5); 541 header_list_.OnHeader("content-length", StringPiece("11\00012", 5));
544 542
545 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 543 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
546 544
547 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _)); 545 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
548 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 546 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
549 .Times(AnyNumber()) 547 .Times(AnyNumber())
550 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 548 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
551 stream_->OnStreamHeaders(headers_string_); 549 stream_->OnStreamHeaderList(true, kFakeFrameLen, header_list_);
552 stream_->OnStreamHeadersComplete(true, headers_string_.size());
553 550
554 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 551 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
555 EXPECT_TRUE(stream_->reading_stopped()); 552 EXPECT_TRUE(stream_->reading_stopped());
556 EXPECT_TRUE(stream_->write_side_closed()); 553 EXPECT_TRUE(stream_->write_side_closed());
557 } 554 }
558 555
559 TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) { 556 TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) {
560 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 557 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
561 558
562 SpdyHeaderBlock request_headers; 559 SpdyHeaderBlock request_headers;
563 // \000 is a way to write the null byte when followed by a literal digit. 560 // \000 is a way to write the null byte when followed by a literal digit.
564 request_headers["content-length"] = StringPiece("\00012", 3); 561 header_list_.OnHeader("content-length", StringPiece("\00012", 3));
565 562
566 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 563 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
567 564
568 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _)); 565 EXPECT_CALL(session_, WriteHeadersMock(_, _, _, _, _));
569 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 566 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
570 .Times(AnyNumber()) 567 .Times(AnyNumber())
571 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData)); 568 .WillRepeatedly(Invoke(MockQuicSession::ConsumeAllData));
572 stream_->OnStreamHeaders(headers_string_); 569 stream_->OnStreamHeaderList(true, kFakeFrameLen, header_list_);
573 stream_->OnStreamHeadersComplete(true, headers_string_.size());
574 570
575 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 571 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
576 EXPECT_TRUE(stream_->reading_stopped()); 572 EXPECT_TRUE(stream_->reading_stopped());
577 EXPECT_TRUE(stream_->write_side_closed()); 573 EXPECT_TRUE(stream_->write_side_closed());
578 } 574 }
579 575
580 TEST_P(QuicSimpleServerStreamTest, ValidMultipleContentLength) { 576 TEST_P(QuicSimpleServerStreamTest, ValidMultipleContentLength) {
581 SpdyHeaderBlock request_headers; 577 SpdyHeaderBlock request_headers;
582 // \000 is a way to write the null byte when followed by a literal digit. 578 // \000 is a way to write the null byte when followed by a literal digit.
583 request_headers["content-length"] = StringPiece("11\00011", 5); 579 header_list_.OnHeader("content-length", StringPiece("11\00011", 5));
584 580
585 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 581 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
586 582
587 stream_->OnStreamHeaders(headers_string_); 583 stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
588 stream_->OnStreamHeadersComplete(false, headers_string_.size());
589 584
590 EXPECT_EQ(11, QuicSimpleServerStreamPeer::content_length(stream_)); 585 EXPECT_EQ(11, QuicSimpleServerStreamPeer::content_length(stream_));
591 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 586 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
592 EXPECT_FALSE(stream_->reading_stopped()); 587 EXPECT_FALSE(stream_->reading_stopped());
593 EXPECT_FALSE(stream_->write_side_closed()); 588 EXPECT_FALSE(stream_->write_side_closed());
594 } 589 }
595 590
596 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) { 591 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) {
597 InSequence s; 592 InSequence s;
598 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr)); 593 EXPECT_CALL(session_, WriteHeadersMock(stream_->id(), _, false, _, nullptr));
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 }; 641 };
647 StringPiece data(arr, arraysize(arr)); 642 StringPiece data(arr, arraysize(arr));
648 QuicStreamFrame frame(stream_->id(), true, 0, data); 643 QuicStreamFrame frame(stream_->id(), true, 0, data);
649 // Verify that we don't crash when we get a invalid headers in stream frame. 644 // Verify that we don't crash when we get a invalid headers in stream frame.
650 stream_->OnStreamFrame(frame); 645 stream_->OnStreamFrame(frame);
651 } 646 }
652 647
653 } // namespace 648 } // namespace
654 } // namespace test 649 } // namespace test
655 } // namespace net 650 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_simple_server_stream.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698