@@ -25,9 +25,14 @@ import (
25
25
"regexp"
26
26
"testing"
27
27
28
+ "google.golang.org/grpc/credentials/tls/certprovider"
28
29
"google.golang.org/grpc/internal/xds/matcher"
29
30
)
30
31
32
+ type testCertProvider struct {
33
+ certprovider.Provider
34
+ }
35
+
31
36
func TestDNSMatch (t * testing.T ) {
32
37
tests := []struct {
33
38
desc string
@@ -300,3 +305,88 @@ func TestMatchingSANExists_Success(t *testing.T) {
300
305
func newStringP (s string ) * string {
301
306
return & s
302
307
}
308
+
309
+ func TestEqual (t * testing.T ) {
310
+ tests := []struct {
311
+ desc string
312
+ hi1 * HandshakeInfo
313
+ hi2 * HandshakeInfo
314
+ wantMatch bool
315
+ }{
316
+ {
317
+ desc : "both HandshakeInfo are nil" ,
318
+ hi1 : nil ,
319
+ hi2 : nil ,
320
+ wantMatch : true ,
321
+ },
322
+ {
323
+ desc : "one HandshakeInfo is nil" ,
324
+ hi1 : nil ,
325
+ hi2 : NewHandshakeInfo (& testCertProvider {}, nil , nil , false ),
326
+ wantMatch : false ,
327
+ },
328
+ {
329
+ desc : "different root providers" ,
330
+ hi1 : NewHandshakeInfo (& testCertProvider {}, nil , nil , false ),
331
+ hi2 : NewHandshakeInfo (& testCertProvider {}, nil , nil , false ),
332
+ wantMatch : false ,
333
+ },
334
+ {
335
+ desc : "same providers, same SAN matchers" ,
336
+ hi1 : NewHandshakeInfo (testCertProvider {}, testCertProvider {}, []matcher.StringMatcher {
337
+ matcher .StringMatcherForTesting (newStringP ("foo.com" ), nil , nil , nil , nil , false ),
338
+ }, false ),
339
+ hi2 : NewHandshakeInfo (testCertProvider {}, testCertProvider {}, []matcher.StringMatcher {
340
+ matcher .StringMatcherForTesting (newStringP ("foo.com" ), nil , nil , nil , nil , false ),
341
+ }, false ),
342
+ wantMatch : true ,
343
+ },
344
+ {
345
+ desc : "same providers, different SAN matchers" ,
346
+ hi1 : NewHandshakeInfo (testCertProvider {}, testCertProvider {}, []matcher.StringMatcher {
347
+ matcher .StringMatcherForTesting (newStringP ("foo.com" ), nil , nil , nil , nil , false ),
348
+ }, false ),
349
+ hi2 : NewHandshakeInfo (testCertProvider {}, testCertProvider {}, []matcher.StringMatcher {
350
+ matcher .StringMatcherForTesting (newStringP ("bar.com" ), nil , nil , nil , nil , false ),
351
+ }, false ),
352
+ wantMatch : false ,
353
+ },
354
+ {
355
+ desc : "same SAN matchers with different content" ,
356
+ hi1 : NewHandshakeInfo (& testCertProvider {}, & testCertProvider {}, []matcher.StringMatcher {
357
+ matcher .StringMatcherForTesting (newStringP ("foo.com" ), nil , nil , nil , nil , false ),
358
+ }, false ),
359
+ hi2 : NewHandshakeInfo (& testCertProvider {}, & testCertProvider {}, []matcher.StringMatcher {
360
+ matcher .StringMatcherForTesting (newStringP ("foo.com" ), nil , nil , nil , nil , false ),
361
+ matcher .StringMatcherForTesting (newStringP ("bar.com" ), nil , nil , nil , nil , false ),
362
+ }, false ),
363
+ wantMatch : false ,
364
+ },
365
+ {
366
+ desc : "different requireClientCert flags" ,
367
+ hi1 : NewHandshakeInfo (& testCertProvider {}, & testCertProvider {}, nil , true ),
368
+ hi2 : NewHandshakeInfo (& testCertProvider {}, & testCertProvider {}, nil , false ),
369
+ wantMatch : false ,
370
+ },
371
+ {
372
+ desc : "same identity provider, different root provider" ,
373
+ hi1 : NewHandshakeInfo (& testCertProvider {}, testCertProvider {}, nil , false ),
374
+ hi2 : NewHandshakeInfo (& testCertProvider {}, testCertProvider {}, nil , false ),
375
+ wantMatch : false ,
376
+ },
377
+ {
378
+ desc : "different identity provider, same root provider" ,
379
+ hi1 : NewHandshakeInfo (testCertProvider {}, & testCertProvider {}, nil , false ),
380
+ hi2 : NewHandshakeInfo (testCertProvider {}, & testCertProvider {}, nil , false ),
381
+ wantMatch : false ,
382
+ },
383
+ }
384
+
385
+ for _ , test := range tests {
386
+ t .Run (test .desc , func (t * testing.T ) {
387
+ if gotMatch := test .hi1 .Equal (test .hi2 ); gotMatch != test .wantMatch {
388
+ t .Errorf ("hi1.Equal(hi2) = %v; wantMatch %v" , gotMatch , test .wantMatch )
389
+ }
390
+ })
391
+ }
392
+ }
0 commit comments