@@ -34,7 +34,7 @@ import (
34
34
"github.com/nats-io/nkeys"
35
35
36
36
"github.com/klauspost/compress/s2"
37
- jwt "github.com/nats-io/jwt/v2"
37
+ "github.com/nats-io/jwt/v2"
38
38
"github.com/nats-io/nats.go"
39
39
40
40
"github.com/nats-io/nats-server/v2/internal/testhelper"
@@ -337,12 +337,45 @@ func TestLeafNodeTLSRemoteWithNoCerts(t *testing.T) {
337
337
338
338
type captureErrorLogger struct {
339
339
DummyLogger
340
- errCh chan string
340
+ filter func (string ) bool
341
+ errCh chan string
342
+ sync.Mutex
343
+ }
344
+
345
+ func (l * captureErrorLogger ) setFilter (f func (string ) bool ) {
346
+ l .Lock ()
347
+ l .filter = f
348
+ l .Unlock ()
341
349
}
342
350
343
351
func (l * captureErrorLogger ) Errorf (format string , v ... any ) {
352
+ msg := fmt .Sprintf (format , v ... )
353
+
354
+ l .Lock ()
355
+ defer l .Unlock ()
356
+
357
+ if l .filter != nil && ! l .filter (msg ) {
358
+ return
359
+ }
360
+
344
361
select {
345
- case l .errCh <- fmt .Sprintf (format , v ... ):
362
+ case l .errCh <- msg :
363
+ default :
364
+ }
365
+ }
366
+
367
+ func (l * captureErrorLogger ) Debugf (format string , v ... any ) {
368
+ msg := fmt .Sprintf (format , v ... )
369
+
370
+ l .Lock ()
371
+ defer l .Unlock ()
372
+
373
+ if l .filter != nil && ! l .filter (msg ) {
374
+ return
375
+ }
376
+
377
+ select {
378
+ case l .errCh <- msg :
346
379
default :
347
380
}
348
381
}
@@ -2624,7 +2657,7 @@ func TestLeafNodeTLSConfigReload(t *testing.T) {
2624
2657
defer srvA .Shutdown ()
2625
2658
2626
2659
lg := & captureErrorLogger {errCh : make (chan string , 10 )}
2627
- srvA .SetLogger (lg , false , false )
2660
+ srvA .SetLogger (lg , true , false )
2628
2661
2629
2662
confB := createConfFile (t , []byte (fmt .Sprintf (`
2630
2663
listen: -1
@@ -2652,16 +2685,17 @@ func TestLeafNodeTLSConfigReload(t *testing.T) {
2652
2685
srvB := RunServer (optsB )
2653
2686
defer srvB .Shutdown ()
2654
2687
2655
- // Wait for the error
2656
- select {
2657
- case err := <- lg .errCh :
2688
+ lg .setFilter (func (m string ) bool {
2658
2689
// Since Go 1.18, we had to regenerate certs to not have to use GODEBUG="x509sha1=1"
2659
2690
// But on macOS, with our test CA certs, no SCTs included, it will fail
2660
2691
// for the reason "x509: “localhost” certificate is not standards compliant"
2661
2692
// instead of "unknown authority".
2662
- if ! strings .Contains (err , "unknown" ) && ! strings .Contains (err , "compliant" ) {
2663
- t .Fatalf ("Unexpected error: %v" , err )
2664
- }
2693
+ return strings .Contains (m , "unknown" ) || strings .Contains (m , "compliant" )
2694
+ })
2695
+
2696
+ // Wait for the error
2697
+ select {
2698
+ case <- lg .errCh :
2665
2699
case <- time .After (2 * time .Second ):
2666
2700
t .Fatalf ("Did not get TLS error" )
2667
2701
}
@@ -2697,7 +2731,7 @@ func TestLeafNodeTLSConfigReloadForRemote(t *testing.T) {
2697
2731
defer srvA .Shutdown ()
2698
2732
2699
2733
lg := & captureErrorLogger {errCh : make (chan string , 10 )}
2700
- srvA .SetLogger (lg , false , false )
2734
+ srvA .SetLogger (lg , true , false )
2701
2735
2702
2736
template := `
2703
2737
listen: -1
@@ -2719,12 +2753,12 @@ func TestLeafNodeTLSConfigReloadForRemote(t *testing.T) {
2719
2753
srvB , _ := RunServerWithConfig (confB )
2720
2754
defer srvB .Shutdown ()
2721
2755
2756
+ lg .setFilter (func (m string ) bool {
2757
+ return strings .Contains (m , "bad certificate" )
2758
+ })
2722
2759
// Wait for the error
2723
2760
select {
2724
- case err := <- lg .errCh :
2725
- if ! strings .Contains (err , "bad certificate" ) {
2726
- t .Fatalf ("Unexpected error: %v" , err )
2727
- }
2761
+ case <- lg .errCh :
2728
2762
case <- time .After (2 * time .Second ):
2729
2763
t .Fatalf ("Did not get TLS error" )
2730
2764
}
@@ -3076,13 +3110,13 @@ func TestLeafNodeWSFailedConnection(t *testing.T) {
3076
3110
defer ln .Shutdown ()
3077
3111
3078
3112
el := & captureErrorLogger {errCh : make (chan string , 100 )}
3079
- ln .SetLogger (el , false , false )
3113
+ ln .SetLogger (el , true , false )
3080
3114
3115
+ el .setFilter (func (m string ) bool {
3116
+ return strings .Contains (m , "handshake error" )
3117
+ })
3081
3118
select {
3082
- case err := <- el .errCh :
3083
- if ! strings .Contains (err , "handshake error" ) {
3084
- t .Fatalf ("Unexpected error: %v" , err )
3085
- }
3119
+ case <- el .errCh :
3086
3120
case <- time .After (time .Second ):
3087
3121
t .Fatal ("No error reported!" )
3088
3122
}
@@ -5002,17 +5036,18 @@ func TestLeafNodeTLSHandshakeFirst(t *testing.T) {
5002
5036
// handshake first since the hub is configured that way.
5003
5037
// Set a logger on s1 to capture errors
5004
5038
l := & captureErrorLogger {errCh : make (chan string , 10 )}
5005
- s1 .SetLogger (l , false , false )
5039
+ s1 .SetLogger (l , true , false )
5006
5040
5007
5041
confSpoke = createConfFile (t , []byte (fmt .Sprintf (tmpl2 , o1 .LeafNode .Port , "false" )))
5008
5042
s2 , _ = RunServerWithConfig (confSpoke )
5009
5043
defer s2 .Shutdown ()
5010
5044
5045
+ l .setFilter (func (m string ) bool {
5046
+ return strings .Contains (m , "handshake error" )
5047
+ })
5048
+
5011
5049
select {
5012
- case err := <- l .errCh :
5013
- if ! strings .Contains (err , "handshake error" ) {
5014
- t .Fatalf ("Unexpected error: %v" , err )
5015
- }
5050
+ case <- l .errCh :
5016
5051
case <- time .After (2 * time .Second ):
5017
5052
t .Fatal ("Did not get TLS handshake failure" )
5018
5053
}
0 commit comments