diff --git a/changelogs/current.yaml b/changelogs/current.yaml index 208b6f558bd90..02c61a9a48c0b 100644 --- a/changelogs/current.yaml +++ b/changelogs/current.yaml @@ -21,6 +21,9 @@ removed_config_or_runtime: - area: listener change: | removed ``envoy.reloadable_features.strict_check_on_ipv4_compat`` and legacy code paths. + - area: http + change: | + removed ``envoy.reloadable_features.deprecate_global_ints`` and legacy code paths. - area: http change: | removed ``envoy.reloadable_features.allow_adding_content_type_in_local_replies`` and legacy code paths. diff --git a/source/common/http/header_map_impl.cc b/source/common/http/header_map_impl.cc index ed1b1625d1de0..e8014022ecdec 100644 --- a/source/common/http/header_map_impl.cc +++ b/source/common/http/header_map_impl.cc @@ -22,6 +22,7 @@ namespace { constexpr absl::string_view DelimiterForInlineHeaders{","}; constexpr absl::string_view DelimiterForInlineCookies{"; "}; +const static int kMinHeadersForLazyMap = 3; // Optimal hard-coded value based on benchmarks. bool validatedLowerCaseString(absl::string_view str) { auto lower_case_str = LowerCaseString(str); @@ -58,7 +59,7 @@ template <> bool HeaderMapImpl::HeaderList::isPseudoHeader(const LowerCaseString bool HeaderMapImpl::HeaderList::maybeMakeMap() { if (lazy_map_.empty()) { - if (headers_.size() < lazy_map_min_size_) { + if (headers_.size() < kMinHeadersForLazyMap) { return false; } // Add all entries from the list into the map. diff --git a/source/common/http/header_map_impl.h b/source/common/http/header_map_impl.h index 441571b923f59..38101585fbcae 100644 --- a/source/common/http/header_map_impl.h +++ b/source/common/http/header_map_impl.h @@ -181,10 +181,9 @@ class HeaderMapImpl : NonCopyable { /** * List of HeaderEntryImpl that keeps the pseudo headers (key starting with ':') in the front * of the list (as required by nghttp2) and otherwise maintains insertion order. - * When the list size is greater or equal to the envoy.http.headermap.lazy_map_min_size runtime - * feature value (defaults to 3, if not set), all headers are added to a map, to allow - * fast access given a header key. Once the map is initialized, it will be used even if the number - * of headers decreases below the threshold. + * When the list size is greater or equal to 3, all headers are added to a map, to allow fast + * access given a header key. Once the map is initialized, it will be used even + * if the number of headers decreases below the threshold. * * Note: the internal iterators held in fields make this unsafe to copy and move, since the * reference to end() is not preserved across a move (see Notes in @@ -198,10 +197,7 @@ class HeaderMapImpl : NonCopyable { using HeaderNodeVector = absl::InlinedVector; using HeaderLazyMap = absl::flat_hash_map; - HeaderList() - : pseudo_headers_end_(headers_.end()), - lazy_map_min_size_(static_cast( - Runtime::getInteger("envoy.http.headermap.lazy_map_min_size", 3))) {} + HeaderList() : pseudo_headers_end_(headers_.end()) {} template bool isPseudoHeader(const Key& key) { return !key.getStringView().empty() && key.getStringView()[0] == ':'; @@ -278,8 +274,7 @@ class HeaderMapImpl : NonCopyable { } /* - * Creates and populates a map if the number of headers is at least the - * envoy.http.headermap.lazy_map_min_size runtime feature value. + * Creates and populates a map if the number of headers is at least 3. * * @return if a map was created. */ @@ -311,8 +306,6 @@ class HeaderMapImpl : NonCopyable { private: std::list headers_; HeaderNode pseudo_headers_end_; - // The number of headers threshold for lazy map usage. - const uint32_t lazy_map_min_size_; HeaderLazyMap lazy_map_; }; diff --git a/source/common/runtime/runtime_features.cc b/source/common/runtime/runtime_features.cc index 9ef65367e3e45..972d52872051b 100644 --- a/source/common/runtime/runtime_features.cc +++ b/source/common/runtime/runtime_features.cc @@ -41,7 +41,6 @@ RUNTIME_GUARD(envoy_reloadable_features_conn_pool_delete_when_idle); RUNTIME_GUARD(envoy_reloadable_features_conn_pool_new_stream_with_early_data_and_http3); RUNTIME_GUARD(envoy_reloadable_features_correct_remote_address); RUNTIME_GUARD(envoy_reloadable_features_delta_xds_subscription_state_tracking_fix); -RUNTIME_GUARD(envoy_reloadable_features_deprecate_global_ints); RUNTIME_GUARD(envoy_reloadable_features_do_not_await_headers_on_upstream_timeout_to_emit_stats); RUNTIME_GUARD(envoy_reloadable_features_do_not_count_mapped_pages_as_free); RUNTIME_GUARD(envoy_reloadable_features_enable_compression_bomb_protection); @@ -213,16 +212,8 @@ void maybeSetDeprecatedInts(absl::string_view name, uint32_t value) { return; } - // DO NOT ADD MORE FLAGS HERE. This function deprecated and being removed. - if (name == "envoy.http.headermap.lazy_map_min_size") { - if (Runtime::runtimeFeatureEnabled("envoy.reloadable_features.deprecate_global_ints")) { - IS_ENVOY_BUG(absl::StrCat( - "The Envoy community is attempting to remove global integers. Given you use ", name, - " please immediately file an upstream issue to retain the functionality as it will " - "otherwise be removed following the usual deprecation cycle.")); - } - absl::SetFlag(&FLAGS_envoy_headermap_lazy_map_min_size, value); - } else if (name == "re2.max_program_size.error_level") { + // DO NOT ADD MORE FLAGS HERE. This function deprecated. + else if (name == "re2.max_program_size.error_level") { absl::SetFlag(&FLAGS_re2_max_program_size_error_level, value); } else if (name == "re2.max_program_size.warn_level") { absl::SetFlag(&FLAGS_re2_max_program_size_warn_level, value); diff --git a/source/docs/header_map.md b/source/docs/header_map.md index 2a5eef11500e9..2cd4de52e6ca5 100644 --- a/source/docs/header_map.md +++ b/source/docs/header_map.md @@ -3,8 +3,7 @@ The Envoy header map implementation (`HeaderMapImpl`) has the following properties: * Headers are stored in a linked list (`HeaderList`) in the order they are added, with pseudo headers kept at the front of the list. -* Once the number of headers is at least the runtime configured feature `envoy.http.headermap.lazy_map_min_size`, - the header map will also use a map (`HeaderLazyMap`), in addition to the linked list, for faster access to the headers. +* Once there at at least 3 years, the header map will also use a map (`HeaderLazyMap`), in addition to the linked list, for faster access to the headers. * O(1) direct access is possible for common headers needed during data plane processing. This is provided by a table of pointers that reach directly into a linked list that is populated when headers are added or removed from the map. When O(1) headers are accessed by direct method diff --git a/test/common/common/regex_test.cc b/test/common/common/regex_test.cc index 4788af2460385..d480f620ca1d6 100644 --- a/test/common/common/regex_test.cc +++ b/test/common/common/regex_test.cc @@ -82,8 +82,7 @@ TEST(Utility, ParseRegex) { // The deprecated field codepath precedes any runtime settings. { TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues({{"envoy.reloadable_features.deprecate_global_ints", "false"}, - {"re2.max_program_size.error_level", "3"}}); + scoped_runtime.mergeValues({{"re2.max_program_size.error_level", "3"}}); envoy::type::matcher::v3::RegexMatcher matcher; matcher.set_regex("/asdf/.*"); matcher.mutable_google_re2()->mutable_max_program_size()->set_value(1); @@ -99,8 +98,7 @@ TEST(Utility, ParseRegex) { // Verify that an exception is thrown for the error level max program size. { TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues({{"envoy.reloadable_features.deprecate_global_ints", "false"}, - {"re2.max_program_size.error_level", "1"}}); + scoped_runtime.mergeValues({{"re2.max_program_size.error_level", "1"}}); envoy::type::matcher::v3::RegexMatcher matcher; matcher.set_regex("/asdf/.*"); matcher.mutable_google_re2(); @@ -118,7 +116,6 @@ TEST(Utility, ParseRegex) { // Verify that the error level max program size defaults to 100 if not set by runtime. { TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues({{"envoy.reloadable_features.deprecate_global_ints", "false"}}); envoy::type::matcher::v3::RegexMatcher matcher; matcher.set_regex( "/asdf/.*/asdf/.*/asdf/.*/asdf/.*/asdf/.*/asdf/.*/asdf/.*/asdf/.*/asdf/.*/asdf/.*"); @@ -137,8 +134,7 @@ TEST(Utility, ParseRegex) { // Verify that a warning is logged for the warn level max program size. { TestScopedRuntime scoped_runtime; - scoped_runtime.mergeValues({{"envoy.reloadable_features.deprecate_global_ints", "false"}, - {"re2.max_program_size.warn_level", "1"}}); + scoped_runtime.mergeValues({{"re2.max_program_size.warn_level", "1"}}); envoy::type::matcher::v3::RegexMatcher matcher; matcher.set_regex("/asdf/.*"); matcher.mutable_google_re2(); diff --git a/test/common/http/header_map_impl_fuzz_test.cc b/test/common/http/header_map_impl_fuzz_test.cc index f59794f98416f..c73541474de73 100644 --- a/test/common/http/header_map_impl_fuzz_test.cc +++ b/test/common/http/header_map_impl_fuzz_test.cc @@ -18,12 +18,6 @@ namespace Envoy { // Fuzz the header map implementation. DEFINE_PROTO_FUZZER(const test::common::http::HeaderMapImplFuzzTestCase& input) { TestScopedRuntime scoped_runtime; - // Set the lazy header-map threshold if found. - if (input.has_config()) { - scoped_runtime.mergeValues({{"envoy.reloadable_features.deprecate_global_ints", "false"}, - {"envoy.http.headermap.lazy_map_min_size", - absl::StrCat(input.config().lazy_map_min_size())}}); - } auto header_map = Http::RequestHeaderMapImpl::create(); std::vector> lower_case_strings; diff --git a/test/common/http/header_map_impl_test.cc b/test/common/http/header_map_impl_test.cc index 1eeeff3cd9825..8c94a9ab57220 100644 --- a/test/common/http/header_map_impl_test.cc +++ b/test/common/http/header_map_impl_test.cc @@ -63,28 +63,8 @@ Http::RegisterCustomInlineHeader custom_header_1_copy(Http::LowerCaseString{"foo_custom_header"}); -class HeaderMapImplTest : public testing::TestWithParam { -public: - HeaderMapImplTest() { - // Set the lazy map threshold using the test parameter. - scoped_runtime_.mergeValues( - {{"envoy.reloadable_features.deprecate_global_ints", "false"}, - {"envoy.http.headermap.lazy_map_min_size", absl::StrCat(GetParam())}}); - } - - static std::string testParamsToString(const ::testing::TestParamInfo& params) { - return absl::StrCat(params.param); - } - - TestScopedRuntime scoped_runtime_; -}; - -INSTANTIATE_TEST_SUITE_P(HeaderMapThreshold, HeaderMapImplTest, - testing::Values(0, 1, std::numeric_limits::max()), - HeaderMapImplTest::testParamsToString); - // Make sure that the same header registered twice points to the same location. -TEST_P(HeaderMapImplTest, CustomRegisteredHeaders) { +TEST(HeaderMapImplTest, CustomRegisteredHeaders) { TestRequestHeaderMapImpl headers; EXPECT_EQ(custom_header_1.handle(), custom_header_1_copy.handle()); EXPECT_EQ(nullptr, headers.getInline(custom_header_1.handle())); @@ -112,7 +92,7 @@ TEST_P(HeaderMapImplTest, CustomRegisteredHeaders) { EXPECT_EQ(header_map->get(Headers::get().name)[0]->value().getStringView(), 1); // Make sure that the O(1) headers are wired up properly. -TEST_P(HeaderMapImplTest, AllInlineHeaders) { +TEST(HeaderMapImplTest, AllInlineHeaders) { { auto header_map = RequestHeaderMapImpl::create(); INLINE_REQ_STRING_HEADERS(TEST_INLINE_STRING_HEADER_FUNCS) @@ -132,7 +112,7 @@ TEST_P(HeaderMapImplTest, AllInlineHeaders) { } } -TEST_P(HeaderMapImplTest, InlineInsert) { +TEST(HeaderMapImplTest, InlineInsert) { TestRequestHeaderMapImpl headers; EXPECT_TRUE(headers.empty()); EXPECT_EQ(0, headers.size()); @@ -145,7 +125,7 @@ TEST_P(HeaderMapImplTest, InlineInsert) { EXPECT_EQ("hello", headers.get(Headers::get().Host)[0]->value().getStringView()); } -TEST_P(HeaderMapImplTest, InlineAppend) { +TEST(HeaderMapImplTest, InlineAppend) { { TestRequestHeaderMapImpl headers; // Create via header and append. @@ -183,7 +163,7 @@ TEST_P(HeaderMapImplTest, InlineAppend) { } } -TEST_P(HeaderMapImplTest, MoveIntoInline) { +TEST(HeaderMapImplTest, MoveIntoInline) { TestRequestHeaderMapImpl headers; HeaderString key; key.setCopy(Headers::get().EnvoyRetryOn.get()); @@ -202,7 +182,7 @@ TEST_P(HeaderMapImplTest, MoveIntoInline) { EXPECT_EQ("hello,there", headers.getEnvoyRetryOnValue()); } -TEST_P(HeaderMapImplTest, Remove) { +TEST(HeaderMapImplTest, Remove) { TestRequestHeaderMapImpl headers; // Add random header and then remove by name. @@ -244,7 +224,7 @@ TEST_P(HeaderMapImplTest, Remove) { EXPECT_EQ(0UL, headers.remove(Headers::get().ContentLength)); } -TEST_P(HeaderMapImplTest, RemoveHost) { +TEST(HeaderMapImplTest, RemoveHost) { TestRequestHeaderMapImpl headers; headers.setHost("foo"); EXPECT_EQ("foo", headers.get_("host")); @@ -258,7 +238,7 @@ TEST_P(HeaderMapImplTest, RemoveHost) { EXPECT_EQ(nullptr, headers.Host()); } -TEST_P(HeaderMapImplTest, RemoveIf) { +TEST(HeaderMapImplTest, RemoveIf) { LowerCaseString key1 = LowerCaseString("X-postfix-foo"); LowerCaseString key2 = LowerCaseString("X-postfix-"); LowerCaseString key3 = LowerCaseString("x-postfix-eep"); @@ -301,7 +281,7 @@ TEST_P(HeaderMapImplTest, RemoveIf) { } } -TEST_P(HeaderMapImplTest, RemovePrefix) { +TEST(HeaderMapImplTest, RemovePrefix) { // These will match. LowerCaseString key1 = LowerCaseString("X-prefix-foo"); LowerCaseString key3 = LowerCaseString("X-Prefix-"); @@ -353,7 +333,7 @@ class HeaderAndValueCb } }; -TEST_P(HeaderMapImplTest, SetRemovesAllValues) { +TEST(HeaderMapImplTest, SetRemovesAllValues) { TestRequestHeaderMapImpl headers; LowerCaseString key1("hello"); @@ -394,7 +374,7 @@ TEST_P(HeaderMapImplTest, SetRemovesAllValues) { } } -TEST_P(HeaderMapImplTest, DoubleInlineAdd) { +TEST(HeaderMapImplTest, DoubleInlineAdd) { { TestRequestHeaderMapImpl headers; const std::string foo("foo"); @@ -430,7 +410,7 @@ TEST_P(HeaderMapImplTest, DoubleInlineAdd) { // Per https://github.com/envoyproxy/envoy/issues/7488 make sure we don't // combine set-cookie headers -TEST_P(HeaderMapImplTest, DoubleCookieAdd) { +TEST(HeaderMapImplTest, DoubleCookieAdd) { TestRequestHeaderMapImpl headers; const std::string foo("foo"); const std::string bar("bar"); @@ -445,7 +425,7 @@ TEST_P(HeaderMapImplTest, DoubleCookieAdd) { ASSERT_EQ(set_cookie_value[1]->value().getStringView(), "bar"); } -TEST_P(HeaderMapImplTest, AppendCookieHeadersWithSemicolon) { +TEST(HeaderMapImplTest, AppendCookieHeadersWithSemicolon) { TestRequestHeaderMapImpl headers; const std::string foo("foo=1"); const std::string bar("bar=2"); @@ -459,7 +439,7 @@ TEST_P(HeaderMapImplTest, AppendCookieHeadersWithSemicolon) { ASSERT_EQ(cookie_value[0]->value().getStringView(), "foo=1; bar=2"); } -TEST_P(HeaderMapImplTest, DoubleInlineSet) { +TEST(HeaderMapImplTest, DoubleInlineSet) { TestRequestHeaderMapImpl headers; headers.setReferenceKey(Headers::get().ContentType, "blah"); headers.setReferenceKey(Headers::get().ContentType, "text/html"); @@ -467,7 +447,7 @@ TEST_P(HeaderMapImplTest, DoubleInlineSet) { EXPECT_EQ(1UL, headers.size()); } -TEST_P(HeaderMapImplTest, AddReferenceKey) { +TEST(HeaderMapImplTest, AddReferenceKey) { TestRequestHeaderMapImpl headers; LowerCaseString foo("hello"); headers.addReferenceKey(foo, "world"); @@ -475,7 +455,7 @@ TEST_P(HeaderMapImplTest, AddReferenceKey) { EXPECT_EQ("world", headers.get(foo)[0]->value().getStringView()); } -TEST_P(HeaderMapImplTest, SetReferenceKey) { +TEST(HeaderMapImplTest, SetReferenceKey) { TestRequestHeaderMapImpl headers; LowerCaseString foo("hello"); headers.setReferenceKey(foo, "world"); @@ -487,7 +467,7 @@ TEST_P(HeaderMapImplTest, SetReferenceKey) { EXPECT_EQ("monde", headers.get(foo)[0]->value().getStringView()); } -TEST_P(HeaderMapImplTest, SetCopy) { +TEST(HeaderMapImplTest, SetCopy) { TestRequestHeaderMapImpl headers; LowerCaseString foo("hello"); headers.setCopy(foo, "world"); @@ -531,7 +511,7 @@ TEST_P(HeaderMapImplTest, SetCopy) { EXPECT_EQ(headers.getPathValue(), "/foo"); } -TEST_P(HeaderMapImplTest, AddCopy) { +TEST(HeaderMapImplTest, AddCopy) { TestRequestHeaderMapImpl headers; // Start with a string value. @@ -602,7 +582,7 @@ TEST_P(HeaderMapImplTest, AddCopy) { headers.get(envoy_retry_on)[0]->value().getStringView()); } -TEST_P(HeaderMapImplTest, Equality) { +TEST(HeaderMapImplTest, Equality) { TestRequestHeaderMapImpl headers1; TestRequestHeaderMapImpl headers2; EXPECT_EQ(headers1, headers2); @@ -614,7 +594,7 @@ TEST_P(HeaderMapImplTest, Equality) { EXPECT_FALSE(headers1 == headers2); } -TEST_P(HeaderMapImplTest, LargeCharInHeader) { +TEST(HeaderMapImplTest, LargeCharInHeader) { TestRequestHeaderMapImpl headers; LowerCaseString static_key("\x90hello"); std::string ref_value("value"); @@ -622,7 +602,7 @@ TEST_P(HeaderMapImplTest, LargeCharInHeader) { EXPECT_EQ("value", headers.get(static_key)[0]->value().getStringView()); } -TEST_P(HeaderMapImplTest, Iterate) { +TEST(HeaderMapImplTest, Iterate) { TestRequestHeaderMapImpl headers; headers.addCopy(LowerCaseString("hello"), "world"); headers.addCopy(LowerCaseString("foo"), "xxx"); @@ -639,7 +619,7 @@ TEST_P(HeaderMapImplTest, Iterate) { headers.iterate(cb.asIterateCb()); } -TEST_P(HeaderMapImplTest, IterateReverse) { +TEST(HeaderMapImplTest, IterateReverse) { TestRequestHeaderMapImpl headers; headers.addCopy(LowerCaseString("hello"), "world"); headers.addCopy(LowerCaseString("foo"), "bar"); @@ -662,7 +642,7 @@ TEST_P(HeaderMapImplTest, IterateReverse) { }); } -TEST_P(HeaderMapImplTest, Get) { +TEST(HeaderMapImplTest, Get) { { auto headers = TestRequestHeaderMapImpl({{Headers::get().Path.get(), "/"}, {"hello", "world"}}); EXPECT_EQ("/", headers.get(LowerCaseString(":path"))[0]->value().getStringView()); @@ -683,7 +663,7 @@ TEST_P(HeaderMapImplTest, Get) { } } -TEST_P(HeaderMapImplTest, CreateHeaderMapFromIterator) { +TEST(HeaderMapImplTest, CreateHeaderMapFromIterator) { std::vector> iter_headers{ {LowerCaseString(Headers::get().Path), "/"}, {LowerCaseString("hello"), "world"}}; auto headers = createHeaderMap(iter_headers.cbegin(), iter_headers.cend()); @@ -692,7 +672,7 @@ TEST_P(HeaderMapImplTest, CreateHeaderMapFromIterator) { EXPECT_TRUE(headers->get(LowerCaseString("foo")).empty()); } -TEST_P(HeaderMapImplTest, TestHeaderList) { +TEST(HeaderMapImplTest, TestHeaderList) { std::array keys{Headers::get().Path.get(), "hello"}; std::array values{"/", "world"}; @@ -710,7 +690,7 @@ TEST_P(HeaderMapImplTest, TestHeaderList) { EXPECT_THAT(to_string_views(header_list.values()), ElementsAre("/", "world")); } -TEST_P(HeaderMapImplTest, TestAppendHeader) { +TEST(HeaderMapImplTest, TestAppendHeader) { // Test appending to a string with a value. { TestRequestHeaderMapImpl headers; @@ -773,7 +753,7 @@ TEST(TestHeaderMapImplDeathTest, TestHeaderLengthChecks) { "Trying to allocate overly large headers."); } -TEST_P(HeaderMapImplTest, PseudoHeaderOrder) { +TEST(HeaderMapImplTest, PseudoHeaderOrder) { HeaderAndValueCb cb; { @@ -922,7 +902,7 @@ TEST_P(HeaderMapImplTest, PseudoHeaderOrder) { // Validate that TestRequestHeaderMapImpl copy construction and assignment works. This is a // regression for where we were missing a valid copy constructor and had the // default (dangerous) move semantics takeover. -TEST_P(HeaderMapImplTest, TestRequestHeaderMapImplCopy) { +TEST(HeaderMapImplTest, TestRequestHeaderMapImplCopy) { TestRequestHeaderMapImpl foo; foo.addCopy(LowerCaseString("foo"), "bar"); auto headers = std::make_unique(foo); @@ -936,7 +916,7 @@ TEST_P(HeaderMapImplTest, TestRequestHeaderMapImplCopy) { } // Make sure 'host' -> ':authority' auto translation only occurs for request headers. -TEST_P(HeaderMapImplTest, HostHeader) { +TEST(HeaderMapImplTest, HostHeader) { TestRequestHeaderMapImpl request_headers{{"host", "foo"}}; EXPECT_EQ(request_headers.size(), 1); EXPECT_EQ(request_headers.get_(":authority"), "foo"); @@ -954,14 +934,14 @@ TEST_P(HeaderMapImplTest, HostHeader) { EXPECT_EQ(response_trailers.get_("host"), "foo"); } -TEST_P(HeaderMapImplTest, TestInlineHeaderAdd) { +TEST(HeaderMapImplTest, TestInlineHeaderAdd) { TestRequestHeaderMapImpl foo; foo.addCopy(LowerCaseString(":path"), "GET"); EXPECT_EQ(foo.size(), 1); EXPECT_TRUE(foo.Path() != nullptr); } -TEST_P(HeaderMapImplTest, ClearHeaderMap) { +TEST(HeaderMapImplTest, ClearHeaderMap) { TestRequestHeaderMapImpl headers; LowerCaseString static_key("hello"); std::string ref_value("value"); @@ -1003,7 +983,7 @@ TEST_P(HeaderMapImplTest, ClearHeaderMap) { } // Validates byte size is properly accounted for in different inline header setting scenarios. -TEST_P(HeaderMapImplTest, InlineHeaderByteSize) { +TEST(HeaderMapImplTest, InlineHeaderByteSize) { { TestRequestHeaderMapImpl headers; std::string foo = "foo"; @@ -1057,13 +1037,13 @@ TEST_P(HeaderMapImplTest, InlineHeaderByteSize) { } } -TEST_P(HeaderMapImplTest, ValidHeaderString) { +TEST(HeaderMapImplTest, ValidHeaderString) { EXPECT_TRUE(validHeaderString("abc")); EXPECT_FALSE(validHeaderString(absl::string_view("a\000bc", 4))); EXPECT_FALSE(validHeaderString("abc\n")); } -TEST_P(HeaderMapImplTest, HttpTraceContextTest) { +TEST(HeaderMapImplTest, HttpTraceContextTest) { { TestRequestHeaderMapImpl request_headers;