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

Side by Side Diff: net/quic/quic_headers_stream_test.cc

Issue 1961573002: Avoids the "re-encode HPACK as SPDY3" step. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Avoids the "re-encode HPACK as SPDY3" step. Created 4 years, 7 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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/quic/quic_headers_stream.h" 5 #include "net/quic/quic_headers_stream.h"
6 6
7 #include "net/quic/quic_utils.h" 7 #include "net/quic/quic_utils.h"
8 #include "net/quic/spdy_utils.h" 8 #include "net/quic/spdy_utils.h"
9 #include "net/quic/test_tools/quic_connection_peer.h" 9 #include "net/quic/test_tools/quic_connection_peer.h"
10 #include "net/quic/test_tools/quic_spdy_session_peer.h" 10 #include "net/quic/test_tools/quic_spdy_session_peer.h"
11 #include "net/quic/test_tools/quic_test_utils.h" 11 #include "net/quic/test_tools/quic_test_utils.h"
12 #include "net/quic/test_tools/reliable_quic_stream_peer.h" 12 #include "net/quic/test_tools/reliable_quic_stream_peer.h"
13 #include "net/spdy/spdy_alt_svc_wire_format.h" 13 #include "net/spdy/spdy_alt_svc_wire_format.h"
14 #include "net/spdy/spdy_protocol.h" 14 #include "net/spdy/spdy_protocol.h"
15 #include "net/spdy/spdy_test_utils.h" 15 #include "net/spdy/spdy_test_utils.h"
16 #include "net/test/gtest_util.h" 16 #include "net/test/gtest_util.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 using base::StringPiece; 19 using base::StringPiece;
20 using std::ostream; 20 using std::ostream;
21 using std::string; 21 using std::string;
22 using std::vector; 22 using std::vector;
23 using testing::ElementsAre; 23 using testing::ElementsAre;
24 using testing::InSequence; 24 using testing::InSequence;
25 using testing::Invoke; 25 using testing::Invoke;
26 using testing::Return;
26 using testing::StrictMock; 27 using testing::StrictMock;
27 using testing::WithArgs; 28 using testing::WithArgs;
28 using testing::_; 29 using testing::_;
29 30
30 namespace net { 31 namespace net {
31 namespace test { 32 namespace test {
32 namespace { 33 namespace {
33 34
34 // TODO(ckrasic): this workaround is due to absence of std::initializer_list 35 // TODO(ckrasic): this workaround is due to absence of std::initializer_list
35 const bool kFins[] = {false, true}; 36 const bool kFins[] = {false, true};
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 156
156 bool SaveHeaderData(const char* data, int len) { 157 bool SaveHeaderData(const char* data, int len) {
157 saved_header_data_.append(data, len); 158 saved_header_data_.append(data, len);
158 return true; 159 return true;
159 } 160 }
160 161
161 void SaveHeaderDataStringPiece(StringPiece data) { 162 void SaveHeaderDataStringPiece(StringPiece data) {
162 saved_header_data_.append(data.data(), data.length()); 163 saved_header_data_.append(data.data(), data.length());
163 } 164 }
164 165
166 void SavePromiseHeaderList(QuicStreamId /* stream_id */,
167 QuicStreamId /* promised_stream_id */,
168 size_t size,
169 const QuicHeaderList& header_list) {
170 SaveToHandler(size, header_list);
171 }
172
173 void SaveHeaderList(QuicStreamId /* stream_id */,
174 bool /* fin */,
175 size_t size,
176 const QuicHeaderList& header_list) {
177 SaveToHandler(size, header_list);
178 }
179
180 void SaveToHandler(size_t size, const QuicHeaderList& header_list) {
181 headers_handler_.reset(new TestHeadersHandler);
182 headers_handler_->OnHeaderBlockStart();
183 for (const auto& p : header_list) {
184 headers_handler_->OnHeader(p.first, p.second);
185 }
186 headers_handler_->OnHeaderBlockEnd(size);
187 }
188
165 void WriteHeadersAndExpectSynStream(QuicStreamId stream_id, 189 void WriteHeadersAndExpectSynStream(QuicStreamId stream_id,
166 bool fin, 190 bool fin,
167 SpdyPriority priority) { 191 SpdyPriority priority) {
168 WriteHeadersAndCheckData(stream_id, fin, priority, SYN_STREAM); 192 WriteHeadersAndCheckData(stream_id, fin, priority, SYN_STREAM);
169 } 193 }
170 194
171 void WriteHeadersAndExpectSynReply(QuicStreamId stream_id, bool fin) { 195 void WriteHeadersAndExpectSynReply(QuicStreamId stream_id, bool fin) {
172 WriteHeadersAndCheckData(stream_id, fin, 0, SYN_REPLY); 196 WriteHeadersAndCheckData(stream_id, fin, 0, SYN_REPLY);
173 } 197 }
174 198
(...skipping 12 matching lines...) Expand all
187 OnHeaders(stream_id, kHasPriority, priority, 211 OnHeaders(stream_id, kHasPriority, priority,
188 /*parent_stream_id=*/0, 212 /*parent_stream_id=*/0,
189 /*exclusive=*/false, fin, kFrameComplete)); 213 /*exclusive=*/false, fin, kFrameComplete));
190 } else { 214 } else {
191 EXPECT_CALL(visitor_, 215 EXPECT_CALL(visitor_,
192 OnHeaders(stream_id, !kHasPriority, 216 OnHeaders(stream_id, !kHasPriority,
193 /*priority=*/0, 217 /*priority=*/0,
194 /*parent_stream_id=*/0, 218 /*parent_stream_id=*/0,
195 /*exclusive=*/false, fin, kFrameComplete)); 219 /*exclusive=*/false, fin, kFrameComplete));
196 } 220 }
197 EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _)) 221 headers_handler_.reset(new TestHeadersHandler);
198 .WillRepeatedly(WithArgs<1, 2>( 222 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id))
199 Invoke(this, &QuicHeadersStreamTest::SaveHeaderData))); 223 .WillOnce(Return(headers_handler_.get()));
224 EXPECT_CALL(visitor_, OnHeaderFrameEnd(stream_id, true)).Times(1);
200 if (fin) { 225 if (fin) {
201 EXPECT_CALL(visitor_, OnStreamEnd(stream_id)); 226 EXPECT_CALL(visitor_, OnStreamEnd(stream_id));
202 } 227 }
203 framer_->ProcessInput(saved_data_.data(), saved_data_.length()); 228 framer_->ProcessInput(saved_data_.data(), saved_data_.length());
204 EXPECT_FALSE(framer_->HasError()) 229 EXPECT_FALSE(framer_->HasError())
205 << SpdyFramer::ErrorCodeToString(framer_->error_code()); 230 << SpdyFramer::ErrorCodeToString(framer_->error_code());
206 231
207 CheckHeaders(); 232 CheckHeaders();
208 saved_data_.clear(); 233 saved_data_.clear();
209 } 234 }
210 235
211 void CheckHeaders() { 236 void CheckHeaders() {
212 SpdyHeaderBlock headers; 237 EXPECT_EQ(headers_, headers_handler_->decoded_block());
213 EXPECT_TRUE(framer_->ParseHeaderBlockInBuffer( 238 headers_handler_.reset();
214 saved_header_data_.data(), saved_header_data_.length(), &headers));
215 EXPECT_EQ(headers_, headers);
216 saved_header_data_.clear();
217 } 239 }
218 240
219 Perspective perspective() { return GetParam().perspective; } 241 Perspective perspective() { return GetParam().perspective; }
220 242
221 QuicVersion version() { return GetParam().version; } 243 QuicVersion version() { return GetParam().version; }
222 244
223 QuicVersionVector GetVersion() { 245 QuicVersionVector GetVersion() {
224 QuicVersionVector versions; 246 QuicVersionVector versions;
225 versions.push_back(version()); 247 versions.push_back(version());
226 return versions; 248 return versions;
227 } 249 }
228 250
229 void TearDownLocalConnectionState() { 251 void TearDownLocalConnectionState() {
230 QuicConnectionPeer::TearDownLocalConnectionState(connection_); 252 QuicConnectionPeer::TearDownLocalConnectionState(connection_);
231 } 253 }
232 254
233 QuicStreamId NextPromisedStreamId() { return next_promised_stream_id_ += 2; } 255 QuicStreamId NextPromisedStreamId() { return next_promised_stream_id_ += 2; }
234 256
235 static const bool kFrameComplete = true; 257 static const bool kFrameComplete = true;
236 static const bool kHasPriority = true; 258 static const bool kHasPriority = true;
237 259
238 MockConnectionHelper helper_; 260 MockConnectionHelper helper_;
239 MockAlarmFactory alarm_factory_; 261 MockAlarmFactory alarm_factory_;
240 StrictMock<MockConnection>* connection_; 262 StrictMock<MockConnection>* connection_;
241 StrictMock<MockQuicSpdySession> session_; 263 StrictMock<MockQuicSpdySession> session_;
242 QuicHeadersStream* headers_stream_; 264 QuicHeadersStream* headers_stream_;
243 SpdyHeaderBlock headers_; 265 SpdyHeaderBlock headers_;
266 std::unique_ptr<TestHeadersHandler> headers_handler_;
244 string body_; 267 string body_;
245 string saved_data_; 268 string saved_data_;
246 string saved_header_data_; 269 string saved_header_data_;
247 std::unique_ptr<SpdyFramer> framer_; 270 std::unique_ptr<SpdyFramer> framer_;
248 StrictMock<MockVisitor> visitor_; 271 StrictMock<MockVisitor> visitor_;
249 QuicStreamFrame stream_frame_; 272 QuicStreamFrame stream_frame_;
250 QuicStreamId next_promised_stream_id_; 273 QuicStreamId next_promised_stream_id_;
251 }; 274 };
252 275
253 INSTANTIATE_TEST_CASE_P(Tests, 276 INSTANTIATE_TEST_CASE_P(Tests,
(...skipping 27 matching lines...) Expand all
281 if (perspective() == Perspective::IS_SERVER) { 304 if (perspective() == Perspective::IS_SERVER) {
282 // Write the headers and capture the outgoing data 305 // Write the headers and capture the outgoing data
283 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, _, false, nullptr)) 306 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, _, false, nullptr))
284 .WillOnce(WithArgs<1>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); 307 .WillOnce(WithArgs<1>(Invoke(this, &QuicHeadersStreamTest::SaveIov)));
285 headers_stream_->WritePushPromise(stream_id, promised_stream_id, headers_, 308 headers_stream_->WritePushPromise(stream_id, promised_stream_id, headers_,
286 nullptr); 309 nullptr);
287 310
288 // Parse the outgoing data and check that it matches was was written. 311 // Parse the outgoing data and check that it matches was was written.
289 EXPECT_CALL(visitor_, 312 EXPECT_CALL(visitor_,
290 OnPushPromise(stream_id, promised_stream_id, kFrameComplete)); 313 OnPushPromise(stream_id, promised_stream_id, kFrameComplete));
291 EXPECT_CALL(visitor_, OnControlFrameHeaderData(stream_id, _, _)) 314 headers_handler_.reset(new TestHeadersHandler);
292 .WillRepeatedly(WithArgs<1, 2>( 315 EXPECT_CALL(visitor_, OnHeaderFrameStart(stream_id))
293 Invoke(this, &QuicHeadersStreamTest::SaveHeaderData))); 316 .WillOnce(Return(headers_handler_.get()));
317 EXPECT_CALL(visitor_, OnHeaderFrameEnd(stream_id, true)).Times(1);
294 framer_->ProcessInput(saved_data_.data(), saved_data_.length()); 318 framer_->ProcessInput(saved_data_.data(), saved_data_.length());
295 EXPECT_FALSE(framer_->HasError()) 319 EXPECT_FALSE(framer_->HasError())
296 << SpdyFramer::ErrorCodeToString(framer_->error_code()); 320 << SpdyFramer::ErrorCodeToString(framer_->error_code());
297 CheckHeaders(); 321 CheckHeaders();
298 saved_data_.clear(); 322 saved_data_.clear();
299 } else { 323 } else {
300 EXPECT_DFATAL(headers_stream_->WritePushPromise( 324 EXPECT_DFATAL(headers_stream_->WritePushPromise(
301 stream_id, promised_stream_id, headers_, nullptr), 325 stream_id, promised_stream_id, headers_, nullptr),
302 "Client shouldn't send PUSH_PROMISE"); 326 "Client shouldn't send PUSH_PROMISE");
303 } 327 }
(...skipping 13 matching lines...) Expand all
317 headers_frame.set_fin(fin); 341 headers_frame.set_fin(fin);
318 headers_frame.set_has_priority(true); 342 headers_frame.set_has_priority(true);
319 frame = framer_->SerializeFrame(headers_frame); 343 frame = framer_->SerializeFrame(headers_frame);
320 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); 344 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0));
321 } else { 345 } else {
322 SpdyHeadersIR headers_frame(stream_id); 346 SpdyHeadersIR headers_frame(stream_id);
323 headers_frame.set_header_block(headers_); 347 headers_frame.set_header_block(headers_);
324 headers_frame.set_fin(fin); 348 headers_frame.set_fin(fin);
325 frame = framer_->SerializeFrame(headers_frame); 349 frame = framer_->SerializeFrame(headers_frame);
326 } 350 }
327 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _))
328 .WillRepeatedly(WithArgs<1>(Invoke(
329 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece)));
330 EXPECT_CALL(session_, 351 EXPECT_CALL(session_,
331 OnStreamHeadersComplete(stream_id, fin, frame.size())); 352 OnStreamHeaderList(stream_id, fin, frame.size(), _))
353 .WillOnce(Invoke(this, &QuicHeadersStreamTest::SaveHeaderList));
332 stream_frame_.frame_buffer = frame.data(); 354 stream_frame_.frame_buffer = frame.data();
333 stream_frame_.frame_length = frame.size(); 355 stream_frame_.frame_length = frame.size();
334 headers_stream_->OnStreamFrame(stream_frame_); 356 headers_stream_->OnStreamFrame(stream_frame_);
335 stream_frame_.offset += frame.size(); 357 stream_frame_.offset += frame.size();
336 CheckHeaders(); 358 CheckHeaders();
337 } 359 }
338 } 360 }
339 } 361 }
340 } 362 }
341 363
342 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) { 364 TEST_P(QuicHeadersStreamTest, ProcessPushPromise) {
343 if (perspective() == Perspective::IS_SERVER) 365 if (perspective() == Perspective::IS_SERVER)
344 return; 366 return;
345 for (QuicStreamId stream_id = kClientDataStreamId1; 367 for (QuicStreamId stream_id = kClientDataStreamId1;
346 stream_id < kClientDataStreamId3; stream_id += 2) { 368 stream_id < kClientDataStreamId3; stream_id += 2) {
347 QuicStreamId promised_stream_id = NextPromisedStreamId(); 369 QuicStreamId promised_stream_id = NextPromisedStreamId();
348 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id); 370 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id);
349 push_promise.set_header_block(headers_); 371 push_promise.set_header_block(headers_);
350 SpdySerializedFrame frame(framer_->SerializeFrame(push_promise)); 372 SpdySerializedFrame frame(framer_->SerializeFrame(push_promise));
351 if (perspective() == Perspective::IS_SERVER) { 373 if (perspective() == Perspective::IS_SERVER) {
352 EXPECT_CALL(*connection_, 374 EXPECT_CALL(*connection_,
353 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA, 375 CloseConnection(QUIC_INVALID_HEADERS_STREAM_DATA,
354 "PUSH_PROMISE not supported.", _)) 376 "PUSH_PROMISE not supported.", _))
355 .WillRepeatedly(InvokeWithoutArgs( 377 .WillRepeatedly(InvokeWithoutArgs(
356 this, &QuicHeadersStreamTest::TearDownLocalConnectionState)); 378 this, &QuicHeadersStreamTest::TearDownLocalConnectionState));
357 } else { 379 } else {
358 EXPECT_CALL(session_, OnPromiseHeaders(stream_id, _)) 380 EXPECT_CALL(session_, OnPromiseHeaderList(stream_id, promised_stream_id,
359 .WillRepeatedly(WithArgs<1>( 381 frame.size(), _))
360 Invoke(this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece))); 382 .WillOnce(
361 EXPECT_CALL(session_, OnPromiseHeadersComplete( 383 Invoke(this, &QuicHeadersStreamTest::SavePromiseHeaderList));
362 stream_id, promised_stream_id, frame.size()));
363 } 384 }
364 stream_frame_.frame_buffer = frame.data(); 385 stream_frame_.frame_buffer = frame.data();
365 stream_frame_.frame_length = frame.size(); 386 stream_frame_.frame_length = frame.size();
366 headers_stream_->OnStreamFrame(stream_frame_); 387 headers_stream_->OnStreamFrame(stream_frame_);
367 if (perspective() == Perspective::IS_CLIENT) { 388 if (perspective() == Perspective::IS_CLIENT) {
368 stream_frame_.offset += frame.size(); 389 stream_frame_.offset += frame.size();
369 CheckHeaders(); 390 CheckHeaders();
370 } 391 }
371 } 392 }
372 } 393 }
(...skipping 15 matching lines...) Expand all
388 headers_frame.set_fin(fin); 409 headers_frame.set_fin(fin);
389 headers_frame.set_has_priority(true); 410 headers_frame.set_has_priority(true);
390 frame = framer_->SerializeFrame(headers_frame); 411 frame = framer_->SerializeFrame(headers_frame);
391 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); 412 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0));
392 } else { 413 } else {
393 SpdyHeadersIR headers_frame(stream_id); 414 SpdyHeadersIR headers_frame(stream_id);
394 headers_frame.set_header_block(headers_); 415 headers_frame.set_header_block(headers_);
395 headers_frame.set_fin(fin); 416 headers_frame.set_fin(fin);
396 frame = framer_->SerializeFrame(headers_frame); 417 frame = framer_->SerializeFrame(headers_frame);
397 } 418 }
398 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)); 419 EXPECT_CALL(session_, OnStreamHeaderList(stream_id, fin, frame.size(), _))
399 EXPECT_CALL(session_, 420 .Times(1);
400 OnStreamHeadersComplete(stream_id, fin, frame.size()));
401 stream_frame_.frame_buffer = frame.data(); 421 stream_frame_.frame_buffer = frame.data();
402 stream_frame_.frame_length = frame.size(); 422 stream_frame_.frame_length = frame.size();
403 headers_stream_->OnStreamFrame(stream_frame_); 423 headers_stream_->OnStreamFrame(stream_frame_);
404 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); 424 connection_->AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
405 stream_frame_.offset += frame.size(); 425 stream_frame_.offset += frame.size();
406 } 426 }
407 } 427 }
408 428
409 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) { 429 TEST_P(QuicHeadersStreamTest, NonEmptyHeaderHOLBlockedTime) {
410 if (!FLAGS_quic_measure_headers_hol_blocking_time) { 430 if (!FLAGS_quic_measure_headers_hol_blocking_time) {
(...skipping 21 matching lines...) Expand all
432 headers_frame.set_fin(fin); 452 headers_frame.set_fin(fin);
433 frames[stream_num] = framer_->SerializeFrame(headers_frame); 453 frames[stream_num] = framer_->SerializeFrame(headers_frame);
434 } 454 }
435 stream_frames[stream_num].stream_id = stream_frame_.stream_id; 455 stream_frames[stream_num].stream_id = stream_frame_.stream_id;
436 stream_frames[stream_num].offset = stream_frame_.offset; 456 stream_frames[stream_num].offset = stream_frame_.offset;
437 stream_frames[stream_num].frame_buffer = frames[stream_num].data(); 457 stream_frames[stream_num].frame_buffer = frames[stream_num].data();
438 stream_frames[stream_num].frame_length = frames[stream_num].size(); 458 stream_frames[stream_num].frame_length = frames[stream_num].size();
439 DVLOG(1) << "make frame for stream " << stream_num << " offset " 459 DVLOG(1) << "make frame for stream " << stream_num << " offset "
440 << stream_frames[stream_num].offset; 460 << stream_frames[stream_num].offset;
441 stream_frame_.offset += frames[stream_num].size(); 461 stream_frame_.offset += frames[stream_num].size();
442 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _)).Times(1); 462 EXPECT_CALL(session_, OnStreamHeaderList(stream_id, fin, _, _)).Times(1);
443 EXPECT_CALL(session_, OnStreamHeadersComplete(stream_id, fin, _))
444 .Times(1);
445 } 463 }
446 } 464 }
447 465
448 // Actually writing the frames in reverse order will cause HOL blocking. 466 // Actually writing the frames in reverse order will cause HOL blocking.
449 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(9); 467 EXPECT_CALL(session_, OnHeadersHeadOfLineBlocking(_)).Times(9);
450 468
451 for (int stream_num = 9; stream_num >= 0; --stream_num) { 469 for (int stream_num = 9; stream_num >= 0; --stream_num) {
452 DVLOG(1) << "OnStreamFrame for stream " << stream_num << " offset " 470 DVLOG(1) << "OnStreamFrame for stream " << stream_num << " offset "
453 << stream_frames[stream_num].offset; 471 << stream_frames[stream_num].offset;
454 headers_stream_->OnStreamFrame(stream_frames[stream_num]); 472 headers_stream_->OnStreamFrame(stream_frames[stream_num]);
(...skipping 20 matching lines...) Expand all
475 headers_frame.set_fin(fin); 493 headers_frame.set_fin(fin);
476 headers_frame.set_has_priority(true); 494 headers_frame.set_has_priority(true);
477 frame = framer_->SerializeFrame(headers_frame); 495 frame = framer_->SerializeFrame(headers_frame);
478 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0)); 496 EXPECT_CALL(session_, OnStreamHeadersPriority(stream_id, 0));
479 } else { 497 } else {
480 SpdyHeadersIR headers_frame(stream_id); 498 SpdyHeadersIR headers_frame(stream_id);
481 headers_frame.set_header_block(headers_); 499 headers_frame.set_header_block(headers_);
482 headers_frame.set_fin(fin); 500 headers_frame.set_fin(fin);
483 frame = framer_->SerializeFrame(headers_frame); 501 frame = framer_->SerializeFrame(headers_frame);
484 } 502 }
485 EXPECT_CALL(session_, OnStreamHeaders(stream_id, _))
486 .WillRepeatedly(WithArgs<1>(Invoke(
487 this, &QuicHeadersStreamTest::SaveHeaderDataStringPiece)));
488 EXPECT_CALL(session_, 503 EXPECT_CALL(session_,
489 OnStreamHeadersComplete(stream_id, fin, frame.size())); 504 OnStreamHeaderList(stream_id, fin, frame.size(), _))
505 .WillOnce(Invoke(this, &QuicHeadersStreamTest::SaveHeaderList));
490 stream_frame_.frame_buffer = frame.data(); 506 stream_frame_.frame_buffer = frame.data();
491 stream_frame_.frame_length = frame.size(); 507 stream_frame_.frame_length = frame.size();
492 headers_stream_->OnStreamFrame(stream_frame_); 508 headers_stream_->OnStreamFrame(stream_frame_);
493 stream_frame_.offset += frame.size(); 509 stream_frame_.offset += frame.size();
494 CheckHeaders(); 510 CheckHeaders();
495 } 511 }
496 } 512 }
497 } 513 }
498 } 514 }
499 515
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 } 599 }
584 600
585 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) { 601 TEST_P(QuicHeadersStreamTest, NoConnectionLevelFlowControl) {
586 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl( 602 EXPECT_FALSE(ReliableQuicStreamPeer::StreamContributesToConnectionFlowControl(
587 headers_stream_)); 603 headers_stream_));
588 } 604 }
589 605
590 } // namespace 606 } // namespace
591 } // namespace test 607 } // namespace test
592 } // namespace net 608 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698