Index: net/http/http_network_transaction_unittest.cc |
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc |
index 56f3bb3d171cb944c83b8ff0fd5882f6f9b2b850..b5c4c9b1795481af55dc28cbf1369d8000da941d 100644 |
--- a/net/http/http_network_transaction_unittest.cc |
+++ b/net/http/http_network_transaction_unittest.cc |
@@ -92,6 +92,19 @@ namespace net { |
namespace { |
+enum TestCase { |
+ // Test using the SPDY/3.1 protocol. |
+ kTestCaseSPDY31, |
+ |
+ // Test using the HTTP/2 protocol, without specifying a stream |
+ // dependency based on the RequestPriority. |
+ kTestCaseHTTP2NoPriorityDependencies, |
+ |
+ // Test using the HTTP/2 protocol, specifying a stream |
+ // dependency based on the RequestPriority. |
+ kTestCaseHTTP2PriorityDependencies |
+}; |
+ |
const base::string16 kBar(ASCIIToUTF16("bar")); |
const base::string16 kBar2(ASCIIToUTF16("bar2")); |
const base::string16 kBar3(ASCIIToUTF16("bar3")); |
@@ -241,7 +254,7 @@ scoped_ptr<HttpNetworkSession> CreateSession( |
class HttpNetworkTransactionTest |
: public PlatformTest, |
- public ::testing::WithParamInterface<NextProto> { |
+ public ::testing::WithParamInterface<TestCase> { |
public: |
virtual ~HttpNetworkTransactionTest() { |
// Important to restore the per-pool limit first, since the pool limit must |
@@ -250,16 +263,19 @@ class HttpNetworkTransactionTest |
HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); |
ClientSocketPoolManager::set_max_sockets_per_group( |
HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); |
+ SpdySession::SetPriorityDependencyDefaultForTesting(false); |
} |
protected: |
HttpNetworkTransactionTest() |
- : spdy_util_(GetParam()), |
- session_deps_(GetParam()), |
+ : spdy_util_(GetProtocol(), GetDependenciesFromPriority()), |
+ session_deps_(GetProtocol()), |
old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( |
HttpNetworkSession::NORMAL_SOCKET_POOL)), |
old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( |
HttpNetworkSession::NORMAL_SOCKET_POOL)) { |
+ SpdySession::SetPriorityDependencyDefaultForTesting( |
+ GetDependenciesFromPriority()); |
} |
struct SimpleGetHelperResult { |
@@ -288,9 +304,17 @@ class HttpNetworkTransactionTest |
base::MessageLoop::current()->RunUntilIdle(); |
} |
+ NextProto GetProtocol() const { |
+ return GetParam() == kTestCaseSPDY31 ? kProtoSPDY31 : kProtoHTTP2; |
+ } |
+ |
+ bool GetDependenciesFromPriority() const { |
+ return GetParam() == kTestCaseHTTP2PriorityDependencies; |
+ } |
+ |
const char* GetAlternateProtocolFromParam() { |
- return |
- AlternateProtocolToString(AlternateProtocolFromNextProto(GetParam())); |
+ return AlternateProtocolToString( |
+ AlternateProtocolFromNextProto(GetProtocol())); |
} |
std::string GetAlternativeServiceHttpHeader() { |
@@ -446,10 +470,11 @@ class HttpNetworkTransactionTest |
int old_max_pool_sockets_; |
}; |
-INSTANTIATE_TEST_CASE_P(NextProto, |
+INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, |
HttpNetworkTransactionTest, |
- testing::Values(kProtoSPDY31, |
- kProtoHTTP2)); |
+ testing::Values(kTestCaseSPDY31, |
+ kTestCaseHTTP2NoPriorityDependencies, |
+ kTestCaseHTTP2PriorityDependencies)); |
namespace { |
@@ -1400,8 +1425,8 @@ void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest( |
SSLSocketDataProvider ssl1(ASYNC, OK); |
SSLSocketDataProvider ssl2(ASYNC, OK); |
if (use_spdy) { |
- ssl1.SetNextProto(GetParam()); |
- ssl2.SetNextProto(GetParam()); |
+ ssl1.SetNextProto(GetProtocol()); |
+ ssl2.SetNextProto(GetProtocol()); |
} |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
@@ -4053,7 +4078,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGet) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
TestCompletionCallback callback1; |
@@ -4113,7 +4138,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithSessionRace) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
TestCompletionCallback callback1; |
@@ -4170,6 +4195,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { |
// GET with a Proxy-Authorization header. |
scoped_ptr<SpdyFrame> req_get( |
spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
+ spdy_util_.UpdateWithStreamDestruction(1); |
const char* const kExtraAuthorizationHeaders[] = { |
"proxy-authorization", "Basic Zm9vOmJhcg==" |
}; |
@@ -4213,7 +4239,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { |
session_deps_.socket_factory->AddSocketDataProvider(&data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
TestCompletionCallback callback1; |
@@ -4310,7 +4336,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectHttps) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
SSLSocketDataProvider ssl2(ASYNC, OK); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
@@ -4339,6 +4365,8 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectHttps) { |
// Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. |
TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { |
+ SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); |
+ |
HttpRequestInfo request; |
request.method = "GET"; |
request.url = GURL("https://www.example.org/"); |
@@ -4359,16 +4387,16 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { |
// fetch https://www.example.org/ via SPDY |
const char kMyUrl[] = "https://www.example.org/"; |
scoped_ptr<SpdyFrame> get( |
- spdy_util_.ConstructSpdyGet(kMyUrl, false, 1, LOWEST)); |
+ spdy_util_wrapped.ConstructSpdyGet(kMyUrl, false, 1, LOWEST)); |
scoped_ptr<SpdyFrame> wrapped_get( |
spdy_util_.ConstructWrappedSpdyFrame(get, 1)); |
scoped_ptr<SpdyFrame> conn_resp( |
spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
scoped_ptr<SpdyFrame> get_resp( |
- spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
+ spdy_util_wrapped.ConstructSpdyGetSynReply(NULL, 0, 1)); |
scoped_ptr<SpdyFrame> wrapped_get_resp( |
spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1)); |
- scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
+ scoped_ptr<SpdyFrame> body(spdy_util_wrapped.ConstructSpdyBodyFrame(1, true)); |
scoped_ptr<SpdyFrame> wrapped_body( |
spdy_util_.ConstructWrappedSpdyFrame(body, 1)); |
scoped_ptr<SpdyFrame> window_update_get_resp( |
@@ -4396,10 +4424,10 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
SSLSocketDataProvider ssl2(ASYNC, OK); |
- ssl2.SetNextProto(GetParam()); |
+ ssl2.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
TestCompletionCallback callback1; |
@@ -4465,10 +4493,10 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
SSLSocketDataProvider ssl2(ASYNC, OK); |
- ssl2.SetNextProto(GetParam()); |
+ ssl2.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
TestCompletionCallback callback1; |
@@ -4529,7 +4557,7 @@ TEST_P(HttpNetworkTransactionTest, |
SpdyHeaderBlock connect2_block; |
spdy_util_.MaybeAddVersionHeader(&connect2_block); |
connect2_block[spdy_util_.GetMethodKey()] = "CONNECT"; |
- if (GetParam() == kProtoHTTP2) { |
+ if (GetProtocol() == kProtoHTTP2) { |
connect2_block[spdy_util_.GetHostKey()] = "mail.example.org:443"; |
} else { |
connect2_block[spdy_util_.GetHostKey()] = "mail.example.org"; |
@@ -4577,7 +4605,7 @@ TEST_P(HttpNetworkTransactionTest, |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
SSLSocketDataProvider ssl2(ASYNC, OK); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
@@ -4701,7 +4729,7 @@ TEST_P(HttpNetworkTransactionTest, |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
SSLSocketDataProvider ssl2(ASYNC, OK); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
@@ -4777,6 +4805,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyLoadTimingTwoHttpRequests) { |
spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
scoped_ptr<SpdyFrame> body1( |
spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, true)); |
+ spdy_util_.UpdateWithStreamDestruction(1); |
// http://mail.example.org/ |
scoped_ptr<SpdyHeaderBlock> headers2( |
@@ -4806,7 +4835,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyLoadTimingTwoHttpRequests) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
TestCompletionCallback callback; |
@@ -7249,7 +7278,7 @@ TEST_P(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaSpdyProxy) { |
SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, |
arraysize(data_writes)); |
SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
- proxy_ssl.SetNextProto(GetParam()); |
+ proxy_ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSocketDataProvider(&data); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
@@ -7358,7 +7387,7 @@ TEST_P(HttpNetworkTransactionTest, |
SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, |
arraysize(data_writes)); |
SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
- proxy_ssl.SetNextProto(GetParam()); |
+ proxy_ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSocketDataProvider(&data); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
@@ -7399,6 +7428,7 @@ TEST_P(HttpNetworkTransactionTest, BasicAuthSpdyProxy) { |
NULL, 0, 1, LOWEST, HostPortPair("www.example.org", 443))); |
scoped_ptr<SpdyFrame> rst( |
spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
+ spdy_util_.UpdateWithStreamDestruction(1); |
// After calling trans->RestartWithAuth(), this is the request we should |
// be issuing -- the final header line contains the credentials. |
@@ -7454,7 +7484,7 @@ TEST_P(HttpNetworkTransactionTest, BasicAuthSpdyProxy) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
// Negotiate SPDY to the proxy |
SSLSocketDataProvider proxy(ASYNC, OK); |
- proxy.SetNextProto(GetParam()); |
+ proxy.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
// Vanilla SSL to the server |
SSLSocketDataProvider server(ASYNC, OK); |
@@ -7576,7 +7606,7 @@ TEST_P(HttpNetworkTransactionTest, CrossOriginProxyPush) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
// Negotiate SPDY to the proxy |
SSLSocketDataProvider proxy(ASYNC, OK); |
- proxy.SetNextProto(GetParam()); |
+ proxy.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
scoped_ptr<HttpTransaction> trans( |
@@ -7687,7 +7717,7 @@ TEST_P(HttpNetworkTransactionTest, CrossOriginProxyPushCorrectness) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
// Negotiate SPDY to the proxy |
SSLSocketDataProvider proxy(ASYNC, OK); |
- proxy.SetNextProto(GetParam()); |
+ proxy.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
scoped_ptr<HttpTransaction> trans( |
@@ -8614,7 +8644,7 @@ TEST_P(HttpNetworkTransactionTest, GroupNameForDirectConnections) { |
session_deps_.proxy_service = |
ProxyService::CreateFixed(tests[i].proxy_server); |
scoped_ptr<HttpNetworkSession> session( |
- SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
+ SetupSessionForGroupNameTests(GetProtocol(), &session_deps_)); |
HttpNetworkSessionPeer peer(session.get()); |
CaptureGroupNameTransportSocketPool* transport_conn_pool = |
@@ -8676,7 +8706,7 @@ TEST_P(HttpNetworkTransactionTest, GroupNameForHTTPProxyConnections) { |
session_deps_.proxy_service = |
ProxyService::CreateFixed(tests[i].proxy_server); |
scoped_ptr<HttpNetworkSession> session( |
- SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
+ SetupSessionForGroupNameTests(GetProtocol(), &session_deps_)); |
HttpNetworkSessionPeer peer(session.get()); |
@@ -8746,7 +8776,7 @@ TEST_P(HttpNetworkTransactionTest, GroupNameForSOCKSConnections) { |
session_deps_.proxy_service = |
ProxyService::CreateFixed(tests[i].proxy_server); |
scoped_ptr<HttpNetworkSession> session( |
- SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
+ SetupSessionForGroupNameTests(GetProtocol(), &session_deps_)); |
HttpNetworkSessionPeer peer(session.get()); |
@@ -9456,7 +9486,7 @@ TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { |
alternative_service_vector = |
http_server_properties.GetAlternativeServices(http_host_port_pair); |
ASSERT_EQ(1u, alternative_service_vector.size()); |
- EXPECT_EQ(AlternateProtocolFromNextProto(GetParam()), |
+ EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
alternative_service_vector[0].protocol); |
EXPECT_EQ("www.example.com", alternative_service_vector[0].host); |
EXPECT_EQ(443, alternative_service_vector[0].port); |
@@ -9634,7 +9664,7 @@ TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { |
alternative_service_vector = |
http_server_properties.GetAlternativeServices(http_host_port_pair); |
ASSERT_EQ(2u, alternative_service_vector.size()); |
- EXPECT_EQ(AlternateProtocolFromNextProto(GetParam()), |
+ EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
alternative_service_vector[0].protocol); |
EXPECT_EQ("www.example.com", alternative_service_vector[0].host); |
EXPECT_EQ(443, alternative_service_vector[0].port); |
@@ -9702,7 +9732,7 @@ TEST_P(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { |
http_server_properties.GetAlternativeServices(http_host_port_pair); |
ASSERT_EQ(1u, alternative_service_vector.size()); |
EXPECT_EQ(443, alternative_service_vector[0].port); |
- EXPECT_EQ(AlternateProtocolFromNextProto(GetParam()), |
+ EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
alternative_service_vector[0].protocol); |
} |
@@ -9825,7 +9855,7 @@ TEST_P(HttpNetworkTransactionTest, AltSvcOverwritesAlternateProtocol) { |
alternative_service_vector = |
http_server_properties.GetAlternativeServices(http_host_port_pair); |
ASSERT_EQ(1u, alternative_service_vector.size()); |
- EXPECT_EQ(AlternateProtocolFromNextProto(GetParam()), |
+ EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
alternative_service_vector[0].protocol); |
EXPECT_EQ("www.example.com", alternative_service_vector[0].host); |
EXPECT_EQ(443, alternative_service_vector[0].port); |
@@ -9859,7 +9889,8 @@ TEST_P(HttpNetworkTransactionTest, DisableAlternativeServiceToDifferentHost) { |
base::WeakPtr<HttpServerProperties> http_server_properties = |
session->http_server_properties(); |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), "different.example.org", 80); |
+ AlternateProtocolFromNextProto(GetProtocol()), "different.example.org", |
+ 80); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService( |
HostPortPair::FromURL(request.url), alternative_service, 1.0, expiration); |
@@ -9906,7 +9937,7 @@ TEST_P(HttpNetworkTransactionTest, |
// Port must be < 1024, or the header will be ignored (since initial port was |
// port 80 (another restricted port). |
const AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), "www.example.org", |
+ AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", |
666); // Port is ignored by MockConnect anyway. |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService( |
@@ -9970,7 +10001,7 @@ TEST_P(HttpNetworkTransactionTest, |
session->http_server_properties(); |
const int kUnrestrictedAlternatePort = 1024; |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), "www.example.org", |
+ AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", |
kUnrestrictedAlternatePort); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService( |
@@ -10022,7 +10053,7 @@ TEST_P(HttpNetworkTransactionTest, |
session->http_server_properties(); |
const int kUnrestrictedAlternatePort = 1024; |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), "www.example.org", |
+ AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", |
kUnrestrictedAlternatePort); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService( |
@@ -10073,7 +10104,7 @@ TEST_P(HttpNetworkTransactionTest, |
session->http_server_properties(); |
const int kRestrictedAlternatePort = 80; |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), "www.example.org", |
+ AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", |
kRestrictedAlternatePort); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService( |
@@ -10125,7 +10156,7 @@ TEST_P(HttpNetworkTransactionTest, |
session->http_server_properties(); |
const int kRestrictedAlternatePort = 80; |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), "www.example.org", |
+ AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", |
kRestrictedAlternatePort); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService( |
@@ -10176,7 +10207,7 @@ TEST_P(HttpNetworkTransactionTest, |
session->http_server_properties(); |
const int kUnrestrictedAlternatePort = 1025; |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), "www.example.org", |
+ AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", |
kUnrestrictedAlternatePort); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService( |
@@ -10222,7 +10253,7 @@ TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { |
session->http_server_properties(); |
const int kUnsafePort = 7; |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), "www.example.org", |
+ AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", |
kUnsafePort); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService( |
@@ -10272,7 +10303,7 @@ TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
ASSERT_TRUE(ssl.cert.get()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
@@ -10371,7 +10402,7 @@ TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
ASSERT_TRUE(ssl.cert.get()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
@@ -10478,7 +10509,7 @@ TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { |
session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
@@ -10618,7 +10649,7 @@ TEST_P(HttpNetworkTransactionTest, |
session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
ASSERT_TRUE(ssl.cert.get()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
@@ -10730,7 +10761,7 @@ TEST_P(HttpNetworkTransactionTest, |
session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
ASSERT_TRUE(ssl.cert.get()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
@@ -11477,7 +11508,7 @@ TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { |
request.load_flags = 0; |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
scoped_ptr<SpdyFrame> req( |
@@ -11633,7 +11664,7 @@ TEST_P(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { |
data_writes_2, arraysize(data_writes_2)); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
ASSERT_TRUE(ssl.cert.get()); |
@@ -11992,7 +12023,7 @@ TEST_P(HttpNetworkTransactionTest, PreconnectWithExistingSpdySession) { |
session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
@@ -12392,11 +12423,12 @@ TEST_P(HttpNetworkTransactionTest, UseIPConnectionPooling) { |
pool_peer.DisableDomainAuthenticationVerification(); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
scoped_ptr<SpdyFrame> host1_req( |
spdy_util_.ConstructSpdyGet("https://www.example.org", false, 1, LOWEST)); |
+ spdy_util_.UpdateWithStreamDestruction(1); |
scoped_ptr<SpdyFrame> host2_req( |
spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
MockWrite spdy_writes[] = { |
@@ -12491,11 +12523,12 @@ TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { |
pool_peer.DisableDomainAuthenticationVerification(); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
scoped_ptr<SpdyFrame> host1_req( |
spdy_util_.ConstructSpdyGet("https://www.example.org", false, 1, LOWEST)); |
+ spdy_util_.UpdateWithStreamDestruction(1); |
scoped_ptr<SpdyFrame> host2_req( |
spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
MockWrite spdy_writes[] = { |
@@ -12621,11 +12654,12 @@ TEST_P(HttpNetworkTransactionTest, |
pool_peer.DisableDomainAuthenticationVerification(); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
scoped_ptr<SpdyFrame> host1_req( |
spdy_util_.ConstructSpdyGet("https://www.example.org", false, 1, LOWEST)); |
+ spdy_util_.UpdateWithStreamDestruction(1); |
scoped_ptr<SpdyFrame> host2_req( |
spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
MockWrite spdy_writes[] = { |
@@ -12751,7 +12785,7 @@ TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttp) { |
arraysize(writes2)); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
session_deps_.socket_factory->AddSocketDataProvider(&data1); |
session_deps_.socket_factory->AddSocketDataProvider(&data2); |
@@ -12804,7 +12838,7 @@ class AltSvcCertificateVerificationTest : public HttpNetworkTransactionTest { |
EXPECT_TRUE( |
cert->VerifyNameMatch(alternative.host(), &common_name_fallback_used)); |
SSLSocketDataProvider ssl(ASYNC, OK); |
- ssl.SetNextProto(GetParam()); |
+ ssl.SetNextProto(GetProtocol()); |
ssl.cert = cert; |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
@@ -12828,6 +12862,7 @@ class AltSvcCertificateVerificationTest : public HttpNetworkTransactionTest { |
if (pooling) { |
req0.reset(spdy_util_.ConstructSpdyGet(url0.c_str(), false, 1, LOWEST)); |
+ spdy_util_.UpdateWithStreamDestruction(1); |
req1.reset(spdy_util_.ConstructSpdyGet(url1.c_str(), false, 3, LOWEST)); |
writes.push_back(CreateMockWrite(*req0, 0)); |
@@ -12872,7 +12907,7 @@ class AltSvcCertificateVerificationTest : public HttpNetworkTransactionTest { |
base::WeakPtr<HttpServerProperties> http_server_properties = |
session->http_server_properties(); |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), alternative); |
+ AlternateProtocolFromNextProto(GetProtocol()), alternative); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService(origin, alternative_service, |
1.0, expiration); |
@@ -12921,10 +12956,11 @@ class AltSvcCertificateVerificationTest : public HttpNetworkTransactionTest { |
} |
}; |
-INSTANTIATE_TEST_CASE_P(NextProto, |
+INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, |
AltSvcCertificateVerificationTest, |
- testing::Values(kProtoSPDY31, |
- kProtoHTTP2)); |
+ testing::Values(kTestCaseSPDY31, |
+ kTestCaseHTTP2NoPriorityDependencies, |
+ kTestCaseHTTP2PriorityDependencies)); |
// The alternative service host must exhibit a certificate that is valid for the |
// origin host. Test that this is enforced when pooling to an existing |
@@ -12976,7 +13012,7 @@ TEST_P(HttpNetworkTransactionTest, AlternativeServiceNotOnHttp11) { |
base::WeakPtr<HttpServerProperties> http_server_properties = |
session->http_server_properties(); |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), alternative); |
+ AlternateProtocolFromNextProto(GetProtocol()), alternative); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService(origin, alternative_service, |
1.0, expiration); |
@@ -13049,7 +13085,7 @@ TEST_P(HttpNetworkTransactionTest, FailedAlternativeServiceIsNotUserVisible) { |
base::WeakPtr<HttpServerProperties> http_server_properties = |
session->http_server_properties(); |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), alternative); |
+ AlternateProtocolFromNextProto(GetProtocol()), alternative); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService(origin, alternative_service, |
1.0, expiration); |
@@ -13158,7 +13194,7 @@ TEST_P(HttpNetworkTransactionTest, AlternativeServiceShouldNotPoolToHttp11) { |
base::WeakPtr<HttpServerProperties> http_server_properties = |
session->http_server_properties(); |
AlternativeService alternative_service( |
- AlternateProtocolFromNextProto(GetParam()), alternative); |
+ AlternateProtocolFromNextProto(GetProtocol()), alternative); |
base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
http_server_properties->SetAlternativeService(origin, alternative_service, |
1.0, expiration); |
@@ -13227,12 +13263,15 @@ TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { |
const std::string https_url = "https://www.example.org:8080/"; |
const std::string http_url = "http://www.example.org:8080/"; |
+ // Separate SPDY util instance for naked and wrapped requests. |
+ SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); |
+ |
// SPDY GET for HTTPS URL (through CONNECT tunnel) |
const HostPortPair host_port_pair("www.example.org", 8080); |
scoped_ptr<SpdyFrame> connect( |
spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST, host_port_pair)); |
scoped_ptr<SpdyFrame> req1( |
- spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
+ spdy_util_wrapped.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
scoped_ptr<SpdyFrame> wrapped_req1( |
spdy_util_.ConstructWrappedSpdyFrame(req1, 1)); |
@@ -13257,9 +13296,9 @@ TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { |
scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
scoped_ptr<SpdyFrame> wrapped_resp1( |
- spdy_util_.ConstructWrappedSpdyFrame(resp1, 1)); |
+ spdy_util_wrapped.ConstructWrappedSpdyFrame(resp1, 1)); |
scoped_ptr<SpdyFrame> wrapped_body1( |
- spdy_util_.ConstructWrappedSpdyFrame(body1, 1)); |
+ spdy_util_wrapped.ConstructWrappedSpdyFrame(body1, 1)); |
scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
MockRead reads1[] = { |
@@ -13281,10 +13320,10 @@ TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { |
TestNetLog log; |
session_deps_.net_log = &log; |
SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy |
- ssl1.SetNextProto(GetParam()); |
+ ssl1.SetNextProto(GetProtocol()); |
session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); |
SSLSocketDataProvider ssl2(ASYNC, OK); // to the server |
- ssl2.SetNextProto(GetParam()); |
+ ssl2.SetNextProto(GetProtocol()); |
session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data1); |
@@ -13344,6 +13383,9 @@ TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionIfCertDoesNotMatch) { |
const std::string url2 = "https://news.example.org/"; |
const std::string ip_addr = "1.2.3.4"; |
+ // Second SpdyTestUtil instance for the second socket. |
+ SpdyTestUtil spdy_util_secure(GetProtocol(), GetDependenciesFromPriority()); |
+ |
// SPDY GET for HTTP URL (through SPDY proxy) |
scoped_ptr<SpdyHeaderBlock> headers( |
spdy_util_.ConstructGetHeaderBlockForProxy("http://www.example.org/")); |
@@ -13373,14 +13415,15 @@ TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionIfCertDoesNotMatch) { |
// SPDY GET for HTTPS URL (direct) |
scoped_ptr<SpdyFrame> req2( |
- spdy_util_.ConstructSpdyGet(url2.c_str(), false, 1, MEDIUM)); |
+ spdy_util_secure.ConstructSpdyGet(url2.c_str(), false, 1, MEDIUM)); |
MockWrite writes2[] = { |
CreateMockWrite(*req2, 0), |
}; |
- scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
- scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
+ scoped_ptr<SpdyFrame> resp2( |
+ spdy_util_secure.ConstructSpdyGetSynReply(NULL, 0, 1)); |
+ scoped_ptr<SpdyFrame> body2(spdy_util_secure.ConstructSpdyBodyFrame(1, true)); |
MockRead reads2[] = { |
CreateMockRead(*resp2, 1), |
CreateMockRead(*body2, 2), |
@@ -13402,7 +13445,7 @@ TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionIfCertDoesNotMatch) { |
NULL)); |
SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy |
- ssl1.SetNextProto(GetParam()); |
+ ssl1.SetNextProto(GetProtocol()); |
// Load a valid cert. Note, that this does not need to |
// be valid for proxy because the MockSSLClientSocket does |
// not actually verify it. But SpdySession will use this |
@@ -13414,7 +13457,7 @@ TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionIfCertDoesNotMatch) { |
data1.get()); |
SSLSocketDataProvider ssl2(ASYNC, OK); // to the server |
- ssl2.SetNextProto(GetParam()); |
+ ssl2.SetNextProto(GetProtocol()); |
session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
session_deps_.deterministic_socket_factory->AddSocketDataProvider( |
data2.get()); |
@@ -13489,12 +13532,12 @@ TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { |
arraysize(writes2)); |
SSLSocketDataProvider ssl1(ASYNC, OK); |
- ssl1.SetNextProto(GetParam()); |
+ ssl1.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); |
session_deps_.socket_factory->AddSocketDataProvider(&data1); |
SSLSocketDataProvider ssl2(ASYNC, OK); |
- ssl2.SetNextProto(GetParam()); |
+ ssl2.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
session_deps_.socket_factory->AddSocketDataProvider(&data2); |
@@ -13540,9 +13583,9 @@ TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { |
scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
SSLSocketDataProvider ssl1(ASYNC, OK); |
- ssl1.SetNextProto(GetParam()); |
+ ssl1.SetNextProto(GetProtocol()); |
SSLSocketDataProvider ssl2(ASYNC, OK); |
- ssl2.SetNextProto(GetParam()); |
+ ssl2.SetNextProto(GetProtocol()); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); |
session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
@@ -13561,20 +13604,23 @@ TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { |
MockRead(ASYNC, ERR_IO_PENDING, 3), |
}; |
+ // Use a separate test instance for the separate SpdySession that will be |
+ // created. |
+ SpdyTestUtil spdy_util_2(GetProtocol(), GetDependenciesFromPriority()); |
scoped_ptr<SequencedSocketData> spdy1_data( |
new SequencedSocketData(spdy1_reads, arraysize(spdy1_reads), spdy1_writes, |
arraysize(spdy1_writes))); |
session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get()); |
- scoped_ptr<SpdyFrame> host2_req(spdy_util_.ConstructSpdyGet( |
+ scoped_ptr<SpdyFrame> host2_req(spdy_util_2.ConstructSpdyGet( |
"https://www.b.com", false, 1, DEFAULT_PRIORITY)); |
MockWrite spdy2_writes[] = { |
CreateMockWrite(*host2_req, 0), |
}; |
scoped_ptr<SpdyFrame> host2_resp( |
- spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
+ spdy_util_2.ConstructSpdyGetSynReply(NULL, 0, 1)); |
scoped_ptr<SpdyFrame> host2_resp_body( |
- spdy_util_.ConstructSpdyBodyFrame(1, true)); |
+ spdy_util_2.ConstructSpdyBodyFrame(1, true)); |
MockRead spdy2_reads[] = { |
CreateMockRead(*host2_resp, 1), |
CreateMockRead(*host2_resp_body, 2), |