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

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

Issue 2107353003: QUIC - expand server push test coverage and fix recent regression. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: QUIC - expand server push test coverage and fix recent regression. Created 4 years, 5 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
« no previous file with comments | « net/quic/quic_chromium_client_stream.cc ('k') | net/quic/test_tools/quic_test_packet_maker.h » ('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 <memory> 5 #include <memory>
6 #include <ostream> 6 #include <ostream>
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 } 326 }
327 327
328 std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket( 328 std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket(
329 QuicPacketNumber largest_received, 329 QuicPacketNumber largest_received,
330 QuicPacketNumber least_unacked, 330 QuicPacketNumber least_unacked,
331 QuicTestPacketMaker* maker) { 331 QuicTestPacketMaker* maker) {
332 return client_maker_.MakeAckPacket(2, largest_received, least_unacked, 332 return client_maker_.MakeAckPacket(2, largest_received, least_unacked,
333 least_unacked, true); 333 least_unacked, true);
334 } 334 }
335 335
336 std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket(
337 QuicPacketNumber packet_number,
338 QuicPacketNumber largest_received,
339 QuicPacketNumber ack_least_unacked,
340 QuicPacketNumber stop_least_unacked) {
341 return client_maker_.MakeAckPacket(packet_number, largest_received,
342 ack_least_unacked, stop_least_unacked,
343 true);
344 }
345
336 std::unique_ptr<QuicEncryptedPacket> 346 std::unique_ptr<QuicEncryptedPacket>
337 ConstructClientAckAndConnectionClosePacket( 347 ConstructClientAckAndConnectionClosePacket(
338 QuicPacketNumber packet_number, 348 QuicPacketNumber packet_number,
339 QuicPacketNumber largest_received, 349 QuicPacketNumber largest_received,
340 QuicPacketNumber ack_least_unacked, 350 QuicPacketNumber ack_least_unacked,
341 QuicPacketNumber stop_least_unacked) { 351 QuicPacketNumber stop_least_unacked) {
342 return client_maker_.MakeAckPacket(packet_number, largest_received, 352 return client_maker_.MakeAckPacket(packet_number, largest_received,
343 ack_least_unacked, stop_least_unacked, 353 ack_least_unacked, stop_least_unacked,
344 true); 354 true);
345 } 355 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 QuicStreamId stream_id, 456 QuicStreamId stream_id,
447 bool should_include_version, 457 bool should_include_version,
448 bool fin, 458 bool fin,
449 SpdyHeaderBlock headers, 459 SpdyHeaderBlock headers,
450 QuicTestPacketMaker* maker) { 460 QuicTestPacketMaker* maker) {
451 return ConstructClientRequestHeadersPacket( 461 return ConstructClientRequestHeadersPacket(
452 packet_number, stream_id, should_include_version, fin, 462 packet_number, stream_id, should_include_version, fin,
453 std::move(headers), nullptr, maker); 463 std::move(headers), nullptr, maker);
454 } 464 }
455 465
466 std::unique_ptr<QuicEncryptedPacket> ConstructServerPushPromisePacket(
467 QuicPacketNumber packet_number,
468 QuicStreamId stream_id,
469 QuicStreamId promised_stream_id,
470 bool should_include_version,
471 SpdyHeaderBlock headers,
472 QuicStreamOffset* offset,
473 QuicTestPacketMaker* maker) {
474 return maker->MakePushPromisePacket(
475 packet_number, stream_id, promised_stream_id, should_include_version,
476 false, std::move(headers), nullptr, offset);
477 }
478
456 std::unique_ptr<QuicEncryptedPacket> ConstructServerResponseHeadersPacket( 479 std::unique_ptr<QuicEncryptedPacket> ConstructServerResponseHeadersPacket(
457 QuicPacketNumber packet_number, 480 QuicPacketNumber packet_number,
458 QuicStreamId stream_id, 481 QuicStreamId stream_id,
459 bool should_include_version, 482 bool should_include_version,
460 bool fin, 483 bool fin,
461 SpdyHeaderBlock headers) { 484 SpdyHeaderBlock headers) {
462 return ConstructServerResponseHeadersPacket( 485 return ConstructServerResponseHeadersPacket(
463 packet_number, stream_id, should_include_version, fin, 486 packet_number, stream_id, should_include_version, fin,
464 std::move(headers), nullptr, &server_maker_); 487 std::move(headers), nullptr, &server_maker_);
465 } 488 }
(...skipping 1773 matching lines...) Expand 10 before | Expand all | Expand 10 after
2239 request_.upload_data_stream = &upload_data; 2262 request_.upload_data_stream = &upload_data;
2240 2263
2241 std::unique_ptr<HttpNetworkTransaction> trans( 2264 std::unique_ptr<HttpNetworkTransaction> trans(
2242 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2265 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
2243 TestCompletionCallback callback; 2266 TestCompletionCallback callback;
2244 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 2267 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
2245 EXPECT_EQ(ERR_IO_PENDING, rv); 2268 EXPECT_EQ(ERR_IO_PENDING, rv);
2246 EXPECT_NE(OK, callback.WaitForResult()); 2269 EXPECT_NE(OK, callback.WaitForResult());
2247 } 2270 }
2248 2271
2272 // Adds coverage to catch regression such as https://crbug.com/622043
2273 TEST_P(QuicNetworkTransactionTest, QuicServerPush) {
2274 params_.origins_to_force_quic_on.insert(
2275 HostPortPair::FromString("mail.example.org:443"));
2276
2277 MockQuicData mock_quic_data;
2278 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
2279 1, kClientDataStreamId1, true, true,
2280 GetRequestHeaders("GET", "https", "/")));
2281 QuicStreamOffset server_header_offset = 0;
2282 mock_quic_data.AddRead(ConstructServerPushPromisePacket(
2283 1, kClientDataStreamId1, kServerDataStreamId1, false,
2284 GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset,
2285 &server_maker_));
2286 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
2287 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"),
2288 &server_header_offset));
2289 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1));
2290 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
2291 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"),
2292 &server_header_offset));
2293 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId1,
2294 false, true, 0, "hello!"));
2295 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 4, 3, 1));
2296 mock_quic_data.AddRead(ConstructServerDataPacket(
2297 5, kServerDataStreamId1, false, true, 0, "and hello!"));
2298 mock_quic_data.AddWrite(
2299 ConstructClientAckAndRstPacket(4, 4, QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1));
2300 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
2301 mock_quic_data.AddRead(ASYNC, 0); // EOF
2302 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
2303
2304 // The non-alternate protocol job needs to hang in order to guarantee that
2305 // the alternate-protocol job will "win".
2306 AddHangingNonAlternateProtocolSocketData();
2307
2308 CreateSession();
2309
2310 // PUSH_PROMISE handling in the http layer gets exercised here.
2311 SendRequestAndExpectQuicResponse("hello!");
2312
2313 request_.url = GURL("https://mail.example.org/pushed.jpg");
2314 SendRequestAndExpectQuicResponse("and hello!");
2315
2316 // Check that the NetLog was filled reasonably.
2317 TestNetLogEntry::List entries;
2318 net_log_.GetEntries(&entries);
2319 EXPECT_LT(0u, entries.size());
2320
2321 // Check that we logged a QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM
2322 int pos = ExpectLogContainsSomewhere(
2323 entries, 0, NetLog::TYPE_QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM,
2324 NetLog::PHASE_NONE);
2325 EXPECT_LT(0, pos);
2326 }
2327
2249 class QuicNetworkTransactionWithDestinationTest 2328 class QuicNetworkTransactionWithDestinationTest
2250 : public PlatformTest, 2329 : public PlatformTest,
2251 public ::testing::WithParamInterface<PoolingTestParams> { 2330 public ::testing::WithParamInterface<PoolingTestParams> {
2252 protected: 2331 protected:
2253 QuicNetworkTransactionWithDestinationTest() 2332 QuicNetworkTransactionWithDestinationTest()
2254 : clock_(new MockClock), 2333 : clock_(new MockClock),
2255 version_(GetParam().version), 2334 version_(GetParam().version),
2256 destination_type_(GetParam().destination_type), 2335 destination_type_(GetParam().destination_type),
2257 cert_transparency_verifier_(new MultiLogCTVerifier()), 2336 cert_transparency_verifier_(new MultiLogCTVerifier()),
2258 ssl_config_service_(new SSLConfigServiceDefaults), 2337 ssl_config_service_(new SSLConfigServiceDefaults),
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
2661 AddHangingSocketData(); 2740 AddHangingSocketData();
2662 2741
2663 SendRequestAndExpectQuicResponse(origin1_); 2742 SendRequestAndExpectQuicResponse(origin1_);
2664 SendRequestAndExpectQuicResponse(origin2_); 2743 SendRequestAndExpectQuicResponse(origin2_);
2665 2744
2666 EXPECT_TRUE(AllDataConsumed()); 2745 EXPECT_TRUE(AllDataConsumed());
2667 } 2746 }
2668 2747
2669 } // namespace test 2748 } // namespace test
2670 } // namespace net 2749 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_chromium_client_stream.cc ('k') | net/quic/test_tools/quic_test_packet_maker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698