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

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

Issue 289823002: SPDY4: SpdySession should send SETTINGS acknowledgements. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | net/spdy/spdy_session.cc » ('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 <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/file_util.h" 10 #include "base/file_util.h"
(...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 5)); 1142 scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 5));
1143 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(5, false)); 1143 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(5, false));
1144 scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(5, true)); 1144 scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(5, true));
1145 1145
1146 SettingsMap settings; 1146 SettingsMap settings;
1147 const uint32 max_concurrent_streams = 1; 1147 const uint32 max_concurrent_streams = 1;
1148 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1148 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1149 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1149 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1150 scoped_ptr<SpdyFrame> settings_frame( 1150 scoped_ptr<SpdyFrame> settings_frame(
1151 spdy_util_.ConstructSpdySettings(settings)); 1151 spdy_util_.ConstructSpdySettings(settings));
1152 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
1152 1153
1153 MockWrite writes[] = { 1154 MockWrite writes[] = {
1154 CreateMockWrite(*req), 1155 CreateMockWrite(*req),
1156 CreateMockWrite(*settings_ack, 2),
1155 CreateMockWrite(*req2), 1157 CreateMockWrite(*req2),
1156 CreateMockWrite(*req3), 1158 CreateMockWrite(*req3),
1157 }; 1159 };
1158 1160
1159 MockRead reads[] = { 1161 MockRead reads[] = {
1160 CreateMockRead(*settings_frame, 1), 1162 CreateMockRead(*settings_frame, 1),
1161 CreateMockRead(*resp), 1163 CreateMockRead(*resp),
1162 CreateMockRead(*body), 1164 CreateMockRead(*body),
1163 CreateMockRead(*fbody), 1165 CreateMockRead(*fbody),
1164 CreateMockRead(*resp2, 7), 1166 CreateMockRead(*resp2, 8),
1165 CreateMockRead(*body2), 1167 CreateMockRead(*body2),
1166 CreateMockRead(*fbody2), 1168 CreateMockRead(*fbody2),
1167 CreateMockRead(*resp3, 12), 1169 CreateMockRead(*resp3, 13),
1168 CreateMockRead(*body3), 1170 CreateMockRead(*body3),
1169 CreateMockRead(*fbody3), 1171 CreateMockRead(*fbody3),
1170 1172
1171 MockRead(ASYNC, 0, 0), // EOF 1173 MockRead(ASYNC, 0, 0), // EOF
1172 }; 1174 };
1173 1175
1174 OrderedSocketData data(reads, arraysize(reads), 1176 OrderedSocketData data(reads, arraysize(reads),
1175 writes, arraysize(writes)); 1177 writes, arraysize(writes));
1176 OrderedSocketData data_placeholder(NULL, 0, NULL, 0); 1178 OrderedSocketData data_placeholder(NULL, 0, NULL, 0);
1177 1179
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 7)); 1282 scoped_ptr<SpdyFrame> resp3(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 7));
1281 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(7, false)); 1283 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(7, false));
1282 scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(7, true)); 1284 scoped_ptr<SpdyFrame> fbody3(spdy_util_.ConstructSpdyBodyFrame(7, true));
1283 1285
1284 SettingsMap settings; 1286 SettingsMap settings;
1285 const uint32 max_concurrent_streams = 1; 1287 const uint32 max_concurrent_streams = 1;
1286 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1288 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1287 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1289 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1288 scoped_ptr<SpdyFrame> settings_frame( 1290 scoped_ptr<SpdyFrame> settings_frame(
1289 spdy_util_.ConstructSpdySettings(settings)); 1291 spdy_util_.ConstructSpdySettings(settings));
1292 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
1290 1293
1291 MockWrite writes[] = { CreateMockWrite(*req), 1294 MockWrite writes[] = { CreateMockWrite(*req),
1295 CreateMockWrite(*settings_ack, 2),
1292 CreateMockWrite(*req2), 1296 CreateMockWrite(*req2),
1293 CreateMockWrite(*req4), 1297 CreateMockWrite(*req4),
1294 CreateMockWrite(*req3), 1298 CreateMockWrite(*req3),
1295 }; 1299 };
1296 MockRead reads[] = { 1300 MockRead reads[] = {
1297 CreateMockRead(*settings_frame, 1), 1301 CreateMockRead(*settings_frame, 1),
1298 CreateMockRead(*resp), 1302 CreateMockRead(*resp),
1299 CreateMockRead(*body), 1303 CreateMockRead(*body),
1300 CreateMockRead(*fbody), 1304 CreateMockRead(*fbody),
1301 CreateMockRead(*resp2, 7), 1305 CreateMockRead(*resp2, 8),
1302 CreateMockRead(*body2), 1306 CreateMockRead(*body2),
1303 CreateMockRead(*fbody2), 1307 CreateMockRead(*fbody2),
1304 CreateMockRead(*resp4, 13), 1308 CreateMockRead(*resp4, 14),
1305 CreateMockRead(*fbody4), 1309 CreateMockRead(*fbody4),
1306 CreateMockRead(*resp3, 16), 1310 CreateMockRead(*resp3, 17),
1307 CreateMockRead(*body3), 1311 CreateMockRead(*body3),
1308 CreateMockRead(*fbody3), 1312 CreateMockRead(*fbody3),
1309 1313
1310 MockRead(ASYNC, 0, 0), // EOF 1314 MockRead(ASYNC, 0, 0), // EOF
1311 }; 1315 };
1312 1316
1313 OrderedSocketData data(reads, arraysize(reads), 1317 OrderedSocketData data(reads, arraysize(reads),
1314 writes, arraysize(writes)); 1318 writes, arraysize(writes));
1315 OrderedSocketData data_placeholder(NULL, 0, NULL, 0); 1319 OrderedSocketData data_placeholder(NULL, 0, NULL, 0);
1316 1320
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1422 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); 1426 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
1423 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false)); 1427 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, false));
1424 scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true)); 1428 scoped_ptr<SpdyFrame> fbody2(spdy_util_.ConstructSpdyBodyFrame(3, true));
1425 1429
1426 SettingsMap settings; 1430 SettingsMap settings;
1427 const uint32 max_concurrent_streams = 1; 1431 const uint32 max_concurrent_streams = 1;
1428 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1432 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1429 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1433 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1430 scoped_ptr<SpdyFrame> settings_frame( 1434 scoped_ptr<SpdyFrame> settings_frame(
1431 spdy_util_.ConstructSpdySettings(settings)); 1435 spdy_util_.ConstructSpdySettings(settings));
1436 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
1432 1437
1433 MockWrite writes[] = { CreateMockWrite(*req), 1438 MockWrite writes[] = {
1439 CreateMockWrite(*req),
1440 CreateMockWrite(*settings_ack, 2),
1434 CreateMockWrite(*req2), 1441 CreateMockWrite(*req2),
1435 }; 1442 };
1436 MockRead reads[] = { 1443 MockRead reads[] = {
1437 CreateMockRead(*settings_frame, 1), 1444 CreateMockRead(*settings_frame, 1),
1438 CreateMockRead(*resp), 1445 CreateMockRead(*resp),
1439 CreateMockRead(*body), 1446 CreateMockRead(*body),
1440 CreateMockRead(*fbody), 1447 CreateMockRead(*fbody),
1441 CreateMockRead(*resp2, 7), 1448 CreateMockRead(*resp2, 8),
1442 CreateMockRead(*body2), 1449 CreateMockRead(*body2),
1443 CreateMockRead(*fbody2), 1450 CreateMockRead(*fbody2),
1444 MockRead(ASYNC, 0, 0), // EOF 1451 MockRead(ASYNC, 0, 0), // EOF
1445 }; 1452 };
1446 1453
1447 OrderedSocketData data(reads, arraysize(reads), 1454 OrderedSocketData data(reads, arraysize(reads),
1448 writes, arraysize(writes)); 1455 writes, arraysize(writes));
1449 OrderedSocketData data_placeholder(NULL, 0, NULL, 0); 1456 OrderedSocketData data_placeholder(NULL, 0, NULL, 0);
1450 1457
1451 BoundNetLog log; 1458 BoundNetLog log;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 scoped_ptr<SpdyFrame> req2( 1563 scoped_ptr<SpdyFrame> req2(
1557 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); 1564 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true));
1558 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); 1565 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
1559 1566
1560 SettingsMap settings; 1567 SettingsMap settings;
1561 const uint32 max_concurrent_streams = 1; 1568 const uint32 max_concurrent_streams = 1;
1562 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1569 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1563 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1570 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1564 scoped_ptr<SpdyFrame> settings_frame( 1571 scoped_ptr<SpdyFrame> settings_frame(
1565 spdy_util_.ConstructSpdySettings(settings)); 1572 spdy_util_.ConstructSpdySettings(settings));
1573 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
1566 1574
1567 MockWrite writes[] = { CreateMockWrite(*req), 1575 MockWrite writes[] = {
1576 CreateMockWrite(*req),
1577 CreateMockWrite(*settings_ack, 2),
1568 CreateMockWrite(*req2), 1578 CreateMockWrite(*req2),
1569 }; 1579 };
1570 MockRead reads[] = { 1580 MockRead reads[] = {
1571 CreateMockRead(*settings_frame, 1), 1581 CreateMockRead(*settings_frame, 1),
1572 CreateMockRead(*resp), 1582 CreateMockRead(*resp),
1573 CreateMockRead(*body), 1583 CreateMockRead(*body),
1574 CreateMockRead(*fin_body), 1584 CreateMockRead(*fin_body),
1575 CreateMockRead(*resp2, 7), 1585 CreateMockRead(*resp2, 8),
1576 MockRead(ASYNC, ERR_CONNECTION_RESET, 0), // Abort! 1586 MockRead(ASYNC, ERR_CONNECTION_RESET, 0), // Abort!
1577 }; 1587 };
1578 1588
1579 OrderedSocketData data(reads, arraysize(reads), 1589 OrderedSocketData data(reads, arraysize(reads),
1580 writes, arraysize(writes)); 1590 writes, arraysize(writes));
1581 OrderedSocketData data_placeholder(NULL, 0, NULL, 0); 1591 OrderedSocketData data_placeholder(NULL, 0, NULL, 0);
1582 1592
1583 BoundNetLog log; 1593 BoundNetLog log;
1584 TransactionHelperResult out; 1594 TransactionHelperResult out;
1585 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, 1595 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
(...skipping 4789 matching lines...) Expand 10 before | Expand all | Expand 10 after
6375 scoped_ptr<SpdyFrame> settings_frame_large( 6385 scoped_ptr<SpdyFrame> settings_frame_large(
6376 spdy_util_.ConstructSpdySettings(settings)); 6386 spdy_util_.ConstructSpdySettings(settings));
6377 6387
6378 reads.push_back(CreateMockRead(*settings_frame_large, i++)); 6388 reads.push_back(CreateMockRead(*settings_frame_large, i++));
6379 6389
6380 scoped_ptr<SpdyFrame> session_window_update( 6390 scoped_ptr<SpdyFrame> session_window_update(
6381 spdy_util_.ConstructSpdyWindowUpdate(0, kUploadDataSize)); 6391 spdy_util_.ConstructSpdyWindowUpdate(0, kUploadDataSize));
6382 if (GetParam().protocol >= kProtoSPDY31) 6392 if (GetParam().protocol >= kProtoSPDY31)
6383 reads.push_back(CreateMockRead(*session_window_update, i++)); 6393 reads.push_back(CreateMockRead(*session_window_update, i++));
6384 6394
6395 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
6396 writes.push_back(CreateMockWrite(*settings_ack, i++));
6397
6385 writes.push_back(CreateMockWrite(*body3, i++)); 6398 writes.push_back(CreateMockWrite(*body3, i++));
6386 6399
6387 scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 6400 scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
6388 reads.push_back(CreateMockRead(*reply, i++)); 6401 reads.push_back(CreateMockRead(*reply, i++));
6389 reads.push_back(CreateMockRead(*body2, i++)); 6402 reads.push_back(CreateMockRead(*body2, i++));
6390 reads.push_back(CreateMockRead(*body3, i++)); 6403 reads.push_back(CreateMockRead(*body3, i++));
6391 reads.push_back(MockRead(ASYNC, 0, i++)); // EOF 6404 reads.push_back(MockRead(ASYNC, 0, i++)); // EOF
6392 6405
6393 // Force all writes to happen before any read, last write will not 6406 // Force all writes to happen before any read, last write will not
6394 // actually queue a frame, due to window size being 0. 6407 // actually queue a frame, due to window size being 0.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
6426 EXPECT_EQ(0, stream->stream()->send_window_size()); 6439 EXPECT_EQ(0, stream->stream()->send_window_size());
6427 6440
6428 // All the body data should have been read. 6441 // All the body data should have been read.
6429 // TODO(satorux): This is because of the weirdness in reading the request 6442 // TODO(satorux): This is because of the weirdness in reading the request
6430 // body in OnSendBodyComplete(). See crbug.com/113107. 6443 // body in OnSendBodyComplete(). See crbug.com/113107.
6431 EXPECT_TRUE(upload_data_stream.IsEOF()); 6444 EXPECT_TRUE(upload_data_stream.IsEOF());
6432 // But the body is not yet fully sent (kUploadData is not yet sent) 6445 // But the body is not yet fully sent (kUploadData is not yet sent)
6433 // since we're send-stalled. 6446 // since we're send-stalled.
6434 EXPECT_TRUE(stream->stream()->send_stalled_by_flow_control()); 6447 EXPECT_TRUE(stream->stream()->send_stalled_by_flow_control());
6435 6448
6436 data.RunFor(6); // Read in SETTINGS frame to unstall. 6449 data.RunFor(7); // Read in SETTINGS frame to unstall.
6437 rv = callback.WaitForResult(); 6450 rv = callback.WaitForResult();
6438 helper.VerifyDataConsumed(); 6451 helper.VerifyDataConsumed();
6439 // If stream is NULL, that means it was unstalled and closed. 6452 // If stream is NULL, that means it was unstalled and closed.
6440 EXPECT_TRUE(stream->stream() == NULL); 6453 EXPECT_TRUE(stream->stream() == NULL);
6441 } 6454 }
6442 6455
6443 // Test we correctly handle the case where the SETTINGS frame results in a 6456 // Test we correctly handle the case where the SETTINGS frame results in a
6444 // negative send window size. 6457 // negative send window size.
6445 TEST_P(SpdyNetworkTransactionTest, FlowControlNegativeSendWindowSize) { 6458 TEST_P(SpdyNetworkTransactionTest, FlowControlNegativeSendWindowSize) {
6446 if (GetParam().protocol < kProtoSPDY3) 6459 if (GetParam().protocol < kProtoSPDY3)
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
6499 scoped_ptr<SpdyFrame> window_update_init_size( 6512 scoped_ptr<SpdyFrame> window_update_init_size(
6500 spdy_util_.ConstructSpdyWindowUpdate(1, kSpdyStreamInitialWindowSize)); 6513 spdy_util_.ConstructSpdyWindowUpdate(1, kSpdyStreamInitialWindowSize));
6501 6514
6502 reads.push_back(CreateMockRead(*settings_frame_small, i++)); 6515 reads.push_back(CreateMockRead(*settings_frame_small, i++));
6503 6516
6504 if (GetParam().protocol >= kProtoSPDY3) 6517 if (GetParam().protocol >= kProtoSPDY3)
6505 reads.push_back(CreateMockRead(*session_window_update_init_size, i++)); 6518 reads.push_back(CreateMockRead(*session_window_update_init_size, i++));
6506 6519
6507 reads.push_back(CreateMockRead(*window_update_init_size, i++)); 6520 reads.push_back(CreateMockRead(*window_update_init_size, i++));
6508 6521
6522 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck());
6523 writes.push_back(CreateMockWrite(*settings_ack, i++));
6524
6509 writes.push_back(CreateMockWrite(*body3, i++)); 6525 writes.push_back(CreateMockWrite(*body3, i++));
6510 6526
6511 scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 6527 scoped_ptr<SpdyFrame> reply(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
6512 reads.push_back(CreateMockRead(*reply, i++)); 6528 reads.push_back(CreateMockRead(*reply, i++));
6513 reads.push_back(CreateMockRead(*body2, i++)); 6529 reads.push_back(CreateMockRead(*body2, i++));
6514 reads.push_back(CreateMockRead(*body3, i++)); 6530 reads.push_back(CreateMockRead(*body3, i++));
6515 reads.push_back(MockRead(ASYNC, 0, i++)); // EOF 6531 reads.push_back(MockRead(ASYNC, 0, i++)); // EOF
6516 6532
6517 // Force all writes to happen before any read, last write will not 6533 // Force all writes to happen before any read, last write will not
6518 // actually queue a frame, due to window size being 0. 6534 // actually queue a frame, due to window size being 0.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
6551 6567
6552 // All the body data should have been read. 6568 // All the body data should have been read.
6553 // TODO(satorux): This is because of the weirdness in reading the request 6569 // TODO(satorux): This is because of the weirdness in reading the request
6554 // body in OnSendBodyComplete(). See crbug.com/113107. 6570 // body in OnSendBodyComplete(). See crbug.com/113107.
6555 EXPECT_TRUE(upload_data_stream.IsEOF()); 6571 EXPECT_TRUE(upload_data_stream.IsEOF());
6556 // But the body is not yet fully sent (kUploadData is not yet sent) 6572 // But the body is not yet fully sent (kUploadData is not yet sent)
6557 // since we're send-stalled. 6573 // since we're send-stalled.
6558 EXPECT_TRUE(stream->stream()->send_stalled_by_flow_control()); 6574 EXPECT_TRUE(stream->stream()->send_stalled_by_flow_control());
6559 6575
6560 // Read in WINDOW_UPDATE or SETTINGS frame. 6576 // Read in WINDOW_UPDATE or SETTINGS frame.
6561 data.RunFor((GetParam().protocol >= kProtoSPDY31) ? 8 : 7); 6577 data.RunFor((GetParam().protocol >= kProtoSPDY31) ? 9 : 8);
6562 rv = callback.WaitForResult(); 6578 rv = callback.WaitForResult();
6563 helper.VerifyDataConsumed(); 6579 helper.VerifyDataConsumed();
6564 } 6580 }
6565 6581
6566 } // namespace net 6582 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/spdy/spdy_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698