|
|
|
@ -65,6 +65,7 @@ |
|
|
|
|
#include "src/proto/grpc/testing/xds/v3/range.pb.h" |
|
|
|
|
#include "src/proto/grpc/testing/xds/v3/regex.pb.h" |
|
|
|
|
#include "src/proto/grpc/testing/xds/v3/route.pb.h" |
|
|
|
|
#include "src/proto/grpc/testing/xds/v3/string.pb.h" |
|
|
|
|
#include "src/proto/grpc/testing/xds/v3/typed_struct.pb.h" |
|
|
|
|
#include "test/core/util/scoped_env_var.h" |
|
|
|
|
#include "test/core/util/test_config.h" |
|
|
|
@ -1094,6 +1095,32 @@ TEST_F(RouteMatchTest, HeaderMatchers) { |
|
|
|
|
header_proto = route_proto->mutable_match()->add_headers(); |
|
|
|
|
header_proto->set_name("header6"); |
|
|
|
|
header_proto->set_present_match(true); |
|
|
|
|
// header7: exact via StringMatch, case-insensitive
|
|
|
|
|
header_proto = route_proto->mutable_match()->add_headers(); |
|
|
|
|
header_proto->set_name("header7"); |
|
|
|
|
auto* string_match_proto = header_proto->mutable_string_match(); |
|
|
|
|
string_match_proto->set_exact("exact2"); |
|
|
|
|
string_match_proto->set_ignore_case(true); |
|
|
|
|
// header8: prefix via StringMatch
|
|
|
|
|
header_proto = route_proto->mutable_match()->add_headers(); |
|
|
|
|
header_proto->set_name("header8"); |
|
|
|
|
string_match_proto = header_proto->mutable_string_match(); |
|
|
|
|
string_match_proto->set_prefix("prefix2"); |
|
|
|
|
// header9: suffix via StringMatch
|
|
|
|
|
header_proto = route_proto->mutable_match()->add_headers(); |
|
|
|
|
header_proto->set_name("header9"); |
|
|
|
|
string_match_proto = header_proto->mutable_string_match(); |
|
|
|
|
string_match_proto->set_suffix("suffix2"); |
|
|
|
|
// header10: contains via StringMatch
|
|
|
|
|
header_proto = route_proto->mutable_match()->add_headers(); |
|
|
|
|
header_proto->set_name("header10"); |
|
|
|
|
string_match_proto = header_proto->mutable_string_match(); |
|
|
|
|
string_match_proto->set_contains("contains2"); |
|
|
|
|
// header11: regex via StringMatch
|
|
|
|
|
header_proto = route_proto->mutable_match()->add_headers(); |
|
|
|
|
header_proto->set_name("header11"); |
|
|
|
|
string_match_proto = header_proto->mutable_string_match(); |
|
|
|
|
string_match_proto->mutable_safe_regex()->set_regex("regex2"); |
|
|
|
|
std::string serialized_resource; |
|
|
|
|
ASSERT_TRUE(route_config.SerializeToString(&serialized_resource)); |
|
|
|
|
auto* resource_type = XdsRouteConfigResourceType::Get(); |
|
|
|
@ -1108,7 +1135,7 @@ TEST_F(RouteMatchTest, HeaderMatchers) { |
|
|
|
|
auto& virtual_host = resource.virtual_hosts.front(); |
|
|
|
|
ASSERT_EQ(virtual_host.routes.size(), 1UL); |
|
|
|
|
auto& header_matchers = virtual_host.routes[0].matchers.header_matchers; |
|
|
|
|
ASSERT_EQ(header_matchers.size(), 7UL); |
|
|
|
|
ASSERT_EQ(header_matchers.size(), 12UL); |
|
|
|
|
// header0: exact match with invert
|
|
|
|
|
EXPECT_EQ(header_matchers[0].ToString(), |
|
|
|
|
"HeaderMatcher{header0 not StringMatcher{exact=exact1}}"); |
|
|
|
@ -1130,6 +1157,22 @@ TEST_F(RouteMatchTest, HeaderMatchers) { |
|
|
|
|
// header6: present match
|
|
|
|
|
EXPECT_EQ(header_matchers[6].ToString(), |
|
|
|
|
"HeaderMatcher{header6 present=true}"); |
|
|
|
|
// header7: exact via StringMatch, case-insensitive
|
|
|
|
|
EXPECT_EQ(header_matchers[7].ToString(), |
|
|
|
|
"HeaderMatcher{header7 StringMatcher{exact=exact2, " |
|
|
|
|
"case_sensitive=false}}"); |
|
|
|
|
// header8: prefix via StringMatch
|
|
|
|
|
EXPECT_EQ(header_matchers[8].ToString(), |
|
|
|
|
"HeaderMatcher{header8 StringMatcher{prefix=prefix2}}"); |
|
|
|
|
// header9: suffix via StringMatch
|
|
|
|
|
EXPECT_EQ(header_matchers[9].ToString(), |
|
|
|
|
"HeaderMatcher{header9 StringMatcher{suffix=suffix2}}"); |
|
|
|
|
// header10: contains via StringMatch
|
|
|
|
|
EXPECT_EQ(header_matchers[10].ToString(), |
|
|
|
|
"HeaderMatcher{header10 StringMatcher{contains=contains2}}"); |
|
|
|
|
// header11: regex via StringMatch
|
|
|
|
|
EXPECT_EQ(header_matchers[11].ToString(), |
|
|
|
|
"HeaderMatcher{header11 StringMatcher{safe_regex=regex2}}"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(RouteMatchTest, HeaderMatchersInvalid) { |
|
|
|
@ -1148,6 +1191,10 @@ TEST_F(RouteMatchTest, HeaderMatchersInvalid) { |
|
|
|
|
header_proto->set_name("header1"); |
|
|
|
|
header_proto->mutable_range_match()->set_start(2); |
|
|
|
|
header_proto->mutable_range_match()->set_end(1); |
|
|
|
|
// header2: StringMatcher empty
|
|
|
|
|
header_proto = route_proto->mutable_match()->add_headers(); |
|
|
|
|
header_proto->set_name("header2"); |
|
|
|
|
header_proto->mutable_string_match(); |
|
|
|
|
std::string serialized_resource; |
|
|
|
|
ASSERT_TRUE(route_config.SerializeToString(&serialized_resource)); |
|
|
|
|
auto* resource_type = XdsRouteConfigResourceType::Get(); |
|
|
|
@ -1162,7 +1209,9 @@ TEST_F(RouteMatchTest, HeaderMatchersInvalid) { |
|
|
|
|
"field:virtual_hosts[0].routes[0].match.headers[1] " |
|
|
|
|
"error:cannot create header matcher: " |
|
|
|
|
"Invalid range specifier specified: " |
|
|
|
|
"end cannot be smaller than start.]") |
|
|
|
|
"end cannot be smaller than start.; " |
|
|
|
|
"field:virtual_hosts[0].routes[0].match.headers[2].string_match " |
|
|
|
|
"error:invalid string matcher]") |
|
|
|
|
<< decode_result.resource.status(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|