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

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

Issue 2492993002: Server push cancellation: Use TestPushDelegate in QuicChromiumClientSessionTest to cancel push. (Closed)
Patch Set: rebase 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
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.h ('k') | net/spdy/spdy_session_unittest.cc » ('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) 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_session.h" 5 #include "net/quic/chromium/quic_chromium_client_session.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/rand_util.h" 10 #include "base/rand_util.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 std::unique_ptr<MockRead> default_read_; 161 std::unique_ptr<MockRead> default_read_;
162 std::unique_ptr<SequencedSocketData> socket_data_; 162 std::unique_ptr<SequencedSocketData> socket_data_;
163 MockClock clock_; 163 MockClock clock_;
164 MockRandom random_; 164 MockRandom random_;
165 QuicChromiumConnectionHelper helper_; 165 QuicChromiumConnectionHelper helper_;
166 MockAlarmFactory alarm_factory_; 166 MockAlarmFactory alarm_factory_;
167 TransportSecurityState transport_security_state_; 167 TransportSecurityState transport_security_state_;
168 MockCryptoClientStreamFactory crypto_client_stream_factory_; 168 MockCryptoClientStreamFactory crypto_client_stream_factory_;
169 QuicClientPushPromiseIndex push_promise_index_; 169 QuicClientPushPromiseIndex push_promise_index_;
170 std::unique_ptr<QuicChromiumClientSession> session_; 170 std::unique_ptr<QuicChromiumClientSession> session_;
171 TestServerPushDelegate test_push_delegate_;
171 QuicConnectionVisitorInterface* visitor_; 172 QuicConnectionVisitorInterface* visitor_;
172 TestCompletionCallback callback_; 173 TestCompletionCallback callback_;
173 QuicTestPacketMaker client_maker_; 174 QuicTestPacketMaker client_maker_;
174 QuicTestPacketMaker server_maker_; 175 QuicTestPacketMaker server_maker_;
175 ProofVerifyDetailsChromium verify_details_; 176 ProofVerifyDetailsChromium verify_details_;
176 }; 177 };
177 178
178 INSTANTIATE_TEST_CASE_P(Tests, 179 INSTANTIATE_TEST_CASE_P(Tests,
179 QuicChromiumClientSessionTest, 180 QuicChromiumClientSessionTest,
180 ::testing::ValuesIn(AllSupportedVersions())); 181 ::testing::ValuesIn(AllSupportedVersions()));
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) { 318 TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) {
318 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 319 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
319 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 320 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
320 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 321 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT));
321 322
322 MockWrite writes[] = { 323 MockWrite writes[] = {
323 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; 324 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
324 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 325 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
325 arraysize(writes))); 326 arraysize(writes)));
326 Initialize(); 327 Initialize();
328 session_->set_push_delegate(&test_push_delegate_);
327 329
328 ProofVerifyDetailsChromium details; 330 ProofVerifyDetailsChromium details;
329 details.cert_verify_result.verified_cert = 331 details.cert_verify_result.verified_cert =
330 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 332 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
331 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); 333 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
332 334
333 CompleteCryptoHandshake(); 335 CompleteCryptoHandshake();
334 session_->OnProofVerifyDetailsAvailable(details); 336 session_->OnProofVerifyDetailsAvailable(details);
335 337
336 QuicChromiumClientStream* stream = 338 QuicChromiumClientStream* stream =
(...skipping 14 matching lines...) Expand all
351 session_->GetPromisedById(kServerDataStreamId1); 353 session_->GetPromisedById(kServerDataStreamId1);
352 EXPECT_TRUE(promised); 354 EXPECT_TRUE(promised);
353 355
354 // Initiate rendezvous. 356 // Initiate rendezvous.
355 SpdyHeaderBlock client_request = promise_headers.Clone(); 357 SpdyHeaderBlock client_request = promise_headers.Clone();
356 PushPromiseDelegate delegate(/*match=*/true); 358 PushPromiseDelegate delegate(/*match=*/true);
357 promised->HandleClientRequest(client_request, &delegate); 359 promised->HandleClientRequest(client_request, &delegate);
358 360
359 // Cancel the push before receiving the response to the pushed request. 361 // Cancel the push before receiving the response to the pushed request.
360 GURL pushed_url("https://www.example.org/pushed.jpg"); 362 GURL pushed_url("https://www.example.org/pushed.jpg");
361 session_->CancelPush(pushed_url); 363 test_push_delegate_.CancelPush(pushed_url);
362 EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec())); 364 EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec()));
363 365
364 // Reset the stream now before tear down. 366 // Reset the stream now before tear down.
365 session_->CloseStream(kClientDataStreamId1); 367 session_->CloseStream(kClientDataStreamId1);
366 } 368 }
367 369
368 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) { 370 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) {
369 base::HistogramTester histogram_tester; 371 base::HistogramTester histogram_tester;
370 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 372 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
371 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 373 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
372 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); 374 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED));
373 MockWrite writes[] = { 375 MockWrite writes[] = {
374 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; 376 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
375 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 377 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
376 arraysize(writes))); 378 arraysize(writes)));
377 Initialize(); 379 Initialize();
380 session_->set_push_delegate(&test_push_delegate_);
378 381
379 ProofVerifyDetailsChromium details; 382 ProofVerifyDetailsChromium details;
380 details.cert_verify_result.verified_cert = 383 details.cert_verify_result.verified_cert =
381 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 384 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
382 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); 385 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
383 386
384 CompleteCryptoHandshake(); 387 CompleteCryptoHandshake();
385 session_->OnProofVerifyDetailsAvailable(details); 388 session_->OnProofVerifyDetailsAvailable(details);
386 389
387 QuicChromiumClientStream* stream = 390 QuicChromiumClientStream* stream =
388 session_->CreateOutgoingDynamicStream(kDefaultPriority); 391 session_->CreateOutgoingDynamicStream(kDefaultPriority);
389 EXPECT_TRUE(stream); 392 EXPECT_TRUE(stream);
390 393
391 SpdyHeaderBlock promise_headers; 394 SpdyHeaderBlock promise_headers;
392 promise_headers[":method"] = "GET"; 395 promise_headers[":method"] = "GET";
393 promise_headers[":authority"] = "www.example.org"; 396 promise_headers[":authority"] = "www.example.org";
394 promise_headers[":scheme"] = "https"; 397 promise_headers[":scheme"] = "https";
395 promise_headers[":path"] = "/pushed.jpg"; 398 promise_headers[":path"] = "/pushed.jpg";
396 399
397 // Receive a PUSH PROMISE from the server. 400 // Receive a PUSH PROMISE from the server.
398 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, 401 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1,
399 promise_headers)); 402 promise_headers));
400 403
401 QuicClientPromisedInfo* promised = 404 QuicClientPromisedInfo* promised =
402 session_->GetPromisedById(kServerDataStreamId1); 405 session_->GetPromisedById(kServerDataStreamId1);
403 EXPECT_TRUE(promised); 406 EXPECT_TRUE(promised);
404 // Cancel the push before receiving the response to the pushed request. 407 // Cancel the push before receiving the response to the pushed request.
405 GURL pushed_url("https://www.example.org/pushed.jpg"); 408 GURL pushed_url("https://www.example.org/pushed.jpg");
406 session_->CancelPush(pushed_url); 409 test_push_delegate_.CancelPush(pushed_url);
407 410
408 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); 411 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec()));
409 EXPECT_EQ(0u, 412 EXPECT_EQ(0u,
410 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); 413 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
411 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( 414 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
412 session_.get())); 415 session_.get()));
413 } 416 }
414 417
415 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) { 418 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) {
416 base::HistogramTester histogram_tester; 419 base::HistogramTester histogram_tester;
417 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 420 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
418 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 421 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
419 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); 422 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED));
420 MockWrite writes[] = { 423 MockWrite writes[] = {
421 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; 424 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
422 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 425 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
423 arraysize(writes))); 426 arraysize(writes)));
424 Initialize(); 427 Initialize();
428 session_->set_push_delegate(&test_push_delegate_);
425 429
426 ProofVerifyDetailsChromium details; 430 ProofVerifyDetailsChromium details;
427 details.cert_verify_result.verified_cert = 431 details.cert_verify_result.verified_cert =
428 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 432 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
429 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); 433 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
430 434
431 CompleteCryptoHandshake(); 435 CompleteCryptoHandshake();
432 session_->OnProofVerifyDetailsAvailable(details); 436 session_->OnProofVerifyDetailsAvailable(details);
433 437
434 QuicChromiumClientStream* stream = 438 QuicChromiumClientStream* stream =
(...skipping 13 matching lines...) Expand all
448 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock()); 452 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock());
449 // Read data on the pushed stream. 453 // Read data on the pushed stream.
450 QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP")); 454 QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP"));
451 session_->OnStreamFrame(data); 455 session_->OnStreamFrame(data);
452 456
453 QuicClientPromisedInfo* promised = 457 QuicClientPromisedInfo* promised =
454 session_->GetPromisedById(kServerDataStreamId1); 458 session_->GetPromisedById(kServerDataStreamId1);
455 EXPECT_TRUE(promised); 459 EXPECT_TRUE(promised);
456 // Cancel the push after receiving data on the push stream. 460 // Cancel the push after receiving data on the push stream.
457 GURL pushed_url("https://www.example.org/pushed.jpg"); 461 GURL pushed_url("https://www.example.org/pushed.jpg");
458 session_->CancelPush(pushed_url); 462 test_push_delegate_.CancelPush(pushed_url);
459 463
460 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); 464 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec()));
461 EXPECT_EQ(2u, 465 EXPECT_EQ(2u,
462 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); 466 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
463 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( 467 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
464 session_.get())); 468 session_.get()));
465 } 469 }
466 470
467 TEST_P(QuicChromiumClientSessionTest, Priority) { 471 TEST_P(QuicChromiumClientSessionTest, Priority) {
468 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 472 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 811
808 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); 812 EXPECT_TRUE(socket_data_->AllReadDataConsumed());
809 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); 813 EXPECT_TRUE(socket_data_->AllWriteDataConsumed());
810 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); 814 EXPECT_TRUE(new_socket_data.AllReadDataConsumed());
811 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); 815 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed());
812 } 816 }
813 817
814 } // namespace 818 } // namespace
815 } // namespace test 819 } // namespace test
816 } // namespace net 820 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.h ('k') | net/spdy/spdy_session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698