| OLD | NEW |
| 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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 bool rtt_notification_received_; | 200 bool rtt_notification_received_; |
| 201 | 201 |
| 202 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory); | 202 DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory); |
| 203 }; | 203 }; |
| 204 | 204 |
| 205 class QuicNetworkTransactionTest | 205 class QuicNetworkTransactionTest |
| 206 : public PlatformTest, | 206 : public PlatformTest, |
| 207 public ::testing::WithParamInterface<QuicVersion> { | 207 public ::testing::WithParamInterface<QuicVersion> { |
| 208 protected: | 208 protected: |
| 209 QuicNetworkTransactionTest() | 209 QuicNetworkTransactionTest() |
| 210 : clock_(new MockClock), | 210 : version_(GetParam()), |
| 211 client_maker_(GetParam(), | 211 clock_(new MockClock), |
| 212 client_maker_(version_, |
| 212 0, | 213 0, |
| 213 clock_, | 214 clock_, |
| 214 kDefaultServerHostName, | 215 kDefaultServerHostName, |
| 215 Perspective::IS_CLIENT), | 216 Perspective::IS_CLIENT), |
| 216 server_maker_(GetParam(), | 217 server_maker_(version_, |
| 217 0, | 218 0, |
| 218 clock_, | 219 clock_, |
| 219 kDefaultServerHostName, | 220 kDefaultServerHostName, |
| 220 Perspective::IS_SERVER), | 221 Perspective::IS_SERVER), |
| 221 cert_transparency_verifier_(new MultiLogCTVerifier()), | 222 cert_transparency_verifier_(new MultiLogCTVerifier()), |
| 222 ssl_config_service_(new SSLConfigServiceDefaults), | 223 ssl_config_service_(new SSLConfigServiceDefaults), |
| 223 proxy_service_(ProxyService::CreateDirect()), | 224 proxy_service_(ProxyService::CreateDirect()), |
| 224 auth_handler_factory_( | 225 auth_handler_factory_( |
| 225 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), | 226 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), |
| 226 random_generator_(0), | 227 random_generator_(0), |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 params_.cert_verifier = &cert_verifier_; | 463 params_.cert_verifier = &cert_verifier_; |
| 463 params_.transport_security_state = &transport_security_state_; | 464 params_.transport_security_state = &transport_security_state_; |
| 464 params_.cert_transparency_verifier = cert_transparency_verifier_.get(); | 465 params_.cert_transparency_verifier = cert_transparency_verifier_.get(); |
| 465 params_.ct_policy_enforcer = &ct_policy_enforcer_; | 466 params_.ct_policy_enforcer = &ct_policy_enforcer_; |
| 466 params_.socket_performance_watcher_factory = | 467 params_.socket_performance_watcher_factory = |
| 467 &test_socket_performance_watcher_factory_; | 468 &test_socket_performance_watcher_factory_; |
| 468 params_.proxy_service = proxy_service_.get(); | 469 params_.proxy_service = proxy_service_.get(); |
| 469 params_.ssl_config_service = ssl_config_service_.get(); | 470 params_.ssl_config_service = ssl_config_service_.get(); |
| 470 params_.http_auth_handler_factory = auth_handler_factory_.get(); | 471 params_.http_auth_handler_factory = auth_handler_factory_.get(); |
| 471 params_.http_server_properties = &http_server_properties_; | 472 params_.http_server_properties = &http_server_properties_; |
| 472 params_.quic_supported_versions = SupportedVersions(GetParam()); | 473 params_.quic_supported_versions = SupportedVersions(version_); |
| 473 for (const char* host : | 474 for (const char* host : |
| 474 {kDefaultServerHostName, "www.example.org", "news.example.org", | 475 {kDefaultServerHostName, "www.example.org", "news.example.org", |
| 475 "bar.example.org", "foo.example.org", "invalid.example.org", | 476 "bar.example.org", "foo.example.org", "invalid.example.org", |
| 476 "mail.example.com"}) { | 477 "mail.example.com"}) { |
| 477 params_.quic_host_whitelist.insert(host); | 478 params_.quic_host_whitelist.insert(host); |
| 478 } | 479 } |
| 479 | 480 |
| 480 session_.reset(new HttpNetworkSession(params_)); | 481 session_.reset(new HttpNetworkSession(params_)); |
| 481 session_->quic_stream_factory()->set_require_confirmation(false); | 482 session_->quic_stream_factory()->set_require_confirmation(false); |
| 482 ASSERT_EQ(params_.quic_socket_receive_buffer_size, | 483 ASSERT_EQ(params_.quic_socket_receive_buffer_size, |
| 483 session_->quic_stream_factory()->socket_receive_buffer_size()); | 484 session_->quic_stream_factory()->socket_receive_buffer_size()); |
| 484 } | 485 } |
| 485 | 486 |
| 486 void CheckWasQuicResponse(HttpNetworkTransaction* trans) { | 487 void CheckWasQuicResponse(HttpNetworkTransaction* trans) { |
| 487 const HttpResponseInfo* response = trans->GetResponseInfo(); | 488 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 488 ASSERT_TRUE(response != nullptr); | 489 ASSERT_TRUE(response != nullptr); |
| 489 ASSERT_TRUE(response->headers.get() != nullptr); | 490 ASSERT_TRUE(response->headers.get() != nullptr); |
| 490 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 491 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 491 EXPECT_TRUE(response->was_fetched_via_spdy); | 492 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 492 EXPECT_TRUE(response->was_alpn_negotiated); | 493 EXPECT_TRUE(response->was_alpn_negotiated); |
| 493 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC, | 494 EXPECT_EQ(QuicHttpStream::ConnectionInfoFromQuicVersion(version_), |
| 494 response->connection_info); | 495 response->connection_info); |
| 495 } | 496 } |
| 496 | 497 |
| 497 void CheckResponsePort(HttpNetworkTransaction* trans, uint16_t port) { | 498 void CheckResponsePort(HttpNetworkTransaction* trans, uint16_t port) { |
| 498 const HttpResponseInfo* response = trans->GetResponseInfo(); | 499 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 499 ASSERT_TRUE(response != nullptr); | 500 ASSERT_TRUE(response != nullptr); |
| 500 EXPECT_EQ(port, response->socket_address.port()); | 501 EXPECT_EQ(port, response->socket_address.port()); |
| 501 } | 502 } |
| 502 | 503 |
| 503 void CheckWasHttpResponse(HttpNetworkTransaction* trans) { | 504 void CheckWasHttpResponse(HttpNetworkTransaction* trans) { |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 EXPECT_TRUE(session_->proxy_service()->proxy_retry_info().empty()); | 670 EXPECT_TRUE(session_->proxy_service()->proxy_retry_info().empty()); |
| 670 | 671 |
| 671 // The alternative proxy server should no longer be in use. | 672 // The alternative proxy server should no longer be in use. |
| 672 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_valid()); | 673 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_valid()); |
| 673 | 674 |
| 674 // Verify that the second request completes successfully, and the | 675 // Verify that the second request completes successfully, and the |
| 675 // alternative proxy server job is not started. | 676 // alternative proxy server job is not started. |
| 676 SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443); | 677 SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443); |
| 677 } | 678 } |
| 678 | 679 |
| 680 const QuicVersion version_; |
| 679 QuicFlagSaver flags_; // Save/restore all QUIC flag values. | 681 QuicFlagSaver flags_; // Save/restore all QUIC flag values. |
| 680 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. | 682 MockClock* clock_; // Owned by QuicStreamFactory after CreateSession. |
| 681 QuicTestPacketMaker client_maker_; | 683 QuicTestPacketMaker client_maker_; |
| 682 QuicTestPacketMaker server_maker_; | 684 QuicTestPacketMaker server_maker_; |
| 683 std::unique_ptr<HttpNetworkSession> session_; | 685 std::unique_ptr<HttpNetworkSession> session_; |
| 684 MockClientSocketFactory socket_factory_; | 686 MockClientSocketFactory socket_factory_; |
| 685 ProofVerifyDetailsChromium verify_details_; | 687 ProofVerifyDetailsChromium verify_details_; |
| 686 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 688 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 687 MockHostResolver host_resolver_; | 689 MockHostResolver host_resolver_; |
| 688 MockCertVerifier cert_verifier_; | 690 MockCertVerifier cert_verifier_; |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1113 http_server_properties->GetAlternativeServices(https_server); | 1115 http_server_properties->GetAlternativeServices(https_server); |
| 1114 EXPECT_EQ(2u, alternative_service_vector.size()); | 1116 EXPECT_EQ(2u, alternative_service_vector.size()); |
| 1115 | 1117 |
| 1116 // Send http request to the same origin but with diffrent scheme, should not | 1118 // Send http request to the same origin but with diffrent scheme, should not |
| 1117 // use QUIC. | 1119 // use QUIC. |
| 1118 request_.url = GURL("http://mail.example.org:443"); | 1120 request_.url = GURL("http://mail.example.org:443"); |
| 1119 SendRequestAndExpectHttpResponse("hello world"); | 1121 SendRequestAndExpectHttpResponse("hello world"); |
| 1120 } | 1122 } |
| 1121 | 1123 |
| 1122 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceAllSupportedVersion) { | 1124 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceAllSupportedVersion) { |
| 1123 std::string altsvc_header = base::StringPrintf( | 1125 std::string altsvc_header = |
| 1124 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam()); | 1126 base::StringPrintf("Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", version_); |
| 1125 MockRead http_reads[] = { | 1127 MockRead http_reads[] = { |
| 1126 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), | 1128 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), |
| 1127 MockRead("hello world"), | 1129 MockRead("hello world"), |
| 1128 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1130 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 1129 MockRead(ASYNC, OK)}; | 1131 MockRead(ASYNC, OK)}; |
| 1130 | 1132 |
| 1131 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1133 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 1132 0); | 1134 0); |
| 1133 socket_factory_.AddSocketDataProvider(&http_data); | 1135 socket_factory_.AddSocketDataProvider(&http_data); |
| 1134 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1136 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1211 // because of migrating port. | 1213 // because of migrating port. |
| 1212 NetErrorDetails details; | 1214 NetErrorDetails details; |
| 1213 EXPECT_FALSE(details.quic_port_migration_detected); | 1215 EXPECT_FALSE(details.quic_port_migration_detected); |
| 1214 trans.PopulateNetErrorDetails(&details); | 1216 trans.PopulateNetErrorDetails(&details); |
| 1215 EXPECT_TRUE(details.quic_port_migration_detected); | 1217 EXPECT_TRUE(details.quic_port_migration_detected); |
| 1216 } | 1218 } |
| 1217 | 1219 |
| 1218 TEST_P(QuicNetworkTransactionTest, | 1220 TEST_P(QuicNetworkTransactionTest, |
| 1219 DoNotUseAlternativeServiceQuicUnsupportedVersion) { | 1221 DoNotUseAlternativeServiceQuicUnsupportedVersion) { |
| 1220 std::string altsvc_header = base::StringPrintf( | 1222 std::string altsvc_header = base::StringPrintf( |
| 1221 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam() - 1); | 1223 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", version_ - 1); |
| 1222 MockRead http_reads[] = { | 1224 MockRead http_reads[] = { |
| 1223 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), | 1225 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), |
| 1224 MockRead("hello world"), | 1226 MockRead("hello world"), |
| 1225 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1227 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 1226 MockRead(ASYNC, OK)}; | 1228 MockRead(ASYNC, OK)}; |
| 1227 | 1229 |
| 1228 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1230 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 1229 0); | 1231 0); |
| 1230 socket_factory_.AddSocketDataProvider(&http_data); | 1232 socket_factory_.AddSocketDataProvider(&http_data); |
| 1231 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1233 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1448 1, kClientDataStreamId1, true, true, | 1450 1, kClientDataStreamId1, true, true, |
| 1449 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 1451 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 1450 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1452 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1451 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 1453 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), |
| 1452 &response_header_offset)); | 1454 &response_header_offset)); |
| 1453 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1455 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, |
| 1454 false, true, 0, "hello!")); | 1456 false, true, 0, "hello!")); |
| 1455 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); | 1457 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); |
| 1456 | 1458 |
| 1457 // Second request. | 1459 // Second request. |
| 1458 QuicTestPacketMaker client_maker2(GetParam(), 0, clock_, origin2.host(), | 1460 QuicTestPacketMaker client_maker2(version_, 0, clock_, origin2.host(), |
| 1459 Perspective::IS_CLIENT); | 1461 Perspective::IS_CLIENT); |
| 1460 QuicTestPacketMaker server_maker2(GetParam(), 0, clock_, origin2.host(), | 1462 QuicTestPacketMaker server_maker2(version_, 0, clock_, origin2.host(), |
| 1461 Perspective::IS_SERVER); | 1463 Perspective::IS_SERVER); |
| 1462 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1464 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1463 3, kClientDataStreamId2, false, true, | 1465 3, kClientDataStreamId2, false, true, |
| 1464 GetRequestHeaders("GET", "https", "/", &client_maker2), | 1466 GetRequestHeaders("GET", "https", "/", &client_maker2), |
| 1465 &request_header_offset)); | 1467 &request_header_offset)); |
| 1466 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1468 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1467 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 1469 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), |
| 1468 &response_header_offset)); | 1470 &response_header_offset)); |
| 1469 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 1471 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, |
| 1470 false, true, 0, "hello!")); | 1472 false, true, 0, "hello!")); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1542 MockRead(ASYNC, OK)}; | 1544 MockRead(ASYNC, OK)}; |
| 1543 | 1545 |
| 1544 StaticSocketDataProvider http_data2(http_reads2, arraysize(http_reads2), | 1546 StaticSocketDataProvider http_data2(http_reads2, arraysize(http_reads2), |
| 1545 nullptr, 0); | 1547 nullptr, 0); |
| 1546 socket_factory_.AddSocketDataProvider(&http_data2); | 1548 socket_factory_.AddSocketDataProvider(&http_data2); |
| 1547 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1549 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 1548 | 1550 |
| 1549 QuicStreamOffset request_header_offset = 0; | 1551 QuicStreamOffset request_header_offset = 0; |
| 1550 QuicStreamOffset response_header_offset = 0; | 1552 QuicStreamOffset response_header_offset = 0; |
| 1551 | 1553 |
| 1552 QuicTestPacketMaker client_maker(GetParam(), 0, clock_, "mail.example.org", | 1554 QuicTestPacketMaker client_maker(version_, 0, clock_, "mail.example.org", |
| 1553 Perspective::IS_CLIENT); | 1555 Perspective::IS_CLIENT); |
| 1554 server_maker_.set_hostname("www.example.org"); | 1556 server_maker_.set_hostname("www.example.org"); |
| 1555 client_maker_.set_hostname("www.example.org"); | 1557 client_maker_.set_hostname("www.example.org"); |
| 1556 MockQuicData mock_quic_data; | 1558 MockQuicData mock_quic_data; |
| 1557 | 1559 |
| 1558 // First QUIC request data. | 1560 // First QUIC request data. |
| 1559 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1561 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1560 1, kClientDataStreamId1, true, true, | 1562 1, kClientDataStreamId1, true, true, |
| 1561 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 1563 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 1562 | 1564 |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2097 QuicSession::HANDSHAKE_CONFIRMED); | 2099 QuicSession::HANDSHAKE_CONFIRMED); |
| 2098 // Read the headers. | 2100 // Read the headers. |
| 2099 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 2101 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 2100 | 2102 |
| 2101 const HttpResponseInfo* response = trans.GetResponseInfo(); | 2103 const HttpResponseInfo* response = trans.GetResponseInfo(); |
| 2102 ASSERT_TRUE(response != nullptr); | 2104 ASSERT_TRUE(response != nullptr); |
| 2103 ASSERT_TRUE(response->headers.get() != nullptr); | 2105 ASSERT_TRUE(response->headers.get() != nullptr); |
| 2104 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 2106 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 2105 EXPECT_TRUE(response->was_fetched_via_spdy); | 2107 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 2106 EXPECT_TRUE(response->was_alpn_negotiated); | 2108 EXPECT_TRUE(response->was_alpn_negotiated); |
| 2107 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC, response->connection_info); | 2109 EXPECT_EQ(QuicHttpStream::ConnectionInfoFromQuicVersion(version_), |
| 2110 response->connection_info); |
| 2108 | 2111 |
| 2109 std::string response_data; | 2112 std::string response_data; |
| 2110 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, ReadTransaction(&trans, &response_data)); | 2113 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, ReadTransaction(&trans, &response_data)); |
| 2111 } | 2114 } |
| 2112 | 2115 |
| 2113 TEST_P(QuicNetworkTransactionTest, RstSteamBeforeHeaders) { | 2116 TEST_P(QuicNetworkTransactionTest, RstSteamBeforeHeaders) { |
| 2114 MockQuicData mock_quic_data; | 2117 MockQuicData mock_quic_data; |
| 2115 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2118 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2116 1, kClientDataStreamId1, true, true, | 2119 1, kClientDataStreamId1, true, true, |
| 2117 GetRequestHeaders("GET", "https", "/"))); | 2120 GetRequestHeaders("GET", "https", "/"))); |
| (...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2661 HostPortPair::FromString("mail.example.org:443")); | 2664 HostPortPair::FromString("mail.example.org:443")); |
| 2662 | 2665 |
| 2663 MockQuicData mock_quic_data; | 2666 MockQuicData mock_quic_data; |
| 2664 | 2667 |
| 2665 QuicStreamOffset offset = 0; | 2668 QuicStreamOffset offset = 0; |
| 2666 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2669 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2667 1, kClientDataStreamId1, true, false, | 2670 1, kClientDataStreamId1, true, false, |
| 2668 GetRequestHeaders("POST", "https", "/"), &offset)); | 2671 GetRequestHeaders("POST", "https", "/"), &offset)); |
| 2669 | 2672 |
| 2670 std::unique_ptr<QuicEncryptedPacket> packet; | 2673 std::unique_ptr<QuicEncryptedPacket> packet; |
| 2671 if (GetParam() > QUIC_VERSION_35) { | 2674 if (version_ > QUIC_VERSION_35) { |
| 2672 packet = ConstructClientForceHolDataPacket(2, kClientDataStreamId1, true, | 2675 packet = ConstructClientForceHolDataPacket(2, kClientDataStreamId1, true, |
| 2673 true, &offset, "1"); | 2676 true, &offset, "1"); |
| 2674 } else { | 2677 } else { |
| 2675 packet = | 2678 packet = |
| 2676 ConstructClientDataPacket(2, kClientDataStreamId1, true, true, 0, "1"); | 2679 ConstructClientDataPacket(2, kClientDataStreamId1, true, true, 0, "1"); |
| 2677 } | 2680 } |
| 2678 mock_quic_data.AddWrite(std::move(packet)); | 2681 mock_quic_data.AddWrite(std::move(packet)); |
| 2679 | 2682 |
| 2680 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2683 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2681 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2684 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3047 std::string response_data; | 3050 std::string response_data; |
| 3048 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); | 3051 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); |
| 3049 EXPECT_EQ("hello", response_data); | 3052 EXPECT_EQ("hello", response_data); |
| 3050 | 3053 |
| 3051 const HttpResponseInfo* response = trans.GetResponseInfo(); | 3054 const HttpResponseInfo* response = trans.GetResponseInfo(); |
| 3052 ASSERT_TRUE(response != nullptr); | 3055 ASSERT_TRUE(response != nullptr); |
| 3053 ASSERT_TRUE(response->headers.get() != nullptr); | 3056 ASSERT_TRUE(response->headers.get() != nullptr); |
| 3054 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 3057 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 3055 EXPECT_TRUE(response->was_fetched_via_spdy); | 3058 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 3056 EXPECT_TRUE(response->was_alpn_negotiated); | 3059 EXPECT_TRUE(response->was_alpn_negotiated); |
| 3057 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC, | 3060 EXPECT_EQ(QuicHttpStream::ConnectionInfoFromQuicVersion(version_), |
| 3058 response->connection_info); | 3061 response->connection_info); |
| 3059 EXPECT_EQ(443, response->socket_address.port()); | 3062 EXPECT_EQ(443, response->socket_address.port()); |
| 3060 } | 3063 } |
| 3061 | 3064 |
| 3062 MockClock* clock_; | 3065 MockClock* clock_; |
| 3063 QuicVersion version_; | 3066 QuicVersion version_; |
| 3064 DestinationType destination_type_; | 3067 DestinationType destination_type_; |
| 3065 std::string origin1_; | 3068 std::string origin1_; |
| 3066 std::string origin2_; | 3069 std::string origin2_; |
| 3067 std::unique_ptr<HttpNetworkSession> session_; | 3070 std::unique_ptr<HttpNetworkSession> session_; |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3275 AddHangingSocketData(); | 3278 AddHangingSocketData(); |
| 3276 | 3279 |
| 3277 SendRequestAndExpectQuicResponse(origin1_); | 3280 SendRequestAndExpectQuicResponse(origin1_); |
| 3278 SendRequestAndExpectQuicResponse(origin2_); | 3281 SendRequestAndExpectQuicResponse(origin2_); |
| 3279 | 3282 |
| 3280 EXPECT_TRUE(AllDataConsumed()); | 3283 EXPECT_TRUE(AllDataConsumed()); |
| 3281 } | 3284 } |
| 3282 | 3285 |
| 3283 } // namespace test | 3286 } // namespace test |
| 3284 } // namespace net | 3287 } // namespace net |
| OLD | NEW |