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

Side by Side Diff: net/quic/chromium/quic_http_stream_test.cc

Issue 2899403002: Change QuicHttpStream to Reset the upload data stream even if the (Closed)
Patch Set: cleanup Created 3 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
« no previous file with comments | « net/quic/chromium/quic_http_stream.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/quic/chromium/quic_http_stream.h" 5 #include "net/quic/chromium/quic_http_stream.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 BoundTestNetLog net_log_; 560 BoundTestNetLog net_log_;
561 bool use_closing_stream_; 561 bool use_closing_stream_;
562 MockSendAlgorithm* send_algorithm_; 562 MockSendAlgorithm* send_algorithm_;
563 scoped_refptr<TestTaskRunner> runner_; 563 scoped_refptr<TestTaskRunner> runner_;
564 std::unique_ptr<MockWrite[]> mock_writes_; 564 std::unique_ptr<MockWrite[]> mock_writes_;
565 MockClock clock_; 565 MockClock clock_;
566 TestQuicConnection* connection_; 566 TestQuicConnection* connection_;
567 std::unique_ptr<QuicChromiumConnectionHelper> helper_; 567 std::unique_ptr<QuicChromiumConnectionHelper> helper_;
568 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; 568 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_;
569 testing::StrictMock<MockQuicConnectionVisitor> visitor_; 569 testing::StrictMock<MockQuicConnectionVisitor> visitor_;
570 std::unique_ptr<UploadDataStream> upload_data_stream_;
570 std::unique_ptr<QuicHttpStream> stream_; 571 std::unique_ptr<QuicHttpStream> stream_;
571 TransportSecurityState transport_security_state_; 572 TransportSecurityState transport_security_state_;
572 std::unique_ptr<QuicChromiumClientSession> session_; 573 std::unique_ptr<QuicChromiumClientSession> session_;
573 QuicCryptoClientConfig crypto_config_; 574 QuicCryptoClientConfig crypto_config_;
574 TestCompletionCallback callback_; 575 TestCompletionCallback callback_;
575 HttpRequestInfo request_; 576 HttpRequestInfo request_;
576 HttpRequestHeaders headers_; 577 HttpRequestHeaders headers_;
577 HttpResponseInfo response_; 578 HttpResponseInfo response_;
578 scoped_refptr<IOBufferWithSize> read_buffer_; 579 scoped_refptr<IOBufferWithSize> read_buffer_;
579 SpdyHeaderBlock request_headers_; 580 SpdyHeaderBlock request_headers_;
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, 1123 DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
1123 &header_stream_offset)); 1124 &header_stream_offset));
1124 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, kUploadData)); 1125 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, kUploadData));
1125 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); 1126 AddWrite(ConstructClientAckPacket(4, 3, 1, 1));
1126 1127
1127 Initialize(); 1128 Initialize();
1128 1129
1129 std::vector<std::unique_ptr<UploadElementReader>> element_readers; 1130 std::vector<std::unique_ptr<UploadElementReader>> element_readers;
1130 element_readers.push_back(base::MakeUnique<UploadBytesElementReader>( 1131 element_readers.push_back(base::MakeUnique<UploadBytesElementReader>(
1131 kUploadData, strlen(kUploadData))); 1132 kUploadData, strlen(kUploadData)));
1132 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); 1133 upload_data_stream_ =
1134 base::MakeUnique<ElementsUploadDataStream>(std::move(element_readers), 0);
1133 request_.method = "POST"; 1135 request_.method = "POST";
1134 request_.url = GURL("https://www.example.org/"); 1136 request_.url = GURL("https://www.example.org/");
1135 request_.upload_data_stream = &upload_data_stream; 1137 request_.upload_data_stream = upload_data_stream_.get();
1136 ASSERT_THAT(request_.upload_data_stream->Init(CompletionCallback(), 1138 ASSERT_THAT(request_.upload_data_stream->Init(CompletionCallback(),
1137 NetLogWithSource()), 1139 NetLogWithSource()),
1138 IsOk()); 1140 IsOk());
1139 1141
1140 EXPECT_EQ(OK, 1142 EXPECT_EQ(OK,
1141 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 1143 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
1142 net_log_.bound(), callback_.callback())); 1144 net_log_.bound(), callback_.callback()));
1143 EXPECT_EQ(OK, 1145 EXPECT_EQ(OK,
1144 stream_->SendRequest(headers_, &response_, callback_.callback())); 1146 stream_->SendRequest(headers_, &response_, callback_.callback()));
1145 1147
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, 1193 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin,
1192 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, 1194 DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
1193 &header_stream_offset)); 1195 &header_stream_offset));
1194 AddWrite( 1196 AddWrite(
1195 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); 1197 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData));
1196 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, 1198 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size,
1197 kUploadData)); 1199 kUploadData));
1198 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); 1200 AddWrite(ConstructClientAckPacket(5, 3, 1, 1));
1199 Initialize(); 1201 Initialize();
1200 1202
1201 ChunkedUploadDataStream upload_data_stream(0); 1203 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0);
1202 upload_data_stream.AppendData(kUploadData, chunk_size, false); 1204 auto* chunked_upload_stream =
1205 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get());
1206 chunked_upload_stream->AppendData(kUploadData, chunk_size, false);
1203 1207
1204 request_.method = "POST"; 1208 request_.method = "POST";
1205 request_.url = GURL("https://www.example.org/"); 1209 request_.url = GURL("https://www.example.org/");
1206 request_.upload_data_stream = &upload_data_stream; 1210 request_.upload_data_stream = upload_data_stream_.get();
1207 ASSERT_EQ(OK, request_.upload_data_stream->Init( 1211 ASSERT_EQ(OK, request_.upload_data_stream->Init(
1208 TestCompletionCallback().callback(), NetLogWithSource())); 1212 TestCompletionCallback().callback(), NetLogWithSource()));
1209 1213
1210 ASSERT_EQ(OK, 1214 ASSERT_EQ(OK,
1211 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 1215 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
1212 net_log_.bound(), callback_.callback())); 1216 net_log_.bound(), callback_.callback()));
1213 ASSERT_EQ(ERR_IO_PENDING, 1217 ASSERT_EQ(ERR_IO_PENDING,
1214 stream_->SendRequest(headers_, &response_, callback_.callback())); 1218 stream_->SendRequest(headers_, &response_, callback_.callback()));
1215 1219
1216 upload_data_stream.AppendData(kUploadData, chunk_size, true); 1220 chunked_upload_stream->AppendData(kUploadData, chunk_size, true);
1217 EXPECT_THAT(callback_.WaitForResult(), IsOk()); 1221 EXPECT_THAT(callback_.WaitForResult(), IsOk());
1218 1222
1219 // Ack both packets in the request. 1223 // Ack both packets in the request.
1220 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); 1224 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0));
1221 1225
1222 // Send the response headers (but not the body). 1226 // Send the response headers (but not the body).
1223 SetResponse("200 OK", string()); 1227 SetResponse("200 OK", string());
1224 size_t spdy_response_headers_frame_length; 1228 size_t spdy_response_headers_frame_length;
1225 ProcessPacket(ConstructResponseHeadersPacket( 1229 ProcessPacket(ConstructResponseHeadersPacket(
1226 2, !kFin, &spdy_response_headers_frame_length)); 1230 2, !kFin, &spdy_response_headers_frame_length));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 AddWrite(InnerConstructRequestHeadersPacket( 1269 AddWrite(InnerConstructRequestHeadersPacket(
1266 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, 1270 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin,
1267 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, 1271 DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
1268 &header_stream_offset)); 1272 &header_stream_offset));
1269 AddWrite( 1273 AddWrite(
1270 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); 1274 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData));
1271 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, "")); 1275 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, ""));
1272 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); 1276 AddWrite(ConstructClientAckPacket(5, 3, 1, 1));
1273 Initialize(); 1277 Initialize();
1274 1278
1275 ChunkedUploadDataStream upload_data_stream(0); 1279 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0);
1276 upload_data_stream.AppendData(kUploadData, chunk_size, false); 1280 auto* chunked_upload_stream =
1281 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get());
1282 chunked_upload_stream->AppendData(kUploadData, chunk_size, false);
1277 1283
1278 request_.method = "POST"; 1284 request_.method = "POST";
1279 request_.url = GURL("https://www.example.org/"); 1285 request_.url = GURL("https://www.example.org/");
1280 request_.upload_data_stream = &upload_data_stream; 1286 request_.upload_data_stream = upload_data_stream_.get();
1281 ASSERT_EQ(OK, request_.upload_data_stream->Init( 1287 ASSERT_EQ(OK, request_.upload_data_stream->Init(
1282 TestCompletionCallback().callback(), NetLogWithSource())); 1288 TestCompletionCallback().callback(), NetLogWithSource()));
1283 1289
1284 ASSERT_EQ(OK, 1290 ASSERT_EQ(OK,
1285 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 1291 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
1286 net_log_.bound(), callback_.callback())); 1292 net_log_.bound(), callback_.callback()));
1287 ASSERT_EQ(ERR_IO_PENDING, 1293 ASSERT_EQ(ERR_IO_PENDING,
1288 stream_->SendRequest(headers_, &response_, callback_.callback())); 1294 stream_->SendRequest(headers_, &response_, callback_.callback()));
1289 1295
1290 upload_data_stream.AppendData(nullptr, 0, true); 1296 chunked_upload_stream->AppendData(nullptr, 0, true);
1291 EXPECT_THAT(callback_.WaitForResult(), IsOk()); 1297 EXPECT_THAT(callback_.WaitForResult(), IsOk());
1292 1298
1293 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); 1299 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0));
1294 1300
1295 // Send the response headers (but not the body). 1301 // Send the response headers (but not the body).
1296 SetResponse("200 OK", string()); 1302 SetResponse("200 OK", string());
1297 size_t spdy_response_headers_frame_length; 1303 size_t spdy_response_headers_frame_length;
1298 ProcessPacket(ConstructResponseHeadersPacket( 1304 ProcessPacket(ConstructResponseHeadersPacket(
1299 2, !kFin, &spdy_response_headers_frame_length)); 1305 2, !kFin, &spdy_response_headers_frame_length));
1300 1306
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1334 QuicStreamOffset header_stream_offset = 0; 1340 QuicStreamOffset header_stream_offset = 0;
1335 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); 1341 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset));
1336 AddWrite(InnerConstructRequestHeadersPacket( 1342 AddWrite(InnerConstructRequestHeadersPacket(
1337 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, 1343 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin,
1338 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, 1344 DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
1339 &header_stream_offset)); 1345 &header_stream_offset));
1340 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, "")); 1346 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, ""));
1341 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); 1347 AddWrite(ConstructClientAckPacket(4, 3, 1, 1));
1342 Initialize(); 1348 Initialize();
1343 1349
1344 ChunkedUploadDataStream upload_data_stream(0); 1350 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0);
1351 auto* chunked_upload_stream =
1352 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get());
1345 1353
1346 request_.method = "POST"; 1354 request_.method = "POST";
1347 request_.url = GURL("https://www.example.org/"); 1355 request_.url = GURL("https://www.example.org/");
1348 request_.upload_data_stream = &upload_data_stream; 1356 request_.upload_data_stream = upload_data_stream_.get();
1349 ASSERT_EQ(OK, request_.upload_data_stream->Init( 1357 ASSERT_EQ(OK, request_.upload_data_stream->Init(
1350 TestCompletionCallback().callback(), NetLogWithSource())); 1358 TestCompletionCallback().callback(), NetLogWithSource()));
1351 1359
1352 ASSERT_EQ(OK, 1360 ASSERT_EQ(OK,
1353 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 1361 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
1354 net_log_.bound(), callback_.callback())); 1362 net_log_.bound(), callback_.callback()));
1355 ASSERT_EQ(ERR_IO_PENDING, 1363 ASSERT_EQ(ERR_IO_PENDING,
1356 stream_->SendRequest(headers_, &response_, callback_.callback())); 1364 stream_->SendRequest(headers_, &response_, callback_.callback()));
1357 1365
1358 upload_data_stream.AppendData(nullptr, 0, true); 1366 chunked_upload_stream->AppendData(nullptr, 0, true);
1359 EXPECT_THAT(callback_.WaitForResult(), IsOk()); 1367 EXPECT_THAT(callback_.WaitForResult(), IsOk());
1360 1368
1361 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); 1369 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0));
1362 1370
1363 // Send the response headers (but not the body). 1371 // Send the response headers (but not the body).
1364 SetResponse("200 OK", string()); 1372 SetResponse("200 OK", string());
1365 size_t spdy_response_headers_frame_length; 1373 size_t spdy_response_headers_frame_length;
1366 ProcessPacket(ConstructResponseHeadersPacket( 1374 ProcessPacket(ConstructResponseHeadersPacket(
1367 2, !kFin, &spdy_response_headers_frame_length)); 1375 2, !kFin, &spdy_response_headers_frame_length));
1368 1376
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1535 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, 1543 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin,
1536 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, 1544 DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
1537 &header_stream_offset)); 1545 &header_stream_offset));
1538 AddWrite( 1546 AddWrite(
1539 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); 1547 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData));
1540 // Second data write will result in a synchronous failure which will close 1548 // Second data write will result in a synchronous failure which will close
1541 // the session. 1549 // the session.
1542 AddWrite(SYNCHRONOUS, ERR_FAILED); 1550 AddWrite(SYNCHRONOUS, ERR_FAILED);
1543 Initialize(); 1551 Initialize();
1544 1552
1545 ChunkedUploadDataStream upload_data_stream(0); 1553 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0);
1554 auto* chunked_upload_stream =
1555 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get());
1546 1556
1547 request_.method = "POST"; 1557 request_.method = "POST";
1548 request_.url = GURL("https://www.example.org/"); 1558 request_.url = GURL("https://www.example.org/");
1549 request_.upload_data_stream = &upload_data_stream; 1559 request_.upload_data_stream = upload_data_stream_.get();
1550 ASSERT_EQ(OK, request_.upload_data_stream->Init( 1560 ASSERT_EQ(OK, request_.upload_data_stream->Init(
1551 TestCompletionCallback().callback(), NetLogWithSource())); 1561 TestCompletionCallback().callback(), NetLogWithSource()));
1552 1562
1553 size_t chunk_size = strlen(kUploadData); 1563 size_t chunk_size = strlen(kUploadData);
1554 upload_data_stream.AppendData(kUploadData, chunk_size, false); 1564 chunked_upload_stream->AppendData(kUploadData, chunk_size, false);
1555 ASSERT_EQ(OK, 1565 ASSERT_EQ(OK,
1556 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 1566 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
1557 net_log_.bound(), callback_.callback())); 1567 net_log_.bound(), callback_.callback()));
1558 QuicHttpStream* stream = stream_.get(); 1568 QuicHttpStream* stream = stream_.get();
1559 DeleteStreamCallback delete_stream_callback(std::move(stream_)); 1569 DeleteStreamCallback delete_stream_callback(std::move(stream_));
1560 // SendRequest() completes asynchronously after the final chunk is added. 1570 // SendRequest() completes asynchronously after the final chunk is added.
1561 ASSERT_EQ(ERR_IO_PENDING, 1571 ASSERT_EQ(ERR_IO_PENDING,
1562 stream->SendRequest(headers_, &response_, callback_.callback())); 1572 stream->SendRequest(headers_, &response_, callback_.callback()));
1563 upload_data_stream.AppendData(kUploadData, chunk_size, true); 1573 chunked_upload_stream->AppendData(kUploadData, chunk_size, true);
1564 int rv = callback_.WaitForResult(); 1574 int rv = callback_.WaitForResult();
1565 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, rv); 1575 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, rv);
1566 } 1576 }
1567 1577
1568 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendHeadersComplete) { 1578 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendHeadersComplete) {
1569 SetRequest("POST", "/", DEFAULT_PRIORITY); 1579 SetRequest("POST", "/", DEFAULT_PRIORITY);
1570 QuicStreamOffset header_stream_offset = 0; 1580 QuicStreamOffset header_stream_offset = 0;
1571 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); 1581 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset));
1572 AddWrite(SYNCHRONOUS, ERR_FAILED); 1582 AddWrite(SYNCHRONOUS, ERR_FAILED);
1573 Initialize(); 1583 Initialize();
1574 1584
1575 ChunkedUploadDataStream upload_data_stream(0); 1585 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0);
1576 1586
1577 request_.method = "POST"; 1587 request_.method = "POST";
1578 request_.url = GURL("https://www.example.org/"); 1588 request_.url = GURL("https://www.example.org/");
1579 request_.upload_data_stream = &upload_data_stream; 1589 request_.upload_data_stream = upload_data_stream_.get();
1580 ASSERT_EQ(OK, request_.upload_data_stream->Init( 1590 ASSERT_EQ(OK, request_.upload_data_stream->Init(
1581 TestCompletionCallback().callback(), NetLogWithSource())); 1591 TestCompletionCallback().callback(), NetLogWithSource()));
1582 1592
1583 ASSERT_EQ(OK, 1593 ASSERT_EQ(OK,
1584 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 1594 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
1585 net_log_.bound(), callback_.callback())); 1595 net_log_.bound(), callback_.callback()));
1586 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, 1596 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR,
1587 stream_->SendRequest(headers_, &response_, callback_.callback())); 1597 stream_->SendRequest(headers_, &response_, callback_.callback()));
1588 } 1598 }
1589 1599
1590 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) { 1600 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) {
1591 SetRequest("POST", "/", DEFAULT_PRIORITY); 1601 SetRequest("POST", "/", DEFAULT_PRIORITY);
1592 size_t spdy_request_headers_frame_length; 1602 size_t spdy_request_headers_frame_length;
1593 QuicStreamOffset header_stream_offset = 0; 1603 QuicStreamOffset header_stream_offset = 0;
1594 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); 1604 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset));
1595 AddWrite(InnerConstructRequestHeadersPacket( 1605 AddWrite(InnerConstructRequestHeadersPacket(
1596 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, 1606 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin,
1597 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, 1607 DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
1598 &header_stream_offset)); 1608 &header_stream_offset));
1599 AddWrite(SYNCHRONOUS, ERR_FAILED); 1609 AddWrite(SYNCHRONOUS, ERR_FAILED);
1600 Initialize(); 1610 Initialize();
1601 1611
1602 ChunkedUploadDataStream upload_data_stream(0); 1612 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0);
1613 auto* chunked_upload_stream =
1614 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get());
1603 size_t chunk_size = strlen(kUploadData); 1615 size_t chunk_size = strlen(kUploadData);
1604 upload_data_stream.AppendData(kUploadData, chunk_size, false); 1616 chunked_upload_stream->AppendData(kUploadData, chunk_size, false);
1605 1617
1606 request_.method = "POST"; 1618 request_.method = "POST";
1607 request_.url = GURL("https://www.example.org/"); 1619 request_.url = GURL("https://www.example.org/");
1608 request_.upload_data_stream = &upload_data_stream; 1620 request_.upload_data_stream = upload_data_stream_.get();
1609 ASSERT_EQ(OK, request_.upload_data_stream->Init( 1621 ASSERT_EQ(OK, request_.upload_data_stream->Init(
1610 TestCompletionCallback().callback(), NetLogWithSource())); 1622 TestCompletionCallback().callback(), NetLogWithSource()));
1611 1623
1612 ASSERT_EQ(OK, 1624 ASSERT_EQ(OK,
1613 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 1625 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
1614 net_log_.bound(), callback_.callback())); 1626 net_log_.bound(), callback_.callback()));
1615 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, 1627 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR,
1616 stream_->SendRequest(headers_, &response_, callback_.callback())); 1628 stream_->SendRequest(headers_, &response_, callback_.callback()));
1617 } 1629 }
1618 1630
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
2098 QuicStreamOffset header_stream_offset = 0; 2110 QuicStreamOffset header_stream_offset = 0;
2099 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); 2111 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset));
2100 AddWrite(InnerConstructRequestHeadersPacket( 2112 AddWrite(InnerConstructRequestHeadersPacket(
2101 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, 2113 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin,
2102 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, 2114 DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
2103 &header_stream_offset)); 2115 &header_stream_offset));
2104 AddWrite(ConstructClientRstStreamErrorPacket(3, kIncludeVersion)); 2116 AddWrite(ConstructClientRstStreamErrorPacket(3, kIncludeVersion));
2105 2117
2106 Initialize(); 2118 Initialize();
2107 2119
2108 ReadErrorUploadDataStream upload_data_stream( 2120 upload_data_stream_ = base::MakeUnique<ReadErrorUploadDataStream>(
2109 ReadErrorUploadDataStream::FailureMode::SYNC); 2121 ReadErrorUploadDataStream::FailureMode::SYNC);
2110 request_.method = "POST"; 2122 request_.method = "POST";
2111 request_.url = GURL("https://www.example.org/"); 2123 request_.url = GURL("https://www.example.org/");
2112 request_.upload_data_stream = &upload_data_stream; 2124 request_.upload_data_stream = upload_data_stream_.get();
2113 ASSERT_EQ(OK, request_.upload_data_stream->Init( 2125 ASSERT_EQ(OK, request_.upload_data_stream->Init(
2114 TestCompletionCallback().callback(), NetLogWithSource())); 2126 TestCompletionCallback().callback(), NetLogWithSource()));
2115 2127
2116 EXPECT_EQ(OK, 2128 EXPECT_EQ(OK,
2117 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 2129 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
2118 net_log_.bound(), callback_.callback())); 2130 net_log_.bound(), callback_.callback()));
2119 2131
2120 int result = stream_->SendRequest(headers_, &response_, callback_.callback()); 2132 int result = stream_->SendRequest(headers_, &response_, callback_.callback());
2121 EXPECT_THAT(result, IsError(ERR_FAILED)); 2133 EXPECT_THAT(result, IsError(ERR_FAILED));
2122 2134
(...skipping 11 matching lines...) Expand all
2134 QuicStreamOffset header_stream_offset = 0; 2146 QuicStreamOffset header_stream_offset = 0;
2135 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); 2147 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset));
2136 AddWrite(InnerConstructRequestHeadersPacket( 2148 AddWrite(InnerConstructRequestHeadersPacket(
2137 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, 2149 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin,
2138 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, 2150 DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
2139 &header_stream_offset)); 2151 &header_stream_offset));
2140 AddWrite(ConstructClientRstStreamErrorPacket(3, !kIncludeVersion)); 2152 AddWrite(ConstructClientRstStreamErrorPacket(3, !kIncludeVersion));
2141 2153
2142 Initialize(); 2154 Initialize();
2143 2155
2144 ReadErrorUploadDataStream upload_data_stream( 2156 upload_data_stream_ = base::MakeUnique<ReadErrorUploadDataStream>(
2145 ReadErrorUploadDataStream::FailureMode::ASYNC); 2157 ReadErrorUploadDataStream::FailureMode::ASYNC);
2146 request_.method = "POST"; 2158 request_.method = "POST";
2147 request_.url = GURL("https://www.example.org/"); 2159 request_.url = GURL("https://www.example.org/");
2148 request_.upload_data_stream = &upload_data_stream; 2160 request_.upload_data_stream = upload_data_stream_.get();
2149 ASSERT_EQ(OK, request_.upload_data_stream->Init( 2161 ASSERT_EQ(OK, request_.upload_data_stream->Init(
2150 TestCompletionCallback().callback(), NetLogWithSource())); 2162 TestCompletionCallback().callback(), NetLogWithSource()));
2151 2163
2152 EXPECT_EQ(OK, 2164 EXPECT_EQ(OK,
2153 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, 2165 stream_->InitializeStream(&request_, DEFAULT_PRIORITY,
2154 net_log_.bound(), callback_.callback())); 2166 net_log_.bound(), callback_.callback()));
2155 2167
2156 int result = stream_->SendRequest(headers_, &response_, callback_.callback()); 2168 int result = stream_->SendRequest(headers_, &response_, callback_.callback());
2157 2169
2158 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); 2170 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0));
2159 SetResponse("200 OK", string()); 2171 SetResponse("200 OK", string());
2160 2172
2161 EXPECT_THAT(result, IsError(ERR_IO_PENDING)); 2173 EXPECT_THAT(result, IsError(ERR_IO_PENDING));
2162 EXPECT_THAT(callback_.GetResult(result), IsError(ERR_FAILED)); 2174 EXPECT_THAT(callback_.GetResult(result), IsError(ERR_FAILED));
2163 2175
2164 EXPECT_TRUE(AtEof()); 2176 EXPECT_TRUE(AtEof());
2165 2177
2166 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. 2178 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers.
2167 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), 2179 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length),
2168 stream_->GetTotalSentBytes()); 2180 stream_->GetTotalSentBytes());
2169 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); 2181 EXPECT_EQ(0, stream_->GetTotalReceivedBytes());
2170 } 2182 }
2171 2183
2172 } // namespace test 2184 } // namespace test
2173 } // namespace net 2185 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_http_stream.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698