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

Side by Side Diff: net/spdy/spdy_network_transaction_unittest.cc

Issue 1411383005: Initial implementation of RequestPriority-based HTTP/2 dependencies. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tweaked comments and destruction notification vs. extra test util class. Created 5 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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 // the TLS handshake. 58 // the TLS handshake.
59 HTTPS_SPDY_VIA_NPN, 59 HTTPS_SPDY_VIA_NPN,
60 // Request and http:// URL to a server that supports SPDY via Alternative 60 // Request and http:// URL to a server that supports SPDY via Alternative
61 // Service on port 443. 61 // Service on port 443.
62 // See: https//tools.ietf.org/id/draft-ietf-httpbis-alt-svc-06.html 62 // See: https//tools.ietf.org/id/draft-ietf-httpbis-alt-svc-06.html
63 HTTP_SPDY_VIA_ALT_SVC, 63 HTTP_SPDY_VIA_ALT_SVC,
64 }; 64 };
65 65
66 struct SpdyNetworkTransactionTestParams { 66 struct SpdyNetworkTransactionTestParams {
67 SpdyNetworkTransactionTestParams() 67 SpdyNetworkTransactionTestParams()
68 : protocol(kProtoSPDY31), ssl_type(HTTPS_SPDY_VIA_NPN) {} 68 : protocol(kProtoSPDY31),
69 ssl_type(HTTPS_SPDY_VIA_NPN),
70 priority_to_dependency(false) {}
69 71
70 SpdyNetworkTransactionTestParams(NextProto protocol, 72 SpdyNetworkTransactionTestParams(NextProto protocol,
71 SpdyNetworkTransactionTestSSLType ssl_type) 73 SpdyNetworkTransactionTestSSLType ssl_type,
72 : protocol(protocol), ssl_type(ssl_type) {} 74 bool priority_to_dependency)
75 : protocol(protocol),
76 ssl_type(ssl_type),
77 priority_to_dependency(priority_to_dependency) {}
73 78
74 friend std::ostream& operator<<(std::ostream& os, 79 friend std::ostream& operator<<(std::ostream& os,
75 const SpdyNetworkTransactionTestParams& p) { 80 const SpdyNetworkTransactionTestParams& p) {
76 std::string type_str; 81 std::string type_str;
77 switch (p.ssl_type) { 82 switch (p.ssl_type) {
78 case HTTP_SPDY_VIA_ALT_SVC: 83 case HTTP_SPDY_VIA_ALT_SVC:
79 type_str = "HTTP_SPDY_VIA_ALT_SVC"; 84 type_str = "HTTP_SPDY_VIA_ALT_SVC";
80 break; 85 break;
81 case HTTPS_SPDY_VIA_NPN: 86 case HTTPS_SPDY_VIA_NPN:
82 type_str = "HTTPS_SPDY_VIA_NPN"; 87 type_str = "HTTPS_SPDY_VIA_NPN";
83 break; 88 break;
84 } 89 }
85 os << "{ protocol: " << SSLClientSocket::NextProtoToString(p.protocol) 90 os << "{ protocol: " << SSLClientSocket::NextProtoToString(p.protocol)
86 << ", ssl_type: " << type_str << " }"; 91 << ", ssl_type: " << type_str
92 << ", priority_to_dependency: " << p.priority_to_dependency << " }";
87 return os; 93 return os;
88 } 94 }
89 95
90 NextProto protocol; 96 NextProto protocol;
91 SpdyNetworkTransactionTestSSLType ssl_type; 97 SpdyNetworkTransactionTestSSLType ssl_type;
98 bool priority_to_dependency;
92 }; 99 };
93 100
94 void UpdateSpdySessionDependencies(SpdyNetworkTransactionTestParams test_params, 101 void UpdateSpdySessionDependencies(SpdyNetworkTransactionTestParams test_params,
95 SpdySessionDependencies* session_deps) { 102 SpdySessionDependencies* session_deps) {
96 session_deps->use_alternative_services = true; 103 session_deps->use_alternative_services = true;
97 session_deps->next_protos = SpdyNextProtos(); 104 session_deps->next_protos = SpdyNextProtos();
98 if (test_params.ssl_type == HTTP_SPDY_VIA_ALT_SVC) { 105 if (test_params.ssl_type == HTTP_SPDY_VIA_ALT_SVC) {
99 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 106 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
100 session_deps->http_server_properties.SetAlternativeService( 107 session_deps->http_server_properties.SetAlternativeService(
101 HostPortPair("www.example.org", 80), 108 HostPortPair("www.example.org", 80),
(...skipping 18 matching lines...) Expand all
120 new SpdySessionDependencies(test_params.protocol, proxy_service.Pass())); 127 new SpdySessionDependencies(test_params.protocol, proxy_service.Pass()));
121 UpdateSpdySessionDependencies(test_params, session_deps.get()); 128 UpdateSpdySessionDependencies(test_params, session_deps.get());
122 return session_deps; 129 return session_deps;
123 } 130 }
124 131
125 } // namespace 132 } // namespace
126 133
127 class SpdyNetworkTransactionTest 134 class SpdyNetworkTransactionTest
128 : public ::testing::TestWithParam<SpdyNetworkTransactionTestParams> { 135 : public ::testing::TestWithParam<SpdyNetworkTransactionTestParams> {
129 protected: 136 protected:
130 SpdyNetworkTransactionTest() : spdy_util_(GetParam().protocol) { 137 SpdyNetworkTransactionTest()
138 : spdy_util_(GetParam().protocol, GetParam().priority_to_dependency) {
139 SpdySession::SetPriorityDependencyDefaultForTesting(
140 GetParam().priority_to_dependency);
131 spdy_util_.set_default_url(GURL(GetDefaultUrl())); 141 spdy_util_.set_default_url(GURL(GetDefaultUrl()));
132 } 142 }
133 143
134 virtual ~SpdyNetworkTransactionTest() { 144 virtual ~SpdyNetworkTransactionTest() {
135 // UploadDataStream may post a deletion tasks back to the message loop on 145 // UploadDataStream may post a deletion tasks back to the message loop on
136 // destruction. 146 // destruction.
137 upload_data_stream_.reset(); 147 upload_data_stream_.reset();
138 base::RunLoop().RunUntilIdle(); 148 base::RunLoop().RunUntilIdle();
149 SpdySession::SetPriorityDependencyDefaultForTesting(false);
139 } 150 }
140 151
141 void SetUp() override { 152 void SetUp() override {
142 get_request_initialized_ = false; 153 get_request_initialized_ = false;
143 post_request_initialized_ = false; 154 post_request_initialized_ = false;
144 chunked_post_request_initialized_ = false; 155 chunked_post_request_initialized_ = false;
145 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 156 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
146 } 157 }
147 158
148 struct TransactionHelperResult { 159 struct TransactionHelperResult {
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 //----------------------------------------------------------------------------- 716 //-----------------------------------------------------------------------------
706 // All tests are run with three different connection types: SPDY after NPN 717 // All tests are run with three different connection types: SPDY after NPN
707 // negotiation, SPDY without SSL, and SPDY with SSL. 718 // negotiation, SPDY without SSL, and SPDY with SSL.
708 // 719 //
709 // TODO(akalin): Use ::testing::Combine() when we are able to use 720 // TODO(akalin): Use ::testing::Combine() when we are able to use
710 // <tr1/tuple>. 721 // <tr1/tuple>.
711 INSTANTIATE_TEST_CASE_P( 722 INSTANTIATE_TEST_CASE_P(
712 Spdy, 723 Spdy,
713 SpdyNetworkTransactionTest, 724 SpdyNetworkTransactionTest,
714 ::testing::Values( 725 ::testing::Values(
715 SpdyNetworkTransactionTestParams(kProtoSPDY31, HTTPS_SPDY_VIA_NPN), 726 SpdyNetworkTransactionTestParams(kProtoSPDY31,
716 SpdyNetworkTransactionTestParams(kProtoSPDY31, HTTP_SPDY_VIA_ALT_SVC), 727 HTTPS_SPDY_VIA_NPN,
717 SpdyNetworkTransactionTestParams(kProtoHTTP2, HTTPS_SPDY_VIA_NPN), 728 false),
718 SpdyNetworkTransactionTestParams(kProtoHTTP2, HTTP_SPDY_VIA_ALT_SVC))); 729 SpdyNetworkTransactionTestParams(kProtoSPDY31,
730 HTTP_SPDY_VIA_ALT_SVC,
731 false),
732 SpdyNetworkTransactionTestParams(kProtoHTTP2,
733 HTTPS_SPDY_VIA_NPN,
734 false),
735 SpdyNetworkTransactionTestParams(kProtoHTTP2, HTTPS_SPDY_VIA_NPN, true),
736 SpdyNetworkTransactionTestParams(kProtoHTTP2,
737 HTTP_SPDY_VIA_ALT_SVC,
738 false),
739 SpdyNetworkTransactionTestParams(kProtoHTTP2,
740 HTTP_SPDY_VIA_ALT_SVC,
741 true)));
719 742
720 // Verify HttpNetworkTransaction constructor. 743 // Verify HttpNetworkTransaction constructor.
721 TEST_P(SpdyNetworkTransactionTest, Constructor) { 744 TEST_P(SpdyNetworkTransactionTest, Constructor) {
722 scoped_ptr<SpdySessionDependencies> session_deps( 745 scoped_ptr<SpdySessionDependencies> session_deps(
723 CreateSpdySessionDependencies(GetParam())); 746 CreateSpdySessionDependencies(GetParam()));
724 scoped_ptr<HttpNetworkSession> session( 747 scoped_ptr<HttpNetworkSession> session(
725 SpdySessionDependencies::SpdyCreateSession(session_deps.get())); 748 SpdySessionDependencies::SpdyCreateSession(session_deps.get()));
726 scoped_ptr<HttpTransaction> trans( 749 scoped_ptr<HttpTransaction> trans(
727 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 750 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
728 } 751 }
(...skipping 21 matching lines...) Expand all
750 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 773 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
751 EXPECT_EQ("hello!", out.response_data); 774 EXPECT_EQ("hello!", out.response_data);
752 } 775 }
753 776
754 TEST_P(SpdyNetworkTransactionTest, GetAtEachPriority) { 777 TEST_P(SpdyNetworkTransactionTest, GetAtEachPriority) {
755 for (RequestPriority p = MINIMUM_PRIORITY; p <= MAXIMUM_PRIORITY; 778 for (RequestPriority p = MINIMUM_PRIORITY; p <= MAXIMUM_PRIORITY;
756 p = RequestPriority(p + 1)) { 779 p = RequestPriority(p + 1)) {
757 // Construct the request. 780 // Construct the request.
758 scoped_ptr<SpdyFrame> req( 781 scoped_ptr<SpdyFrame> req(
759 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, p, true)); 782 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, p, true));
783 spdy_util_.UpdateWithStreamDestruction(1);
760 MockWrite writes[] = {CreateMockWrite(*req, 0)}; 784 MockWrite writes[] = {CreateMockWrite(*req, 0)};
761 785
762 SpdyPriority spdy_prio = 0; 786 SpdyPriority spdy_prio = 0;
763 EXPECT_TRUE(GetSpdyPriority(spdy_util_.spdy_version(), *req, &spdy_prio)); 787 EXPECT_TRUE(GetSpdyPriority(spdy_util_.spdy_version(), *req, &spdy_prio));
764 // this repeats the RequestPriority-->SpdyPriority mapping from 788 // this repeats the RequestPriority-->SpdyPriority mapping from
765 // SpdyFramer::ConvertRequestPriorityToSpdyPriority to make 789 // SpdyFramer::ConvertRequestPriorityToSpdyPriority to make
766 // sure it's being done right. 790 // sure it's being done right.
767 if (spdy_util_.spdy_version() < SPDY3) { 791 if (spdy_util_.spdy_version() < SPDY3) {
768 switch (p) { 792 switch (p) {
769 case HIGHEST: 793 case HIGHEST:
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
1115 helper.VerifyDataConsumed(); 1139 helper.VerifyDataConsumed();
1116 } 1140 }
1117 1141
1118 // Similar to ThreeGets above, however this test adds a SETTINGS 1142 // Similar to ThreeGets above, however this test adds a SETTINGS
1119 // frame. The SETTINGS frame is read during the IO loop waiting on 1143 // frame. The SETTINGS frame is read during the IO loop waiting on
1120 // the first transaction completion, and sets a maximum concurrent 1144 // the first transaction completion, and sets a maximum concurrent
1121 // stream limit of 1. This means that our IO loop exists after the 1145 // stream limit of 1. This means that our IO loop exists after the
1122 // second transaction completes, so we can assert on read_index(). 1146 // second transaction completes, so we can assert on read_index().
1123 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrent) { 1147 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrent) {
1124 // Construct the request. 1148 // Construct the request.
1149 // Each request fully completes before the next starts.
1125 scoped_ptr<SpdyFrame> req( 1150 scoped_ptr<SpdyFrame> req(
1126 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 1151 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
1127 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 1152 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
1128 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false)); 1153 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false));
1129 scoped_ptr<SpdyFrame> fbody(spdy_util_.ConstructSpdyBodyFrame(1, true)); 1154 scoped_ptr<SpdyFrame> fbody(spdy_util_.ConstructSpdyBodyFrame(1, true));
1155 spdy_util_.UpdateWithStreamDestruction(1);
1130 1156
1131 scoped_ptr<SpdyFrame> req2( 1157 scoped_ptr<SpdyFrame> req2(
1132 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); 1158 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
1133 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); 1159 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
1134 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false)); 1160 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false));
1135 scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true)); 1161 scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true));
1162 spdy_util_.UpdateWithStreamDestruction(3);
1136 1163
1137 scoped_ptr<SpdyFrame> req3( 1164 scoped_ptr<SpdyFrame> req3(
1138 spdy_util_.ConstructSpdyGet(NULL, 0, false, 5, LOWEST, true)); 1165 spdy_util_.ConstructSpdyGet(NULL, 0, false, 5, LOWEST, true));
1139 scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 5)); 1166 scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 5));
1140 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(5, false)); 1167 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(5, false));
1141 scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(5, true)); 1168 scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(5, true));
1142 1169
1143 SettingsMap settings; 1170 SettingsMap settings;
1144 const uint32 max_concurrent_streams = 1; 1171 const uint32 max_concurrent_streams = 1;
1145 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1172 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1248 // different data ("hello!" vs "hello!hello!") and because of the 1275 // different data ("hello!" vs "hello!hello!") and because of the
1249 // user specified priority, we expect to see them inverted in 1276 // user specified priority, we expect to see them inverted in
1250 // the response from the server. 1277 // the response from the server.
1251 TEST_P(SpdyNetworkTransactionTest, FourGetsWithMaxConcurrentPriority) { 1278 TEST_P(SpdyNetworkTransactionTest, FourGetsWithMaxConcurrentPriority) {
1252 // Construct the request. 1279 // Construct the request.
1253 scoped_ptr<SpdyFrame> req( 1280 scoped_ptr<SpdyFrame> req(
1254 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 1281 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
1255 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 1282 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
1256 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false)); 1283 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false));
1257 scoped_ptr<SpdyFrame> fbody(spdy_util_.ConstructSpdyBodyFrame(1, true)); 1284 scoped_ptr<SpdyFrame> fbody(spdy_util_.ConstructSpdyBodyFrame(1, true));
1285 spdy_util_.UpdateWithStreamDestruction(1);
1258 1286
1259 scoped_ptr<SpdyFrame> req2( 1287 scoped_ptr<SpdyFrame> req2(
1260 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); 1288 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
1261 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); 1289 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
1262 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false)); 1290 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false));
1263 scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true)); 1291 scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true));
1292 spdy_util_.UpdateWithStreamDestruction(3);
1264 1293
1265 scoped_ptr<SpdyFrame> req4( 1294 scoped_ptr<SpdyFrame> req4(
1266 spdy_util_.ConstructSpdyGet(NULL, 0, false, 5, HIGHEST, true)); 1295 spdy_util_.ConstructSpdyGet(NULL, 0, false, 5, HIGHEST, true));
1267 scoped_ptr<SpdyFrame> resp4(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 5)); 1296 scoped_ptr<SpdyFrame> resp4(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 5));
1268 scoped_ptr<SpdyFrame> fbody4(spdy_util_.ConstructSpdyBodyFrame(5, true)); 1297 scoped_ptr<SpdyFrame> fbody4(spdy_util_.ConstructSpdyBodyFrame(5, true));
1298 spdy_util_.UpdateWithStreamDestruction(5);
1269 1299
1270 scoped_ptr<SpdyFrame> req3( 1300 scoped_ptr<SpdyFrame> req3(
1271 spdy_util_.ConstructSpdyGet(NULL, 0, false, 7, LOWEST, true)); 1301 spdy_util_.ConstructSpdyGet(NULL, 0, false, 7, LOWEST, true));
1272 scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 7)); 1302 scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 7));
1273 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(7, false)); 1303 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(7, false));
1274 scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(7, true)); 1304 scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(7, true));
1275 1305
1276 SettingsMap settings; 1306 SettingsMap settings;
1277 const uint32 max_concurrent_streams = 1; 1307 const uint32 max_concurrent_streams = 1;
1278 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1308 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1397 // deletes a session in the middle of the transaction to ensure 1427 // deletes a session in the middle of the transaction to ensure
1398 // that we properly remove pendingcreatestream objects from 1428 // that we properly remove pendingcreatestream objects from
1399 // the spdy_session 1429 // the spdy_session
1400 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrentDelete) { 1430 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrentDelete) {
1401 // Construct the request. 1431 // Construct the request.
1402 scoped_ptr<SpdyFrame> req( 1432 scoped_ptr<SpdyFrame> req(
1403 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 1433 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
1404 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 1434 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
1405 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false)); 1435 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false));
1406 scoped_ptr<SpdyFrame> fbody(spdy_util_.ConstructSpdyBodyFrame(1, true)); 1436 scoped_ptr<SpdyFrame> fbody(spdy_util_.ConstructSpdyBodyFrame(1, true));
1437 spdy_util_.UpdateWithStreamDestruction(1);
1407 1438
1408 scoped_ptr<SpdyFrame> req2( 1439 scoped_ptr<SpdyFrame> req2(
1409 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); 1440 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
1410 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); 1441 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
1411 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false)); 1442 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false));
1412 scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true)); 1443 scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true));
1413 1444
1414 SettingsMap settings; 1445 SettingsMap settings;
1415 const uint32 max_concurrent_streams = 1; 1446 const uint32 max_concurrent_streams = 1;
1416 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1447 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 // Similar to ThreeGetsMaxConcurrrentDelete above, however, this test 1559 // Similar to ThreeGetsMaxConcurrrentDelete above, however, this test
1529 // closes the socket while we have a pending transaction waiting for 1560 // closes the socket while we have a pending transaction waiting for
1530 // a pending stream creation. http://crbug.com/52901 1561 // a pending stream creation. http://crbug.com/52901
1531 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrentSocketClose) { 1562 TEST_P(SpdyNetworkTransactionTest, ThreeGetsWithMaxConcurrentSocketClose) {
1532 // Construct the request. 1563 // Construct the request.
1533 scoped_ptr<SpdyFrame> req( 1564 scoped_ptr<SpdyFrame> req(
1534 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 1565 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
1535 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 1566 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
1536 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false)); 1567 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, false));
1537 scoped_ptr<SpdyFrame> fin_body(spdy_util_.ConstructSpdyBodyFrame(1, true)); 1568 scoped_ptr<SpdyFrame> fin_body(spdy_util_.ConstructSpdyBodyFrame(1, true));
1569 spdy_util_.UpdateWithStreamDestruction(1);
1538 1570
1539 scoped_ptr<SpdyFrame> req2( 1571 scoped_ptr<SpdyFrame> req2(
1540 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); 1572 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
1541 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); 1573 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
1542 1574
1543 SettingsMap settings; 1575 SettingsMap settings;
1544 const uint32 max_concurrent_streams = 1; 1576 const uint32 max_concurrent_streams = 1;
1545 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1577 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1546 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1578 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1547 scoped_ptr<SpdyFrame> settings_frame( 1579 scoped_ptr<SpdyFrame> settings_frame(
(...skipping 1531 matching lines...) Expand 10 before | Expand all | Expand 10 after
3079 for (size_t i = 0; i < arraysize(test_cases); ++i) { 3111 for (size_t i = 0; i < arraysize(test_cases); ++i) {
3080 scoped_ptr<SpdyFrame> req( 3112 scoped_ptr<SpdyFrame> req(
3081 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 3113 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
3082 MockWrite writes[] = {CreateMockWrite(*req, 0)}; 3114 MockWrite writes[] = {CreateMockWrite(*req, 0)};
3083 3115
3084 scoped_ptr<SpdyFrame> resp( 3116 scoped_ptr<SpdyFrame> resp(
3085 spdy_util_.ConstructSpdyGetSynReply(test_cases[i].extra_headers, 3117 spdy_util_.ConstructSpdyGetSynReply(test_cases[i].extra_headers,
3086 test_cases[i].num_headers, 3118 test_cases[i].num_headers,
3087 1)); 3119 1));
3088 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); 3120 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
3121 spdy_util_.UpdateWithStreamDestruction(1);
3089 MockRead reads[] = { 3122 MockRead reads[] = {
3090 CreateMockRead(*resp, 1), 3123 CreateMockRead(*resp, 1),
3091 CreateMockRead(*body, 2), 3124 CreateMockRead(*body, 2),
3092 MockRead(ASYNC, 0, 3) // EOF 3125 MockRead(ASYNC, 0, 3) // EOF
3093 }; 3126 };
3094 3127
3095 SequencedSocketData data(reads, arraysize(reads), writes, 3128 SequencedSocketData data(reads, arraysize(reads), writes,
3096 arraysize(writes)); 3129 arraysize(writes));
3097 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, 3130 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
3098 BoundNetLog(), GetParam(), NULL); 3131 BoundNetLog(), GetParam(), NULL);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
3176 3209
3177 // Construct the reply. 3210 // Construct the reply.
3178 SpdyHeaderBlock reply_headers; 3211 SpdyHeaderBlock reply_headers;
3179 AppendToHeaderBlock(test_cases[i].extra_headers[1], 3212 AppendToHeaderBlock(test_cases[i].extra_headers[1],
3180 test_cases[i].num_headers[1], 3213 test_cases[i].num_headers[1],
3181 &reply_headers); 3214 &reply_headers);
3182 scoped_ptr<SpdyFrame> frame_reply( 3215 scoped_ptr<SpdyFrame> frame_reply(
3183 spdy_util_.ConstructSpdyReply(1, reply_headers)); 3216 spdy_util_.ConstructSpdyReply(1, reply_headers));
3184 3217
3185 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); 3218 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
3219 spdy_util_.UpdateWithStreamDestruction(1);
3186 MockRead reads[] = { 3220 MockRead reads[] = {
3187 CreateMockRead(*frame_reply, 1), 3221 CreateMockRead(*frame_reply, 1),
3188 CreateMockRead(*body, 2), 3222 CreateMockRead(*body, 2),
3189 MockRead(ASYNC, 0, 3) // EOF 3223 MockRead(ASYNC, 0, 3) // EOF
3190 }; 3224 };
3191 3225
3192 // Attach the headers to the request. 3226 // Attach the headers to the request.
3193 int header_count = test_cases[i].num_headers[0]; 3227 int header_count = test_cases[i].num_headers[0];
3194 3228
3195 HttpRequestInfo request = CreateGetRequest(); 3229 HttpRequestInfo request = CreateGetRequest();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
3253 { 3287 {
3254 0, {NULL}, 3288 0, {NULL},
3255 }, 3289 },
3256 }; 3290 };
3257 3291
3258 for (size_t i = 0; i < arraysize(test_cases); ++i) { 3292 for (size_t i = 0; i < arraysize(test_cases); ++i) {
3259 scoped_ptr<SpdyFrame> req( 3293 scoped_ptr<SpdyFrame> req(
3260 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 3294 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
3261 scoped_ptr<SpdyFrame> rst( 3295 scoped_ptr<SpdyFrame> rst(
3262 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 3296 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
3297 spdy_util_.UpdateWithStreamDestruction(1);
3263 MockWrite writes[] = { 3298 MockWrite writes[] = {
3264 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), 3299 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
3265 }; 3300 };
3266 3301
3267 // Construct the reply. 3302 // Construct the reply.
3268 SpdyHeaderBlock reply_headers; 3303 SpdyHeaderBlock reply_headers;
3269 AppendToHeaderBlock( 3304 AppendToHeaderBlock(
3270 test_cases[i].headers, test_cases[i].num_headers, &reply_headers); 3305 test_cases[i].headers, test_cases[i].num_headers, &reply_headers);
3271 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyReply(1, reply_headers)); 3306 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyReply(1, reply_headers));
3272 MockRead reads[] = { 3307 MockRead reads[] = {
(...skipping 1388 matching lines...) Expand 10 before | Expand all | Expand 10 after
4661 HostPortPair host_port_pair("www.example.org", helper.port()); 4696 HostPortPair host_port_pair("www.example.org", helper.port());
4662 SpdySessionKey session_pool_key_direct( 4697 SpdySessionKey session_pool_key_direct(
4663 host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); 4698 host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_DISABLED);
4664 EXPECT_TRUE(HasSpdySession(spdy_session_pool, session_pool_key_direct)); 4699 EXPECT_TRUE(HasSpdySession(spdy_session_pool, session_pool_key_direct));
4665 SpdySessionKey session_pool_key_proxy( 4700 SpdySessionKey session_pool_key_proxy(
4666 host_port_pair, 4701 host_port_pair,
4667 ProxyServer::FromURI("www.foo.com", ProxyServer::SCHEME_HTTP), 4702 ProxyServer::FromURI("www.foo.com", ProxyServer::SCHEME_HTTP),
4668 PRIVACY_MODE_DISABLED); 4703 PRIVACY_MODE_DISABLED);
4669 EXPECT_FALSE(HasSpdySession(spdy_session_pool, session_pool_key_proxy)); 4704 EXPECT_FALSE(HasSpdySession(spdy_session_pool, session_pool_key_proxy));
4670 4705
4706 // New SpdyTestUtil class for the session that will be used for the
Bence 2015/11/12 01:33:29 optional: s/class/instance/
Randy Smith (Not in Mondays) 2015/11/12 01:59:32 Done.
4707 // proxy connection.
4708 SpdyTestUtil spdy_util_2(GetParam().protocol,
4709 GetParam().priority_to_dependency);
4710
4671 // Set up data for the proxy connection. 4711 // Set up data for the proxy connection.
4672 const char kConnect443[] = { 4712 const char kConnect443[] = {
4673 "CONNECT www.example.org:443 HTTP/1.1\r\n" 4713 "CONNECT www.example.org:443 HTTP/1.1\r\n"
4674 "Host: www.example.org\r\n" 4714 "Host: www.example.org\r\n"
4675 "Proxy-Connection: keep-alive\r\n\r\n"}; 4715 "Proxy-Connection: keep-alive\r\n\r\n"};
4676 const char kHTTP200[] = {"HTTP/1.1 200 OK\r\n\r\n"}; 4716 const char kHTTP200[] = {"HTTP/1.1 200 OK\r\n\r\n"};
4677 scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyGet( 4717 scoped_ptr<SpdyFrame> req2(spdy_util_2.ConstructSpdyGet(
4678 GetDefaultUrlWithPath("/foo.dat").c_str(), false, 1, LOWEST)); 4718 GetDefaultUrlWithPath("/foo.dat").c_str(), false, 1, LOWEST));
4679 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 4719 scoped_ptr<SpdyFrame> resp2(spdy_util_2.ConstructSpdyGetSynReply(NULL, 0, 1));
4680 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); 4720 scoped_ptr<SpdyFrame> body2(spdy_util_2.ConstructSpdyBodyFrame(1, true));
4681 4721
4682 MockWrite writes2[] = { 4722 MockWrite writes2[] = {
4683 MockWrite(SYNCHRONOUS, kConnect443, arraysize(kConnect443) - 1, 0), 4723 MockWrite(SYNCHRONOUS, kConnect443, arraysize(kConnect443) - 1, 0),
4684 CreateMockWrite(*req2, 2), 4724 CreateMockWrite(*req2, 2),
4685 }; 4725 };
4686 MockRead reads2[] = { 4726 MockRead reads2[] = {
4687 MockRead(SYNCHRONOUS, kHTTP200, arraysize(kHTTP200) - 1, 1), 4727 MockRead(SYNCHRONOUS, kHTTP200, arraysize(kHTTP200) - 1, 1),
4688 CreateMockRead(*resp2, 3), 4728 CreateMockRead(*resp2, 3),
4689 CreateMockRead(*body2, 4), 4729 CreateMockRead(*body2, 4),
4690 MockRead(ASYNC, 0, 5) // EOF 4730 MockRead(ASYNC, 0, 5) // EOF
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
4748 }; 4788 };
4749 4789
4750 MockRead reads2[] = { 4790 MockRead reads2[] = {
4751 CreateMockRead(*resp, 1), 4791 CreateMockRead(*resp, 1),
4752 CreateMockRead(*body, 2), 4792 CreateMockRead(*body, 2),
4753 MockRead(ASYNC, 0, 3) // EOF 4793 MockRead(ASYNC, 0, 3) // EOF
4754 }; 4794 };
4755 4795
4756 scoped_ptr<SpdyFrame> req( 4796 scoped_ptr<SpdyFrame> req(
4757 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 4797 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
4798 // In all cases the connection will be reset before req3 can be
4799 // dispatched, destroying both streams.
4800 spdy_util_.UpdateWithStreamDestruction(1);
4758 scoped_ptr<SpdyFrame> req3( 4801 scoped_ptr<SpdyFrame> req3(
4759 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); 4802 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
4760 MockWrite writes1[] = {CreateMockWrite(*req, 0), CreateMockWrite(*req3, 5)}; 4803 MockWrite writes1[] = {CreateMockWrite(*req, 0), CreateMockWrite(*req3, 5)};
4761 MockWrite writes2[] = {CreateMockWrite(*req, 0)}; 4804 MockWrite writes2[] = {CreateMockWrite(*req, 0)};
4762 4805
4763 // This test has a couple of variants. 4806 // This test has a couple of variants.
4764 enum { 4807 enum {
4765 // Induce the RST while waiting for our transaction to send. 4808 // Induce the RST while waiting for our transaction to send.
4766 VARIANT_RST_DURING_SEND_COMPLETION = 0, 4809 VARIANT_RST_DURING_SEND_COMPLETION = 0,
4767 // Induce the RST while waiting for our transaction to read. 4810 // Induce the RST while waiting for our transaction to read.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
4875 } 4918 }
4876 4919
4877 // Tests that Basic authentication works over SPDY 4920 // Tests that Basic authentication works over SPDY
4878 TEST_P(SpdyNetworkTransactionTest, SpdyBasicAuth) { 4921 TEST_P(SpdyNetworkTransactionTest, SpdyBasicAuth) {
4879 HttpStreamFactory::set_spdy_enabled(true); 4922 HttpStreamFactory::set_spdy_enabled(true);
4880 4923
4881 // The first request will be a bare GET, the second request will be a 4924 // The first request will be a bare GET, the second request will be a
4882 // GET with an Authorization header. 4925 // GET with an Authorization header.
4883 scoped_ptr<SpdyFrame> req_get( 4926 scoped_ptr<SpdyFrame> req_get(
4884 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 4927 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
4928 // Will be refused for lack of auth.
4929 spdy_util_.UpdateWithStreamDestruction(1);
4885 const char* const kExtraAuthorizationHeaders[] = { 4930 const char* const kExtraAuthorizationHeaders[] = {
4886 "authorization", "Basic Zm9vOmJhcg==" 4931 "authorization", "Basic Zm9vOmJhcg=="
4887 }; 4932 };
4888 scoped_ptr<SpdyFrame> req_get_authorization( 4933 scoped_ptr<SpdyFrame> req_get_authorization(
4889 spdy_util_.ConstructSpdyGet(kExtraAuthorizationHeaders, 4934 spdy_util_.ConstructSpdyGet(kExtraAuthorizationHeaders,
4890 arraysize(kExtraAuthorizationHeaders) / 2, 4935 arraysize(kExtraAuthorizationHeaders) / 2,
4891 false, 3, LOWEST, true)); 4936 false, 3, LOWEST, true));
4892 MockWrite spdy_writes[] = { 4937 MockWrite spdy_writes[] = {
4893 CreateMockWrite(*req_get, 0), CreateMockWrite(*req_get_authorization, 3), 4938 CreateMockWrite(*req_get, 0), CreateMockWrite(*req_get_authorization, 3),
4894 }; 4939 };
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
5503 }; 5548 };
5504 5549
5505 for (size_t index = 0; index < arraysize(kTestCases); index += 2) { 5550 for (size_t index = 0; index < arraysize(kTestCases); index += 2) {
5506 const char* url_to_fetch = kTestCases[index]; 5551 const char* url_to_fetch = kTestCases[index];
5507 const char* url_to_push = kTestCases[index + 1]; 5552 const char* url_to_push = kTestCases[index + 1];
5508 5553
5509 scoped_ptr<SpdyFrame> stream1_syn( 5554 scoped_ptr<SpdyFrame> stream1_syn(
5510 spdy_util_.ConstructSpdyGet(url_to_fetch, false, 1, LOWEST)); 5555 spdy_util_.ConstructSpdyGet(url_to_fetch, false, 1, LOWEST));
5511 scoped_ptr<SpdyFrame> stream1_body( 5556 scoped_ptr<SpdyFrame> stream1_body(
5512 spdy_util_.ConstructSpdyBodyFrame(1, true)); 5557 spdy_util_.ConstructSpdyBodyFrame(1, true));
5558 spdy_util_.UpdateWithStreamDestruction(1);
5513 scoped_ptr<SpdyFrame> push_rst( 5559 scoped_ptr<SpdyFrame> push_rst(
5514 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 5560 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
5515 MockWrite writes[] = { 5561 MockWrite writes[] = {
5516 CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*push_rst, 3), 5562 CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*push_rst, 3),
5517 }; 5563 };
5518 5564
5519 scoped_ptr<SpdyFrame> 5565 scoped_ptr<SpdyFrame>
5520 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 5566 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
5521 scoped_ptr<SpdyFrame> 5567 scoped_ptr<SpdyFrame>
5522 stream2_syn(spdy_util_.ConstructSpdyPush(NULL, 5568 stream2_syn(spdy_util_.ConstructSpdyPush(NULL,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
5584 // Verify the SYN_REPLY. 5630 // Verify the SYN_REPLY.
5585 EXPECT_TRUE(response.headers.get() != NULL); 5631 EXPECT_TRUE(response.headers.get() != NULL);
5586 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5632 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5587 } 5633 }
5588 } 5634 }
5589 5635
5590 TEST_P(SpdyNetworkTransactionTest, RetryAfterRefused) { 5636 TEST_P(SpdyNetworkTransactionTest, RetryAfterRefused) {
5591 // Construct the request. 5637 // Construct the request.
5592 scoped_ptr<SpdyFrame> req( 5638 scoped_ptr<SpdyFrame> req(
5593 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 5639 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
5640 // Will be destroyed by the RST before stream 3 starts.
5641 spdy_util_.UpdateWithStreamDestruction(1);
5594 scoped_ptr<SpdyFrame> req2( 5642 scoped_ptr<SpdyFrame> req2(
5595 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); 5643 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
5596 MockWrite writes[] = { 5644 MockWrite writes[] = {
5597 CreateMockWrite(*req, 0), CreateMockWrite(*req2, 2), 5645 CreateMockWrite(*req, 0), CreateMockWrite(*req2, 2),
5598 }; 5646 };
5599 5647
5600 scoped_ptr<SpdyFrame> refused( 5648 scoped_ptr<SpdyFrame> refused(
5601 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM)); 5649 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM));
5602 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); 5650 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
5603 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(3, true)); 5651 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(3, true));
(...skipping 30 matching lines...) Expand all
5634 EXPECT_TRUE(response.headers.get() != NULL); 5682 EXPECT_TRUE(response.headers.get() != NULL);
5635 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); 5683 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine());
5636 } 5684 }
5637 5685
5638 TEST_P(SpdyNetworkTransactionTest, OutOfOrderSynStream) { 5686 TEST_P(SpdyNetworkTransactionTest, OutOfOrderSynStream) {
5639 // This first request will start to establish the SpdySession. 5687 // This first request will start to establish the SpdySession.
5640 // Then we will start the second (MEDIUM priority) and then third 5688 // Then we will start the second (MEDIUM priority) and then third
5641 // (HIGHEST priority) request in such a way that the third will actually 5689 // (HIGHEST priority) request in such a way that the third will actually
5642 // start before the second, causing the second to be numbered differently 5690 // start before the second, causing the second to be numbered differently
5643 // than the order they were created. 5691 // than the order they were created.
5692 //
5693 // Note that the requests and responses created below are expectations
5694 // of what the above will produce on the wire, and hence are in the
5695 // initial->HIGHEST->LOWEST priority.
5696 //
5697 // Frames are created by SpdySession just before the write associated
5698 // with the frame is attempted, so stream dependencies will be based
5699 // on the streams alive at the point of the request write attempt. Thus
5700 // req1 is alive when req2 is attempted (during but not after the
5701 // |data.RunFor(2);| statement below) but not when req3 is attempted.
5702 // The call to spdy_util_.UpdateWithStreamDestruction() reflects this.
5644 scoped_ptr<SpdyFrame> req1( 5703 scoped_ptr<SpdyFrame> req1(
5645 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 5704 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
5646 scoped_ptr<SpdyFrame> req2( 5705 scoped_ptr<SpdyFrame> req2(
5647 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, HIGHEST, true)); 5706 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, HIGHEST, true));
5707 spdy_util_.UpdateWithStreamDestruction(1);
5648 scoped_ptr<SpdyFrame> req3( 5708 scoped_ptr<SpdyFrame> req3(
5649 spdy_util_.ConstructSpdyGet(NULL, 0, false, 5, MEDIUM, true)); 5709 spdy_util_.ConstructSpdyGet(NULL, 0, false, 5, MEDIUM, true));
5650 MockWrite writes[] = { 5710 MockWrite writes[] = {
5651 CreateMockWrite(*req1, 0), 5711 CreateMockWrite(*req1, 0),
5652 CreateMockWrite(*req2, 3), 5712 CreateMockWrite(*req2, 3),
5653 CreateMockWrite(*req3, 4), 5713 CreateMockWrite(*req3, 4),
5654 }; 5714 };
5655 5715
5656 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 5716 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
5657 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); 5717 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true));
(...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after
6525 //----------------------------------------------------------------------------- 6585 //-----------------------------------------------------------------------------
6526 // All tests are run with three different connection types: SPDY after NPN 6586 // All tests are run with three different connection types: SPDY after NPN
6527 // negotiation, SPDY without SSL, and SPDY with SSL. 6587 // negotiation, SPDY without SSL, and SPDY with SSL.
6528 // 6588 //
6529 // TODO(akalin): Use ::testing::Combine() when we are able to use 6589 // TODO(akalin): Use ::testing::Combine() when we are able to use
6530 // <tr1/tuple>. 6590 // <tr1/tuple>.
6531 INSTANTIATE_TEST_CASE_P( 6591 INSTANTIATE_TEST_CASE_P(
6532 Spdy, 6592 Spdy,
6533 SpdyNetworkTransactionNoTLSUsageCheckTest, 6593 SpdyNetworkTransactionNoTLSUsageCheckTest,
6534 ::testing::Values(SpdyNetworkTransactionTestParams(kProtoSPDY31, 6594 ::testing::Values(SpdyNetworkTransactionTestParams(kProtoSPDY31,
6535 HTTPS_SPDY_VIA_NPN))); 6595 HTTPS_SPDY_VIA_NPN,
6596 false)));
6536 6597
6537 TEST_P(SpdyNetworkTransactionNoTLSUsageCheckTest, TLSVersionTooOld) { 6598 TEST_P(SpdyNetworkTransactionNoTLSUsageCheckTest, TLSVersionTooOld) {
6538 scoped_ptr<SSLSocketDataProvider> ssl_provider( 6599 scoped_ptr<SSLSocketDataProvider> ssl_provider(
6539 new SSLSocketDataProvider(ASYNC, OK)); 6600 new SSLSocketDataProvider(ASYNC, OK));
6540 SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3, 6601 SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3,
6541 &ssl_provider->connection_status); 6602 &ssl_provider->connection_status);
6542 6603
6543 RunNoTLSUsageCheckTest(ssl_provider.Pass()); 6604 RunNoTLSUsageCheckTest(ssl_provider.Pass());
6544 } 6605 }
6545 6606
(...skipping 22 matching lines...) Expand all
6568 request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL); 6629 request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL);
6569 helper.RunToCompletionWithSSLData(&data, ssl_provider.Pass()); 6630 helper.RunToCompletionWithSSLData(&data, ssl_provider.Pass());
6570 TransactionHelperResult out = helper.output(); 6631 TransactionHelperResult out = helper.output();
6571 EXPECT_EQ(ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY, out.rv); 6632 EXPECT_EQ(ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY, out.rv);
6572 } 6633 }
6573 }; 6634 };
6574 6635
6575 INSTANTIATE_TEST_CASE_P( 6636 INSTANTIATE_TEST_CASE_P(
6576 Spdy, 6637 Spdy,
6577 SpdyNetworkTransactionTLSUsageCheckTest, 6638 SpdyNetworkTransactionTLSUsageCheckTest,
6578 ::testing::Values( 6639 ::testing::Values(SpdyNetworkTransactionTestParams(kProtoHTTP2,
6579 SpdyNetworkTransactionTestParams(kProtoHTTP2, HTTPS_SPDY_VIA_NPN))); 6640 HTTPS_SPDY_VIA_NPN,
6641 false),
6642 SpdyNetworkTransactionTestParams(kProtoHTTP2,
6643 HTTPS_SPDY_VIA_NPN,
6644 true)));
6580 6645
6581 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSVersionTooOld) { 6646 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSVersionTooOld) {
6582 scoped_ptr<SSLSocketDataProvider> ssl_provider( 6647 scoped_ptr<SSLSocketDataProvider> ssl_provider(
6583 new SSLSocketDataProvider(ASYNC, OK)); 6648 new SSLSocketDataProvider(ASYNC, OK));
6584 SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3, 6649 SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3,
6585 &ssl_provider->connection_status); 6650 &ssl_provider->connection_status);
6586 6651
6587 RunTLSUsageCheckTest(ssl_provider.Pass()); 6652 RunTLSUsageCheckTest(ssl_provider.Pass());
6588 } 6653 }
6589 6654
6590 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { 6655 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) {
6591 scoped_ptr<SSLSocketDataProvider> ssl_provider( 6656 scoped_ptr<SSLSocketDataProvider> ssl_provider(
6592 new SSLSocketDataProvider(ASYNC, OK)); 6657 new SSLSocketDataProvider(ASYNC, OK));
6593 // Set to TLS_RSA_WITH_NULL_MD5 6658 // Set to TLS_RSA_WITH_NULL_MD5
6594 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); 6659 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status);
6595 6660
6596 RunTLSUsageCheckTest(ssl_provider.Pass()); 6661 RunTLSUsageCheckTest(ssl_provider.Pass());
6597 } 6662 }
6598 6663
6599 } // namespace net 6664 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698