OLD | NEW |
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/http/http_stream_parser.h" | 5 #include "net/http/http_stream_parser.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1120 HttpRequestInfo request_info_; | 1120 HttpRequestInfo request_info_; |
1121 scoped_refptr<GrowableIOBuffer> read_buffer_; | 1121 scoped_refptr<GrowableIOBuffer> read_buffer_; |
1122 std::vector<MockRead> reads_; | 1122 std::vector<MockRead> reads_; |
1123 std::vector<MockWrite> writes_; | 1123 std::vector<MockWrite> writes_; |
1124 std::unique_ptr<ClientSocketHandle> socket_handle_; | 1124 std::unique_ptr<ClientSocketHandle> socket_handle_; |
1125 std::unique_ptr<SequencedSocketData> data_; | 1125 std::unique_ptr<SequencedSocketData> data_; |
1126 std::unique_ptr<HttpStreamParser> parser_; | 1126 std::unique_ptr<HttpStreamParser> parser_; |
1127 int sequence_number_; | 1127 int sequence_number_; |
1128 }; | 1128 }; |
1129 | 1129 |
1130 // Test that HTTP/0.9 response correctly results in an error. | 1130 // Test that HTTP/0.9 response size is correctly calculated. |
1131 TEST(HttpStreamParser, ReceivedBytesNoHeaders) { | 1131 TEST(HttpStreamParser, ReceivedBytesNoHeaders) { |
1132 MockWrite writes[] = { | 1132 std::string response = "hello\r\nworld\r\n"; |
1133 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"), | |
1134 }; | |
1135 | 1133 |
1136 MockRead reads[] = { | 1134 SimpleGetRunner get_runner; |
1137 MockRead(SYNCHRONOUS, 1, "hello\r\nworld\r\n"), | 1135 get_runner.AddRead(response); |
1138 MockRead(SYNCHRONOUS, OK, 2), | 1136 get_runner.SetupParserAndSendRequest(); |
1139 }; | 1137 get_runner.ReadHeaders(); |
1140 | 1138 EXPECT_EQ(0, get_runner.parser()->received_bytes()); |
1141 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1139 int response_size = response.size(); |
1142 std::unique_ptr<ClientSocketHandle> socket_handle = | 1140 int read_lengths[] = {response_size, 0}; |
1143 CreateConnectedSocketHandle(&data); | 1141 get_runner.ReadBody(response_size, read_lengths); |
1144 | 1142 EXPECT_EQ(response_size, get_runner.parser()->received_bytes()); |
1145 HttpRequestInfo request; | 1143 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP0_9, |
1146 request.method = "GET"; | 1144 get_runner.response_info()->connection_info); |
1147 request.url = GURL("http://localhost"); | |
1148 | |
1149 HttpStreamParser parser(socket_handle.get(), &request, new GrowableIOBuffer(), | |
1150 BoundNetLog()); | |
1151 | |
1152 HttpRequestHeaders headers; | |
1153 HttpResponseInfo response; | |
1154 TestCompletionCallback callback; | |
1155 int result = parser.SendRequest("GET / HTTP/1.1\r\n", headers, &response, | |
1156 callback.callback()); | |
1157 EXPECT_THAT(callback.GetResult(result), IsOk()); | |
1158 result = parser.ReadResponseHeaders(callback.callback()); | |
1159 EXPECT_THAT(callback.GetResult(result), IsError(ERR_INVALID_HTTP_RESPONSE)); | |
1160 } | 1145 } |
1161 | 1146 |
1162 // Test basic case where there is no keep-alive or extra data from the socket, | 1147 // Test basic case where there is no keep-alive or extra data from the socket, |
1163 // and the entire response is received in a single read. | 1148 // and the entire response is received in a single read. |
1164 TEST(HttpStreamParser, ReceivedBytesNormal) { | 1149 TEST(HttpStreamParser, ReceivedBytesNormal) { |
1165 std::string headers = | 1150 std::string headers = |
1166 "HTTP/1.0 200 OK\r\n" | 1151 "HTTP/1.0 200 OK\r\n" |
1167 "Content-Length: 7\r\n\r\n"; | 1152 "Content-Length: 7\r\n\r\n"; |
1168 std::string body = "content"; | 1153 std::string body = "content"; |
1169 std::string response = headers + body; | 1154 std::string response = headers + body; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1423 ASSERT_EQ(kBodySize, parser.ReadResponseBody( | 1408 ASSERT_EQ(kBodySize, parser.ReadResponseBody( |
1424 body_buffer.get(), kBodySize, callback.callback())); | 1409 body_buffer.get(), kBodySize, callback.callback())); |
1425 | 1410 |
1426 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), parser.sent_bytes()); | 1411 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), parser.sent_bytes()); |
1427 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), parser.received_bytes()); | 1412 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), parser.received_bytes()); |
1428 } | 1413 } |
1429 | 1414 |
1430 } // namespace | 1415 } // namespace |
1431 | 1416 |
1432 } // namespace net | 1417 } // namespace net |
OLD | NEW |