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

Side by Side Diff: net/quic/chromium/quic_chromium_client_stream_test.cc

Issue 2462823002: Deletes dead code. (Closed)
Patch Set: Updated patchset dependency Created 4 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
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/quic/chromium/quic_chromium_client_stream.h" 5 #include "net/quic/chromium/quic_chromium_client_stream.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 } 210 }
211 211
212 void ReadData(StringPiece expected_data) { 212 void ReadData(StringPiece expected_data) {
213 scoped_refptr<IOBuffer> buffer(new IOBuffer(expected_data.length() + 1)); 213 scoped_refptr<IOBuffer> buffer(new IOBuffer(expected_data.length() + 1));
214 EXPECT_EQ(static_cast<int>(expected_data.length()), 214 EXPECT_EQ(static_cast<int>(expected_data.length()),
215 stream_->Read(buffer.get(), expected_data.length() + 1)); 215 stream_->Read(buffer.get(), expected_data.length() + 1));
216 EXPECT_EQ(expected_data, 216 EXPECT_EQ(expected_data,
217 StringPiece(buffer->data(), expected_data.length())); 217 StringPiece(buffer->data(), expected_data.length()));
218 } 218 }
219 219
220 QuicHeaderList ProcessHeaders(const SpdyHeaderBlock& headers) {
221 QuicHeaderList h = AsHeaderList(headers);
222 stream_->OnStreamHeaderList(false, h.uncompressed_header_bytes(), h);
223 return h;
224 }
225
226 QuicHeaderList ProcessTrailers(const SpdyHeaderBlock& headers) {
227 QuicHeaderList h = AsHeaderList(headers);
228 stream_->OnStreamHeaderList(true, h.uncompressed_header_bytes(), h);
229 return h;
230 }
231
232 QuicHeaderList ProcessHeadersFull(const SpdyHeaderBlock& headers) {
233 QuicHeaderList h = ProcessHeaders(headers);
234 EXPECT_CALL(delegate_,
235 OnHeadersAvailableMock(_, h.uncompressed_header_bytes()));
236 base::RunLoop().RunUntilIdle();
237 EXPECT_EQ(headers, delegate_.headers_);
238 EXPECT_TRUE(stream_->header_list().empty());
239 return h;
240 }
241
220 QuicCryptoClientConfig crypto_config_; 242 QuicCryptoClientConfig crypto_config_;
221 testing::StrictMock<MockDelegate> delegate_; 243 testing::StrictMock<MockDelegate> delegate_;
222 MockQuicConnectionHelper helper_; 244 MockQuicConnectionHelper helper_;
223 MockAlarmFactory alarm_factory_; 245 MockAlarmFactory alarm_factory_;
224 MockQuicClientSessionBase session_; 246 MockQuicClientSessionBase session_;
225 QuicChromiumClientStream* stream_; 247 QuicChromiumClientStream* stream_;
226 SpdyHeaderBlock headers_; 248 SpdyHeaderBlock headers_;
227 QuicClientPushPromiseIndex push_promise_index_; 249 QuicClientPushPromiseIndex push_promise_index_;
228 }; 250 };
229 251
230 INSTANTIATE_TEST_CASE_P(Version, 252 INSTANTIATE_TEST_CASE_P(Version,
231 QuicChromiumClientStreamTest, 253 QuicChromiumClientStreamTest,
232 ::testing::ValuesIn(AllSupportedVersions())); 254 ::testing::ValuesIn(AllSupportedVersions()));
233 255
234 TEST_P(QuicChromiumClientStreamTest, OnFinRead) { 256 TEST_P(QuicChromiumClientStreamTest, OnFinRead) {
235 InitializeHeaders(); 257 InitializeHeaders();
236 std::string uncompressed_headers =
237 SpdyUtils::SerializeUncompressedHeaders(headers_);
238 QuicStreamOffset offset = 0; 258 QuicStreamOffset offset = 0;
239 stream_->OnStreamHeaders(uncompressed_headers); 259 ProcessHeadersFull(headers_);
240 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
241
242 EXPECT_CALL(delegate_,
243 OnHeadersAvailableMock(_, uncompressed_headers.length()));
244 base::RunLoop().RunUntilIdle();
245 EXPECT_EQ(headers_, delegate_.headers_);
246 EXPECT_TRUE(stream_->decompressed_headers().empty());
247
248 QuicStreamFrame frame2(kTestStreamId, true, offset, StringPiece()); 260 QuicStreamFrame frame2(kTestStreamId, true, offset, StringPiece());
249 EXPECT_CALL(delegate_, OnClose()); 261 EXPECT_CALL(delegate_, OnClose());
250 stream_->OnStreamFrame(frame2); 262 stream_->OnStreamFrame(frame2);
251 } 263 }
252 264
253 TEST_P(QuicChromiumClientStreamTest, OnDataAvailableBeforeHeaders) { 265 TEST_P(QuicChromiumClientStreamTest, OnDataAvailableBeforeHeaders) {
254 EXPECT_CALL(delegate_, OnClose()); 266 EXPECT_CALL(delegate_, OnClose());
255 267
256 EXPECT_CALL(delegate_, OnDataAvailable()).Times(0); 268 EXPECT_CALL(delegate_, OnDataAvailable()).Times(0);
257 stream_->OnDataAvailable(); 269 stream_->OnDataAvailable();
258 } 270 }
259 271
260 TEST_P(QuicChromiumClientStreamTest, OnDataAvailable) { 272 TEST_P(QuicChromiumClientStreamTest, OnDataAvailable) {
261 InitializeHeaders(); 273 InitializeHeaders();
262 std::string uncompressed_headers = 274 ProcessHeadersFull(headers_);
263 SpdyUtils::SerializeUncompressedHeaders(headers_);
264 stream_->OnStreamHeaders(uncompressed_headers);
265 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
266
267 EXPECT_CALL(delegate_,
268 OnHeadersAvailableMock(_, uncompressed_headers.length()));
269 base::RunLoop().RunUntilIdle();
270 EXPECT_EQ(headers_, delegate_.headers_);
271 EXPECT_TRUE(stream_->decompressed_headers().empty());
272 275
273 const char data[] = "hello world!"; 276 const char data[] = "hello world!";
274 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 277 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
275 /*offset=*/0, data)); 278 /*offset=*/0, data));
276 279
277 EXPECT_CALL(delegate_, OnDataAvailable()) 280 EXPECT_CALL(delegate_, OnDataAvailable())
278 .WillOnce(testing::Invoke( 281 .WillOnce(testing::Invoke(
279 CreateFunctor(&QuicChromiumClientStreamTest::ReadData, 282 CreateFunctor(&QuicChromiumClientStreamTest::ReadData,
280 base::Unretained(this), 283 base::Unretained(this),
281 StringPiece(data, arraysize(data) - 1)))); 284 StringPiece(data, arraysize(data) - 1))));
282 base::RunLoop().RunUntilIdle(); 285 base::RunLoop().RunUntilIdle();
283 286
284 EXPECT_CALL(delegate_, OnClose()); 287 EXPECT_CALL(delegate_, OnClose());
285 } 288 }
286 289
287 TEST_P(QuicChromiumClientStreamTest, ProcessHeadersWithError) { 290 TEST_P(QuicChromiumClientStreamTest, ProcessHeadersWithError) {
288 std::string bad_headers = "..."; 291 SpdyHeaderBlock bad_headers;
292 bad_headers["NAME"] = "...";
289 EXPECT_CALL(session_, 293 EXPECT_CALL(session_,
290 SendRstStream(kTestStreamId, QUIC_BAD_APPLICATION_PAYLOAD, 0)); 294 SendRstStream(kTestStreamId, QUIC_BAD_APPLICATION_PAYLOAD, 0));
291 295
292 stream_->OnStreamHeaders(StringPiece(bad_headers)); 296 auto headers = AsHeaderList(bad_headers);
293 stream_->OnStreamHeadersComplete(false, bad_headers.length()); 297 stream_->OnStreamHeaderList(false, headers.uncompressed_header_bytes(),
298 headers);
294 299
295 base::RunLoop().RunUntilIdle(); 300 base::RunLoop().RunUntilIdle();
296 301
297 EXPECT_CALL(delegate_, OnClose()); 302 EXPECT_CALL(delegate_, OnClose());
298 } 303 }
299 304
300 TEST_P(QuicChromiumClientStreamTest, OnDataAvailableWithError) { 305 TEST_P(QuicChromiumClientStreamTest, OnDataAvailableWithError) {
301 InitializeHeaders(); 306 InitializeHeaders();
302 std::string uncompressed_headers = 307 auto headers = AsHeaderList(headers_);
303 SpdyUtils::SerializeUncompressedHeaders(headers_); 308 ProcessHeadersFull(headers_);
304 stream_->OnStreamHeaders(uncompressed_headers);
305 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
306
307 EXPECT_CALL(delegate_,
308 OnHeadersAvailableMock(_, uncompressed_headers.length()));
309 base::RunLoop().RunUntilIdle();
310 EXPECT_EQ(headers_, delegate_.headers_);
311 EXPECT_TRUE(stream_->decompressed_headers().empty());
312 309
313 const char data[] = "hello world!"; 310 const char data[] = "hello world!";
314 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 311 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
315 /*offset=*/0, data)); 312 /*offset=*/0, data));
316 EXPECT_CALL(delegate_, OnDataAvailable()) 313 EXPECT_CALL(delegate_, OnDataAvailable())
317 .WillOnce(testing::Invoke(CreateFunctor( 314 .WillOnce(testing::Invoke(CreateFunctor(
318 &QuicChromiumClientStream::Reset, 315 &QuicChromiumClientStream::Reset,
319 base::Unretained(stream_), QUIC_STREAM_CANCELLED))); 316 base::Unretained(stream_), QUIC_STREAM_CANCELLED)));
320 base::RunLoop().RunUntilIdle(); 317 base::RunLoop().RunUntilIdle();
321 318
322 EXPECT_CALL(delegate_, OnClose()); 319 EXPECT_CALL(delegate_, OnClose());
323 } 320 }
324 321
325 TEST_P(QuicChromiumClientStreamTest, OnError) { 322 TEST_P(QuicChromiumClientStreamTest, OnError) {
326 EXPECT_CALL(delegate_, OnError(ERR_INTERNET_DISCONNECTED)); 323 EXPECT_CALL(delegate_, OnError(ERR_INTERNET_DISCONNECTED));
327 324
328 stream_->OnError(ERR_INTERNET_DISCONNECTED); 325 stream_->OnError(ERR_INTERNET_DISCONNECTED);
329 EXPECT_FALSE(stream_->GetDelegate()); 326 EXPECT_FALSE(stream_->GetDelegate());
330 } 327 }
331 328
332 TEST_P(QuicChromiumClientStreamTest, OnTrailers) { 329 TEST_P(QuicChromiumClientStreamTest, OnTrailers) {
333 InitializeHeaders(); 330 InitializeHeaders();
334 std::string uncompressed_headers = 331 ProcessHeadersFull(headers_);
335 SpdyUtils::SerializeUncompressedHeaders(headers_);
336 stream_->OnStreamHeaders(uncompressed_headers);
337 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
338
339 EXPECT_CALL(delegate_,
340 OnHeadersAvailableMock(_, uncompressed_headers.length()));
341 base::RunLoop().RunUntilIdle();
342 EXPECT_EQ(headers_, delegate_.headers_);
343 EXPECT_TRUE(stream_->decompressed_headers().empty());
344 332
345 const char data[] = "hello world!"; 333 const char data[] = "hello world!";
346 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 334 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
347 /*offset=*/0, data)); 335 /*offset=*/0, data));
348 336
349 EXPECT_CALL(delegate_, OnDataAvailable()) 337 EXPECT_CALL(delegate_, OnDataAvailable())
350 .WillOnce(testing::Invoke(CreateFunctor( 338 .WillOnce(testing::Invoke(CreateFunctor(
351 &QuicChromiumClientStreamTest::ReadData, base::Unretained(this), 339 &QuicChromiumClientStreamTest::ReadData, base::Unretained(this),
352 StringPiece(data, arraysize(data) - 1)))); 340 StringPiece(data, arraysize(data) - 1))));
353 341
354 SpdyHeaderBlock trailers; 342 SpdyHeaderBlock trailers;
355 trailers["bar"] = "foo"; 343 trailers["bar"] = "foo";
356 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(data)); 344 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(data));
357 std::string uncompressed_trailers =
358 SpdyUtils::SerializeUncompressedHeaders(trailers);
359 345
360 stream_->OnStreamHeaders(uncompressed_trailers); 346 auto t = ProcessTrailers(trailers);
361 stream_->OnStreamHeadersComplete(true, uncompressed_trailers.length());
362
363 base::RunLoop run_loop; 347 base::RunLoop run_loop;
364 EXPECT_CALL(delegate_, 348 EXPECT_CALL(delegate_,
365 OnHeadersAvailableMock(_, uncompressed_trailers.length())) 349 OnHeadersAvailableMock(_, t.uncompressed_header_bytes()))
366 .WillOnce(testing::InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); 350 .WillOnce(testing::InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }));
367 351
368 run_loop.Run(); 352 run_loop.Run();
369 353
370 // OnDataAvailable callback should follow trailers notification. 354 // OnDataAvailable callback should follow trailers notification.
371 base::RunLoop run_loop3; 355 base::RunLoop run_loop3;
372 EXPECT_CALL(delegate_, OnDataAvailable()) 356 EXPECT_CALL(delegate_, OnDataAvailable())
373 .Times(1) 357 .Times(1)
374 .WillOnce(testing::DoAll( 358 .WillOnce(testing::DoAll(
375 testing::Invoke(CreateFunctor(&QuicChromiumClientStreamTest::ReadData, 359 testing::Invoke(CreateFunctor(&QuicChromiumClientStreamTest::ReadData,
376 base::Unretained(this), StringPiece())), 360 base::Unretained(this), StringPiece())),
377 testing::InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); }))); 361 testing::InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); })));
378 run_loop3.Run(); 362 run_loop3.Run();
379 363
380 // Make sure kFinalOffsetHeaderKey is gone from the delivered actual trailers. 364 // Make sure kFinalOffsetHeaderKey is gone from the delivered actual trailers.
381 trailers.erase(kFinalOffsetHeaderKey); 365 trailers.erase(kFinalOffsetHeaderKey);
382 EXPECT_EQ(trailers, delegate_.headers_); 366 EXPECT_EQ(trailers, delegate_.headers_);
383 base::RunLoop().RunUntilIdle(); 367 base::RunLoop().RunUntilIdle();
384 EXPECT_CALL(delegate_, OnClose()); 368 EXPECT_CALL(delegate_, OnClose());
385 } 369 }
386 370
387 // Tests that trailers are marked as consumed only before delegate is to be 371 // Tests that trailers are marked as consumed only before delegate is to be
388 // immediately notified about trailers. 372 // immediately notified about trailers.
389 TEST_P(QuicChromiumClientStreamTest, MarkTrailersConsumedWhenNotifyDelegate) { 373 TEST_P(QuicChromiumClientStreamTest, MarkTrailersConsumedWhenNotifyDelegate) {
390 InitializeHeaders(); 374 InitializeHeaders();
391 std::string uncompressed_headers = 375 ProcessHeadersFull(headers_);
392 SpdyUtils::SerializeUncompressedHeaders(headers_);
393 stream_->OnStreamHeaders(uncompressed_headers);
394 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
395
396 EXPECT_CALL(delegate_,
397 OnHeadersAvailableMock(_, uncompressed_headers.length()));
398 base::RunLoop().RunUntilIdle();
399 EXPECT_EQ(headers_, delegate_.headers_);
400 EXPECT_TRUE(stream_->decompressed_headers().empty());
401 376
402 const char data[] = "hello world!"; 377 const char data[] = "hello world!";
403 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 378 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
404 /*offset=*/0, data)); 379 /*offset=*/0, data));
405 380
406 base::RunLoop run_loop; 381 base::RunLoop run_loop;
407 EXPECT_CALL(delegate_, OnDataAvailable()) 382 EXPECT_CALL(delegate_, OnDataAvailable())
408 .Times(1) 383 .Times(1)
409 .WillOnce(testing::DoAll( 384 .WillOnce(testing::DoAll(
410 testing::Invoke(CreateFunctor( 385 testing::Invoke(CreateFunctor(
411 &QuicChromiumClientStreamTest::ReadData, base::Unretained(this), 386 &QuicChromiumClientStreamTest::ReadData, base::Unretained(this),
412 StringPiece(data, arraysize(data) - 1))), 387 StringPiece(data, arraysize(data) - 1))),
413 testing::Invoke([&run_loop]() { run_loop.Quit(); }))); 388 testing::Invoke([&run_loop]() { run_loop.Quit(); })));
414 389
415 // Wait for the read to complete. 390 // Wait for the read to complete.
416 run_loop.Run(); 391 run_loop.Run();
417 392
418 // Read again, and it will be pending. 393 // Read again, and it will be pending.
419 scoped_refptr<IOBuffer> buffer(new IOBuffer(1)); 394 scoped_refptr<IOBuffer> buffer(new IOBuffer(1));
420 EXPECT_THAT(stream_->Read(buffer.get(), 1), IsError(ERR_IO_PENDING)); 395 EXPECT_THAT(stream_->Read(buffer.get(), 1), IsError(ERR_IO_PENDING));
421 396
422 SpdyHeaderBlock trailers; 397 SpdyHeaderBlock trailers;
423 trailers["bar"] = "foo"; 398 trailers["bar"] = "foo";
424 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(data)); 399 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(data));
425 std::string uncompressed_trailers = 400 QuicHeaderList t = ProcessTrailers(trailers);
426 SpdyUtils::SerializeUncompressedHeaders(trailers);
427
428 stream_->OnStreamHeaders(uncompressed_trailers);
429 stream_->OnStreamHeadersComplete(true, uncompressed_trailers.length());
430 EXPECT_FALSE(stream_->IsDoneReading()); 401 EXPECT_FALSE(stream_->IsDoneReading());
431 402
432 base::RunLoop run_loop2; 403 base::RunLoop run_loop2;
433 EXPECT_CALL(delegate_, 404 EXPECT_CALL(delegate_,
434 OnHeadersAvailableMock(_, uncompressed_trailers.length())) 405 OnHeadersAvailableMock(_, t.uncompressed_header_bytes()))
435 .WillOnce( 406 .WillOnce(
436 testing::InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); 407 testing::InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); }));
437 408
438 run_loop2.Run(); 409 run_loop2.Run();
439 410
440 // OnDataAvailable callback should follow trailers notification. 411 // OnDataAvailable callback should follow trailers notification.
441 base::RunLoop run_loop3; 412 base::RunLoop run_loop3;
442 EXPECT_CALL(delegate_, OnDataAvailable()) 413 EXPECT_CALL(delegate_, OnDataAvailable())
443 .Times(1) 414 .Times(1)
444 .WillOnce(testing::DoAll( 415 .WillOnce(testing::DoAll(
(...skipping 11 matching lines...) Expand all
456 427
457 base::RunLoop().RunUntilIdle(); 428 base::RunLoop().RunUntilIdle();
458 EXPECT_CALL(delegate_, OnClose()); 429 EXPECT_CALL(delegate_, OnClose());
459 } 430 }
460 431
461 // Test that if Read() is called after response body is read and after trailers 432 // Test that if Read() is called after response body is read and after trailers
462 // are received but not yet delivered, Read() will return ERR_IO_PENDING instead 433 // are received but not yet delivered, Read() will return ERR_IO_PENDING instead
463 // of 0 (EOF). 434 // of 0 (EOF).
464 TEST_P(QuicChromiumClientStreamTest, ReadAfterTrailersReceivedButNotDelivered) { 435 TEST_P(QuicChromiumClientStreamTest, ReadAfterTrailersReceivedButNotDelivered) {
465 InitializeHeaders(); 436 InitializeHeaders();
466 std::string uncompressed_headers = 437 ProcessHeadersFull(headers_);
467 SpdyUtils::SerializeUncompressedHeaders(headers_);
468 stream_->OnStreamHeaders(uncompressed_headers);
469 stream_->OnStreamHeadersComplete(false, uncompressed_headers.length());
470
471 EXPECT_CALL(delegate_,
472 OnHeadersAvailableMock(_, uncompressed_headers.length()));
473 base::RunLoop().RunUntilIdle();
474 EXPECT_EQ(headers_, delegate_.headers_);
475 EXPECT_TRUE(stream_->decompressed_headers().empty());
476 438
477 const char data[] = "hello world!"; 439 const char data[] = "hello world!";
478 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false, 440 stream_->OnStreamFrame(QuicStreamFrame(kTestStreamId, /*fin=*/false,
479 /*offset=*/0, data)); 441 /*offset=*/0, data));
480 442
481 base::RunLoop run_loop; 443 base::RunLoop run_loop;
482 EXPECT_CALL(delegate_, OnDataAvailable()) 444 EXPECT_CALL(delegate_, OnDataAvailable())
483 .Times(1) 445 .Times(1)
484 .WillOnce(testing::DoAll( 446 .WillOnce(testing::DoAll(
485 testing::Invoke(CreateFunctor( 447 testing::Invoke(CreateFunctor(
486 &QuicChromiumClientStreamTest::ReadData, base::Unretained(this), 448 &QuicChromiumClientStreamTest::ReadData, base::Unretained(this),
487 StringPiece(data, arraysize(data) - 1))), 449 StringPiece(data, arraysize(data) - 1))),
488 testing::Invoke([&run_loop]() { run_loop.Quit(); }))); 450 testing::Invoke([&run_loop]() { run_loop.Quit(); })));
489 451
490 // Wait for the read to complete. 452 // Wait for the read to complete.
491 run_loop.Run(); 453 run_loop.Run();
492 454
493 // Deliver trailers. Delegate notification is posted asynchronously. 455 // Deliver trailers. Delegate notification is posted asynchronously.
494 SpdyHeaderBlock trailers; 456 SpdyHeaderBlock trailers;
495 trailers["bar"] = "foo"; 457 trailers["bar"] = "foo";
496 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(data)); 458 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(data));
497 std::string uncompressed_trailers =
498 SpdyUtils::SerializeUncompressedHeaders(trailers);
499 459
500 stream_->OnStreamHeaders(uncompressed_trailers); 460 QuicHeaderList t = ProcessTrailers(trailers);
501 stream_->OnStreamHeadersComplete(true, uncompressed_trailers.length());
502 461
503 // Read again, it return ERR_IO_PENDING. 462 // Read again, it return ERR_IO_PENDING.
504 scoped_refptr<IOBuffer> buffer(new IOBuffer(1)); 463 scoped_refptr<IOBuffer> buffer(new IOBuffer(1));
505 EXPECT_THAT(stream_->Read(buffer.get(), 1), ERR_IO_PENDING); 464 EXPECT_THAT(stream_->Read(buffer.get(), 1), ERR_IO_PENDING);
506 465
507 // Trailers are not delivered 466 // Trailers are not delivered
508 EXPECT_FALSE(stream_->IsDoneReading()); 467 EXPECT_FALSE(stream_->IsDoneReading());
509 468
510 base::RunLoop run_loop2; 469 base::RunLoop run_loop2;
511 EXPECT_CALL(delegate_, 470 EXPECT_CALL(delegate_,
512 OnHeadersAvailableMock(_, uncompressed_trailers.length())) 471 OnHeadersAvailableMock(_, t.uncompressed_header_bytes()))
513 .WillOnce( 472 .WillOnce(
514 testing::InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); 473 testing::InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); }));
515 474
516 run_loop2.Run(); 475 run_loop2.Run();
517 476
518 base::RunLoop run_loop3; 477 base::RunLoop run_loop3;
519 // OnDataAvailable() should follow right after and Read() will return 0. 478 // OnDataAvailable() should follow right after and Read() will return 0.
520 EXPECT_CALL(delegate_, OnDataAvailable()) 479 EXPECT_CALL(delegate_, OnDataAvailable())
521 .WillOnce(testing::DoAll( 480 .WillOnce(testing::DoAll(
522 testing::Invoke(CreateFunctor(&QuicChromiumClientStreamTest::ReadData, 481 testing::Invoke(CreateFunctor(&QuicChromiumClientStreamTest::ReadData,
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 } 580 }
622 581
623 TEST_P(QuicChromiumClientStreamTest, HeadersBeforeDelegate) { 582 TEST_P(QuicChromiumClientStreamTest, HeadersBeforeDelegate) {
624 // We don't use stream_ because we want an incoming server push 583 // We don't use stream_ because we want an incoming server push
625 // stream. 584 // stream.
626 QuicChromiumClientStream* stream = new QuicChromiumClientStream( 585 QuicChromiumClientStream* stream = new QuicChromiumClientStream(
627 kServerDataStreamId1, &session_, NetLogWithSource()); 586 kServerDataStreamId1, &session_, NetLogWithSource());
628 session_.ActivateStream(base::WrapUnique(stream)); 587 session_.ActivateStream(base::WrapUnique(stream));
629 588
630 InitializeHeaders(); 589 InitializeHeaders();
631 std::string uncompressed_headers =
632 SpdyUtils::SerializeUncompressedHeaders(headers_);
633 stream->OnStreamHeaders(uncompressed_headers);
634 stream->OnStreamHeadersComplete(false, uncompressed_headers.length());
635 EXPECT_TRUE(stream->decompressed_headers().empty());
636
637 EXPECT_CALL(delegate_,
638 OnHeadersAvailableMock(_, uncompressed_headers.length()));
639 stream->SetDelegate(&delegate_); 590 stream->SetDelegate(&delegate_);
640 base::RunLoop().RunUntilIdle(); 591 ProcessHeadersFull(headers_);
641 EXPECT_EQ(headers_, delegate_.headers_);
642 592
643 // Times(2) because OnClose will be called for stream and stream_. 593 // Times(2) because OnClose will be called for stream and stream_.
644 EXPECT_CALL(delegate_, OnClose()).Times(2); 594 EXPECT_CALL(delegate_, OnClose()).Times(2);
645 } 595 }
646 596
647 } // namespace 597 } // namespace
648 } // namespace test 598 } // namespace test
649 } // namespace net 599 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_chromium_client_stream.cc ('k') | net/quic/chromium/quic_http_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698