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

Unified Diff: net/quic/chromium/quic_chromium_client_session_test.cc

Issue 2458793002: Server push cancellation: add PushPromiseHelper which reflects information on the push promise. (Closed)
Patch Set: sync and fix tests 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/core/quic_client_promised_info.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/chromium/quic_chromium_client_session_test.cc
diff --git a/net/quic/chromium/quic_chromium_client_session_test.cc b/net/quic/chromium/quic_chromium_client_session_test.cc
index b9469249f922ff271da969b653ab1d9d7b878d55..aca82cac42b650ca21ba8dcf02384ba33e9872db 100644
--- a/net/quic/chromium/quic_chromium_client_session_test.cc
+++ b/net/quic/chromium/quic_chromium_client_session_test.cc
@@ -44,6 +44,7 @@
#include "net/test/cert_test_util.h"
#include "net/test/gtest_util.h"
#include "net/test/test_data_directory.h"
+#include "net/tools/quic/test_tools/push_promise_delegate.h"
#include "net/udp/datagram_client_socket.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -165,13 +166,13 @@ class QuicChromiumClientSessionTest
MockAlarmFactory alarm_factory_;
TransportSecurityState transport_security_state_;
MockCryptoClientStreamFactory crypto_client_stream_factory_;
+ QuicClientPushPromiseIndex push_promise_index_;
std::unique_ptr<QuicChromiumClientSession> session_;
QuicConnectionVisitorInterface* visitor_;
TestCompletionCallback callback_;
QuicTestPacketMaker client_maker_;
QuicTestPacketMaker server_maker_;
ProofVerifyDetailsChromium verify_details_;
- QuicClientPushPromiseIndex push_promise_index_;
};
INSTANTIATE_TEST_CASE_P(Tests,
@@ -248,7 +249,8 @@ TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutNoResponse) {
promise_headers[":path"] = "/pushed.jpg";
// Receive a PUSH PROMISE from the server.
- session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers);
+ EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1,
+ promise_headers));
QuicClientPromisedInfo* promised =
session_->GetPromisedById(kServerDataStreamId1);
@@ -294,7 +296,8 @@ TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutWithResponse) {
session_->GetOrCreateStream(kServerDataStreamId1);
// Receive a PUSH PROMISE from the server.
- session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers);
+ EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1,
+ promise_headers));
session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock());
// Read data on the pushed stream.
QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP"));
@@ -311,6 +314,57 @@ TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutWithResponse) {
session_.get()));
}
+TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) {
+ MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
+ std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
+ 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT));
+
+ MockWrite writes[] = {
+ MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
+ socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
+ arraysize(writes)));
+ Initialize();
+
+ ProofVerifyDetailsChromium details;
+ details.cert_verify_result.verified_cert =
+ ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
+ ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
+
+ CompleteCryptoHandshake();
+ session_->OnProofVerifyDetailsAvailable(details);
+
+ QuicChromiumClientStream* stream =
+ session_->CreateOutgoingDynamicStream(kDefaultPriority);
+ EXPECT_TRUE(stream);
+
+ SpdyHeaderBlock promise_headers;
+ promise_headers[":method"] = "GET";
+ promise_headers[":authority"] = "www.example.org";
+ promise_headers[":scheme"] = "https";
+ promise_headers[":path"] = "/pushed.jpg";
+
+ // Receive a PUSH PROMISE from the server.
+ EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1,
+ promise_headers));
+
+ QuicClientPromisedInfo* promised =
+ session_->GetPromisedById(kServerDataStreamId1);
+ EXPECT_TRUE(promised);
+
+ // Initiate rendezvous.
+ SpdyHeaderBlock client_request = promise_headers.Clone();
+ PushPromiseDelegate delegate(/*match=*/true);
+ promised->HandleClientRequest(client_request, &delegate);
+
+ // Cancel the push before receiving the response to the pushed request.
+ GURL pushed_url("https://www.example.org/pushed.jpg");
+ session_->CancelPush(pushed_url);
+ EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec()));
+
+ // Reset the stream now before tear down.
+ session_->CloseStream(kClientDataStreamId1);
+}
+
TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) {
base::HistogramTester histogram_tester;
MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
@@ -341,7 +395,8 @@ TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) {
promise_headers[":path"] = "/pushed.jpg";
// Receive a PUSH PROMISE from the server.
- session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers);
+ EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1,
+ promise_headers));
QuicClientPromisedInfo* promised =
session_->GetPromisedById(kServerDataStreamId1);
@@ -388,7 +443,8 @@ TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) {
session_->GetOrCreateStream(kServerDataStreamId1);
// Receive a PUSH PROMISE from the server.
- session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers);
+ EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1,
+ promise_headers));
session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock());
// Read data on the pushed stream.
QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP"));
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/core/quic_client_promised_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698