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

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

Issue 2521573006: Server push cancellation: change the ownership of ServerPushDelegate to HttpNetworkSession. (Closed)
Patch Set: rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/spdy_session_pool.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/spdy/spdy_session.h" 5 #include "net/spdy/spdy_session.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 UnstallStreamSend(stream, delta_window_size); 117 UnstallStreamSend(stream, delta_window_size);
118 UnstallSessionSend(delta_window_size); 118 UnstallSessionSend(delta_window_size);
119 } 119 }
120 120
121 protected: 121 protected:
122 SpdySessionTest() 122 SpdySessionTest()
123 : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( 123 : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group(
124 HttpNetworkSession::NORMAL_SOCKET_POOL)), 124 HttpNetworkSession::NORMAL_SOCKET_POOL)),
125 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( 125 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool(
126 HttpNetworkSession::NORMAL_SOCKET_POOL)), 126 HttpNetworkSession::NORMAL_SOCKET_POOL)),
127 test_push_delegate_(nullptr),
127 spdy_session_pool_(nullptr), 128 spdy_session_pool_(nullptr),
128 test_url_(kDefaultUrl), 129 test_url_(kDefaultUrl),
129 test_server_(test_url_), 130 test_server_(test_url_),
130 key_(HostPortPair::FromURL(test_url_), 131 key_(HostPortPair::FromURL(test_url_),
131 ProxyServer::Direct(), 132 ProxyServer::Direct(),
132 PRIVACY_MODE_DISABLED), 133 PRIVACY_MODE_DISABLED),
133 ssl_(SYNCHRONOUS, OK) {} 134 ssl_(SYNCHRONOUS, OK) {}
134 135
135 ~SpdySessionTest() override { 136 ~SpdySessionTest() override {
136 // Important to restore the per-pool limit first, since the pool limit must 137 // Important to restore the per-pool limit first, since the pool limit must
137 // always be greater than group limit, and the tests reduce both limits. 138 // always be greater than group limit, and the tests reduce both limits.
138 ClientSocketPoolManager::set_max_sockets_per_pool( 139 ClientSocketPoolManager::set_max_sockets_per_pool(
139 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); 140 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_);
140 ClientSocketPoolManager::set_max_sockets_per_group( 141 ClientSocketPoolManager::set_max_sockets_per_group(
141 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); 142 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_);
142 } 143 }
143 144
144 void SetUp() override { 145 void SetUp() override {
145 g_time_delta = base::TimeDelta(); 146 g_time_delta = base::TimeDelta();
146 g_time_now = base::TimeTicks::Now(); 147 g_time_now = base::TimeTicks::Now();
147 session_deps_.net_log = log_.bound().net_log(); 148 session_deps_.net_log = log_.bound().net_log();
148 } 149 }
149 150
150 void CreateNetworkSession() { 151 void CreateNetworkSession() {
151 DCHECK(!http_session_); 152 DCHECK(!http_session_);
152 DCHECK(!spdy_session_pool_); 153 DCHECK(!spdy_session_pool_);
153 http_session_ = 154 http_session_ =
154 SpdySessionDependencies::SpdyCreateSession(&session_deps_); 155 SpdySessionDependencies::SpdyCreateSession(&session_deps_);
156 std::unique_ptr<TestServerPushDelegate> test_push_delegate(
157 new TestServerPushDelegate());
158 test_push_delegate_ = test_push_delegate.get();
159 http_session_->SetServerPushDelegate(std::move(test_push_delegate));
155 spdy_session_pool_ = http_session_->spdy_session_pool(); 160 spdy_session_pool_ = http_session_->spdy_session_pool();
156 } 161 }
157 162
158 void CreateInsecureSpdySession() { 163 void CreateInsecureSpdySession() {
159 DCHECK(!session_); 164 DCHECK(!session_);
160 session_ = ::net::CreateInsecureSpdySession(http_session_.get(), key_, 165 session_ = ::net::CreateInsecureSpdySession(http_session_.get(), key_,
161 log_.bound()); 166 log_.bound());
162 } 167 }
163 168
164 void AddSSLSocketData() { 169 void AddSSLSocketData() {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 208
204 // Original socket limits. Some tests set these. Safest to always restore 209 // Original socket limits. Some tests set these. Safest to always restore
205 // them once each test has been run. 210 // them once each test has been run.
206 int old_max_group_sockets_; 211 int old_max_group_sockets_;
207 int old_max_pool_sockets_; 212 int old_max_pool_sockets_;
208 213
209 SpdyTestUtil spdy_util_; 214 SpdyTestUtil spdy_util_;
210 SpdySessionDependencies session_deps_; 215 SpdySessionDependencies session_deps_;
211 std::unique_ptr<HttpNetworkSession> http_session_; 216 std::unique_ptr<HttpNetworkSession> http_session_;
212 base::WeakPtr<SpdySession> session_; 217 base::WeakPtr<SpdySession> session_;
213 TestServerPushDelegate test_push_delegate_; 218 TestServerPushDelegate* test_push_delegate_;
214 SpdySessionPool* spdy_session_pool_; 219 SpdySessionPool* spdy_session_pool_;
215 const GURL test_url_; 220 const GURL test_url_;
216 const url::SchemeHostPort test_server_; 221 const url::SchemeHostPort test_server_;
217 SpdySessionKey key_; 222 SpdySessionKey key_;
218 SSLSocketDataProvider ssl_; 223 SSLSocketDataProvider ssl_;
219 BoundTestNetLog log_; 224 BoundTestNetLog log_;
220 }; 225 };
221 226
222 // Try to create a SPDY session that will fail during 227 // Try to create a SPDY session that will fail during
223 // initialization. Nothing should blow up. 228 // initialization. Nothing should blow up.
(...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after
1304 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF 1309 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF
1305 }; 1310 };
1306 1311
1307 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1312 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1308 session_deps_.socket_factory->AddSocketDataProvider(&data); 1313 session_deps_.socket_factory->AddSocketDataProvider(&data);
1309 1314
1310 AddSSLSocketData(); 1315 AddSSLSocketData();
1311 1316
1312 CreateNetworkSession(); 1317 CreateNetworkSession();
1313 CreateSecureSpdySession(); 1318 CreateSecureSpdySession();
1314 session_->set_push_delegate(&test_push_delegate_);
1315 1319
1316 // Process the principal request, and the first push stream request & body. 1320 // Process the principal request, and the first push stream request & body.
1317 base::WeakPtr<SpdyStream> spdy_stream = 1321 base::WeakPtr<SpdyStream> spdy_stream =
1318 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, 1322 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_,
1319 test_url_, MEDIUM, NetLogWithSource()); 1323 test_url_, MEDIUM, NetLogWithSource());
1320 test::StreamDelegateDoNothing delegate(spdy_stream); 1324 test::StreamDelegateDoNothing delegate(spdy_stream);
1321 spdy_stream->SetDelegate(&delegate); 1325 spdy_stream->SetDelegate(&delegate);
1322 1326
1323 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); 1327 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl));
1324 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 1328 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
(...skipping 27 matching lines...) Expand all
1352 EXPECT_TRUE(session_); 1356 EXPECT_TRUE(session_);
1353 1357
1354 // Read and process EOF. 1358 // Read and process EOF.
1355 data.Resume(); 1359 data.Resume();
1356 base::RunLoop().RunUntilIdle(); 1360 base::RunLoop().RunUntilIdle();
1357 1361
1358 // Cancel the first push after session goes away. Verify the test doesn't 1362 // Cancel the first push after session goes away. Verify the test doesn't
1359 // crash. 1363 // crash.
1360 EXPECT_FALSE(session_); 1364 EXPECT_FALSE(session_);
1361 EXPECT_TRUE( 1365 EXPECT_TRUE(
1362 test_push_delegate_.CancelPush(GURL("https://www.example.org/a.dat"))); 1366 test_push_delegate_->CancelPush(GURL("https://www.example.org/a.dat")));
1363 1367
1364 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1); 1368 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1);
1365 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes", 1369 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes",
1366 6, 1); 1370 6, 1);
1367 } 1371 }
1368 1372
1369 TEST_F(SpdySessionTest, CancelPushAfterExpired) { 1373 TEST_F(SpdySessionTest, CancelPushAfterExpired) {
1370 base::HistogramTester histogram_tester; 1374 base::HistogramTester histogram_tester;
1371 session_deps_.host_resolver->set_synchronous_mode(true); 1375 session_deps_.host_resolver->set_synchronous_mode(true);
1372 session_deps_.time_func = TheNearFuture; 1376 session_deps_.time_func = TheNearFuture;
(...skipping 17 matching lines...) Expand all
1390 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF 1394 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF
1391 }; 1395 };
1392 1396
1393 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1397 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1394 session_deps_.socket_factory->AddSocketDataProvider(&data); 1398 session_deps_.socket_factory->AddSocketDataProvider(&data);
1395 1399
1396 AddSSLSocketData(); 1400 AddSSLSocketData();
1397 1401
1398 CreateNetworkSession(); 1402 CreateNetworkSession();
1399 CreateSecureSpdySession(); 1403 CreateSecureSpdySession();
1400 session_->set_push_delegate(&test_push_delegate_);
1401 1404
1402 // Process the principal request, and the first push stream request & body. 1405 // Process the principal request, and the first push stream request & body.
1403 base::WeakPtr<SpdyStream> spdy_stream = 1406 base::WeakPtr<SpdyStream> spdy_stream =
1404 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, 1407 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_,
1405 test_url_, MEDIUM, NetLogWithSource()); 1408 test_url_, MEDIUM, NetLogWithSource());
1406 test::StreamDelegateDoNothing delegate(spdy_stream); 1409 test::StreamDelegateDoNothing delegate(spdy_stream);
1407 spdy_stream->SetDelegate(&delegate); 1410 spdy_stream->SetDelegate(&delegate);
1408 1411
1409 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); 1412 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl));
1410 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 1413 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
(...skipping 16 matching lines...) Expand all
1427 data.Resume(); 1430 data.Resume();
1428 base::RunLoop().RunUntilIdle(); 1431 base::RunLoop().RunUntilIdle();
1429 1432
1430 // Verify that the second pushed stream evicted the first pushed stream. 1433 // Verify that the second pushed stream evicted the first pushed stream.
1431 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); 1434 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams());
1432 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( 1435 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(
1433 GURL("https://www.example.org/0.dat"))); 1436 GURL("https://www.example.org/0.dat")));
1434 1437
1435 // Cancel the first push after its expiration. 1438 // Cancel the first push after its expiration.
1436 EXPECT_TRUE( 1439 EXPECT_TRUE(
1437 test_push_delegate_.CancelPush(GURL("https://www.example.org/a.dat"))); 1440 test_push_delegate_->CancelPush(GURL("https://www.example.org/a.dat")));
1438 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); 1441 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams());
1439 EXPECT_TRUE(session_); 1442 EXPECT_TRUE(session_);
1440 1443
1441 // Verify that the session window reclaimed the evicted stream body. 1444 // Verify that the session window reclaimed the evicted stream body.
1442 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); 1445 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
1443 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); 1446 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_);
1444 EXPECT_TRUE(session_); 1447 EXPECT_TRUE(session_);
1445 1448
1446 // Read and process EOF. 1449 // Read and process EOF.
1447 data.Resume(); 1450 data.Resume();
(...skipping 29 matching lines...) Expand all
1477 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF 1480 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF
1478 }; 1481 };
1479 1482
1480 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1483 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1481 session_deps_.socket_factory->AddSocketDataProvider(&data); 1484 session_deps_.socket_factory->AddSocketDataProvider(&data);
1482 1485
1483 AddSSLSocketData(); 1486 AddSSLSocketData();
1484 1487
1485 CreateNetworkSession(); 1488 CreateNetworkSession();
1486 CreateSecureSpdySession(); 1489 CreateSecureSpdySession();
1487 session_->set_push_delegate(&test_push_delegate_);
1488 1490
1489 // Process the principal request, and the first push stream request & body. 1491 // Process the principal request, and the first push stream request & body.
1490 base::WeakPtr<SpdyStream> spdy_stream = 1492 base::WeakPtr<SpdyStream> spdy_stream =
1491 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, 1493 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_,
1492 test_url_, MEDIUM, NetLogWithSource()); 1494 test_url_, MEDIUM, NetLogWithSource());
1493 test::StreamDelegateDoNothing delegate(spdy_stream); 1495 test::StreamDelegateDoNothing delegate(spdy_stream);
1494 spdy_stream->SetDelegate(&delegate); 1496 spdy_stream->SetDelegate(&delegate);
1495 1497
1496 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); 1498 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl));
1497 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 1499 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
(...skipping 20 matching lines...) Expand all
1518 GURL pushed_url("https://www.example.org/0.dat"); 1520 GURL pushed_url("https://www.example.org/0.dat");
1519 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); 1521 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams());
1520 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(pushed_url)); 1522 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(pushed_url));
1521 1523
1522 // Verify that the session window reclaimed the evicted stream body. 1524 // Verify that the session window reclaimed the evicted stream body.
1523 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); 1525 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
1524 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); 1526 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_);
1525 1527
1526 EXPECT_TRUE(session_); 1528 EXPECT_TRUE(session_);
1527 // Cancel the push before it's claimed. 1529 // Cancel the push before it's claimed.
1528 EXPECT_TRUE(test_push_delegate_.CancelPush(pushed_url)); 1530 EXPECT_TRUE(test_push_delegate_->CancelPush(pushed_url));
1529 EXPECT_EQ(0u, session_->num_unclaimed_pushed_streams()); 1531 EXPECT_EQ(0u, session_->num_unclaimed_pushed_streams());
1530 EXPECT_EQ(0u, session_->count_unclaimed_pushed_streams_for_url(pushed_url)); 1532 EXPECT_EQ(0u, session_->count_unclaimed_pushed_streams_for_url(pushed_url));
1531 1533
1532 // Read and process EOF. 1534 // Read and process EOF.
1533 data.Resume(); 1535 data.Resume();
1534 base::RunLoop().RunUntilIdle(); 1536 base::RunLoop().RunUntilIdle();
1535 EXPECT_FALSE(session_); 1537 EXPECT_FALSE(session_);
1536 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1); 1538 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1);
1537 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes", 1539 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes",
1538 6, 1); 1540 6, 1);
(...skipping 4343 matching lines...) Expand 10 before | Expand all | Expand 10 after
5882 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), 5884 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(),
5883 "spdy_pooling.pem"); 5885 "spdy_pooling.pem");
5884 ssl_info.is_issued_by_known_root = true; 5886 ssl_info.is_issued_by_known_root = true;
5885 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); 5887 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin));
5886 5888
5887 EXPECT_TRUE(SpdySession::CanPool( 5889 EXPECT_TRUE(SpdySession::CanPool(
5888 &tss, ssl_info, "www.example.org", "mail.example.org")); 5890 &tss, ssl_info, "www.example.org", "mail.example.org"));
5889 } 5891 }
5890 5892
5891 } // namespace net 5893 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_pool.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698