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

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

Issue 2596703002: http2: Update priorities of pushed streams (Closed)
Patch Set: actually rebase Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/spdy_session.cc ('k') | net/spdy/spdy_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "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 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 EXPECT_THAT(callback2.WaitForResult(), IsOk()); 1288 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1289 } 1289 }
1290 1290
1291 TEST_F(SpdySessionTest, CancelPushAfterSessionGoesAway) { 1291 TEST_F(SpdySessionTest, CancelPushAfterSessionGoesAway) {
1292 base::HistogramTester histogram_tester; 1292 base::HistogramTester histogram_tester;
1293 session_deps_.host_resolver->set_synchronous_mode(true); 1293 session_deps_.host_resolver->set_synchronous_mode(true);
1294 session_deps_.time_func = TheNearFuture; 1294 session_deps_.time_func = TheNearFuture;
1295 1295
1296 SpdySerializedFrame req( 1296 SpdySerializedFrame req(
1297 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1297 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1298 SpdySerializedFrame rst( 1298 SpdySerializedFrame priority_a(
1299 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
1300 SpdySerializedFrame priority_b(
1301 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true));
1302 SpdySerializedFrame rst_a(
1299 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 1303 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
1300 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; 1304 MockWrite writes[] = {
1305 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2),
1306 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7),
1307 };
1301 1308
1302 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( 1309 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
1303 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 1310 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
1304 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); 1311 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false));
1305 // In ascii "0" < "a". We use it to verify that we properly handle std::map 1312 // In ascii "0" < "a". We use it to verify that we properly handle std::map
1306 // iterators inside. See http://crbug.com/443490 1313 // iterators inside. See http://crbug.com/443490
1307 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( 1314 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush(
1308 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); 1315 nullptr, 0, 4, 1, "https://www.example.org/0.dat"));
1309 MockRead reads[] = { 1316 MockRead reads[] = {
1310 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), 1317 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3),
1311 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), 1318 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5),
1312 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF 1319 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF
1313 }; 1320 };
1314 1321
1315 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1322 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1316 session_deps_.socket_factory->AddSocketDataProvider(&data); 1323 session_deps_.socket_factory->AddSocketDataProvider(&data);
1317 1324
1318 AddSSLSocketData(); 1325 AddSSLSocketData();
1319 1326
1320 CreateNetworkSession(); 1327 CreateNetworkSession();
1321 CreateSecureSpdySession(); 1328 CreateSecureSpdySession();
1322 1329
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1373 6, 1); 1380 6, 1);
1374 } 1381 }
1375 1382
1376 TEST_F(SpdySessionTest, CancelPushAfterExpired) { 1383 TEST_F(SpdySessionTest, CancelPushAfterExpired) {
1377 base::HistogramTester histogram_tester; 1384 base::HistogramTester histogram_tester;
1378 session_deps_.host_resolver->set_synchronous_mode(true); 1385 session_deps_.host_resolver->set_synchronous_mode(true);
1379 session_deps_.time_func = TheNearFuture; 1386 session_deps_.time_func = TheNearFuture;
1380 1387
1381 SpdySerializedFrame req( 1388 SpdySerializedFrame req(
1382 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1389 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1383 SpdySerializedFrame rst( 1390 SpdySerializedFrame priority_a(
1391 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
1392 SpdySerializedFrame priority_b(
1393 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true));
1394 SpdySerializedFrame rst_a(
1384 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 1395 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
1385 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; 1396 MockWrite writes[] = {
1397 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2),
1398 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7),
1399 };
1386 1400
1387 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( 1401 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
1388 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 1402 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
1389 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); 1403 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false));
1390 // In ascii "0" < "a". We use it to verify that we properly handle std::map 1404 // In ascii "0" < "a". We use it to verify that we properly handle std::map
1391 // iterators inside. See http://crbug.com/443490 1405 // iterators inside. See http://crbug.com/443490
1392 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( 1406 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush(
1393 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); 1407 nullptr, 0, 4, 1, "https://www.example.org/0.dat"));
1394 MockRead reads[] = { 1408 MockRead reads[] = {
1395 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), 1409 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3),
1396 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), 1410 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5),
1397 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF 1411 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF
1398 }; 1412 };
1399 1413
1400 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1414 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1401 session_deps_.socket_factory->AddSocketDataProvider(&data); 1415 session_deps_.socket_factory->AddSocketDataProvider(&data);
1402 1416
1403 AddSSLSocketData(); 1417 AddSSLSocketData();
1404 1418
1405 CreateNetworkSession(); 1419 CreateNetworkSession();
1406 CreateSecureSpdySession(); 1420 CreateSecureSpdySession();
1407 1421
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 6, 1); 1473 6, 1);
1460 } 1474 }
1461 1475
1462 TEST_F(SpdySessionTest, CancelPushBeforeClaimed) { 1476 TEST_F(SpdySessionTest, CancelPushBeforeClaimed) {
1463 base::HistogramTester histogram_tester; 1477 base::HistogramTester histogram_tester;
1464 session_deps_.host_resolver->set_synchronous_mode(true); 1478 session_deps_.host_resolver->set_synchronous_mode(true);
1465 session_deps_.time_func = TheNearFuture; 1479 session_deps_.time_func = TheNearFuture;
1466 1480
1467 SpdySerializedFrame req( 1481 SpdySerializedFrame req(
1468 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1482 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1469 SpdySerializedFrame rst( 1483 SpdySerializedFrame priority_a(
1484 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
1485 SpdySerializedFrame priority_b(
1486 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true));
1487 SpdySerializedFrame rst_a(
1470 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 1488 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
1471 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; 1489 MockWrite writes[] = {
1490 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2),
1491 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7),
1492 };
1472 1493
1473 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( 1494 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
1474 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 1495 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
1475 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); 1496 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false));
1476 // In ascii "0" < "a". We use it to verify that we properly handle std::map 1497 // In ascii "0" < "a". We use it to verify that we properly handle std::map
1477 // iterators inside. See http://crbug.com/443490 1498 // iterators inside. See http://crbug.com/443490
1478 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( 1499 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush(
1479 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); 1500 nullptr, 0, 4, 1, "https://www.example.org/0.dat"));
1480 MockRead reads[] = { 1501 MockRead reads[] = {
1481 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), 1502 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3),
1482 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), 1503 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5),
1483 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF 1504 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF
1484 }; 1505 };
1485 1506
1486 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1507 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1487 session_deps_.socket_factory->AddSocketDataProvider(&data); 1508 session_deps_.socket_factory->AddSocketDataProvider(&data);
1488 1509
1489 AddSSLSocketData(); 1510 AddSSLSocketData();
1490 1511
1491 CreateNetworkSession(); 1512 CreateNetworkSession();
1492 CreateSecureSpdySession(); 1513 CreateSecureSpdySession();
1493 1514
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 6, 1); 1564 6, 1);
1544 } 1565 }
1545 1566
1546 TEST_F(SpdySessionTest, DeleteExpiredPushStreams) { 1567 TEST_F(SpdySessionTest, DeleteExpiredPushStreams) {
1547 base::HistogramTester histogram_tester; 1568 base::HistogramTester histogram_tester;
1548 session_deps_.host_resolver->set_synchronous_mode(true); 1569 session_deps_.host_resolver->set_synchronous_mode(true);
1549 session_deps_.time_func = TheNearFuture; 1570 session_deps_.time_func = TheNearFuture;
1550 1571
1551 SpdySerializedFrame req( 1572 SpdySerializedFrame req(
1552 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1573 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1553 SpdySerializedFrame rst( 1574 SpdySerializedFrame priority_a(
1575 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
1576 SpdySerializedFrame priority_b(
1577 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true));
1578 SpdySerializedFrame rst_a(
1554 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 1579 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
1555 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; 1580 MockWrite writes[] = {
1581 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2),
1582 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7),
1583 };
1556 1584
1557 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( 1585 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
1558 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 1586 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
1559 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); 1587 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false));
1560 // In ascii "0" < "a". We use it to verify that we properly handle std::map 1588 // In ascii "0" < "a". We use it to verify that we properly handle std::map
1561 // iterators inside. See http://crbug.com/443490 1589 // iterators inside. See http://crbug.com/443490
1562 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( 1590 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush(
1563 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); 1591 nullptr, 0, 4, 1, "https://www.example.org/0.dat"));
1564 MockRead reads[] = { 1592 MockRead reads[] = {
1565 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), 1593 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3),
1566 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), 1594 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5),
1567 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF 1595 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF
1568 }; 1596 };
1569 1597
1570 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1598 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1571 session_deps_.socket_factory->AddSocketDataProvider(&data); 1599 session_deps_.socket_factory->AddSocketDataProvider(&data);
1572 1600
1573 AddSSLSocketData(); 1601 AddSSLSocketData();
1574 1602
1575 CreateNetworkSession(); 1603 CreateNetworkSession();
1576 CreateSecureSpdySession(); 1604 CreateSecureSpdySession();
1577 1605
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1622 6, 1); 1650 6, 1);
1623 } 1651 }
1624 1652
1625 TEST_F(SpdySessionTest, MetricsCollectionOnPushStreams) { 1653 TEST_F(SpdySessionTest, MetricsCollectionOnPushStreams) {
1626 base::HistogramTester histogram_tester; 1654 base::HistogramTester histogram_tester;
1627 session_deps_.host_resolver->set_synchronous_mode(true); 1655 session_deps_.host_resolver->set_synchronous_mode(true);
1628 session_deps_.time_func = TheNearFuture; 1656 session_deps_.time_func = TheNearFuture;
1629 1657
1630 SpdySerializedFrame req( 1658 SpdySerializedFrame req(
1631 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1659 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1632 SpdySerializedFrame rst( 1660 SpdySerializedFrame priority_a(
1661 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
1662 SpdySerializedFrame priority_b(
1663 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true));
1664 SpdySerializedFrame priority_c(
1665 spdy_util_.ConstructSpdyPriority(6, 4, IDLE, true));
1666 SpdySerializedFrame rst_a(
1633 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 1667 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
1634 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; 1668 MockWrite writes[] = {
1669 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2),
1670 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7),
1671 CreateMockWrite(priority_c, 10),
1672 };
1635 1673
1636 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( 1674 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
1637 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 1675 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
1638 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); 1676 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false));
1639 // In ascii "0" < "a". We use it to verify that we properly handle std::map 1677 // In ascii "0" < "a". We use it to verify that we properly handle std::map
1640 // iterators inside. See http://crbug.com/443490 1678 // iterators inside. See http://crbug.com/443490
1641 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( 1679 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush(
1642 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); 1680 nullptr, 0, 4, 1, "https://www.example.org/0.dat"));
1643 SpdySerializedFrame push_c(spdy_util_.ConstructSpdyPush( 1681 SpdySerializedFrame push_c(spdy_util_.ConstructSpdyPush(
1644 nullptr, 0, 6, 1, "https://www.example.org/1.dat")); 1682 nullptr, 0, 6, 1, "https://www.example.org/1.dat"));
1645 SpdySerializedFrame push_c_body(spdy_util_.ConstructSpdyDataFrame(6, false)); 1683 SpdySerializedFrame push_c_body(spdy_util_.ConstructSpdyDataFrame(6, false));
1646 1684
1647 MockRead reads[] = { 1685 MockRead reads[] = {
1648 CreateMockRead(push_a, 1), 1686 CreateMockRead(push_a, 1),
1649 CreateMockRead(push_a_body, 2), 1687 CreateMockRead(push_a_body, 3),
1650 MockRead(ASYNC, ERR_IO_PENDING, 3), 1688 MockRead(ASYNC, ERR_IO_PENDING, 4),
1651 CreateMockRead(push_b, 4), 1689 CreateMockRead(push_b, 5),
1652 MockRead(ASYNC, ERR_IO_PENDING, 6), 1690 MockRead(ASYNC, ERR_IO_PENDING, 8),
1653 CreateMockRead(push_c, 7), 1691 CreateMockRead(push_c, 9),
1654 CreateMockRead(push_c_body, 8), 1692 CreateMockRead(push_c_body, 11),
1655 MockRead(ASYNC, ERR_IO_PENDING, 9), 1693 MockRead(ASYNC, ERR_IO_PENDING, 12),
1656 MockRead(ASYNC, 0, 10) // EOF 1694 MockRead(ASYNC, 0, 13) // EOF
1657 }; 1695 };
1658 1696
1659 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1697 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1660 session_deps_.socket_factory->AddSocketDataProvider(&data); 1698 session_deps_.socket_factory->AddSocketDataProvider(&data);
1661 1699
1662 AddSSLSocketData(); 1700 AddSSLSocketData();
1663 1701
1664 CreateNetworkSession(); 1702 CreateNetworkSession();
1665 CreateSecureSpdySession(); 1703 CreateSecureSpdySession();
1666 1704
(...skipping 3186 matching lines...) Expand 10 before | Expand all | Expand 10 after
4853 SettingsMap new_settings; 4891 SettingsMap new_settings;
4854 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 2; 4892 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 2;
4855 SpdySerializedFrame settings_frame( 4893 SpdySerializedFrame settings_frame(
4856 spdy_util_.ConstructSpdySettings(new_settings)); 4894 spdy_util_.ConstructSpdySettings(new_settings));
4857 SpdySerializedFrame pushed(spdy_util_.ConstructSpdyPush( 4895 SpdySerializedFrame pushed(spdy_util_.ConstructSpdyPush(
4858 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 4896 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
4859 MockRead reads[] = { 4897 MockRead reads[] = {
4860 CreateMockRead(settings_frame, 0), 4898 CreateMockRead(settings_frame, 0),
4861 MockRead(ASYNC, ERR_IO_PENDING, 3), 4899 MockRead(ASYNC, ERR_IO_PENDING, 3),
4862 CreateMockRead(pushed, 4), 4900 CreateMockRead(pushed, 4),
4863 MockRead(ASYNC, ERR_IO_PENDING, 5), 4901 MockRead(ASYNC, ERR_IO_PENDING, 6),
4864 MockRead(ASYNC, 0, 6), 4902 MockRead(ASYNC, 0, 7),
4865 }; 4903 };
4866 4904
4867 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck()); 4905 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck());
4868 SpdySerializedFrame req( 4906 SpdySerializedFrame req(
4869 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4907 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4908 SpdySerializedFrame priority(
4909 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
4870 MockWrite writes[] = { 4910 MockWrite writes[] = {
4871 CreateMockWrite(settings_ack, 1), CreateMockWrite(req, 2), 4911 CreateMockWrite(settings_ack, 1), CreateMockWrite(req, 2),
4912 CreateMockWrite(priority, 5),
4872 }; 4913 };
4873 4914
4874 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4915 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4875 session_deps_.socket_factory->AddSocketDataProvider(&data); 4916 session_deps_.socket_factory->AddSocketDataProvider(&data);
4876 4917
4877 AddSSLSocketData(); 4918 AddSSLSocketData();
4878 4919
4879 CreateNetworkSession(); 4920 CreateNetworkSession();
4880 CreateSecureSpdySession(); 4921 CreateSecureSpdySession();
4881 4922
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
4933 EXPECT_FALSE(session_); 4974 EXPECT_FALSE(session_);
4934 } 4975 }
4935 4976
4936 TEST_F(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { 4977 TEST_F(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) {
4937 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( 4978 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
4938 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 4979 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
4939 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( 4980 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush(
4940 nullptr, 0, 4, 1, "https://www.example.org/b.dat")); 4981 nullptr, 0, 4, 1, "https://www.example.org/b.dat"));
4941 MockRead reads[] = { 4982 MockRead reads[] = {
4942 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), 4983 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2),
4943 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), 4984 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5),
4944 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7), 4985 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9),
4945 }; 4986 };
4946 4987
4947 SpdySerializedFrame req( 4988 SpdySerializedFrame req(
4948 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4989 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4949 SpdySerializedFrame rst( 4990 SpdySerializedFrame priority_a(
4991 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
4992 SpdySerializedFrame priority_b(
4993 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true));
4994 SpdySerializedFrame rst_b(
4950 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 4995 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
4951 MockWrite writes[] = { 4996 MockWrite writes[] = {
4952 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), 4997 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 3),
4998 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_b, 7),
4953 }; 4999 };
4954 5000
4955 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5001 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4956 session_deps_.socket_factory->AddSocketDataProvider(&data); 5002 session_deps_.socket_factory->AddSocketDataProvider(&data);
4957 5003
4958 AddSSLSocketData(); 5004 AddSSLSocketData();
4959 5005
4960 CreateNetworkSession(); 5006 CreateNetworkSession();
4961 CreateSecureSpdySession(); 5007 CreateSecureSpdySession();
4962 session_->set_max_concurrent_pushed_streams(1); 5008 session_->set_max_concurrent_pushed_streams(1);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
5019 // cross_origin_push contains HTTP resource for an origin different from the 5065 // cross_origin_push contains HTTP resource for an origin different from the
5020 // origin of kDefaultUrl, and should be accepted. 5066 // origin of kDefaultUrl, and should be accepted.
5021 SpdySerializedFrame cross_origin_push(spdy_util_.ConstructSpdyPush( 5067 SpdySerializedFrame cross_origin_push(spdy_util_.ConstructSpdyPush(
5022 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin)); 5068 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin));
5023 // cross_origin_https_push contains HTTPS resource, and should be refused. 5069 // cross_origin_https_push contains HTTPS resource, and should be refused.
5024 SpdySerializedFrame cross_origin_https_push(spdy_util_.ConstructSpdyPush( 5070 SpdySerializedFrame cross_origin_https_push(spdy_util_.ConstructSpdyPush(
5025 nullptr, 0, 4, 1, kHttpsURLFromAnotherOrigin)); 5071 nullptr, 0, 4, 1, kHttpsURLFromAnotherOrigin));
5026 MockRead reads[] = { 5072 MockRead reads[] = {
5027 MockRead(ASYNC, ERR_IO_PENDING, 1), 5073 MockRead(ASYNC, ERR_IO_PENDING, 1),
5028 CreateMockRead(cross_origin_push, 2), 5074 CreateMockRead(cross_origin_push, 2),
5029 MockRead(ASYNC, ERR_IO_PENDING, 3), 5075 MockRead(ASYNC, ERR_IO_PENDING, 4),
5030 CreateMockRead(cross_origin_https_push, 4), 5076 CreateMockRead(cross_origin_https_push, 5),
5031 MockRead(ASYNC, ERR_IO_PENDING, 6), 5077 MockRead(ASYNC, ERR_IO_PENDING, 7),
5032 MockRead(ASYNC, 0, 7), 5078 MockRead(ASYNC, 0, 8),
5033 }; 5079 };
5034 5080
5035 SpdySerializedFrame req( 5081 SpdySerializedFrame req(
5036 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 5082 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
5037 SpdySerializedFrame rst( 5083 SpdySerializedFrame priority_http(
5084 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
5085 SpdySerializedFrame rst_https(
5038 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 5086 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
5039 MockWrite writes[] = { 5087 MockWrite writes[] = {
5040 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), 5088 CreateMockWrite(req, 0), CreateMockWrite(priority_http, 3),
5089 CreateMockWrite(rst_https, 6),
5041 }; 5090 };
5042 5091
5043 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5092 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5044 session_deps_.socket_factory->AddSocketDataProvider(&data); 5093 session_deps_.socket_factory->AddSocketDataProvider(&data);
5045 5094
5046 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); 5095 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
5047 proxy_delegate->set_trusted_spdy_proxy( 5096 proxy_delegate->set_trusted_spdy_proxy(
5048 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS, 5097 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS,
5049 HostPortPair(GURL(kDefaultUrl).host(), 443))); 5098 HostPortPair(GURL(kDefaultUrl).host(), 443)));
5050 session_deps_.proxy_delegate = std::move(proxy_delegate); 5099 session_deps_.proxy_delegate = std::move(proxy_delegate);
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
5168 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( 5217 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
5169 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 5218 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
5170 SpdyHeaderBlock push_headers; 5219 SpdyHeaderBlock push_headers;
5171 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", 5220 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat",
5172 &push_headers); 5221 &push_headers);
5173 SpdySerializedFrame push_b( 5222 SpdySerializedFrame push_b(
5174 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); 5223 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1));
5175 SpdySerializedFrame headers_b( 5224 SpdySerializedFrame headers_b(
5176 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); 5225 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0));
5177 MockRead reads[] = { 5226 MockRead reads[] = {
5178 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), 5227 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2),
5179 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), 5228 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5),
5180 MockRead(ASYNC, ERR_IO_PENDING, 5), CreateMockRead(headers_b, 6), 5229 MockRead(ASYNC, ERR_IO_PENDING, 7), CreateMockRead(headers_b, 8),
5181 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9), 5230 MockRead(ASYNC, ERR_IO_PENDING, 10), MockRead(ASYNC, 0, 11),
5182 }; 5231 };
5183 5232
5184 SpdySerializedFrame req( 5233 SpdySerializedFrame req(
5185 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 5234 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
5186 SpdySerializedFrame rst( 5235 SpdySerializedFrame priority_a(
5236 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
5237 SpdySerializedFrame priority_b(
5238 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true));
5239 SpdySerializedFrame rst_b(
5187 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 5240 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
5188 MockWrite writes[] = { 5241 MockWrite writes[] = {
5189 CreateMockWrite(req, 0), CreateMockWrite(rst, 7), 5242 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 3),
5243 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_b, 9),
5190 }; 5244 };
5191 5245
5192 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5246 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5193 session_deps_.socket_factory->AddSocketDataProvider(&data); 5247 session_deps_.socket_factory->AddSocketDataProvider(&data);
5194 5248
5195 AddSSLSocketData(); 5249 AddSSLSocketData();
5196 5250
5197 CreateNetworkSession(); 5251 CreateNetworkSession();
5198 CreateSecureSpdySession(); 5252 CreateSecureSpdySession();
5199 session_->set_max_concurrent_pushed_streams(1); 5253 session_->set_max_concurrent_pushed_streams(1);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
5257 TEST_F(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { 5311 TEST_F(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
5258 const char kPushedUrl[] = "https://www.example.org/a.dat"; 5312 const char kPushedUrl[] = "https://www.example.org/a.dat";
5259 SpdyHeaderBlock push_headers; 5313 SpdyHeaderBlock push_headers;
5260 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); 5314 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers);
5261 SpdySerializedFrame push_promise( 5315 SpdySerializedFrame push_promise(
5262 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); 5316 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1));
5263 SpdySerializedFrame headers_frame( 5317 SpdySerializedFrame headers_frame(
5264 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); 5318 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0));
5265 MockRead reads[] = { 5319 MockRead reads[] = {
5266 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_promise, 2), 5320 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_promise, 2),
5267 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(headers_frame, 4), 5321 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(headers_frame, 5),
5268 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7), 5322 MockRead(ASYNC, ERR_IO_PENDING, 7), MockRead(ASYNC, 0, 8),
5269 }; 5323 };
5270 5324
5271 SpdySerializedFrame req( 5325 SpdySerializedFrame req(
5272 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 5326 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
5327 SpdySerializedFrame priority(
5328 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
5273 SpdySerializedFrame rst( 5329 SpdySerializedFrame rst(
5274 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); 5330 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL));
5275 MockWrite writes[] = { 5331 MockWrite writes[] = {
5276 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), 5332 CreateMockWrite(req, 0), CreateMockWrite(priority, 3),
5333 CreateMockWrite(rst, 6),
5277 }; 5334 };
5278 5335
5279 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5336 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5280 session_deps_.socket_factory->AddSocketDataProvider(&data); 5337 session_deps_.socket_factory->AddSocketDataProvider(&data);
5281 5338
5282 AddSSLSocketData(); 5339 AddSSLSocketData();
5283 5340
5284 CreateNetworkSession(); 5341 CreateNetworkSession();
5285 CreateSecureSpdySession(); 5342 CreateSecureSpdySession();
5286 5343
(...skipping 24 matching lines...) Expand all
5311 5368
5312 // Run until pushed stream is created. 5369 // Run until pushed stream is created.
5313 data.Resume(); 5370 data.Resume();
5314 base::RunLoop().RunUntilIdle(); 5371 base::RunLoop().RunUntilIdle();
5315 EXPECT_EQ(2u, session_->num_active_streams()); 5372 EXPECT_EQ(2u, session_->num_active_streams());
5316 EXPECT_EQ(0u, session_->num_created_streams()); 5373 EXPECT_EQ(0u, session_->num_created_streams());
5317 EXPECT_EQ(1u, session_->num_pushed_streams()); 5374 EXPECT_EQ(1u, session_->num_pushed_streams());
5318 EXPECT_EQ(0u, session_->num_active_pushed_streams()); 5375 EXPECT_EQ(0u, session_->num_active_pushed_streams());
5319 5376
5320 base::WeakPtr<SpdyStream> pushed_stream; 5377 base::WeakPtr<SpdyStream> pushed_stream;
5321 int rv = session_->GetPushStream(GURL(kPushedUrl), &pushed_stream, 5378 int rv = session_->GetPushStream(GURL(kPushedUrl), IDLE, &pushed_stream,
5322 NetLogWithSource()); 5379 NetLogWithSource());
5323 ASSERT_THAT(rv, IsOk()); 5380 ASSERT_THAT(rv, IsOk());
5324 ASSERT_TRUE(pushed_stream); 5381 ASSERT_TRUE(pushed_stream);
5325 test::StreamDelegateCloseOnHeaders delegate2(pushed_stream); 5382 test::StreamDelegateCloseOnHeaders delegate2(pushed_stream);
5326 pushed_stream->SetDelegate(&delegate2); 5383 pushed_stream->SetDelegate(&delegate2);
5327 5384
5328 // Receive headers for pushed stream. Delegate will cancel the stream, ensure 5385 // Receive headers for pushed stream. Delegate will cancel the stream, ensure
5329 // that all our counters are in consistent state. 5386 // that all our counters are in consistent state.
5330 data.Resume(); 5387 data.Resume();
5331 base::RunLoop().RunUntilIdle(); 5388 base::RunLoop().RunUntilIdle();
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
5940 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), 5997 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(),
5941 "spdy_pooling.pem"); 5998 "spdy_pooling.pem");
5942 ssl_info.is_issued_by_known_root = true; 5999 ssl_info.is_issued_by_known_root = true;
5943 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); 6000 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin));
5944 6001
5945 EXPECT_TRUE(SpdySession::CanPool( 6002 EXPECT_TRUE(SpdySession::CanPool(
5946 &tss, ssl_info, "www.example.org", "mail.example.org")); 6003 &tss, ssl_info, "www.example.org", "mail.example.org"));
5947 } 6004 }
5948 6005
5949 } // namespace net 6006 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session.cc ('k') | net/spdy/spdy_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698