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

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

Issue 1499163002: Fix ASAN test failure in QUIC's CryptoHandshakeMessageTest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@108754896
Patch Set: Created 5 years 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/quic/test_tools/quic_test_utils.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_spdy_server_stream.h" 5 #include "net/tools/quic/quic_spdy_server_stream.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/string_piece.h" 8 #include "base/strings/string_piece.h"
9 #include "net/quic/quic_connection.h" 9 #include "net/quic/quic_connection.h"
10 #include "net/quic/quic_flags.h" 10 #include "net/quic/quic_flags.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 123
124 SpdyHeaderBlock response_headers_; 124 SpdyHeaderBlock response_headers_;
125 MockConnectionHelper helper_; 125 MockConnectionHelper helper_;
126 StrictMock<MockConnection>* connection_; 126 StrictMock<MockConnection>* connection_;
127 StrictMock<MockQuicSpdySession> session_; 127 StrictMock<MockQuicSpdySession> session_;
128 QuicSpdyServerStreamPeer* stream_; // Owned by session_. 128 QuicSpdyServerStreamPeer* stream_; // Owned by session_.
129 string headers_string_; 129 string headers_string_;
130 string body_; 130 string body_;
131 }; 131 };
132 132
133 QuicConsumedData ConsumeAllData(
134 QuicStreamId /*id*/,
135 const QuicIOVector& data,
136 QuicStreamOffset /*offset*/,
137 bool fin,
138 FecProtection /*fec_protection_*/,
139 QuicAckListenerInterface* /*ack_notifier_delegate*/) {
140 return QuicConsumedData(data.total_length, fin);
141 }
142
143 INSTANTIATE_TEST_CASE_P(Tests, 133 INSTANTIATE_TEST_CASE_P(Tests,
144 QuicSpdyServerStreamTest, 134 QuicSpdyServerStreamTest,
145 ::testing::ValuesIn(QuicSupportedVersions())); 135 ::testing::ValuesIn(QuicSupportedVersions()));
146 136
147 TEST_P(QuicSpdyServerStreamTest, TestFraming) { 137 TEST_P(QuicSpdyServerStreamTest, TestFraming) {
148 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 138 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
149 WillRepeatedly(Invoke(ConsumeAllData)); 139 .Times(AnyNumber())
140 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
150 stream_->OnStreamHeaders(headers_string_); 141 stream_->OnStreamHeaders(headers_string_);
151 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 142 stream_->OnStreamHeadersComplete(false, headers_string_.size());
152 stream_->OnStreamFrame( 143 stream_->OnStreamFrame(
153 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 144 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
154 EXPECT_EQ("11", StreamHeadersValue("content-length")); 145 EXPECT_EQ("11", StreamHeadersValue("content-length"));
155 EXPECT_EQ("/", StreamHeadersValue(":path")); 146 EXPECT_EQ("/", StreamHeadersValue(":path"));
156 EXPECT_EQ("POST", StreamHeadersValue(":method")); 147 EXPECT_EQ("POST", StreamHeadersValue(":method"));
157 EXPECT_EQ(body_, StreamBody()); 148 EXPECT_EQ(body_, StreamBody());
158 } 149 }
159 150
160 TEST_P(QuicSpdyServerStreamTest, TestFramingOnePacket) { 151 TEST_P(QuicSpdyServerStreamTest, TestFramingOnePacket) {
161 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 152 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
162 WillRepeatedly(Invoke(ConsumeAllData)); 153 .Times(AnyNumber())
154 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
163 155
164 stream_->OnStreamHeaders(headers_string_); 156 stream_->OnStreamHeaders(headers_string_);
165 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 157 stream_->OnStreamHeadersComplete(false, headers_string_.size());
166 stream_->OnStreamFrame( 158 stream_->OnStreamFrame(
167 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 159 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
168 EXPECT_EQ("11", StreamHeadersValue("content-length")); 160 EXPECT_EQ("11", StreamHeadersValue("content-length"));
169 EXPECT_EQ("/", StreamHeadersValue(":path")); 161 EXPECT_EQ("/", StreamHeadersValue(":path"));
170 EXPECT_EQ("POST", StreamHeadersValue(":method")); 162 EXPECT_EQ("POST", StreamHeadersValue(":method"));
171 EXPECT_EQ(body_, StreamBody()); 163 EXPECT_EQ(body_, StreamBody());
172 } 164 }
173 165
174 TEST_P(QuicSpdyServerStreamTest, SendQuicRstStreamNoErrorInStopReading) { 166 TEST_P(QuicSpdyServerStreamTest, SendQuicRstStreamNoErrorInStopReading) {
175 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 167 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
176 .Times(AnyNumber()) 168 .Times(AnyNumber())
177 .WillRepeatedly(Invoke(ConsumeAllData)); 169 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
178 170
179 EXPECT_FALSE(stream_->fin_received()); 171 EXPECT_FALSE(stream_->fin_received());
180 EXPECT_FALSE(stream_->rst_received()); 172 EXPECT_FALSE(stream_->rst_received());
181 173
182 stream_->set_fin_sent(true); 174 stream_->set_fin_sent(true);
183 stream_->CloseWriteSide(); 175 stream_->CloseWriteSide();
184 176
185 if (GetParam() > QUIC_VERSION_28) { 177 if (GetParam() > QUIC_VERSION_28) {
186 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1); 178 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1);
187 } else { 179 } else {
188 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 180 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
189 } 181 }
190 stream_->StopReading(); 182 stream_->StopReading();
191 } 183 }
192 184
193 TEST_P(QuicSpdyServerStreamTest, TestFramingExtraData) { 185 TEST_P(QuicSpdyServerStreamTest, TestFramingExtraData) {
194 string large_body = "hello world!!!!!!"; 186 string large_body = "hello world!!!!!!";
195 187
196 // We'll automatically write out an error (headers + body) 188 // We'll automatically write out an error (headers + body)
197 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 189 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
198 WillRepeatedly(Invoke(ConsumeAllData)); 190 .Times(2)
191 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
199 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 192 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
200 193
201 stream_->OnStreamHeaders(headers_string_); 194 stream_->OnStreamHeaders(headers_string_);
202 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 195 stream_->OnStreamHeadersComplete(false, headers_string_.size());
203 stream_->OnStreamFrame( 196 stream_->OnStreamFrame(
204 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 197 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
205 // Content length is still 11. This will register as an error and we won't 198 // Content length is still 11. This will register as an error and we won't
206 // accept the bytes. 199 // accept the bytes.
207 stream_->OnStreamFrame( 200 stream_->OnStreamFrame(
208 QuicStreamFrame(stream_->id(), /*fin=*/true, body_.size(), large_body)); 201 QuicStreamFrame(stream_->id(), /*fin=*/true, body_.size(), large_body));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 314 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
322 315
323 SpdyHeaderBlock request_headers; 316 SpdyHeaderBlock request_headers;
324 // \000 is a way to write the null byte when followed by a literal digit. 317 // \000 is a way to write the null byte when followed by a literal digit.
325 request_headers["content-length"] = StringPiece("11\00012", 5); 318 request_headers["content-length"] = StringPiece("11\00012", 5);
326 319
327 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 320 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
328 321
329 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 322 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
330 .Times(AnyNumber()) 323 .Times(AnyNumber())
331 .WillRepeatedly(Invoke(ConsumeAllData)); 324 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
332 stream_->OnStreamHeaders(headers_string_); 325 stream_->OnStreamHeaders(headers_string_);
333 stream_->OnStreamHeadersComplete(true, headers_string_.size()); 326 stream_->OnStreamHeadersComplete(true, headers_string_.size());
334 327
335 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 328 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
336 EXPECT_TRUE(stream_->reading_stopped()); 329 EXPECT_TRUE(stream_->reading_stopped());
337 EXPECT_TRUE(stream_->write_side_closed()); 330 EXPECT_TRUE(stream_->write_side_closed());
338 } 331 }
339 332
340 TEST_P(QuicSpdyServerStreamTest, InvalidLeadingNullContentLength) { 333 TEST_P(QuicSpdyServerStreamTest, InvalidLeadingNullContentLength) {
341 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 334 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
342 335
343 SpdyHeaderBlock request_headers; 336 SpdyHeaderBlock request_headers;
344 // \000 is a way to write the null byte when followed by a literal digit. 337 // \000 is a way to write the null byte when followed by a literal digit.
345 request_headers["content-length"] = StringPiece("\00012", 3); 338 request_headers["content-length"] = StringPiece("\00012", 3);
346 339
347 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 340 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
348 341
349 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 342 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
350 .Times(AnyNumber()) 343 .Times(AnyNumber())
351 .WillRepeatedly(Invoke(ConsumeAllData)); 344 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
352 stream_->OnStreamHeaders(headers_string_); 345 stream_->OnStreamHeaders(headers_string_);
353 stream_->OnStreamHeadersComplete(true, headers_string_.size()); 346 stream_->OnStreamHeadersComplete(true, headers_string_.size());
354 347
355 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 348 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
356 EXPECT_TRUE(stream_->reading_stopped()); 349 EXPECT_TRUE(stream_->reading_stopped());
357 EXPECT_TRUE(stream_->write_side_closed()); 350 EXPECT_TRUE(stream_->write_side_closed());
358 } 351 }
359 352
360 TEST_P(QuicSpdyServerStreamTest, ValidMultipleContentLength) { 353 TEST_P(QuicSpdyServerStreamTest, ValidMultipleContentLength) {
361 SpdyHeaderBlock request_headers; 354 SpdyHeaderBlock request_headers;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 StringPiece data(arr, arraysize(arr)); 432 StringPiece data(arr, arraysize(arr));
440 QuicStreamFrame frame(stream_->id(), true, 0, data); 433 QuicStreamFrame frame(stream_->id(), true, 0, data);
441 // Verify that we don't crash when we get a invalid headers in stream frame. 434 // Verify that we don't crash when we get a invalid headers in stream frame.
442 stream_->OnStreamFrame(frame); 435 stream_->OnStreamFrame(frame);
443 } 436 }
444 437
445 } // namespace 438 } // namespace
446 } // namespace test 439 } // namespace test
447 } // namespace tools 440 } // namespace tools
448 } // namespace net 441 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/quic_test_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698