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 <string> | 10 #include <string> |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
119 ASSERT_EQ(ERR_INVALID_ARGUMENT, num_bytes_written); | 119 ASSERT_EQ(ERR_INVALID_ARGUMENT, num_bytes_written); |
120 } | 120 } |
121 | 121 |
122 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_NoBody) { | 122 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_NoBody) { |
123 // Shouldn't be merged if upload data is non-existent. | 123 // Shouldn't be merged if upload data is non-existent. |
124 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( | 124 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( |
125 "some header", NULL)); | 125 "some header", NULL)); |
126 } | 126 } |
127 | 127 |
128 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_EmptyBody) { | 128 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_EmptyBody) { |
129 ScopedVector<UploadElementReader> element_readers; | 129 std::vector<scoped_ptr<UploadElementReader>> element_readers; |
130 scoped_ptr<UploadDataStream> body( | 130 scoped_ptr<UploadDataStream> body(make_scoped_ptr( |
mmenke
2015/11/24 17:25:08
include scoped_ptr
| |
131 new ElementsUploadDataStream(element_readers.Pass(), 0)); | 131 new ElementsUploadDataStream(std::move(element_readers), 0))); |
132 ASSERT_EQ(OK, body->Init(CompletionCallback())); | 132 ASSERT_EQ(OK, body->Init(CompletionCallback())); |
133 // Shouldn't be merged if upload data is empty. | 133 // Shouldn't be merged if upload data is empty. |
134 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( | 134 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( |
135 "some header", body.get())); | 135 "some header", body.get())); |
136 } | 136 } |
137 | 137 |
138 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_ChunkedBody) { | 138 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_ChunkedBody) { |
139 const std::string payload = "123"; | 139 const std::string payload = "123"; |
140 scoped_ptr<ChunkedUploadDataStream> body(new ChunkedUploadDataStream(0)); | 140 scoped_ptr<ChunkedUploadDataStream> body(new ChunkedUploadDataStream(0)); |
141 body->AppendData(payload.data(), payload.size(), true); | 141 body->AppendData(payload.data(), payload.size(), true); |
142 ASSERT_EQ(OK, body->Init(TestCompletionCallback().callback())); | 142 ASSERT_EQ(OK, body->Init(TestCompletionCallback().callback())); |
143 // Shouldn't be merged if upload data carries chunked data. | 143 // Shouldn't be merged if upload data carries chunked data. |
144 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( | 144 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( |
145 "some header", body.get())); | 145 "some header", body.get())); |
146 } | 146 } |
147 | 147 |
148 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_FileBody) { | 148 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_FileBody) { |
149 // Create an empty temporary file. | 149 // Create an empty temporary file. |
150 base::ScopedTempDir temp_dir; | 150 base::ScopedTempDir temp_dir; |
151 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 151 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
152 base::FilePath temp_file_path; | 152 base::FilePath temp_file_path; |
153 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.path(), &temp_file_path)); | 153 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.path(), &temp_file_path)); |
154 | 154 |
155 { | 155 { |
156 ScopedVector<UploadElementReader> element_readers; | 156 std::vector<scoped_ptr<UploadElementReader>> element_readers; |
157 | 157 |
158 element_readers.push_back( | 158 element_readers.push_back(make_scoped_ptr( |
159 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), | 159 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(), |
160 temp_file_path, 0, 0, base::Time())); | 160 temp_file_path, 0, 0, base::Time()))); |
161 | 161 |
162 scoped_ptr<UploadDataStream> body( | 162 scoped_ptr<UploadDataStream> body( |
163 new ElementsUploadDataStream(element_readers.Pass(), 0)); | 163 new ElementsUploadDataStream(std::move(element_readers), 0)); |
164 TestCompletionCallback callback; | 164 TestCompletionCallback callback; |
165 ASSERT_EQ(ERR_IO_PENDING, body->Init(callback.callback())); | 165 ASSERT_EQ(ERR_IO_PENDING, body->Init(callback.callback())); |
166 ASSERT_EQ(OK, callback.WaitForResult()); | 166 ASSERT_EQ(OK, callback.WaitForResult()); |
167 // Shouldn't be merged if upload data carries a file, as it's not in-memory. | 167 // Shouldn't be merged if upload data carries a file, as it's not in-memory. |
168 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( | 168 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( |
169 "some header", body.get())); | 169 "some header", body.get())); |
170 } | 170 } |
171 | 171 |
172 // UploadFileElementReaders may post clean-up tasks on destruction. | 172 // UploadFileElementReaders may post clean-up tasks on destruction. |
173 base::RunLoop().RunUntilIdle(); | 173 base::RunLoop().RunUntilIdle(); |
174 } | 174 } |
175 | 175 |
176 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_SmallBodyInMemory) { | 176 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_SmallBodyInMemory) { |
177 ScopedVector<UploadElementReader> element_readers; | 177 std::vector<scoped_ptr<UploadElementReader>> element_readers; |
178 const std::string payload = "123"; | 178 const std::string payload = "123"; |
179 element_readers.push_back(new UploadBytesElementReader( | 179 element_readers.push_back(make_scoped_ptr( |
180 payload.data(), payload.size())); | 180 new UploadBytesElementReader(payload.data(), payload.size()))); |
181 | 181 |
182 scoped_ptr<UploadDataStream> body( | 182 scoped_ptr<UploadDataStream> body( |
183 new ElementsUploadDataStream(element_readers.Pass(), 0)); | 183 new ElementsUploadDataStream(std::move(element_readers), 0)); |
184 ASSERT_EQ(OK, body->Init(CompletionCallback())); | 184 ASSERT_EQ(OK, body->Init(CompletionCallback())); |
185 // Yes, should be merged if the in-memory body is small here. | 185 // Yes, should be merged if the in-memory body is small here. |
186 ASSERT_TRUE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( | 186 ASSERT_TRUE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( |
187 "some header", body.get())); | 187 "some header", body.get())); |
188 } | 188 } |
189 | 189 |
190 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_LargeBodyInMemory) { | 190 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_LargeBodyInMemory) { |
191 ScopedVector<UploadElementReader> element_readers; | 191 std::vector<scoped_ptr<UploadElementReader>> element_readers; |
192 const std::string payload(10000, 'a'); // 'a' x 10000. | 192 const std::string payload(10000, 'a'); // 'a' x 10000. |
193 element_readers.push_back(new UploadBytesElementReader( | 193 element_readers.push_back(make_scoped_ptr( |
194 payload.data(), payload.size())); | 194 new UploadBytesElementReader(payload.data(), payload.size()))); |
195 | 195 |
196 scoped_ptr<UploadDataStream> body( | 196 scoped_ptr<UploadDataStream> body( |
197 new ElementsUploadDataStream(element_readers.Pass(), 0)); | 197 new ElementsUploadDataStream(std::move(element_readers), 0)); |
198 ASSERT_EQ(OK, body->Init(CompletionCallback())); | 198 ASSERT_EQ(OK, body->Init(CompletionCallback())); |
199 // Shouldn't be merged if the in-memory body is large here. | 199 // Shouldn't be merged if the in-memory body is large here. |
200 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( | 200 ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody( |
201 "some header", body.get())); | 201 "some header", body.get())); |
202 } | 202 } |
203 | 203 |
204 TEST(HttpStreamParser, SentBytesNoHeaders) { | 204 TEST(HttpStreamParser, SentBytesNoHeaders) { |
205 MockWrite writes[] = { | 205 MockWrite writes[] = { |
206 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"), | 206 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n\r\n"), |
207 }; | 207 }; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
326 MockWrite writes[] = { | 326 MockWrite writes[] = { |
327 MockWrite(SYNCHRONOUS, 0, "POST / HTTP/1.1\r\n"), | 327 MockWrite(SYNCHRONOUS, 0, "POST / HTTP/1.1\r\n"), |
328 MockWrite(SYNCHRONOUS, 1, "Content-Length: 12\r\n\r\n"), | 328 MockWrite(SYNCHRONOUS, 1, "Content-Length: 12\r\n\r\n"), |
329 MockWrite(SYNCHRONOUS, 2, "hello world!"), | 329 MockWrite(SYNCHRONOUS, 2, "hello world!"), |
330 }; | 330 }; |
331 | 331 |
332 SequencedSocketData data(nullptr, 0, writes, arraysize(writes)); | 332 SequencedSocketData data(nullptr, 0, writes, arraysize(writes)); |
333 scoped_ptr<ClientSocketHandle> socket_handle = | 333 scoped_ptr<ClientSocketHandle> socket_handle = |
334 CreateConnectedSocketHandle(&data); | 334 CreateConnectedSocketHandle(&data); |
335 | 335 |
336 ScopedVector<UploadElementReader> element_readers; | 336 std::vector<scoped_ptr<UploadElementReader>> element_readers; |
337 element_readers.push_back(new UploadBytesElementReader("hello world!", 12)); | 337 element_readers.push_back( |
338 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); | 338 make_scoped_ptr(new UploadBytesElementReader("hello world!", 12))); |
339 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | |
339 ASSERT_EQ(OK, upload_data_stream.Init(TestCompletionCallback().callback())); | 340 ASSERT_EQ(OK, upload_data_stream.Init(TestCompletionCallback().callback())); |
340 | 341 |
341 HttpRequestInfo request; | 342 HttpRequestInfo request; |
342 request.method = "POST"; | 343 request.method = "POST"; |
343 request.url = GURL("http://localhost"); | 344 request.url = GURL("http://localhost"); |
344 request.upload_data_stream = &upload_data_stream; | 345 request.upload_data_stream = &upload_data_stream; |
345 | 346 |
346 scoped_refptr<GrowableIOBuffer> read_buffer(new GrowableIOBuffer); | 347 scoped_refptr<GrowableIOBuffer> read_buffer(new GrowableIOBuffer); |
347 HttpStreamParser parser(socket_handle.get(), &request, read_buffer.get(), | 348 HttpStreamParser parser(socket_handle.get(), &request, read_buffer.get(), |
348 BoundNetLog()); | 349 BoundNetLog()); |
(...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1281 ASSERT_EQ(kBodySize, parser.ReadResponseBody( | 1282 ASSERT_EQ(kBodySize, parser.ReadResponseBody( |
1282 body_buffer.get(), kBodySize, callback.callback())); | 1283 body_buffer.get(), kBodySize, callback.callback())); |
1283 | 1284 |
1284 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), parser.sent_bytes()); | 1285 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), parser.sent_bytes()); |
1285 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), parser.received_bytes()); | 1286 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), parser.received_bytes()); |
1286 } | 1287 } |
1287 | 1288 |
1288 } // namespace | 1289 } // namespace |
1289 | 1290 |
1290 } // namespace net | 1291 } // namespace net |
OLD | NEW |