@@ -22,7 +22,6 @@ package xds
22
22
23
23
import (
24
24
"encoding/json"
25
- "fmt"
26
25
"reflect"
27
26
"sync"
28
27
"testing"
@@ -37,19 +36,13 @@ import (
37
36
"google.golang.org/grpc/internal/grpctest"
38
37
"google.golang.org/grpc/internal/leakcheck"
39
38
"google.golang.org/grpc/resolver"
40
- "google.golang.org/grpc/serviceconfig"
41
39
)
42
40
43
41
var lbABuilder = & balancerABuilder {}
44
42
45
43
func init () {
46
44
balancer .Register (lbABuilder )
47
45
balancer .Register (& balancerBBuilder {})
48
- testServiceConfigFooBar , testLBConfigFooBar = constructServiceConfigFromXdsConfig (& testBalancerConfig {
49
- BalancerName : testBalancerNameFooBar ,
50
- ChildPolicy : []lbPolicy {fakeBalancerA },
51
- FallbackPolicy : []lbPolicy {fakeBalancerA },
52
- })
53
46
}
54
47
55
48
type s struct {}
@@ -62,18 +55,19 @@ func Test(t *testing.T) {
62
55
grpctest .RunSubTests (t , s {})
63
56
}
64
57
65
- type lbPolicy string
66
-
67
58
const (
68
- fakeBalancerA lbPolicy = "fake_balancer_A"
69
- fakeBalancerB lbPolicy = "fake_balancer_B"
70
- fakeBalancerC lbPolicy = "fake_balancer_C"
59
+ fakeBalancerA = "fake_balancer_A"
60
+ fakeBalancerB = "fake_balancer_B"
61
+ fakeBalancerC = "fake_balancer_C"
71
62
)
72
63
73
64
var (
74
- testBalancerNameFooBar = "foo.bar"
75
- testServiceConfigFooBar serviceconfig.Config
76
- testLBConfigFooBar serviceconfig.LoadBalancingConfig
65
+ testBalancerNameFooBar = "foo.bar"
66
+ testLBConfigFooBar = & xdsConfig {
67
+ BalancerName : testBalancerNameFooBar ,
68
+ ChildPolicy : & loadBalancingConfig {Name : fakeBalancerA },
69
+ FallBackPolicy : & loadBalancingConfig {Name : fakeBalancerA },
70
+ }
77
71
78
72
specialAddrForBalancerA = resolver.Address {Addr : "this.is.balancer.A" }
79
73
specialAddrForBalancerB = resolver.Address {Addr : "this.is.balancer.B" }
83
77
latestFakeEdsBalancer * fakeEDSBalancer
84
78
)
85
79
86
- type testBalancerConfig struct {
87
- BalancerName string `json:"balancerName,omitempty"`
88
- ChildPolicy []lbPolicy `json:"childPolicy,omitempty"`
89
- FallbackPolicy []lbPolicy `json:"fallbackPolicy,omitempty"`
90
- }
91
-
92
- func (l * lbPolicy ) UnmarshalJSON (b []byte ) error {
93
- // no need to implement, not used.
94
- return nil
95
- }
96
-
97
- func (l lbPolicy ) MarshalJSON () ([]byte , error ) {
98
- m := make (map [string ]struct {})
99
- m [string (l )] = struct {}{}
100
- return json .Marshal (m )
101
- }
102
-
103
- type serviceConfig struct {
104
- LoadBalancingConfig []* loadBalancingConfig
105
- }
106
-
107
- func constructServiceConfigFromXdsConfig (xdsCfg * testBalancerConfig ) (serviceconfig.Config , serviceconfig.LoadBalancingConfig ) {
108
- cfgRaw , err := json .Marshal (xdsCfg )
109
- if err != nil {
110
- panic (fmt .Sprintf ("Error from json.Marshal(%+v): %v" , xdsCfg , err ))
111
- }
112
- sc := & serviceConfig {
113
- LoadBalancingConfig : []* loadBalancingConfig {
114
- {
115
- Name : xdsName ,
116
- Config : cfgRaw ,
117
- },
118
- },
119
- }
120
- jsonSC , err := json .Marshal (sc )
121
- if err != nil {
122
- panic (fmt .Sprintf ("Error from json.Marshal(%+v): %v" , sc , err ))
123
- }
124
- parsedSC , err := serviceconfig .Parse (string (jsonSC ))
125
- if err != nil {
126
- panic (fmt .Sprintf ("Error from serviceconfig.Parse(%q): %v" , jsonSC , err ))
127
- }
128
- parsedLBC , err := (& xdsBalancerBuilder {}).ParseConfig (cfgRaw )
129
- if err != nil {
130
- panic (fmt .Sprintf ("Error from xdsBalancerBuilder.Parse(%q): %v" , cfgRaw , err ))
131
- }
132
- return parsedSC , parsedLBC
133
- }
134
-
135
80
type balancerABuilder struct {
136
81
mu sync.Mutex
137
82
lastBalancer * balancerA
@@ -306,10 +251,7 @@ func (s) TestXdsBalanceHandleResolvedAddrs(t *testing.T) {
306
251
addrs := []resolver.Address {{Addr : "1.1.1.1:10001" }, {Addr : "2.2.2.2:10002" }, {Addr : "3.3.3.3:10003" }}
307
252
for i := 0 ; i < 3 ; i ++ {
308
253
lb .UpdateClientConnState (balancer.ClientConnState {
309
- ResolverState : resolver.State {
310
- Addresses : addrs ,
311
- ServiceConfig : testServiceConfigFooBar ,
312
- },
254
+ ResolverState : resolver.State {Addresses : addrs },
313
255
BalancerConfig : testLBConfigFooBar ,
314
256
})
315
257
select {
@@ -342,10 +284,7 @@ func (s) TestXdsBalanceHandleBalancerConfigBalancerNameUpdate(t *testing.T) {
342
284
defer lb .Close ()
343
285
addrs := []resolver.Address {{Addr : "1.1.1.1:10001" }, {Addr : "2.2.2.2:10002" }, {Addr : "3.3.3.3:10003" }}
344
286
lb .UpdateClientConnState (balancer.ClientConnState {
345
- ResolverState : resolver.State {
346
- Addresses : addrs ,
347
- ServiceConfig : testServiceConfigFooBar ,
348
- },
287
+ ResolverState : resolver.State {Addresses : addrs },
349
288
BalancerConfig : testLBConfigFooBar ,
350
289
})
351
290
@@ -370,16 +309,13 @@ func (s) TestXdsBalanceHandleBalancerConfigBalancerNameUpdate(t *testing.T) {
370
309
for i := 0 ; i < 2 ; i ++ {
371
310
addr , td , _ , cleanup := setupServer (t )
372
311
cleanups = append (cleanups , cleanup )
373
- workingServiceConfig , workingLBConfig := constructServiceConfigFromXdsConfig ( & testBalancerConfig {
312
+ workingLBConfig := & xdsConfig {
374
313
BalancerName : addr ,
375
- ChildPolicy : [] lbPolicy { fakeBalancerA },
376
- FallbackPolicy : [] lbPolicy { fakeBalancerA },
377
- })
314
+ ChildPolicy : & loadBalancingConfig { Name : fakeBalancerA },
315
+ FallBackPolicy : & loadBalancingConfig { Name : fakeBalancerA },
316
+ }
378
317
lb .UpdateClientConnState (balancer.ClientConnState {
379
- ResolverState : resolver.State {
380
- Addresses : addrs ,
381
- ServiceConfig : workingServiceConfig ,
382
- },
318
+ ResolverState : resolver.State {Addresses : addrs },
383
319
BalancerConfig : workingLBConfig ,
384
320
})
385
321
td .sendResp (& response {resp : testEDSRespWithoutEndpoints })
@@ -429,13 +365,16 @@ func (s) TestXdsBalanceHandleBalancerConfigChildPolicyUpdate(t *testing.T) {
429
365
}
430
366
}()
431
367
for _ , test := range []struct {
432
- cfg * testBalancerConfig
368
+ cfg * xdsConfig
433
369
responseToSend * discoverypb.DiscoveryResponse
434
370
expectedChildPolicy * loadBalancingConfig
435
371
}{
436
372
{
437
- cfg : & testBalancerConfig {
438
- ChildPolicy : []lbPolicy {fakeBalancerA },
373
+ cfg : & xdsConfig {
374
+ ChildPolicy : & loadBalancingConfig {
375
+ Name : fakeBalancerA ,
376
+ Config : json .RawMessage ("{}" ),
377
+ },
439
378
},
440
379
responseToSend : testEDSRespWithoutEndpoints ,
441
380
expectedChildPolicy : & loadBalancingConfig {
@@ -444,16 +383,19 @@ func (s) TestXdsBalanceHandleBalancerConfigChildPolicyUpdate(t *testing.T) {
444
383
},
445
384
},
446
385
{
447
- cfg : & testBalancerConfig {
448
- ChildPolicy : []lbPolicy {fakeBalancerB },
386
+ cfg : & xdsConfig {
387
+ ChildPolicy : & loadBalancingConfig {
388
+ Name : fakeBalancerB ,
389
+ Config : json .RawMessage ("{}" ),
390
+ },
449
391
},
450
392
expectedChildPolicy : & loadBalancingConfig {
451
393
Name : string (fakeBalancerB ),
452
394
Config : json .RawMessage (`{}` ),
453
395
},
454
396
},
455
397
{
456
- cfg : & testBalancerConfig {},
398
+ cfg : & xdsConfig {},
457
399
responseToSend : testCDSResp ,
458
400
expectedChildPolicy : & loadBalancingConfig {
459
401
Name : "ROUND_ROBIN" ,
@@ -464,13 +406,7 @@ func (s) TestXdsBalanceHandleBalancerConfigChildPolicyUpdate(t *testing.T) {
464
406
cleanups = append (cleanups , cleanup )
465
407
test .cfg .BalancerName = addr
466
408
467
- sc , lbc := constructServiceConfigFromXdsConfig (test .cfg )
468
- lb .UpdateClientConnState (balancer.ClientConnState {
469
- ResolverState : resolver.State {
470
- ServiceConfig : sc ,
471
- },
472
- BalancerConfig : lbc ,
473
- })
409
+ lb .UpdateClientConnState (balancer.ClientConnState {BalancerConfig : test .cfg })
474
410
if test .responseToSend != nil {
475
411
td .sendResp (& response {resp : test .responseToSend })
476
412
}
@@ -497,7 +433,7 @@ func (s) TestXdsBalanceHandleBalancerConfigChildPolicyUpdate(t *testing.T) {
497
433
498
434
// not in fallback mode, overwrite fallback info.
499
435
// in fallback mode, update config or switch balancer.
500
- func (s ) TestXdsBalanceHandleBalancerConfigFallbackUpdate (t * testing.T ) {
436
+ func (s ) TestXdsBalanceHandleBalancerConfigFallBackUpdate (t * testing.T ) {
501
437
originalNewEDSBalancer := newEDSBalancer
502
438
newEDSBalancer = newFakeEDSBalancer
503
439
defer func () {
@@ -514,28 +450,19 @@ func (s) TestXdsBalanceHandleBalancerConfigFallbackUpdate(t *testing.T) {
514
450
515
451
addr , td , _ , cleanup := setupServer (t )
516
452
517
- cfg := & testBalancerConfig {
453
+ cfg := xdsConfig {
518
454
BalancerName : addr ,
519
- ChildPolicy : [] lbPolicy { fakeBalancerA },
520
- FallbackPolicy : [] lbPolicy { fakeBalancerA },
455
+ ChildPolicy : & loadBalancingConfig { Name : fakeBalancerA },
456
+ FallBackPolicy : & loadBalancingConfig { Name : fakeBalancerA },
521
457
}
522
- sc , lbc := constructServiceConfigFromXdsConfig (cfg )
523
- lb .UpdateClientConnState (balancer.ClientConnState {
524
- ResolverState : resolver.State {
525
- ServiceConfig : sc ,
526
- },
527
- BalancerConfig : lbc ,
528
- })
458
+ lb .UpdateClientConnState (balancer.ClientConnState {BalancerConfig : & cfg })
529
459
530
460
addrs := []resolver.Address {{Addr : "1.1.1.1:10001" }, {Addr : "2.2.2.2:10002" }, {Addr : "3.3.3.3:10003" }}
531
- cfg . FallbackPolicy = [] lbPolicy { fakeBalancerB }
532
- sc , lbc = constructServiceConfigFromXdsConfig ( cfg )
461
+ cfg2 := cfg
462
+ cfg2 . FallBackPolicy = & loadBalancingConfig { Name : fakeBalancerB }
533
463
lb .UpdateClientConnState (balancer.ClientConnState {
534
- ResolverState : resolver.State {
535
- Addresses : addrs ,
536
- ServiceConfig : sc ,
537
- },
538
- BalancerConfig : lbc ,
464
+ ResolverState : resolver.State {Addresses : addrs },
465
+ BalancerConfig : & cfg2 ,
539
466
})
540
467
541
468
td .sendResp (& response {resp : testEDSRespWithoutEndpoints })
@@ -563,14 +490,11 @@ func (s) TestXdsBalanceHandleBalancerConfigFallbackUpdate(t *testing.T) {
563
490
t .Fatalf ("timeout when geting new subconn result" )
564
491
}
565
492
566
- cfg . FallbackPolicy = [] lbPolicy { fakeBalancerA }
567
- sc , lbc = constructServiceConfigFromXdsConfig ( cfg )
493
+ cfg3 := cfg
494
+ cfg3 . FallBackPolicy = & loadBalancingConfig { Name : fakeBalancerA }
568
495
lb .UpdateClientConnState (balancer.ClientConnState {
569
- ResolverState : resolver.State {
570
- Addresses : addrs ,
571
- ServiceConfig : sc ,
572
- },
573
- BalancerConfig : lbc ,
496
+ ResolverState : resolver.State {Addresses : addrs },
497
+ BalancerConfig : & cfg3 ,
574
498
})
575
499
576
500
// verify fallback balancer A takes over
@@ -601,18 +525,12 @@ func (s) TestXdsBalancerHandlerSubConnStateChange(t *testing.T) {
601
525
602
526
addr , td , _ , cleanup := setupServer (t )
603
527
defer cleanup ()
604
- cfg := & testBalancerConfig {
528
+ cfg := & xdsConfig {
605
529
BalancerName : addr ,
606
- ChildPolicy : [] lbPolicy { fakeBalancerA },
607
- FallbackPolicy : [] lbPolicy { fakeBalancerA },
530
+ ChildPolicy : & loadBalancingConfig { Name : fakeBalancerA },
531
+ FallBackPolicy : & loadBalancingConfig { Name : fakeBalancerA },
608
532
}
609
- sc , lbc := constructServiceConfigFromXdsConfig (cfg )
610
- lb .UpdateClientConnState (balancer.ClientConnState {
611
- ResolverState : resolver.State {
612
- ServiceConfig : sc ,
613
- },
614
- BalancerConfig : lbc ,
615
- })
533
+ lb .UpdateClientConnState (balancer.ClientConnState {BalancerConfig : cfg })
616
534
617
535
td .sendResp (& response {resp : testEDSRespWithoutEndpoints })
618
536
@@ -668,7 +586,7 @@ func (s) TestXdsBalancerHandlerSubConnStateChange(t *testing.T) {
668
586
}
669
587
}
670
588
671
- func (s ) TestXdsBalancerFallbackSignalFromEdsBalancer (t * testing.T ) {
589
+ func (s ) TestXdsBalancerFallBackSignalFromEdsBalancer (t * testing.T ) {
672
590
originalNewEDSBalancer := newEDSBalancer
673
591
newEDSBalancer = newFakeEDSBalancer
674
592
defer func () {
@@ -685,18 +603,12 @@ func (s) TestXdsBalancerFallbackSignalFromEdsBalancer(t *testing.T) {
685
603
686
604
addr , td , _ , cleanup := setupServer (t )
687
605
defer cleanup ()
688
- cfg := & testBalancerConfig {
606
+ cfg := & xdsConfig {
689
607
BalancerName : addr ,
690
- ChildPolicy : [] lbPolicy { fakeBalancerA },
691
- FallbackPolicy : [] lbPolicy { fakeBalancerA },
608
+ ChildPolicy : & loadBalancingConfig { Name : fakeBalancerA },
609
+ FallBackPolicy : & loadBalancingConfig { Name : fakeBalancerA },
692
610
}
693
- sc , lbc := constructServiceConfigFromXdsConfig (cfg )
694
- lb .UpdateClientConnState (balancer.ClientConnState {
695
- ResolverState : resolver.State {
696
- ServiceConfig : sc ,
697
- },
698
- BalancerConfig : lbc ,
699
- })
611
+ lb .UpdateClientConnState (balancer.ClientConnState {BalancerConfig : cfg })
700
612
701
613
td .sendResp (& response {resp : testEDSRespWithoutEndpoints })
702
614
@@ -753,16 +665,16 @@ func (s) TestXdsBalancerFallbackSignalFromEdsBalancer(t *testing.T) {
753
665
}
754
666
755
667
func (s ) TestXdsBalancerConfigParsingSelectingLBPolicy (t * testing.T ) {
756
- tesCfg := & testBalancerConfig {
757
- BalancerName : "fake.foo.bar" ,
758
- ChildPolicy : []lbPolicy {fakeBalancerC , fakeBalancerA , fakeBalancerB }, // selects fakeBalancerA
759
- FallbackPolicy : []lbPolicy {fakeBalancerC , fakeBalancerB , fakeBalancerA }, // selects fakeBalancerB
760
- }
761
- js , _ := json .Marshal (tesCfg )
762
- var xdsCfg xdsConfig
763
- if err := json .Unmarshal (js , & xdsCfg ); err != nil {
764
- t .Fatal ("unable to unmarshal balancer config into xds config" )
668
+ js := json .RawMessage (`{
669
+ "balancerName": "fake.foo.bar",
670
+ "childPolicy": [{"fake_balancer_C": {}}, {"fake_balancer_A": {}}, {"fake_balancer_B": {}}],
671
+ "fallbackPolicy": [{"fake_balancer_C": {}}, {"fake_balancer_B": {}}, {"fake_balancer_A": {}}]
672
+ }` )
673
+ cfg , err := (& xdsBalancerBuilder {}).ParseConfig (js )
674
+ if err != nil {
675
+ t .Fatalf ("unable to unmarshal balancer config into xds config: %v" , err )
765
676
}
677
+ xdsCfg := cfg .(* xdsConfig )
766
678
wantChildPolicy := & loadBalancingConfig {Name : string (fakeBalancerA ), Config : json .RawMessage (`{}` )}
767
679
if ! reflect .DeepEqual (xdsCfg .ChildPolicy , wantChildPolicy ) {
768
680
t .Fatalf ("got child policy %v, want %v" , xdsCfg .ChildPolicy , wantChildPolicy )
0 commit comments