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

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 1255123006: Revert of Net: Stop treating partial HTTP headers as a valid response. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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 | « chrome/browser/chrome_service_worker_browsertest.cc ('k') | net/http/http_stream_parser.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h> 8 #include <stdarg.h>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 EXPECT_TRUE(response->headers.get() != NULL); 1211 EXPECT_TRUE(response->headers.get() != NULL);
1212 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 1212 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
1213 1213
1214 std::string response_data; 1214 std::string response_data;
1215 rv = ReadTransaction(trans.get(), &response_data); 1215 rv = ReadTransaction(trans.get(), &response_data);
1216 EXPECT_EQ(OK, rv); 1216 EXPECT_EQ(OK, rv);
1217 EXPECT_EQ("hello world", response_data); 1217 EXPECT_EQ("hello world", response_data);
1218 } 1218 }
1219 1219
1220 TEST_P(HttpNetworkTransactionTest, Incomplete100ThenEOF) { 1220 TEST_P(HttpNetworkTransactionTest, Incomplete100ThenEOF) {
1221 struct TestCase { 1221 HttpRequestInfo request;
1222 const char* response; 1222 request.method = "POST";
1223 net::Error expected_error_code; 1223 request.url = GURL("http://www.foo.com/");
1224 request.load_flags = 0;
1225
1226 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
1227 scoped_ptr<HttpTransaction> trans(
1228 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
1229
1230 MockRead data_reads[] = {
1231 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"),
1232 MockRead(ASYNC, 0),
1224 }; 1233 };
1225 const TestCase kTestCases[] = { 1234 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0);
1226 {"HTTP/1.0 100 Continue\r\n", net::ERR_RESPONSE_HEADERS_TRUNCATED}, 1235 session_deps_.socket_factory->AddSocketDataProvider(&data);
1227 {"HTTP/1.0 100 Continue\r\n\r\n", net::ERR_EMPTY_RESPONSE},
1228 };
1229 1236
1230 for (const TestCase& test_case : kTestCases) { 1237 TestCompletionCallback callback;
1231 SCOPED_TRACE(test_case.response);
1232 1238
1233 HttpRequestInfo request; 1239 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
1234 request.method = "POST"; 1240 EXPECT_EQ(ERR_IO_PENDING, rv);
1235 request.url = GURL("http://www.foo.com/");
1236 request.load_flags = 0;
1237 1241
1238 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 1242 rv = callback.WaitForResult();
1239 scoped_ptr<HttpTransaction> trans( 1243 EXPECT_EQ(OK, rv);
1240 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
1241 1244
1242 MockRead data_reads[] = { 1245 std::string response_data;
1243 MockRead(SYNCHRONOUS, test_case.response), MockRead(ASYNC, 0), 1246 rv = ReadTransaction(trans.get(), &response_data);
1244 }; 1247 EXPECT_EQ(OK, rv);
1245 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); 1248 EXPECT_EQ("", response_data);
1246 session_deps_.socket_factory->AddSocketDataProvider(&data);
1247
1248 TestCompletionCallback callback;
1249
1250 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
1251 EXPECT_EQ(ERR_IO_PENDING, rv);
1252
1253 rv = callback.WaitForResult();
1254 EXPECT_EQ(test_case.expected_error_code, rv);
1255 }
1256 } 1249 }
1257 1250
1258 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { 1251 TEST_P(HttpNetworkTransactionTest, EmptyResponse) {
1259 HttpRequestInfo request; 1252 HttpRequestInfo request;
1260 request.method = "POST"; 1253 request.method = "POST";
1261 request.url = GURL("http://www.foo.com/"); 1254 request.url = GURL("http://www.foo.com/");
1262 request.load_flags = 0; 1255 request.load_flags = 0;
1263 1256
1264 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 1257 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
1265 scoped_ptr<HttpTransaction> trans( 1258 scoped_ptr<HttpTransaction> trans(
(...skipping 4856 matching lines...) Expand 10 before | Expand all | Expand 10 after
6122 "Host: www.example.org\r\n" 6115 "Host: www.example.org\r\n"
6123 "Connection: keep-alive\r\n" 6116 "Connection: keep-alive\r\n"
6124 "Authorization: Digest username=\"foo\", realm=\"digestive\", " 6117 "Authorization: Digest username=\"foo\", realm=\"digestive\", "
6125 "nonce=\"OU812\", uri=\"/x/y/z\", algorithm=MD5, " 6118 "nonce=\"OU812\", uri=\"/x/y/z\", algorithm=MD5, "
6126 "response=\"03ffbcd30add722589c1de345d7a927f\", qop=auth, " 6119 "response=\"03ffbcd30add722589c1de345d7a927f\", qop=auth, "
6127 "nc=00000001, cnonce=\"0123456789abcdef\"\r\n\r\n"), 6120 "nc=00000001, cnonce=\"0123456789abcdef\"\r\n\r\n"),
6128 }; 6121 };
6129 6122
6130 // Sever accepts the authorization. 6123 // Sever accepts the authorization.
6131 MockRead data_reads2[] = { 6124 MockRead data_reads2[] = {
6132 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead(SYNCHRONOUS, OK), 6125 MockRead("HTTP/1.0 200 OK\r\n"),
6126 MockRead(SYNCHRONOUS, OK),
6133 }; 6127 };
6134 6128
6135 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), 6129 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1),
6136 data_writes1, arraysize(data_writes1)); 6130 data_writes1, arraysize(data_writes1));
6137 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), 6131 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2),
6138 data_writes2, arraysize(data_writes2)); 6132 data_writes2, arraysize(data_writes2));
6139 session_deps_.socket_factory->AddSocketDataProvider(&data1); 6133 session_deps_.socket_factory->AddSocketDataProvider(&data1);
6140 session_deps_.socket_factory->AddSocketDataProvider(&data2); 6134 session_deps_.socket_factory->AddSocketDataProvider(&data2);
6141 6135
6142 TestCompletionCallback callback1; 6136 TestCompletionCallback callback1;
(...skipping 2081 matching lines...) Expand 10 before | Expand all | Expand 10 after
8224 scoped_ptr<HttpTransaction> trans( 8218 scoped_ptr<HttpTransaction> trans(
8225 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 8219 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
8226 8220
8227 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 8221 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
8228 EXPECT_EQ(ERR_IO_PENDING, rv); 8222 EXPECT_EQ(ERR_IO_PENDING, rv);
8229 8223
8230 rv = callback.WaitForResult(); 8224 rv = callback.WaitForResult();
8231 EXPECT_EQ(ERR_CONNECTION_RESET, rv); 8225 EXPECT_EQ(ERR_CONNECTION_RESET, rv);
8232 } 8226 }
8233 8227
8234 // Integration test for when truncated headers are received. 8228 // Check that a connection closed after the start of the headers finishes ok.
8235 TEST_P(HttpNetworkTransactionTest, TruncatedHeaders) { 8229 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) {
8236 HttpRequestInfo request; 8230 HttpRequestInfo request;
8237 request.method = "GET"; 8231 request.method = "GET";
8238 request.url = GURL("http://www.foo.com/"); 8232 request.url = GURL("http://www.foo.com/");
8239 request.load_flags = 0; 8233 request.load_flags = 0;
8240 8234
8241 MockRead data_reads[] = { 8235 MockRead data_reads[] = {
8242 MockRead("HTTP/1."), 8236 MockRead("HTTP/1."),
8243 MockRead(SYNCHRONOUS, OK), 8237 MockRead(SYNCHRONOUS, OK),
8244 }; 8238 };
8245 8239
8246 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); 8240 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0);
8247 session_deps_.socket_factory->AddSocketDataProvider(&data); 8241 session_deps_.socket_factory->AddSocketDataProvider(&data);
8248 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 8242 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
8249 8243
8250 TestCompletionCallback callback; 8244 TestCompletionCallback callback;
8251 8245
8252 scoped_ptr<HttpTransaction> trans( 8246 scoped_ptr<HttpTransaction> trans(
8253 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 8247 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
8254 8248
8255 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 8249 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
8256 EXPECT_EQ(ERR_IO_PENDING, rv); 8250 EXPECT_EQ(ERR_IO_PENDING, rv);
8257 8251
8258 rv = callback.WaitForResult(); 8252 rv = callback.WaitForResult();
8259 EXPECT_EQ(ERR_RESPONSE_HEADERS_TRUNCATED, rv); 8253 EXPECT_EQ(OK, rv);
8254
8255 const HttpResponseInfo* response = trans->GetResponseInfo();
8256 ASSERT_TRUE(response != NULL);
8257
8258 EXPECT_TRUE(response->headers.get() != NULL);
8259 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine());
8260
8261 std::string response_data;
8262 rv = ReadTransaction(trans.get(), &response_data);
8263 EXPECT_EQ(OK, rv);
8264 EXPECT_EQ("", response_data);
8260 } 8265 }
8261 8266
8262 // Make sure that a dropped connection while draining the body for auth 8267 // Make sure that a dropped connection while draining the body for auth
8263 // restart does the right thing. 8268 // restart does the right thing.
8264 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { 8269 TEST_P(HttpNetworkTransactionTest, DrainResetOK) {
8265 HttpRequestInfo request; 8270 HttpRequestInfo request;
8266 request.method = "GET"; 8271 request.method = "GET";
8267 request.url = GURL("http://www.example.org/"); 8272 request.url = GURL("http://www.example.org/");
8268 request.load_flags = 0; 8273 request.load_flags = 0;
8269 8274
(...skipping 5922 matching lines...) Expand 10 before | Expand all | Expand 10 after
14192 ASSERT_TRUE(response); 14197 ASSERT_TRUE(response);
14193 ASSERT_TRUE(response->headers.get()); 14198 ASSERT_TRUE(response->headers.get());
14194 14199
14195 EXPECT_EQ(101, response->headers->response_code()); 14200 EXPECT_EQ(101, response->headers->response_code());
14196 14201
14197 trans.reset(); 14202 trans.reset();
14198 session->CloseAllConnections(); 14203 session->CloseAllConnections();
14199 } 14204 }
14200 14205
14201 } // namespace net 14206 } // namespace net
OLDNEW
« no previous file with comments | « chrome/browser/chrome_service_worker_browsertest.cc ('k') | net/http/http_stream_parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698