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

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

Issue 1437023002: Landing Recent QUIC changes until 2015-11-09 20:32 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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_client_bin.cc ('k') | net/tools/quic/test_tools/quic_test_client.h » ('j') | 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 return stream->content_length_; 70 return stream->content_length_;
71 } 71 }
72 72
73 static const SpdyHeaderBlock& headers(QuicSpdyServerStream* stream) { 73 static const SpdyHeaderBlock& headers(QuicSpdyServerStream* stream) {
74 return stream->request_headers_; 74 return stream->request_headers_;
75 } 75 }
76 }; 76 };
77 77
78 namespace { 78 namespace {
79 79
80 class QuicSpdyServerStreamTest : public ::testing::Test { 80 class QuicSpdyServerStreamTest : public ::testing::TestWithParam<QuicVersion> {
81 public: 81 public:
82 QuicSpdyServerStreamTest() 82 QuicSpdyServerStreamTest()
83 : connection_( 83 : connection_(
84 new StrictMock<MockConnection>(&helper_, Perspective::IS_SERVER)), 84 new StrictMock<MockConnection>(&helper_,
85 Perspective::IS_SERVER,
86 SupportedVersions(GetParam()))),
85 session_(connection_), 87 session_(connection_),
86 body_("hello world") { 88 body_("hello world") {
87 SpdyHeaderBlock request_headers; 89 SpdyHeaderBlock request_headers;
88 request_headers[":host"] = ""; 90 request_headers[":host"] = "";
89 request_headers[":authority"] = ""; 91 request_headers[":authority"] = "";
90 request_headers[":path"] = "/"; 92 request_headers[":path"] = "/";
91 request_headers[":method"] = "POST"; 93 request_headers[":method"] = "POST";
92 request_headers[":version"] = "HTTP/1.1"; 94 request_headers[":version"] = "HTTP/1.1";
93 request_headers["content-length"] = "11"; 95 request_headers["content-length"] = "11";
94 96
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 QuicConsumedData ConsumeAllData( 139 QuicConsumedData ConsumeAllData(
138 QuicStreamId /*id*/, 140 QuicStreamId /*id*/,
139 const QuicIOVector& data, 141 const QuicIOVector& data,
140 QuicStreamOffset /*offset*/, 142 QuicStreamOffset /*offset*/,
141 bool fin, 143 bool fin,
142 FecProtection /*fec_protection_*/, 144 FecProtection /*fec_protection_*/,
143 QuicAckListenerInterface* /*ack_notifier_delegate*/) { 145 QuicAckListenerInterface* /*ack_notifier_delegate*/) {
144 return QuicConsumedData(data.total_length, fin); 146 return QuicConsumedData(data.total_length, fin);
145 } 147 }
146 148
147 TEST_F(QuicSpdyServerStreamTest, TestFraming) { 149 INSTANTIATE_TEST_CASE_P(Tests,
150 QuicSpdyServerStreamTest,
151 ::testing::ValuesIn(QuicSupportedVersions()));
152
153 TEST_P(QuicSpdyServerStreamTest, TestFraming) {
148 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 154 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
149 WillRepeatedly(Invoke(ConsumeAllData)); 155 WillRepeatedly(Invoke(ConsumeAllData));
150 stream_->OnStreamHeaders(headers_string_); 156 stream_->OnStreamHeaders(headers_string_);
151 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 157 stream_->OnStreamHeadersComplete(false, headers_string_.size());
152 stream_->OnStreamFrame( 158 stream_->OnStreamFrame(
153 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 159 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
154 EXPECT_EQ("11", StreamHeadersValue("content-length")); 160 EXPECT_EQ("11", StreamHeadersValue("content-length"));
155 EXPECT_EQ("/", StreamHeadersValue(":path")); 161 EXPECT_EQ("/", StreamHeadersValue(":path"));
156 EXPECT_EQ("POST", StreamHeadersValue(":method")); 162 EXPECT_EQ("POST", StreamHeadersValue(":method"));
157 EXPECT_EQ(body_, StreamBody()); 163 EXPECT_EQ(body_, StreamBody());
158 } 164 }
159 165
160 TEST_F(QuicSpdyServerStreamTest, TestFramingOnePacket) { 166 TEST_P(QuicSpdyServerStreamTest, TestFramingOnePacket) {
161 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 167 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
162 WillRepeatedly(Invoke(ConsumeAllData)); 168 WillRepeatedly(Invoke(ConsumeAllData));
163 169
164 stream_->OnStreamHeaders(headers_string_); 170 stream_->OnStreamHeaders(headers_string_);
165 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 171 stream_->OnStreamHeadersComplete(false, headers_string_.size());
166 stream_->OnStreamFrame( 172 stream_->OnStreamFrame(
167 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 173 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
168 EXPECT_EQ("11", StreamHeadersValue("content-length")); 174 EXPECT_EQ("11", StreamHeadersValue("content-length"));
169 EXPECT_EQ("/", StreamHeadersValue(":path")); 175 EXPECT_EQ("/", StreamHeadersValue(":path"));
170 EXPECT_EQ("POST", StreamHeadersValue(":method")); 176 EXPECT_EQ("POST", StreamHeadersValue(":method"));
171 EXPECT_EQ(body_, StreamBody()); 177 EXPECT_EQ(body_, StreamBody());
172 } 178 }
173 179
174 TEST_F(QuicSpdyServerStreamTest, TestFramingExtraData) { 180 TEST_P(QuicSpdyServerStreamTest, SendQuicRstStreamNoErrorInStopReading) {
181 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
182 .Times(AnyNumber())
183 .WillRepeatedly(Invoke(ConsumeAllData));
184
185 EXPECT_FALSE(stream_->fin_received());
186 EXPECT_FALSE(stream_->rst_received());
187
188 stream_->set_fin_sent(true);
189 stream_->CloseWriteSide();
190
191 if (GetParam() > QUIC_VERSION_28) {
192 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1);
193 } else {
194 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
195 }
196 stream_->StopReading();
197 }
198
199 TEST_P(QuicSpdyServerStreamTest, TestFramingExtraData) {
175 string large_body = "hello world!!!!!!"; 200 string large_body = "hello world!!!!!!";
176 201
177 // We'll automatically write out an error (headers + body) 202 // We'll automatically write out an error (headers + body)
178 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 203 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
179 WillRepeatedly(Invoke(ConsumeAllData)); 204 WillRepeatedly(Invoke(ConsumeAllData));
205 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
180 206
181 stream_->OnStreamHeaders(headers_string_); 207 stream_->OnStreamHeaders(headers_string_);
182 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 208 stream_->OnStreamHeadersComplete(false, headers_string_.size());
183 stream_->OnStreamFrame( 209 stream_->OnStreamFrame(
184 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 210 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
185 // Content length is still 11. This will register as an error and we won't 211 // Content length is still 11. This will register as an error and we won't
186 // accept the bytes. 212 // accept the bytes.
187 stream_->OnStreamFrame( 213 stream_->OnStreamFrame(
188 QuicStreamFrame(stream_->id(), /*fin=*/false, body_.size(), large_body)); 214 QuicStreamFrame(stream_->id(), /*fin=*/true, body_.size(), large_body));
189 EXPECT_EQ("11", StreamHeadersValue("content-length")); 215 EXPECT_EQ("11", StreamHeadersValue("content-length"));
190 EXPECT_EQ("/", StreamHeadersValue(":path")); 216 EXPECT_EQ("/", StreamHeadersValue(":path"));
191 EXPECT_EQ("POST", StreamHeadersValue(":method")); 217 EXPECT_EQ("POST", StreamHeadersValue(":method"));
192 } 218 }
193 219
194 TEST_F(QuicSpdyServerStreamTest, TestSendResponse) { 220 TEST_P(QuicSpdyServerStreamTest, TestSendResponse) {
195 SpdyHeaderBlock* request_headers = stream_->mutable_headers(); 221 SpdyHeaderBlock* request_headers = stream_->mutable_headers();
196 (*request_headers)[":path"] = "/foo"; 222 (*request_headers)[":path"] = "/foo";
197 (*request_headers)[":authority"] = ""; 223 (*request_headers)[":authority"] = "";
198 (*request_headers)[":version"] = "HTTP/1.1"; 224 (*request_headers)[":version"] = "HTTP/1.1";
199 (*request_headers)[":method"] = "GET"; 225 (*request_headers)[":method"] = "GET";
200 226
201 response_headers_[":version"] = "HTTP/1.1"; 227 response_headers_[":version"] = "HTTP/1.1";
202 response_headers_[":status"] = "200 OK"; 228 response_headers_[":status"] = "200 OK";
203 response_headers_["content-length"] = "3"; 229 response_headers_["content-length"] = "3";
230 stream_->set_fin_received(true);
204 231
205 InSequence s; 232 InSequence s;
206 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr)); 233 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr));
207 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1). 234 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1).
208 WillOnce(Return(QuicConsumedData(3, true))); 235 WillOnce(Return(QuicConsumedData(3, true)));
209 236
210 QuicSpdyServerStreamPeer::SendResponse(stream_); 237 QuicSpdyServerStreamPeer::SendResponse(stream_);
211 if (!FLAGS_quic_implement_stop_reading) { 238 if (!FLAGS_quic_implement_stop_reading) {
212 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 239 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
213 } else { 240 } else {
214 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 241 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
215 } 242 }
216 EXPECT_TRUE(stream_->reading_stopped()); 243 EXPECT_TRUE(stream_->reading_stopped());
217 EXPECT_TRUE(stream_->write_side_closed()); 244 EXPECT_TRUE(stream_->write_side_closed());
218 } 245 }
219 246
220 TEST_F(QuicSpdyServerStreamTest, TestSendErrorResponse) { 247 TEST_P(QuicSpdyServerStreamTest, TestSendErrorResponse) {
248 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
249
221 response_headers_[":version"] = "HTTP/1.1"; 250 response_headers_[":version"] = "HTTP/1.1";
222 response_headers_[":status"] = "500 Server Error"; 251 response_headers_[":status"] = "500 Server Error";
223 response_headers_["content-length"] = "3"; 252 response_headers_["content-length"] = "3";
253 stream_->set_fin_received(true);
224 254
225 InSequence s; 255 InSequence s;
226 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr)); 256 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr));
227 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1). 257 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1).
228 WillOnce(Return(QuicConsumedData(3, true))); 258 WillOnce(Return(QuicConsumedData(3, true)));
229 259
230 QuicSpdyServerStreamPeer::SendErrorResponse(stream_); 260 QuicSpdyServerStreamPeer::SendErrorResponse(stream_);
231 if (!FLAGS_quic_implement_stop_reading) { 261 if (!FLAGS_quic_implement_stop_reading) {
232 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 262 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
233 } else { 263 } else {
234 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 264 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
235 } 265 }
236 EXPECT_TRUE(stream_->reading_stopped()); 266 EXPECT_TRUE(stream_->reading_stopped());
237 EXPECT_TRUE(stream_->write_side_closed()); 267 EXPECT_TRUE(stream_->write_side_closed());
238 } 268 }
239 269
240 TEST_F(QuicSpdyServerStreamTest, InvalidMultipleContentLength) { 270 TEST_P(QuicSpdyServerStreamTest, InvalidMultipleContentLength) {
271 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
272
241 SpdyHeaderBlock request_headers; 273 SpdyHeaderBlock request_headers;
242 // \000 is a way to write the null byte when followed by a literal digit. 274 // \000 is a way to write the null byte when followed by a literal digit.
243 request_headers["content-length"] = StringPiece("11\00012", 5); 275 request_headers["content-length"] = StringPiece("11\00012", 5);
244 276
245 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 277 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
246 278
247 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 279 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
248 .Times(AnyNumber()) 280 .Times(AnyNumber())
249 .WillRepeatedly(Invoke(ConsumeAllData)); 281 .WillRepeatedly(Invoke(ConsumeAllData));
282 stream_->OnStreamHeaders(headers_string_);
283 stream_->OnStreamHeadersComplete(true, headers_string_.size());
250 284
251 stream_->OnStreamHeaders(headers_string_); 285 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
252 stream_->OnStreamHeadersComplete(false, headers_string_.size());
253
254 if (!FLAGS_quic_implement_stop_reading) {
255 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
256 } else {
257 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
258 }
259 EXPECT_TRUE(stream_->reading_stopped()); 286 EXPECT_TRUE(stream_->reading_stopped());
260 EXPECT_TRUE(stream_->write_side_closed()); 287 EXPECT_TRUE(stream_->write_side_closed());
261 } 288 }
262 289
263 TEST_F(QuicSpdyServerStreamTest, InvalidLeadingNullContentLength) { 290 TEST_P(QuicSpdyServerStreamTest, InvalidLeadingNullContentLength) {
291 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
292
264 SpdyHeaderBlock request_headers; 293 SpdyHeaderBlock request_headers;
265 // \000 is a way to write the null byte when followed by a literal digit. 294 // \000 is a way to write the null byte when followed by a literal digit.
266 request_headers["content-length"] = StringPiece("\00012", 3); 295 request_headers["content-length"] = StringPiece("\00012", 3);
267 296
268 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 297 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
269 298
270 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 299 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
271 .Times(AnyNumber()) 300 .Times(AnyNumber())
272 .WillRepeatedly(Invoke(ConsumeAllData)); 301 .WillRepeatedly(Invoke(ConsumeAllData));
302 stream_->OnStreamHeaders(headers_string_);
303 stream_->OnStreamHeadersComplete(true, headers_string_.size());
273 304
274 stream_->OnStreamHeaders(headers_string_); 305 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
275 stream_->OnStreamHeadersComplete(false, headers_string_.size());
276
277 if (!FLAGS_quic_implement_stop_reading) {
278 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
279 } else {
280 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
281 }
282 EXPECT_TRUE(stream_->reading_stopped()); 306 EXPECT_TRUE(stream_->reading_stopped());
283 EXPECT_TRUE(stream_->write_side_closed()); 307 EXPECT_TRUE(stream_->write_side_closed());
284 } 308 }
285 309
286 TEST_F(QuicSpdyServerStreamTest, ValidMultipleContentLength) { 310 TEST_P(QuicSpdyServerStreamTest, ValidMultipleContentLength) {
287 SpdyHeaderBlock request_headers; 311 SpdyHeaderBlock request_headers;
288 // \000 is a way to write the null byte when followed by a literal digit. 312 // \000 is a way to write the null byte when followed by a literal digit.
289 request_headers["content-length"] = StringPiece("11\00011", 5); 313 request_headers["content-length"] = StringPiece("11\00011", 5);
290 314
291 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 315 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
292 316
293 stream_->OnStreamHeaders(headers_string_); 317 stream_->OnStreamHeaders(headers_string_);
294 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 318 stream_->OnStreamHeadersComplete(false, headers_string_.size());
295 319
296 EXPECT_EQ(11, QuicSpdyServerStreamPeer::content_length(stream_)); 320 EXPECT_EQ(11, QuicSpdyServerStreamPeer::content_length(stream_));
297 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 321 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
298 EXPECT_FALSE(stream_->reading_stopped()); 322 EXPECT_FALSE(stream_->reading_stopped());
299 EXPECT_FALSE(stream_->write_side_closed()); 323 EXPECT_FALSE(stream_->write_side_closed());
300 } 324 }
301 325
302 TEST_F(QuicSpdyServerStreamTest, InvalidHeadersWithFin) { 326 TEST_P(QuicSpdyServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) {
327 response_headers_[":version"] = "HTTP/1.1";
328 response_headers_[":status"] = "500 Server Error";
329 response_headers_["content-length"] = "3";
330
331 InSequence s;
332
333 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr));
334 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
335 .Times(1)
336 .WillOnce(Return(QuicConsumedData(3, true)));
337 if (GetParam() > QUIC_VERSION_28) {
338 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1);
339 } else {
340 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
341 }
342 EXPECT_FALSE(stream_->fin_received());
343 QuicSpdyServerStreamPeer::SendErrorResponse(stream_);
344 EXPECT_TRUE(stream_->reading_stopped());
345 EXPECT_TRUE(stream_->write_side_closed());
346 }
347
348 TEST_P(QuicSpdyServerStreamTest, DoNotSendQuicRstStreamNoErrorWithRstReceived) {
349 response_headers_[":version"] = "HTTP/1.1";
350 response_headers_[":status"] = "500 Server Error";
351 response_headers_["content-length"] = "3";
352
353 InSequence s;
354 EXPECT_FALSE(stream_->reading_stopped());
355
356 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
357 EXPECT_CALL(session_, SendRstStream(_, QUIC_RST_ACKNOWLEDGEMENT, _)).Times(1);
358 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 1234);
359 stream_->OnStreamReset(rst_frame);
360
361 EXPECT_TRUE(stream_->reading_stopped());
362 EXPECT_TRUE(stream_->write_side_closed());
363 }
364
365 TEST_P(QuicSpdyServerStreamTest, InvalidHeadersWithFin) {
303 char arr[] = { 366 char arr[] = {
304 0x3a, 0x68, 0x6f, 0x73, // :hos 367 0x3a, 0x68, 0x6f, 0x73, // :hos
305 0x74, 0x00, 0x00, 0x00, // t... 368 0x74, 0x00, 0x00, 0x00, // t...
306 0x00, 0x00, 0x00, 0x00, // .... 369 0x00, 0x00, 0x00, 0x00, // ....
307 0x07, 0x3a, 0x6d, 0x65, // .:me 370 0x07, 0x3a, 0x6d, 0x65, // .:me
308 0x74, 0x68, 0x6f, 0x64, // thod 371 0x74, 0x68, 0x6f, 0x64, // thod
309 0x00, 0x00, 0x00, 0x03, // .... 372 0x00, 0x00, 0x00, 0x03, // ....
310 0x47, 0x45, 0x54, 0x00, // GET. 373 0x47, 0x45, 0x54, 0x00, // GET.
311 0x00, 0x00, 0x05, 0x3a, // ...: 374 0x00, 0x00, 0x05, 0x3a, // ...:
312 0x70, 0x61, 0x74, 0x68, // path 375 0x70, 0x61, 0x74, 0x68, // path
(...skipping 13 matching lines...) Expand all
326 StringPiece data(arr, arraysize(arr)); 389 StringPiece data(arr, arraysize(arr));
327 QuicStreamFrame frame(stream_->id(), true, 0, data); 390 QuicStreamFrame frame(stream_->id(), true, 0, data);
328 // Verify that we don't crash when we get a invalid headers in stream frame. 391 // Verify that we don't crash when we get a invalid headers in stream frame.
329 stream_->OnStreamFrame(frame); 392 stream_->OnStreamFrame(frame);
330 } 393 }
331 394
332 } // namespace 395 } // namespace
333 } // namespace test 396 } // namespace test
334 } // namespace tools 397 } // namespace tools
335 } // namespace net 398 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_simple_client_bin.cc ('k') | net/tools/quic/test_tools/quic_test_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698