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

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

Issue 2456713002: Server push cancellation: add methods in session layer to cancel push given the pushed url. Not in … (Closed)
Patch Set: remove todo 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_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 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 session_->GetPromisedById(kServerDataStreamId1); 304 session_->GetPromisedById(kServerDataStreamId1);
305 EXPECT_TRUE(promised); 305 EXPECT_TRUE(promised);
306 // Fire alarm to time out the push stream. 306 // Fire alarm to time out the push stream.
307 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); 307 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised));
308 EXPECT_EQ(2u, 308 EXPECT_EQ(2u,
309 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); 309 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
310 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( 310 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
311 session_.get())); 311 session_.get()));
312 } 312 }
313 313
314 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceiveResponse) {
Ryan Hamilton 2016/10/27 17:00:25 nit: s/Receive/Receiving/
Zhongyi Shi 2016/10/27 17:57:29 Done.
315 base::HistogramTester histogram_tester;
316 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
317 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
318 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED));
319 MockWrite writes[] = {
320 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
321 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
322 arraysize(writes)));
323 Initialize();
324
325 ProofVerifyDetailsChromium details;
326 details.cert_verify_result.verified_cert =
327 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
328 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
329
330 CompleteCryptoHandshake();
331 session_->OnProofVerifyDetailsAvailable(details);
332
333 QuicChromiumClientStream* stream =
334 session_->CreateOutgoingDynamicStream(kDefaultPriority);
335 EXPECT_TRUE(stream);
336
337 SpdyHeaderBlock promise_headers;
338 promise_headers[":method"] = "GET";
339 promise_headers[":authority"] = "www.example.org";
340 promise_headers[":scheme"] = "https";
341 promise_headers[":path"] = "/pushed.jpg";
342
343 // Receive a PUSH PROMISE from the server.
344 session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers);
345
346 QuicClientPromisedInfo* promised =
347 session_->GetPromisedById(kServerDataStreamId1);
348 EXPECT_TRUE(promised);
349 // Cancel the push before receiving the response to the pushed request.
350 GURL pushed_url("https://www.example.org/pushed.jpg");
351 session_->CancelPush(pushed_url);
352
353 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec()));
354 EXPECT_EQ(0u,
355 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
356 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
357 session_.get()));
358 }
359
360 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) {
361 base::HistogramTester histogram_tester;
362 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
363 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
364 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED));
365 MockWrite writes[] = {
366 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
367 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
368 arraysize(writes)));
369 Initialize();
370
371 ProofVerifyDetailsChromium details;
372 details.cert_verify_result.verified_cert =
373 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
374 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
375
376 CompleteCryptoHandshake();
377 session_->OnProofVerifyDetailsAvailable(details);
378
379 QuicChromiumClientStream* stream =
380 session_->CreateOutgoingDynamicStream(kDefaultPriority);
381 EXPECT_TRUE(stream);
382
383 SpdyHeaderBlock promise_headers;
384 promise_headers[":method"] = "GET";
385 promise_headers[":authority"] = "www.example.org";
386 promise_headers[":scheme"] = "https";
387 promise_headers[":path"] = "/pushed.jpg";
388
389 session_->GetOrCreateStream(kServerDataStreamId1);
390 // Receive a PUSH PROMISE from the server.
391 session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers);
392 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock());
393 // Read data on the pushed stream.
394 QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP"));
395 session_->OnStreamFrame(data);
396
397 QuicClientPromisedInfo* promised =
398 session_->GetPromisedById(kServerDataStreamId1);
399 EXPECT_TRUE(promised);
400 // Cancel the push after receiving data on the push stream.
401 GURL pushed_url("https://www.example.org/pushed.jpg");
402 session_->CancelPush(pushed_url);
403
404 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec()));
405 EXPECT_EQ(2u,
406 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
407 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
408 session_.get()));
409 }
410
314 TEST_P(QuicChromiumClientSessionTest, Priority) { 411 TEST_P(QuicChromiumClientSessionTest, Priority) {
315 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 412 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
316 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 413 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
317 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 414 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT));
318 MockWrite writes[] = { 415 MockWrite writes[] = {
319 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; 416 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
320 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 417 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
321 arraysize(writes))); 418 arraysize(writes)));
322 419
323 Initialize(); 420 Initialize();
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 751
655 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); 752 EXPECT_TRUE(socket_data_->AllReadDataConsumed());
656 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); 753 EXPECT_TRUE(socket_data_->AllWriteDataConsumed());
657 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); 754 EXPECT_TRUE(new_socket_data.AllReadDataConsumed());
658 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); 755 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed());
659 } 756 }
660 757
661 } // namespace 758 } // namespace
662 } // namespace test 759 } // namespace test
663 } // namespace net 760 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698