21 #include <gtest/gtest.h>
32 StringMatcher ExactMatcher(
const char*
string) {
36 StringMatcher PrefixMatcher(
const char*
string,
bool case_sensitive =
true) {
42 StringMatcher SuffixMatcher(
const char*
string,
bool case_sensitive =
true) {
48 StringMatcher ContainsMatcher(
const char*
string,
bool case_sensitive =
true) {
54 StringMatcher SafeRegexMatcher(
const char*
string) {
58 TEST(XdsSanMatchingTest, EmptySansList) {
59 std::vector<const char*> sans = {};
61 sans.data(), sans.size(),
62 {ExactMatcher(
"a.example.com"), ExactMatcher(
"b.example.com")}));
65 TEST(XdsSanMatchingTest, EmptyMatchersList) {
66 std::vector<const char*> sans = {
"a.example.com",
"foo.example.com"};
71 TEST(XdsSanMatchingTest, ExactMatchIllegalValues) {
72 std::vector<const char*> sans = {
".a.example.com"};
74 sans.data(), sans.size(),
75 {ExactMatcher(
""), ExactMatcher(
"a.example.com"),
76 ExactMatcher(
".a.example.com")}));
79 sans.data(), sans.size(),
80 {ExactMatcher(
""), ExactMatcher(
"a.example.com"),
81 ExactMatcher(
".a.example.com")}));
82 sans = {
"a.example.com"};
84 sans.data(), sans.size(),
85 {ExactMatcher(
""), ExactMatcher(
"a.example.com"),
86 ExactMatcher(
".a.example.com")}));
89 TEST(XdsSanMatchingTest, ExactMatchDns) {
90 std::vector<const char*> sans = {
"a.example.com"};
92 sans.data(), sans.size(), {ExactMatcher(
"a.example.com")}));
94 sans.data(), sans.size(), {ExactMatcher(
"b.example.com")}));
95 sans = {
"b.example.com."};
97 sans.data(), sans.size(), {ExactMatcher(
"a.example.com.")}));
99 sans.data(), sans.size(), {ExactMatcher(
"b.example.com.")}));
102 TEST(XdsSanMatchingTest, ExactMatchWithFullyQualifiedSan) {
103 std::vector<const char*> sans = {
"a.example.com."};
105 sans.data(), sans.size(), {ExactMatcher(
"a.example.com")}));
107 sans.data(), sans.size(), {ExactMatcher(
"b.example.com")}));
110 TEST(XdsSanMatchingTest, ExactMatchWithFullyQualifiedMatcher) {
111 std::vector<const char*> sans = {
"a.example.com"};
113 sans.data(), sans.size(), {ExactMatcher(
"a.example.com.")}));
115 sans.data(), sans.size(), {ExactMatcher(
"b.example.com.")}));
118 TEST(XdsSanMatchingTest, ExactMatchDnsCaseInsensitive) {
119 std::vector<const char*> sans = {
"A.eXaMpLe.CoM"};
121 sans.data(), sans.size(), {ExactMatcher(
"a.example.com")}));
123 sans.data(), sans.size(), {ExactMatcher(
"a.ExAmPlE.cOm")}));
126 TEST(XdsSanMatchingTest, ExactMatchMultipleSansMultipleMatchers) {
127 std::vector<const char*> sans = {
"a.example.com",
"foo.example.com",
130 sans.data(), sans.size(),
131 {ExactMatcher(
"abc.example.com"), ExactMatcher(
"foo.example.com"),
132 ExactMatcher(
"xyz.example.com")}));
135 TEST(XdsSanMatchingTest, ExactMatchWildCard) {
136 std::vector<const char*> sans = {
"*.example.com"};
138 sans.data(), sans.size(), {ExactMatcher(
"a.example.com")}));
140 sans.data(), sans.size(), {ExactMatcher(
"fOo.ExAmPlE.cOm")}));
142 sans.data(), sans.size(), {ExactMatcher(
"BaR.eXaMpLe.CoM")}));
144 sans.data(), sans.size(), {ExactMatcher(
".example.com")}));
146 sans.data(), sans.size(), {ExactMatcher(
"example.com")}));
148 sans.data(), sans.size(), {ExactMatcher(
"foo.bar.com")}));
151 TEST(XdsSanMatchingTest, ExactMatchWildCardDoesNotMatchSingleLabelDomain) {
152 std::vector<const char*> sans = {
"*"};
154 sans.data(), sans.size(), {ExactMatcher(
"abc")}));
156 sans.data(), sans.size(), {ExactMatcher(
"abc.com.")}));
158 sans.data(), sans.size(), {ExactMatcher(
"bar.baz.com")}));
161 sans.data(), sans.size(), {ExactMatcher(
"abc")}));
163 sans.data(), sans.size(), {ExactMatcher(
"abc.com.")}));
165 sans.data(), sans.size(), {ExactMatcher(
"bar.baz.com")}));
168 TEST(XdsSanMatchingTest, ExactMatchAsteriskOnlyPermittedInLeftMostDomainName) {
169 std::vector<const char*> sans = {
"*.example.*.com"};
171 sans.data(), sans.size(), {ExactMatcher(
"abc.example.xyz.com")}));
172 sans = {
"*.exam*ple.com"};
174 sans.data(), sans.size(), {ExactMatcher(
"abc.example.com")}));
177 TEST(XdsSanMatchingTest,
178 ExactMatchAsteriskMustBeOnlyCharacterInLeftMostDomainName) {
179 std::vector<const char*> sans = {
"*c.example.com"};
181 sans.data(), sans.size(), {ExactMatcher(
"abc.example.com")}));
184 TEST(XdsSanMatchingTest,
185 ExactMatchAsteriskMatchingAcrossDomainLabelsNotPermitted) {
186 std::vector<const char*> sans = {
"*.com"};
188 sans.data(), sans.size(), {ExactMatcher(
"abc.example.com")}));
190 sans.data(), sans.size(), {ExactMatcher(
"foo.bar.baz.com")}));
192 sans.data(), sans.size(), {ExactMatcher(
"abc.com")}));
195 TEST(XdsSanMatchingTest, PrefixMatch) {
196 std::vector<const char*> sans = {
"abc.com"};
198 {PrefixMatcher(
"abc")}));
201 sans.data(), sans.size(), {PrefixMatcher(
"abc")}));
204 sans.data(), sans.size(), {PrefixMatcher(
"abc")}));
207 TEST(XdsSanMatchingTest, PrefixMatchIgnoreCase) {
208 std::vector<const char*> sans = {
"aBc.cOm"};
210 sans.data(), sans.size(),
211 {PrefixMatcher(
"AbC", false )}));
214 sans.data(), sans.size(),
215 {PrefixMatcher(
"AbC", false )}));
218 sans.data(), sans.size(),
219 {PrefixMatcher(
"AbC", false )}));
222 TEST(XdsSanMatchingTest, SuffixMatch) {
223 std::vector<const char*> sans = {
"abc.com"};
225 sans.data(), sans.size(), {SuffixMatcher(
".com")}));
228 sans.data(), sans.size(), {SuffixMatcher(
".com")}));
231 sans.data(), sans.size(), {SuffixMatcher(
".com")}));
234 TEST(XdsSanMatchingTest, SuffixMatchIgnoreCase) {
235 std::vector<const char*> sans = {
"abc.com"};
237 sans.data(), sans.size(),
238 {SuffixMatcher(
".CoM", false )}));
241 sans.data(), sans.size(),
242 {SuffixMatcher(
".CoM", false )}));
245 sans.data(), sans.size(),
246 {SuffixMatcher(
".CoM", false )}));
249 TEST(XdsSanMatchingTest, ContainsMatch) {
250 std::vector<const char*> sans = {
"abc.com"};
252 sans.data(), sans.size(), {ContainsMatcher(
"abc")}));
253 sans = {
"xyz.abc.com"};
255 sans.data(), sans.size(), {ContainsMatcher(
"abc")}));
256 sans = {
"foo.AbC.com"};
258 sans.data(), sans.size(), {ContainsMatcher(
"abc")}));
261 TEST(XdsSanMatchingTest, ContainsMatchIgnoresCase) {
262 std::vector<const char*> sans = {
"abc.com"};
264 sans.data(), sans.size(),
265 {ContainsMatcher(
"AbC", false )}));
266 sans = {
"xyz.abc.com"};
268 sans.data(), sans.size(),
269 {ContainsMatcher(
"AbC", false )}));
270 sans = {
"foo.aBc.com"};
272 sans.data(), sans.size(),
273 {ContainsMatcher(
"AbC", false )}));
274 sans = {
"foo.Ab.com"};
276 sans.data(), sans.size(),
277 {ContainsMatcher(
"AbC", false )}));
280 TEST(XdsSanMatchingTest, RegexMatch) {
281 std::vector<const char*> sans = {
"abc.example.com"};
283 sans.data(), sans.size(), {SafeRegexMatcher(
"(abc|xyz).example.com")}));
284 sans = {
"xyz.example.com"};
286 sans.data(), sans.size(), {SafeRegexMatcher(
"(abc|xyz).example.com")}));
287 sans = {
"foo.example.com"};
289 sans.data(), sans.size(), {SafeRegexMatcher(
"(abc|xyz).example.com")}));
292 TEST(XdsCertificateVerifierTest, CompareSuccess) {
293 XdsCertificateVerifier verifier_1(
nullptr,
"");
294 XdsCertificateVerifier verifier_2(
nullptr,
"");
295 EXPECT_EQ(verifier_1.Compare(&verifier_2), 0);
296 EXPECT_EQ(verifier_2.Compare(&verifier_1), 0);
299 TEST(XdsCertificateVerifierTest, CompareFailureDifferentCertificateProviders) {
300 XdsCertificateVerifier verifier_1(MakeRefCounted<XdsCertificateProvider>(),
302 XdsCertificateVerifier verifier_2(MakeRefCounted<XdsCertificateProvider>(),
304 EXPECT_NE(verifier_1.Compare(&verifier_2), 0);
305 EXPECT_NE(verifier_2.Compare(&verifier_1), 0);
308 TEST(XdsCertificateVerifierTest, CompareFailureDifferentClusterNames) {
309 XdsCertificateVerifier verifier_1(
nullptr,
"cluster1");
310 XdsCertificateVerifier verifier_2(
nullptr,
"cluster2");
311 EXPECT_NE(verifier_1.Compare(&verifier_2), 0);
312 EXPECT_NE(verifier_2.Compare(&verifier_1), 0);
320 int main(
int argc,
char** argv) {