OLD | NEW |
---|---|
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 Loading... | |
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 HttpRequestInfo request; | 1221 struct TestCase { |
1222 request.method = "POST"; | 1222 const char* response; |
1223 request.url = GURL("http://www.foo.com/"); | 1223 net::Error expected_error_code; |
1224 request.load_flags = 0; | 1224 }; |
1225 const TestCase kTestCases[] = { | |
1226 {"HTTP/1.0 100 Continue\r\n", net::ERR_RESPONSE_HEADERS_TRUNCATED}, | |
1227 {"HTTP/1.0 100 Continue\r\n\r\n", net::ERR_EMPTY_RESPONSE}, | |
1228 }; | |
1225 | 1229 |
1226 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1230 for (const TestCase& test_case : kTestCases) { |
davidben
2015/07/31 21:32:50
SCOPED_TRACE(test_case.response)?
mmenke
2015/07/31 21:45:36
Done.
| |
1227 scoped_ptr<HttpTransaction> trans( | 1231 HttpRequestInfo request; |
1228 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1232 request.method = "POST"; |
1233 request.url = GURL("http://www.foo.com/"); | |
1234 request.load_flags = 0; | |
1229 | 1235 |
1230 MockRead data_reads[] = { | 1236 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1231 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), | 1237 scoped_ptr<HttpTransaction> trans( |
1232 MockRead(ASYNC, 0), | 1238 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
1233 }; | |
1234 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | |
1235 session_deps_.socket_factory->AddSocketDataProvider(&data); | |
1236 | 1239 |
1237 TestCompletionCallback callback; | 1240 MockRead data_reads[] = { |
1241 MockRead(SYNCHRONOUS, test_case.response), MockRead(ASYNC, 0), | |
1242 }; | |
1243 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | |
1244 session_deps_.socket_factory->AddSocketDataProvider(&data); | |
1238 | 1245 |
1239 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1246 TestCompletionCallback callback; |
1240 EXPECT_EQ(ERR_IO_PENDING, rv); | |
1241 | 1247 |
1242 rv = callback.WaitForResult(); | 1248 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1243 EXPECT_EQ(OK, rv); | 1249 EXPECT_EQ(ERR_IO_PENDING, rv); |
1244 | 1250 |
1245 std::string response_data; | 1251 rv = callback.WaitForResult(); |
1246 rv = ReadTransaction(trans.get(), &response_data); | 1252 EXPECT_EQ(test_case.expected_error_code, rv); |
1247 EXPECT_EQ(OK, rv); | 1253 } |
1248 EXPECT_EQ("", response_data); | |
1249 } | 1254 } |
1250 | 1255 |
1251 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { | 1256 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { |
1252 HttpRequestInfo request; | 1257 HttpRequestInfo request; |
1253 request.method = "POST"; | 1258 request.method = "POST"; |
1254 request.url = GURL("http://www.foo.com/"); | 1259 request.url = GURL("http://www.foo.com/"); |
1255 request.load_flags = 0; | 1260 request.load_flags = 0; |
1256 | 1261 |
1257 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1262 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
1258 scoped_ptr<HttpTransaction> trans( | 1263 scoped_ptr<HttpTransaction> trans( |
(...skipping 4856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6115 "Host: www.example.org\r\n" | 6120 "Host: www.example.org\r\n" |
6116 "Connection: keep-alive\r\n" | 6121 "Connection: keep-alive\r\n" |
6117 "Authorization: Digest username=\"foo\", realm=\"digestive\", " | 6122 "Authorization: Digest username=\"foo\", realm=\"digestive\", " |
6118 "nonce=\"OU812\", uri=\"/x/y/z\", algorithm=MD5, " | 6123 "nonce=\"OU812\", uri=\"/x/y/z\", algorithm=MD5, " |
6119 "response=\"03ffbcd30add722589c1de345d7a927f\", qop=auth, " | 6124 "response=\"03ffbcd30add722589c1de345d7a927f\", qop=auth, " |
6120 "nc=00000001, cnonce=\"0123456789abcdef\"\r\n\r\n"), | 6125 "nc=00000001, cnonce=\"0123456789abcdef\"\r\n\r\n"), |
6121 }; | 6126 }; |
6122 | 6127 |
6123 // Sever accepts the authorization. | 6128 // Sever accepts the authorization. |
6124 MockRead data_reads2[] = { | 6129 MockRead data_reads2[] = { |
6125 MockRead("HTTP/1.0 200 OK\r\n"), | 6130 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
6126 MockRead(SYNCHRONOUS, OK), | |
6127 }; | 6131 }; |
6128 | 6132 |
6129 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6133 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
6130 data_writes1, arraysize(data_writes1)); | 6134 data_writes1, arraysize(data_writes1)); |
6131 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6135 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
6132 data_writes2, arraysize(data_writes2)); | 6136 data_writes2, arraysize(data_writes2)); |
6133 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 6137 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
6134 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 6138 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
6135 | 6139 |
6136 TestCompletionCallback callback1; | 6140 TestCompletionCallback callback1; |
(...skipping 2081 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8218 scoped_ptr<HttpTransaction> trans( | 8222 scoped_ptr<HttpTransaction> trans( |
8219 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8223 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8220 | 8224 |
8221 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8225 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8222 EXPECT_EQ(ERR_IO_PENDING, rv); | 8226 EXPECT_EQ(ERR_IO_PENDING, rv); |
8223 | 8227 |
8224 rv = callback.WaitForResult(); | 8228 rv = callback.WaitForResult(); |
8225 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 8229 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
8226 } | 8230 } |
8227 | 8231 |
8228 // Check that a connection closed after the start of the headers finishes ok. | 8232 // Integration test for when truncated headers are received. |
8229 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { | 8233 TEST_P(HttpNetworkTransactionTest, TruncatedHeaders) { |
8230 HttpRequestInfo request; | 8234 HttpRequestInfo request; |
8231 request.method = "GET"; | 8235 request.method = "GET"; |
8232 request.url = GURL("http://www.foo.com/"); | 8236 request.url = GURL("http://www.foo.com/"); |
8233 request.load_flags = 0; | 8237 request.load_flags = 0; |
8234 | 8238 |
8235 MockRead data_reads[] = { | 8239 MockRead data_reads[] = { |
8236 MockRead("HTTP/1."), | 8240 MockRead("HTTP/1."), |
8237 MockRead(SYNCHRONOUS, OK), | 8241 MockRead(SYNCHRONOUS, OK), |
8238 }; | 8242 }; |
8239 | 8243 |
8240 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 8244 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
8241 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8245 session_deps_.socket_factory->AddSocketDataProvider(&data); |
8242 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8246 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
8243 | 8247 |
8244 TestCompletionCallback callback; | 8248 TestCompletionCallback callback; |
8245 | 8249 |
8246 scoped_ptr<HttpTransaction> trans( | 8250 scoped_ptr<HttpTransaction> trans( |
8247 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8251 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8248 | 8252 |
8249 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8253 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8250 EXPECT_EQ(ERR_IO_PENDING, rv); | 8254 EXPECT_EQ(ERR_IO_PENDING, rv); |
8251 | 8255 |
8252 rv = callback.WaitForResult(); | 8256 rv = callback.WaitForResult(); |
8253 EXPECT_EQ(OK, rv); | 8257 EXPECT_EQ(ERR_RESPONSE_HEADERS_TRUNCATED, 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); | |
8265 } | 8258 } |
8266 | 8259 |
8267 // Make sure that a dropped connection while draining the body for auth | 8260 // Make sure that a dropped connection while draining the body for auth |
8268 // restart does the right thing. | 8261 // restart does the right thing. |
8269 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { | 8262 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { |
8270 HttpRequestInfo request; | 8263 HttpRequestInfo request; |
8271 request.method = "GET"; | 8264 request.method = "GET"; |
8272 request.url = GURL("http://www.example.org/"); | 8265 request.url = GURL("http://www.example.org/"); |
8273 request.load_flags = 0; | 8266 request.load_flags = 0; |
8274 | 8267 |
(...skipping 5922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
14197 ASSERT_TRUE(response); | 14190 ASSERT_TRUE(response); |
14198 ASSERT_TRUE(response->headers.get()); | 14191 ASSERT_TRUE(response->headers.get()); |
14199 | 14192 |
14200 EXPECT_EQ(101, response->headers->response_code()); | 14193 EXPECT_EQ(101, response->headers->response_code()); |
14201 | 14194 |
14202 trans.reset(); | 14195 trans.reset(); |
14203 session->CloseAllConnections(); | 14196 session->CloseAllConnections(); |
14204 } | 14197 } |
14205 | 14198 |
14206 } // namespace net | 14199 } // namespace net |
OLD | NEW |