@@ -44,10 +44,8 @@ class HTTPBinaryCodecForTest : public HTTPBinaryCodec {
44
44
return HTTPBinaryCodec::parseHeaders (cursor, remaining, decodeInfo);
45
45
}
46
46
47
- ParseResult parseContent (folly::io::Cursor& cursor,
48
- size_t remaining,
49
- HTTPMessage& msg) {
50
- return HTTPBinaryCodec::parseContent (cursor, remaining, msg);
47
+ ParseResult parseContent (folly::io::Cursor& cursor, size_t remaining) {
48
+ return HTTPBinaryCodec::parseContent (cursor, remaining);
51
49
}
52
50
53
51
folly::IOBuf& getMsgBody () {
@@ -360,9 +358,9 @@ TEST_F(HTTPBinaryCodecTest, testParseContentSuccess) {
360
358
folly::io::Cursor cursor (contentIOBuf.get ());
361
359
362
360
HTTPMessage msg;
363
- EXPECT_EQ (upstreamBinaryCodec_-> parseContent (cursor, content. size (), msg)
364
- .bytesParsed_ ,
365
- content.size ());
361
+ EXPECT_EQ (
362
+ upstreamBinaryCodec_-> parseContent (cursor, content. size ()) .bytesParsed_ ,
363
+ content.size ());
366
364
EXPECT_EQ (upstreamBinaryCodec_->getMsgBody ().to <std::string>(), " hello\r\n " );
367
365
}
368
366
@@ -376,8 +374,7 @@ TEST_F(HTTPBinaryCodecTest, testParseContentFailure) {
376
374
377
375
HTTPMessage msg;
378
376
EXPECT_EQ (
379
- upstreamBinaryCodec_->parseContent (cursor, contentInvalid.size (), msg)
380
- .error_ ,
377
+ upstreamBinaryCodec_->parseContent (cursor, contentInvalid.size ()).error_ ,
381
378
" Failure to parse content" );
382
379
}
383
380
@@ -449,6 +446,57 @@ TEST_F(HTTPBinaryCodecTest, testOnIngressSuccessForControlData) {
449
446
EXPECT_EQ (callback.msg ->getURL (), " /" );
450
447
}
451
448
449
+ TEST_F (HTTPBinaryCodecTest, testOnIngressSuccessChunkedOnBoundaryMessage) {
450
+ // Format is chunk1 = `..GET`, chunk2 =
451
+ // `.https.www.example.com./hello.txt..user-agent.curl/7.16.3 libcurl/7.16.3
452
+ // OpenSSL/0.9.7l zlib/1.2.3.host.www.example.com.accept-language.en, mi`
453
+ const std::vector<uint8_t > binaryHTTPMessageChunk1{
454
+ 0x00 , 0x03 , 0x47 , 0x45 , 0x54 , 0x05 , 0x68 , 0x74 , 0x74 , 0x70 ,
455
+ 0x73 , 0x0f , 0x77 , 0x77 , 0x77 , 0x2e , 0x65 , 0x78 , 0x61 , 0x6d ,
456
+ 0x70 , 0x6c , 0x65 , 0x2e , 0x63 , 0x6f , 0x6d , 0x0a , 0x2f , 0x68 ,
457
+ 0x65 , 0x6c , 0x6c , 0x6f , 0x2e , 0x74 , 0x78 , 0x74 };
458
+ const std::vector<uint8_t > binaryHTTPMessageChunk2{
459
+ 0x40 , 0x6c , 0x0a , 0x75 , 0x73 , 0x65 , 0x72 , 0x2d , 0x61 , 0x67 , 0x65 , 0x6e ,
460
+ 0x74 , 0x34 , 0x63 , 0x75 , 0x72 , 0x6c , 0x2f , 0x37 , 0x2e , 0x31 , 0x36 , 0x2e ,
461
+ 0x33 , 0x20 , 0x6c , 0x69 , 0x62 , 0x63 , 0x75 , 0x72 , 0x6c , 0x2f , 0x37 , 0x2e ,
462
+ 0x31 , 0x36 , 0x2e , 0x33 , 0x20 , 0x4f , 0x70 , 0x65 , 0x6e , 0x53 , 0x53 , 0x4c ,
463
+ 0x2f , 0x30 , 0x2e , 0x39 , 0x2e , 0x37 , 0x6c , 0x20 , 0x7a , 0x6c , 0x69 , 0x62 ,
464
+ 0x2f , 0x31 , 0x2e , 0x32 , 0x2e , 0x33 , 0x04 , 0x68 , 0x6f , 0x73 , 0x74 , 0x0f ,
465
+ 0x77 , 0x77 , 0x77 , 0x2e , 0x65 , 0x78 , 0x61 , 0x6d , 0x70 , 0x6c , 0x65 , 0x2e ,
466
+ 0x63 , 0x6f , 0x6d , 0x0f , 0x61 , 0x63 , 0x63 , 0x65 , 0x70 , 0x74 , 0x2d , 0x6c ,
467
+ 0x61 , 0x6e , 0x67 , 0x75 , 0x61 , 0x67 , 0x65 , 0x06 , 0x65 , 0x6e , 0x2c , 0x20 ,
468
+ 0x6d , 0x69 , 0x00 , 0x00 };
469
+
470
+ auto binaryHTTPMessageIOBufChunk1 = folly::IOBuf::wrapBuffer (folly::ByteRange (
471
+ binaryHTTPMessageChunk1.data (), binaryHTTPMessageChunk1.size ()));
472
+ folly::io::Cursor cursor1 (binaryHTTPMessageIOBufChunk1.get ());
473
+ auto binaryHTTPMessageIOBufChunk2 = folly::IOBuf::wrapBuffer (folly::ByteRange (
474
+ binaryHTTPMessageChunk2.data (), binaryHTTPMessageChunk2.size ()));
475
+ folly::io::Cursor cursor2 (binaryHTTPMessageIOBufChunk2.get ());
476
+
477
+ FakeHTTPCodecCallback callback;
478
+ upstreamBinaryCodec_->setCallback (&callback);
479
+ upstreamBinaryCodec_->onIngress (*binaryHTTPMessageIOBufChunk1);
480
+ upstreamBinaryCodec_->onIngress (*binaryHTTPMessageIOBufChunk2);
481
+ upstreamBinaryCodec_->onIngressEOF ();
482
+
483
+ // Check onError was not called for the callback
484
+ EXPECT_EQ (callback.lastParseError , nullptr );
485
+
486
+ // Check msg and header fields
487
+ EXPECT_EQ (callback.msg ->isSecure (), true );
488
+ EXPECT_EQ (callback.msg ->getMethod (), proxygen::HTTPMethod::GET);
489
+ EXPECT_EQ (callback.msg ->getURL (), " /hello.txt" );
490
+ HTTPHeaders httpHeaders = callback.msg ->getHeaders ();
491
+ EXPECT_EQ (httpHeaders.exists (" user-agent" ), true );
492
+ EXPECT_EQ (httpHeaders.exists (" host" ), true );
493
+ EXPECT_EQ (httpHeaders.exists (" accept-language" ), true );
494
+ EXPECT_EQ (httpHeaders.getSingleOrEmpty (" user-agent" ),
495
+ " curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3" );
496
+ EXPECT_EQ (httpHeaders.getSingleOrEmpty (" host" ), " www.example.com" );
497
+ EXPECT_EQ (httpHeaders.getSingleOrEmpty (" accept-language" ), " en, mi" );
498
+ }
499
+
452
500
TEST_F (HTTPBinaryCodecTest, testOnIngressFailureMalformedMessage) {
453
501
// Format is `..GET.https.www.example.com./hello.txt..user-agent.curl/7.16.3
454
502
// libcurl/7.16.3 OpenSSL/0.9.7l
@@ -482,24 +530,6 @@ TEST_F(HTTPBinaryCodecTest, testOnIngressFailureMalformedMessage) {
482
530
" Invalid Message: Failure to parse: headerValue" );
483
531
}
484
532
485
- TEST_F (HTTPBinaryCodecTest, testOnIngressFailureIncompleteMessage) {
486
- // Message is incomplete and has only 1 byte
487
- const std::vector<uint8_t > binaryInvalidHTTPMessage{0x00 };
488
- auto binaryInvalidHTTPMessageIOBuf =
489
- folly::IOBuf::wrapBuffer (folly::ByteRange (
490
- binaryInvalidHTTPMessage.data (), binaryInvalidHTTPMessage.size ()));
491
- folly::io::Cursor cursor (binaryInvalidHTTPMessageIOBuf.get ());
492
-
493
- FakeHTTPCodecCallback callback;
494
- upstreamBinaryCodec_->setCallback (&callback);
495
- upstreamBinaryCodec_->onIngress (*binaryInvalidHTTPMessageIOBuf);
496
- upstreamBinaryCodec_->onIngressEOF ();
497
-
498
- // Check onError was called with the correct error
499
- EXPECT_EQ (std::string (callback.lastParseError .get ()->what ()),
500
- " Message not formed (incomplete binary data)" );
501
- }
502
-
503
533
TEST_F (HTTPBinaryCodecTest, testGenerateHeaders) {
504
534
// Create HTTPMessage and encode it to a buffer
505
535
HTTPMessage msgEncoded;
@@ -545,8 +575,7 @@ TEST_F(HTTPBinaryCodecTest, testGenerateBody) {
545
575
// Decode Test Body and check
546
576
folly::io::Cursor cursor (writeBuffer.front ());
547
577
HTTPMessage msg;
548
- EXPECT_EQ (upstreamBinaryCodec_->parseContent (cursor, 18 , msg).bytesParsed_ ,
549
- 18 );
578
+ EXPECT_EQ (upstreamBinaryCodec_->parseContent (cursor, 18 ).bytesParsed_ , 18 );
550
579
EXPECT_EQ (upstreamBinaryCodec_->getMsgBody ().to <std::string>(),
551
580
" Sample Test Body!" );
552
581
}
0 commit comments