forked from envoyproxy/envoy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor http parser implementation in http_inspector (envoyproxy#36430)
<!-- !!!ATTENTION!!! If you are fixing *any* crash or *any* potential security issue, *do not* open a pull request in this repo. Please report the issue via emailing envoy-security@googlegroups.com where the issue will be triaged appropriately. Thank you in advance for helping to keep Envoy secure. !!!ATTENTION!!! For an explanation of how to fill out the fields, please see the relevant section in [PULL_REQUESTS.md](https://github.com/envoyproxy/envoy/blob/main/PULL_REQUESTS.md) --> Commit Message: refactor http parser implementation in http_inspector Additional Description: This update replaces the usage of the legacy http_parser in http_inspector with the `LegacyHttpParserImpl` as the first step in transitioning to the Balsa parser (part of envoyproxy#36433). The Parser interface is used with LegacyHttpParserImpl to preserve the current behaviour of http_parser. Risk Level: Low (no behavioural change) Testing: All the http_inspector tests have passed (`bazel test //test/extensions/filters/listener/http_inspector/...`) Docs Changes: Release Notes: Platform Specific Features: [Optional Runtime guard:] [Optional Fixes #Issue] [Optional Fixes commit #PR or SHA] [Optional Deprecated:] [Optional [API Considerations](https://github.com/envoyproxy/envoy/blob/main/api/review_checklist.md):] --------- Signed-off-by: G Vamshi Krishna Reddy <vamshikrishna.gunreddy@gmail.com> Signed-off-by: Gustavo <grnmeira@gmail.com>
- Loading branch information
Showing
5 changed files
with
145 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72 changes: 72 additions & 0 deletions
72
test/extensions/filters/listener/http_inspector/http_inspector_parser_callbacks_test.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
#include "source/extensions/filters/listener/http_inspector/http_inspector.h" | ||
|
||
#include "gmock/gmock.h" | ||
#include "gtest/gtest.h" | ||
|
||
namespace Envoy { | ||
namespace Extensions { | ||
namespace ListenerFilters { | ||
namespace HttpInspector { | ||
namespace { | ||
|
||
/** | ||
* These tests are written specifically for the NoOpParserCallbacks class to verify | ||
* that it's callback methods work as expected. This is necessary because the | ||
* HttpInspector filter only parses the request up to the first line break to determine the HTTP | ||
* version. As a result, not all callback methods are triggered in the HttpInspector tests. | ||
*/ | ||
class NoOpParserCallbacksTest : public ::testing::Test { | ||
protected: | ||
NoOpParserCallbacks callbacks_; | ||
}; | ||
|
||
TEST_F(NoOpParserCallbacksTest, OnMessageBeginTest) { | ||
EXPECT_EQ(callbacks_.onMessageBegin(), Http::Http1::CallbackResult::Success); | ||
} | ||
|
||
TEST_F(NoOpParserCallbacksTest, OnUrlTest) { | ||
const absl::string_view url = "/index.html"; | ||
EXPECT_EQ(callbacks_.onUrl(url.data(), url.size()), Http::Http1::CallbackResult::Success); | ||
} | ||
|
||
TEST_F(NoOpParserCallbacksTest, OnStatusTest) { | ||
const absl::string_view status = "200 OK"; | ||
EXPECT_EQ(callbacks_.onStatus(status.data(), status.size()), | ||
Http::Http1::CallbackResult::Success); | ||
} | ||
|
||
TEST_F(NoOpParserCallbacksTest, OnHeaderFieldTest) { | ||
const absl::string_view header_field = "Content-Type"; | ||
EXPECT_EQ(callbacks_.onHeaderField(header_field.data(), header_field.size()), | ||
Http::Http1::CallbackResult::Success); | ||
} | ||
|
||
TEST_F(NoOpParserCallbacksTest, OnHeaderValueTest) { | ||
const absl::string_view header_value = "text/html"; | ||
EXPECT_EQ(callbacks_.onHeaderValue(header_value.data(), header_value.size()), | ||
Http::Http1::CallbackResult::Success); | ||
} | ||
|
||
TEST_F(NoOpParserCallbacksTest, OnHeadersCompleteTest) { | ||
EXPECT_EQ(callbacks_.onHeadersComplete(), Http::Http1::CallbackResult::Success); | ||
} | ||
|
||
TEST_F(NoOpParserCallbacksTest, BufferBodyTest) { | ||
const absl::string_view buffer_body = "buffer_body"; | ||
callbacks_.bufferBody(buffer_body.data(), buffer_body.size()); | ||
} | ||
|
||
TEST_F(NoOpParserCallbacksTest, OnMessageCompleteTest) { | ||
EXPECT_EQ(callbacks_.onMessageComplete(), Http::Http1::CallbackResult::Success); | ||
} | ||
|
||
TEST_F(NoOpParserCallbacksTest, OnChunkHeaderTest) { | ||
callbacks_.onChunkHeader(true); | ||
callbacks_.onChunkHeader(false); | ||
} | ||
|
||
} // namespace | ||
} // namespace HttpInspector | ||
} // namespace ListenerFilters | ||
} // namespace Extensions | ||
} // namespace Envoy |