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/tools/balsa/balsa_frame.h" | 5 #include "net/tools/balsa/balsa_frame.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 | 8 |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/strings/string_piece.h" | 10 #include "base/strings/string_piece.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 using ::testing::SaveArg; | 23 using ::testing::SaveArg; |
24 | 24 |
25 class Visitor : public BalsaVisitorInterface { | 25 class Visitor : public BalsaVisitorInterface { |
26 public: | 26 public: |
27 virtual ~Visitor() {} | 27 virtual ~Visitor() {} |
28 MOCK_METHOD2(ProcessBodyInput, void(const char*, size_t)); | 28 MOCK_METHOD2(ProcessBodyInput, void(const char*, size_t)); |
29 MOCK_METHOD2(ProcessBodyData, void(const char*, size_t)); | 29 MOCK_METHOD2(ProcessBodyData, void(const char*, size_t)); |
30 MOCK_METHOD2(ProcessHeaderInput, void(const char*, size_t)); | 30 MOCK_METHOD2(ProcessHeaderInput, void(const char*, size_t)); |
31 MOCK_METHOD2(ProcessTrailerInput, void(const char*, size_t)); | 31 MOCK_METHOD2(ProcessTrailerInput, void(const char*, size_t)); |
32 MOCK_METHOD1(ProcessHeaders, void(const BalsaHeaders&)); | 32 MOCK_METHOD1(ProcessHeaders, void(const BalsaHeaders&)); |
33 MOCK_METHOD8(ProcessRequestFirstLine, void(const char*, | 33 MOCK_METHOD8(ProcessRequestFirstLine, |
34 size_t, | 34 void(const char*, |
35 const char*, | 35 size_t, |
36 size_t, | 36 const char*, |
37 const char*, | 37 size_t, |
38 size_t, | 38 const char*, |
39 const char*, | 39 size_t, |
40 size_t)); | 40 const char*, |
41 MOCK_METHOD8(ProcessResponseFirstLine, void(const char*, | 41 size_t)); |
42 size_t, | 42 MOCK_METHOD8(ProcessResponseFirstLine, |
43 const char*, | 43 void(const char*, |
44 size_t, | 44 size_t, |
45 const char*, | 45 const char*, |
46 size_t, | 46 size_t, |
47 const char*, | 47 const char*, |
48 size_t)); | 48 size_t, |
| 49 const char*, |
| 50 size_t)); |
49 MOCK_METHOD2(ProcessChunkExtensions, void(const char*, size_t)); | 51 MOCK_METHOD2(ProcessChunkExtensions, void(const char*, size_t)); |
50 MOCK_METHOD1(ProcessChunkLength, void(size_t)); | 52 MOCK_METHOD1(ProcessChunkLength, void(size_t)); |
51 MOCK_METHOD0(HeaderDone, void()); | 53 MOCK_METHOD0(HeaderDone, void()); |
52 MOCK_METHOD0(MessageDone, void()); | 54 MOCK_METHOD0(MessageDone, void()); |
53 MOCK_METHOD1(HandleHeaderError, void(BalsaFrame*)); | 55 MOCK_METHOD1(HandleHeaderError, void(BalsaFrame*)); |
54 MOCK_METHOD1(HandleHeaderWarning, void(BalsaFrame*)); | 56 MOCK_METHOD1(HandleHeaderWarning, void(BalsaFrame*)); |
55 MOCK_METHOD1(HandleChunkingError, void(BalsaFrame*)); | 57 MOCK_METHOD1(HandleChunkingError, void(BalsaFrame*)); |
56 MOCK_METHOD1(HandleBodyError, void(BalsaFrame*)); | 58 MOCK_METHOD1(HandleBodyError, void(BalsaFrame*)); |
57 }; | 59 }; |
58 | 60 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 ASSERT_FALSE(frame_->Error()); | 148 ASSERT_FALSE(frame_->Error()); |
147 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 149 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
148 ASSERT_EQ("GET / HTTP/1.0", StringPiece(line, line_length)); | 150 ASSERT_EQ("GET / HTTP/1.0", StringPiece(line, line_length)); |
149 ASSERT_EQ("GET", StringPiece(method, method_length)); | 151 ASSERT_EQ("GET", StringPiece(method, method_length)); |
150 ASSERT_EQ("/", StringPiece(request_uri, request_uri_length)); | 152 ASSERT_EQ("/", StringPiece(request_uri, request_uri_length)); |
151 ASSERT_EQ("HTTP/1.0", StringPiece(version, version_length)); | 153 ASSERT_EQ("HTTP/1.0", StringPiece(version, version_length)); |
152 ASSERT_EQ(input, StringPiece(header, header_length)); | 154 ASSERT_EQ(input, StringPiece(header, header_length)); |
153 } | 155 } |
154 | 156 |
155 TEST_F(BalsaFrameTest, HeadResponse) { | 157 TEST_F(BalsaFrameTest, HeadResponse) { |
156 const char input[] = "HTTP/1.1 200 OK\r\n" | 158 const char input[] = |
| 159 "HTTP/1.1 200 OK\r\n" |
157 "Content-type: text/plain\r\n" | 160 "Content-type: text/plain\r\n" |
158 "Content-Length: 14\r\n\r\n"; | 161 "Content-Length: 14\r\n\r\n"; |
159 const char* line = NULL; | 162 const char* line = NULL; |
160 size_t line_length = 0; | 163 size_t line_length = 0; |
161 const char* version = NULL; | 164 const char* version = NULL; |
162 size_t version_length = 0; | 165 size_t version_length = 0; |
163 const char* status = NULL; | 166 const char* status = NULL; |
164 size_t status_length = 0; | 167 size_t status_length = 0; |
165 const char* reason = NULL; | 168 const char* reason = NULL; |
166 size_t reason_length = 0; | 169 size_t reason_length = 0; |
(...skipping 26 matching lines...) Expand all Loading... |
193 ASSERT_EQ(strlen(input), read); | 196 ASSERT_EQ(strlen(input), read); |
194 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); | 197 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); |
195 ASSERT_TRUE(frame_->MessageFullyRead()); | 198 ASSERT_TRUE(frame_->MessageFullyRead()); |
196 ASSERT_FALSE(frame_->Error()); | 199 ASSERT_FALSE(frame_->Error()); |
197 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 200 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
198 | 201 |
199 ASSERT_EQ("HTTP/1.1 200 OK", StringPiece(line, line_length)); | 202 ASSERT_EQ("HTTP/1.1 200 OK", StringPiece(line, line_length)); |
200 ASSERT_EQ("HTTP/1.1", StringPiece(version, version_length)); | 203 ASSERT_EQ("HTTP/1.1", StringPiece(version, version_length)); |
201 ASSERT_EQ("200", StringPiece(status, status_length)); | 204 ASSERT_EQ("200", StringPiece(status, status_length)); |
202 ASSERT_EQ("OK", StringPiece(reason, reason_length)); | 205 ASSERT_EQ("OK", StringPiece(reason, reason_length)); |
203 ASSERT_EQ("HTTP/1.1 200 OK\r\n" | 206 ASSERT_EQ( |
204 "Content-type: text/plain\r\n" | 207 "HTTP/1.1 200 OK\r\n" |
205 "Content-Length: 14\r\n\r\n", | 208 "Content-type: text/plain\r\n" |
206 StringPiece(header, header_length)); | 209 "Content-Length: 14\r\n\r\n", |
| 210 StringPiece(header, header_length)); |
207 } | 211 } |
208 | 212 |
209 TEST_F(BalsaFrameTest, GetResponse) { | 213 TEST_F(BalsaFrameTest, GetResponse) { |
210 const char input[] = "HTTP/1.1 200 OK\r\n" | 214 const char input[] = |
| 215 "HTTP/1.1 200 OK\r\n" |
211 "Content-type: text/plain\r\n" | 216 "Content-type: text/plain\r\n" |
212 "Content-Length: 14\r\n\r\n" | 217 "Content-Length: 14\r\n\r\n" |
213 "hello, world\r\n"; | 218 "hello, world\r\n"; |
214 const char* line = NULL; | 219 const char* line = NULL; |
215 size_t line_length = 0; | 220 size_t line_length = 0; |
216 const char* version = NULL; | 221 const char* version = NULL; |
217 size_t version_length = 0; | 222 size_t version_length = 0; |
218 const char* status = NULL; | 223 const char* status = NULL; |
219 size_t status_length = 0; | 224 size_t status_length = 0; |
220 const char* reason = NULL; | 225 const char* reason = NULL; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 ASSERT_EQ(strlen(input), read); | 266 ASSERT_EQ(strlen(input), read); |
262 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); | 267 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); |
263 ASSERT_TRUE(frame_->MessageFullyRead()); | 268 ASSERT_TRUE(frame_->MessageFullyRead()); |
264 ASSERT_FALSE(frame_->Error()); | 269 ASSERT_FALSE(frame_->Error()); |
265 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 270 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
266 | 271 |
267 ASSERT_EQ("HTTP/1.1 200 OK", StringPiece(line, line_length)); | 272 ASSERT_EQ("HTTP/1.1 200 OK", StringPiece(line, line_length)); |
268 ASSERT_EQ("HTTP/1.1", StringPiece(version, version_length)); | 273 ASSERT_EQ("HTTP/1.1", StringPiece(version, version_length)); |
269 ASSERT_EQ("200", StringPiece(status, status_length)); | 274 ASSERT_EQ("200", StringPiece(status, status_length)); |
270 ASSERT_EQ("OK", StringPiece(reason, reason_length)); | 275 ASSERT_EQ("OK", StringPiece(reason, reason_length)); |
271 ASSERT_EQ("HTTP/1.1 200 OK\r\n" | 276 ASSERT_EQ( |
272 "Content-type: text/plain\r\n" | 277 "HTTP/1.1 200 OK\r\n" |
273 "Content-Length: 14\r\n\r\n", | 278 "Content-type: text/plain\r\n" |
274 StringPiece(header, header_length)); | 279 "Content-Length: 14\r\n\r\n", |
| 280 StringPiece(header, header_length)); |
275 ASSERT_EQ("hello, world\r\n", StringPiece(body, body_length)); | 281 ASSERT_EQ("hello, world\r\n", StringPiece(body, body_length)); |
276 ASSERT_EQ("hello, world\r\n", StringPiece(body_data, body_data_length)); | 282 ASSERT_EQ("hello, world\r\n", StringPiece(body_data, body_data_length)); |
277 } | 283 } |
278 | 284 |
279 TEST_F(BalsaFrameTest, Reset) { | 285 TEST_F(BalsaFrameTest, Reset) { |
280 const char input[] = "GET / HTTP/1.0\r\nkey1: value1\r\n\r\n"; | 286 const char input[] = "GET / HTTP/1.0\r\nkey1: value1\r\n\r\n"; |
281 | 287 |
282 { | 288 { |
283 InSequence s; | 289 InSequence s; |
284 EXPECT_CALL(*visitor_, ProcessRequestFirstLine(_, _, _, _, _, _, _, _)); | 290 EXPECT_CALL(*visitor_, ProcessRequestFirstLine(_, _, _, _, _, _, _, _)); |
(...skipping 12 matching lines...) Expand all Loading... |
297 ASSERT_FALSE(frame_->Error()); | 303 ASSERT_FALSE(frame_->Error()); |
298 | 304 |
299 frame_->Reset(); | 305 frame_->Reset(); |
300 ASSERT_EQ(BalsaFrameEnums::READING_HEADER_AND_FIRSTLINE, | 306 ASSERT_EQ(BalsaFrameEnums::READING_HEADER_AND_FIRSTLINE, |
301 frame_->ParseState()); | 307 frame_->ParseState()); |
302 ASSERT_FALSE(frame_->MessageFullyRead()); | 308 ASSERT_FALSE(frame_->MessageFullyRead()); |
303 ASSERT_FALSE(frame_->Error()); | 309 ASSERT_FALSE(frame_->Error()); |
304 } | 310 } |
305 | 311 |
306 TEST_F(BalsaFrameTest, InvalidStatusCode) { | 312 TEST_F(BalsaFrameTest, InvalidStatusCode) { |
307 const char input[] = "HTTP/1.1 InvalidStatusCode OK\r\n" | 313 const char input[] = |
| 314 "HTTP/1.1 InvalidStatusCode OK\r\n" |
308 "Content-type: text/plain\r\n" | 315 "Content-type: text/plain\r\n" |
309 "Content-Length: 14\r\n\r\n" | 316 "Content-Length: 14\r\n\r\n" |
310 "hello, world\r\n"; | 317 "hello, world\r\n"; |
311 | 318 |
312 frame_->set_balsa_headers(frame_headers_.get()); | 319 frame_->set_balsa_headers(frame_headers_.get()); |
313 frame_->set_is_request(false); | 320 frame_->set_is_request(false); |
314 | 321 |
315 { | 322 { |
316 InSequence s; | 323 InSequence s; |
317 EXPECT_CALL(*visitor_, HandleHeaderError(frame_.get())); | 324 EXPECT_CALL(*visitor_, HandleHeaderError(frame_.get())); |
318 } | 325 } |
319 | 326 |
320 size_t read = frame_->ProcessInput(input, strlen(input)); | 327 size_t read = frame_->ProcessInput(input, strlen(input)); |
321 ASSERT_EQ(30u, read); | 328 ASSERT_EQ(30u, read); |
322 ASSERT_EQ(BalsaFrameEnums::PARSE_ERROR, frame_->ParseState()); | 329 ASSERT_EQ(BalsaFrameEnums::PARSE_ERROR, frame_->ParseState()); |
323 ASSERT_EQ(BalsaFrameEnums::FAILED_CONVERTING_STATUS_CODE_TO_INT, | 330 ASSERT_EQ(BalsaFrameEnums::FAILED_CONVERTING_STATUS_CODE_TO_INT, |
324 frame_->ErrorCode()); | 331 frame_->ErrorCode()); |
325 ASSERT_FALSE(frame_->MessageFullyRead()); | 332 ASSERT_FALSE(frame_->MessageFullyRead()); |
326 ASSERT_TRUE(frame_->Error()); | 333 ASSERT_TRUE(frame_->Error()); |
327 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 334 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
328 } | 335 } |
329 | 336 |
330 TEST_F(BalsaFrameTest, ResetError) { | 337 TEST_F(BalsaFrameTest, ResetError) { |
331 const char input[] = "HTTP/1.1 InvalidStatusCode OK\r\n" | 338 const char input[] = |
| 339 "HTTP/1.1 InvalidStatusCode OK\r\n" |
332 "Content-type: text/plain\r\n" | 340 "Content-type: text/plain\r\n" |
333 "Content-Length: 14\r\n\r\n" | 341 "Content-Length: 14\r\n\r\n" |
334 "hello, world\r\n"; | 342 "hello, world\r\n"; |
335 | 343 |
336 frame_->set_balsa_headers(frame_headers_.get()); | 344 frame_->set_balsa_headers(frame_headers_.get()); |
337 frame_->set_is_request(false); | 345 frame_->set_is_request(false); |
338 | 346 |
339 { | 347 { |
340 InSequence s; | 348 InSequence s; |
341 EXPECT_CALL(*visitor_, HandleHeaderError(frame_.get())); | 349 EXPECT_CALL(*visitor_, HandleHeaderError(frame_.get())); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 size_t read = frame_->ProcessInput(input, strlen(input)); | 399 size_t read = frame_->ProcessInput(input, strlen(input)); |
392 ASSERT_EQ(0u, read); | 400 ASSERT_EQ(0u, read); |
393 ASSERT_EQ(BalsaFrameEnums::PARSE_ERROR, frame_->ParseState()); | 401 ASSERT_EQ(BalsaFrameEnums::PARSE_ERROR, frame_->ParseState()); |
394 ASSERT_EQ(BalsaFrameEnums::HEADERS_TOO_LONG, frame_->ErrorCode()); | 402 ASSERT_EQ(BalsaFrameEnums::HEADERS_TOO_LONG, frame_->ErrorCode()); |
395 ASSERT_FALSE(frame_->MessageFullyRead()); | 403 ASSERT_FALSE(frame_->MessageFullyRead()); |
396 ASSERT_TRUE(frame_->Error()); | 404 ASSERT_TRUE(frame_->Error()); |
397 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 405 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
398 } | 406 } |
399 | 407 |
400 TEST_F(BalsaFrameTest, InvalidHeader) { | 408 TEST_F(BalsaFrameTest, InvalidHeader) { |
401 const char input[] = "GET / HTTP/1.0\r\n" | 409 const char input[] = |
| 410 "GET / HTTP/1.0\r\n" |
402 "foo bar baz\r\n" | 411 "foo bar baz\r\n" |
403 "Content-Type: text/plain\r\n\r\n"; | 412 "Content-Type: text/plain\r\n\r\n"; |
404 const char* line = NULL; | 413 const char* line = NULL; |
405 size_t line_length = 0; | 414 size_t line_length = 0; |
406 const char* method = NULL; | 415 const char* method = NULL; |
407 size_t method_length = 0; | 416 size_t method_length = 0; |
408 const char* request_uri = NULL; | 417 const char* request_uri = NULL; |
409 size_t request_uri_length = 0; | 418 size_t request_uri_length = 0; |
410 const char* version = NULL; | 419 const char* version = NULL; |
411 size_t version_length = 0; | 420 size_t version_length = 0; |
(...skipping 22 matching lines...) Expand all Loading... |
434 ASSERT_EQ(strlen(input), read); | 443 ASSERT_EQ(strlen(input), read); |
435 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); | 444 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); |
436 ASSERT_EQ(BalsaFrameEnums::HEADER_MISSING_COLON, frame_->ErrorCode()); | 445 ASSERT_EQ(BalsaFrameEnums::HEADER_MISSING_COLON, frame_->ErrorCode()); |
437 ASSERT_TRUE(frame_->MessageFullyRead()); | 446 ASSERT_TRUE(frame_->MessageFullyRead()); |
438 ASSERT_FALSE(frame_->Error()); | 447 ASSERT_FALSE(frame_->Error()); |
439 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 448 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
440 ASSERT_EQ("GET / HTTP/1.0", StringPiece(line, line_length)); | 449 ASSERT_EQ("GET / HTTP/1.0", StringPiece(line, line_length)); |
441 ASSERT_EQ("GET", StringPiece(method, method_length)); | 450 ASSERT_EQ("GET", StringPiece(method, method_length)); |
442 ASSERT_EQ("/", StringPiece(request_uri, request_uri_length)); | 451 ASSERT_EQ("/", StringPiece(request_uri, request_uri_length)); |
443 ASSERT_EQ("HTTP/1.0", StringPiece(version, version_length)); | 452 ASSERT_EQ("HTTP/1.0", StringPiece(version, version_length)); |
444 ASSERT_EQ(2, std::distance(frame_headers_->header_lines_begin(), | 453 ASSERT_EQ(2, |
445 frame_headers_->header_lines_end())); | 454 std::distance(frame_headers_->header_lines_begin(), |
| 455 frame_headers_->header_lines_end())); |
446 } | 456 } |
447 | 457 |
448 TEST_F(BalsaFrameTest, GetResponseSplit) { | 458 TEST_F(BalsaFrameTest, GetResponseSplit) { |
449 const char input[] = "HTTP/1.1 200 OK\r\n" | 459 const char input[] = |
| 460 "HTTP/1.1 200 OK\r\n" |
450 "Content-type: text/plain\r\n" | 461 "Content-type: text/plain\r\n" |
451 "Content-Length: 14\r\n\r\n" | 462 "Content-Length: 14\r\n\r\n" |
452 "hello"; | 463 "hello"; |
453 const char input2[] = ", world\r\n"; | 464 const char input2[] = ", world\r\n"; |
454 const char* body1 = NULL; | 465 const char* body1 = NULL; |
455 size_t body1_length = 0; | 466 size_t body1_length = 0; |
456 const char* body1_data = NULL; | 467 const char* body1_data = NULL; |
457 size_t body1_data_length = 0; | 468 size_t body1_data_length = 0; |
458 const char* body2 = NULL; | 469 const char* body2 = NULL; |
459 size_t body2_length = 0; | 470 size_t body2_length = 0; |
460 const char* body2_data = NULL; | 471 const char* body2_data = NULL; |
461 size_t body2_data_length = 0; | 472 size_t body2_data_length = 0; |
462 testing::MockFunction<void(int)> checkpoint; | 473 testing::MockFunction<void(int)> checkpoint; |
463 | 474 |
464 frame_->set_balsa_headers(frame_headers_.get()); | 475 frame_->set_balsa_headers(frame_headers_.get()); |
465 frame_->set_is_request(false); | 476 frame_->set_is_request(false); |
466 | 477 |
467 { | 478 { |
468 InSequence s; | 479 InSequence s; |
469 EXPECT_CALL(*visitor_, ProcessResponseFirstLine(_, _, _, _, _, _, _, _)); | 480 EXPECT_CALL(*visitor_, ProcessResponseFirstLine(_, _, _, _, _, _, _, _)); |
470 EXPECT_CALL(*visitor_, ProcessHeaderInput(_, _)); | 481 EXPECT_CALL(*visitor_, ProcessHeaderInput(_, _)); |
471 EXPECT_CALL(*visitor_, ProcessHeaders(_)); | 482 EXPECT_CALL(*visitor_, ProcessHeaders(_)); |
472 EXPECT_CALL(*visitor_, HeaderDone()); | 483 EXPECT_CALL(*visitor_, HeaderDone()); |
473 EXPECT_CALL(checkpoint, Call(0)); | 484 EXPECT_CALL(checkpoint, Call(0)); |
474 EXPECT_CALL(*visitor_, ProcessBodyInput(_, _)) | 485 EXPECT_CALL(*visitor_, ProcessBodyInput(_, _)) |
475 .WillOnce(DoAll(SaveArg<0>(&body1), SaveArg<1>(&body1_length))); | 486 .WillOnce(DoAll(SaveArg<0>(&body1), SaveArg<1>(&body1_length))); |
476 EXPECT_CALL(*visitor_, ProcessBodyData(_, _)) | 487 EXPECT_CALL(*visitor_, ProcessBodyData(_, _)).WillOnce( |
477 .WillOnce(DoAll(SaveArg<0>(&body1_data), | 488 DoAll(SaveArg<0>(&body1_data), SaveArg<1>(&body1_data_length))); |
478 SaveArg<1>(&body1_data_length))); | |
479 EXPECT_CALL(checkpoint, Call(1)); | 489 EXPECT_CALL(checkpoint, Call(1)); |
480 EXPECT_CALL(*visitor_, ProcessBodyInput(_, _)) | 490 EXPECT_CALL(*visitor_, ProcessBodyInput(_, _)) |
481 .WillOnce(DoAll(SaveArg<0>(&body2), SaveArg<1>(&body2_length))); | 491 .WillOnce(DoAll(SaveArg<0>(&body2), SaveArg<1>(&body2_length))); |
482 EXPECT_CALL(*visitor_, ProcessBodyData(_, _)) | 492 EXPECT_CALL(*visitor_, ProcessBodyData(_, _)).WillOnce( |
483 .WillOnce(DoAll(SaveArg<0>(&body2_data), | 493 DoAll(SaveArg<0>(&body2_data), SaveArg<1>(&body2_data_length))); |
484 SaveArg<1>(&body2_data_length))); | |
485 EXPECT_CALL(*visitor_, MessageDone()); | 494 EXPECT_CALL(*visitor_, MessageDone()); |
486 } | 495 } |
487 | 496 |
488 size_t read = frame_->ProcessInput(input, strlen(input)); | 497 size_t read = frame_->ProcessInput(input, strlen(input)); |
489 ASSERT_EQ(65u, read); | 498 ASSERT_EQ(65u, read); |
490 ASSERT_EQ(BalsaFrameEnums::READING_CONTENT, frame_->ParseState()); | 499 ASSERT_EQ(BalsaFrameEnums::READING_CONTENT, frame_->ParseState()); |
491 checkpoint.Call(0); | 500 checkpoint.Call(0); |
492 read += frame_->ProcessInput(&input[read], strlen(input) - read); | 501 read += frame_->ProcessInput(&input[read], strlen(input) - read); |
493 ASSERT_EQ(strlen(input), read); | 502 ASSERT_EQ(strlen(input), read); |
494 ASSERT_EQ(BalsaFrameEnums::READING_CONTENT, frame_->ParseState()); | 503 ASSERT_EQ(BalsaFrameEnums::READING_CONTENT, frame_->ParseState()); |
495 checkpoint.Call(1); | 504 checkpoint.Call(1); |
496 ASSERT_EQ(9u, frame_->BytesSafeToSplice()); | 505 ASSERT_EQ(9u, frame_->BytesSafeToSplice()); |
497 read = frame_->ProcessInput(input2, strlen(input2)); | 506 read = frame_->ProcessInput(input2, strlen(input2)); |
498 ASSERT_EQ(strlen(input2), read); | 507 ASSERT_EQ(strlen(input2), read); |
499 | 508 |
500 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); | 509 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); |
501 ASSERT_TRUE(frame_->MessageFullyRead()); | 510 ASSERT_TRUE(frame_->MessageFullyRead()); |
502 ASSERT_FALSE(frame_->Error()); | 511 ASSERT_FALSE(frame_->Error()); |
503 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 512 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
504 ASSERT_EQ("hello", StringPiece(body1, body1_length)); | 513 ASSERT_EQ("hello", StringPiece(body1, body1_length)); |
505 ASSERT_EQ("hello", StringPiece(body1_data, body1_data_length)); | 514 ASSERT_EQ("hello", StringPiece(body1_data, body1_data_length)); |
506 ASSERT_EQ(", world\r\n", StringPiece(body2, body2_length)); | 515 ASSERT_EQ(", world\r\n", StringPiece(body2, body2_length)); |
507 ASSERT_EQ(", world\r\n", StringPiece(body2_data, body2_data_length)); | 516 ASSERT_EQ(", world\r\n", StringPiece(body2_data, body2_data_length)); |
508 } | 517 } |
509 | 518 |
510 TEST_F(BalsaFrameTest, GetResponseBytesSpliced) { | 519 TEST_F(BalsaFrameTest, GetResponseBytesSpliced) { |
511 const char input[] = "HTTP/1.1 200 OK\r\n" | 520 const char input[] = |
| 521 "HTTP/1.1 200 OK\r\n" |
512 "Content-type: text/plain\r\n" | 522 "Content-type: text/plain\r\n" |
513 "Content-Length: 14\r\n\r\n" | 523 "Content-Length: 14\r\n\r\n" |
514 "hello"; | 524 "hello"; |
515 testing::MockFunction<void(int)> checkpoint; | 525 testing::MockFunction<void(int)> checkpoint; |
516 | 526 |
517 frame_->set_balsa_headers(frame_headers_.get()); | 527 frame_->set_balsa_headers(frame_headers_.get()); |
518 frame_->set_is_request(false); | 528 frame_->set_is_request(false); |
519 | 529 |
520 { | 530 { |
521 InSequence s; | 531 InSequence s; |
(...skipping 24 matching lines...) Expand all Loading... |
546 checkpoint.Call(2); | 556 checkpoint.Call(2); |
547 frame_->BytesSpliced(4); | 557 frame_->BytesSpliced(4); |
548 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); | 558 ASSERT_EQ(BalsaFrameEnums::MESSAGE_FULLY_READ, frame_->ParseState()); |
549 | 559 |
550 ASSERT_TRUE(frame_->MessageFullyRead()); | 560 ASSERT_TRUE(frame_->MessageFullyRead()); |
551 ASSERT_FALSE(frame_->Error()); | 561 ASSERT_FALSE(frame_->Error()); |
552 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 562 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
553 } | 563 } |
554 | 564 |
555 TEST_F(BalsaFrameTest, GetResponseBytesSplicedTooMany) { | 565 TEST_F(BalsaFrameTest, GetResponseBytesSplicedTooMany) { |
556 const char input[] = "HTTP/1.1 200 OK\r\n" | 566 const char input[] = |
| 567 "HTTP/1.1 200 OK\r\n" |
557 "Content-type: text/plain\r\n" | 568 "Content-type: text/plain\r\n" |
558 "Content-Length: 14\r\n\r\n" | 569 "Content-Length: 14\r\n\r\n" |
559 "hello"; | 570 "hello"; |
560 testing::MockFunction<void(int)> checkpoint; | 571 testing::MockFunction<void(int)> checkpoint; |
561 | 572 |
562 frame_->set_balsa_headers(frame_headers_.get()); | 573 frame_->set_balsa_headers(frame_headers_.get()); |
563 frame_->set_is_request(false); | 574 frame_->set_is_request(false); |
564 | 575 |
565 { | 576 { |
566 InSequence s; | 577 InSequence s; |
(...skipping 23 matching lines...) Expand all Loading... |
590 ASSERT_TRUE(frame_->Error()); | 601 ASSERT_TRUE(frame_->Error()); |
591 ASSERT_EQ( | 602 ASSERT_EQ( |
592 BalsaFrameEnums::CALLED_BYTES_SPLICED_AND_EXCEEDED_SAFE_SPLICE_AMOUNT, | 603 BalsaFrameEnums::CALLED_BYTES_SPLICED_AND_EXCEEDED_SAFE_SPLICE_AMOUNT, |
593 frame_->ErrorCode()); | 604 frame_->ErrorCode()); |
594 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); | 605 ASSERT_EQ(0u, frame_->BytesSafeToSplice()); |
595 } | 606 } |
596 | 607 |
597 } // namespace | 608 } // namespace |
598 | 609 |
599 } // namespace net | 610 } // namespace net |
OLD | NEW |