@@ -183,7 +183,8 @@ func registerWrappedCDSPolicy(t *testing.T) chan balancer.Balancer {
183
183
}
184
184
185
185
// Performs the following setup required for tests:
186
- // - Spins up an xDS management server
186
+ // - Spins up an xDS management server and and the provided onStreamRequest
187
+ // function is set to be called for every incoming request on the ADS stream.
187
188
// - Creates an xDS client talking to this management server
188
189
// - Creates a manual resolver that configures the cds LB policy as the
189
190
// top-level policy, and pushes an initial configuration to it
@@ -195,39 +196,11 @@ func registerWrappedCDSPolicy(t *testing.T) chan balancer.Balancer {
195
196
// - the grpc channel to the test backend service
196
197
// - the manual resolver configured on the channel
197
198
// - the xDS client used the grpc channel
198
- // - a channel on which requested cluster resource names are sent
199
- // - a channel used to signal that previously requested cluster resources are
200
- // no longer requested
201
- func setupWithManagementServer (t * testing.T ) (* e2e.ManagementServer , string , * grpc.ClientConn , * manual.Resolver , xdsclient.XDSClient , chan []string , chan struct {}) {
202
- return setupWithManagementServerAndListener (t , nil )
203
- }
204
-
205
- // Same as setupWithManagementServer, but also allows the caller to specify
206
- // a listener to be used by the management server.
207
- func setupWithManagementServerAndListener (t * testing.T , lis net.Listener ) (* e2e.ManagementServer , string , * grpc.ClientConn , * manual.Resolver , xdsclient.XDSClient , chan []string , chan struct {}) {
199
+ func setupWithManagementServer (t * testing.T , lis net.Listener , onStreamRequest func (int64 , * v3discoverypb.DiscoveryRequest ) error ) (* e2e.ManagementServer , string , * grpc.ClientConn , * manual.Resolver , xdsclient.XDSClient ) {
208
200
t .Helper ()
209
-
210
- cdsResourceRequestedCh := make (chan []string , 1 )
211
- cdsResourceCanceledCh := make (chan struct {}, 1 )
212
201
mgmtServer := e2e .StartManagementServer (t , e2e.ManagementServerOptions {
213
- Listener : lis ,
214
- OnStreamRequest : func (_ int64 , req * v3discoverypb.DiscoveryRequest ) error {
215
- if req .GetTypeUrl () == version .V3ClusterURL {
216
- switch len (req .GetResourceNames ()) {
217
- case 0 :
218
- select {
219
- case cdsResourceCanceledCh <- struct {}{}:
220
- default :
221
- }
222
- default :
223
- select {
224
- case cdsResourceRequestedCh <- req .GetResourceNames ():
225
- default :
226
- }
227
- }
228
- }
229
- return nil
230
- },
202
+ Listener : lis ,
203
+ OnStreamRequest : onStreamRequest ,
231
204
// Required for aggregate clusters as all resources cannot be requested
232
205
// at once.
233
206
AllowResourceSubset : true ,
@@ -268,7 +241,7 @@ func setupWithManagementServerAndListener(t *testing.T, lis net.Listener) (*e2e.
268
241
cc .Connect ()
269
242
t .Cleanup (func () { cc .Close () })
270
243
271
- return mgmtServer , nodeID , cc , r , xdsC , cdsResourceRequestedCh , cdsResourceCanceledCh
244
+ return mgmtServer , nodeID , cc , r , xdsC
272
245
}
273
246
274
247
// Helper function to compare the load balancing configuration received on the
@@ -321,11 +294,23 @@ func verifyRPCError(gotErr error, wantCode codes.Code, wantErr, wantNodeID strin
321
294
// configuration changes, it stops requesting the old cluster resource and
322
295
// starts requesting the new one.
323
296
func (s ) TestConfigurationUpdate_Success (t * testing.T ) {
324
- _ , _ , _ , r , xdsClient , cdsResourceRequestedCh , _ := setupWithManagementServer (t )
325
-
326
- // Verify that the specified cluster resource is requested.
327
297
ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
328
298
defer cancel ()
299
+ cdsResourceRequestedCh := make (chan []string , 1 )
300
+ onStreamReq := func (_ int64 , req * v3discoverypb.DiscoveryRequest ) error {
301
+ if req .GetTypeUrl () == version .V3ClusterURL {
302
+ if len (req .GetResourceNames ()) > 0 {
303
+ select {
304
+ case cdsResourceRequestedCh <- req .GetResourceNames ():
305
+ case <- ctx .Done ():
306
+ }
307
+ }
308
+ }
309
+ return nil
310
+ }
311
+ _ , _ , _ , r , xdsClient := setupWithManagementServer (t , nil , onStreamReq )
312
+
313
+ // Verify that the specified cluster resource is requested.
329
314
wantNames := []string {clusterName }
330
315
if err := waitForResourceNames (ctx , cdsResourceRequestedCh , wantNames ); err != nil {
331
316
t .Fatal (err )
@@ -616,7 +601,7 @@ func (s) TestClusterUpdate_Success(t *testing.T) {
616
601
for _ , test := range tests {
617
602
t .Run (test .name , func (t * testing.T ) {
618
603
lbCfgCh , _ , _ , _ := registerWrappedClusterResolverPolicy (t )
619
- mgmtServer , nodeID , _ , _ , _ , _ , _ := setupWithManagementServer (t )
604
+ mgmtServer , nodeID , _ , _ , _ := setupWithManagementServer (t , nil , nil )
620
605
621
606
ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
622
607
defer cancel ()
@@ -640,7 +625,7 @@ func (s) TestClusterUpdate_Success(t *testing.T) {
640
625
// balancing configuration pushed to the child is as expected.
641
626
func (s ) TestClusterUpdate_SuccessWithLRS (t * testing.T ) {
642
627
lbCfgCh , _ , _ , _ := registerWrappedClusterResolverPolicy (t )
643
- mgmtServer , nodeID , _ , _ , _ , _ , _ := setupWithManagementServer (t )
628
+ mgmtServer , nodeID , _ , _ , _ := setupWithManagementServer (t , nil , nil )
644
629
645
630
clusterResource := e2e .ClusterResourceWithOptions (e2e.ClusterOptions {
646
631
ClusterName : clusterName ,
@@ -689,15 +674,21 @@ func (s) TestClusterUpdate_SuccessWithLRS(t *testing.T) {
689
674
// continue using the previous good update.
690
675
func (s ) TestClusterUpdate_Failure (t * testing.T ) {
691
676
_ , resolverErrCh , _ , _ := registerWrappedClusterResolverPolicy (t )
692
- mgmtServer , nodeID , cc , _ , _ , cdsResourceRequestedCh , cdsResourceCanceledCh := setupWithManagementServer (t )
693
-
694
- // Verify that the specified cluster resource is requested.
695
677
ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
696
678
defer cancel ()
697
- wantNames := []string {clusterName }
698
- if err := waitForResourceNames (ctx , cdsResourceRequestedCh , wantNames ); err != nil {
699
- t .Fatal (err )
679
+ cdsResourceCanceledCh := make (chan struct {}, 1 )
680
+ onStreamReq := func (_ int64 , req * v3discoverypb.DiscoveryRequest ) error {
681
+ if req .GetTypeUrl () == version .V3ClusterURL {
682
+ if len (req .GetResourceNames ()) == 0 {
683
+ select {
684
+ case cdsResourceCanceledCh <- struct {}{}:
685
+ case <- ctx .Done ():
686
+ }
687
+ }
688
+ }
689
+ return nil
700
690
}
691
+ mgmtServer , nodeID , cc , _ , _ := setupWithManagementServer (t , nil , onStreamReq )
701
692
702
693
// Configure the management server to return a cluster resource that
703
694
// contains a config_source_specifier for the `lrs_server` field which is not
@@ -806,12 +797,31 @@ func (s) TestClusterUpdate_Failure(t *testing.T) {
806
797
func (s ) TestResolverError (t * testing.T ) {
807
798
_ , resolverErrCh , _ , childPolicyCloseCh := registerWrappedClusterResolverPolicy (t )
808
799
lis := testutils .NewListenerWrapper (t , nil )
809
- mgmtServer , nodeID , cc , r , _ , cdsResourceRequestedCh , cdsResourceCanceledCh := setupWithManagementServerAndListener (t , lis )
800
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
801
+ defer cancel ()
802
+ cdsResourceCanceledCh := make (chan struct {}, 1 )
803
+ cdsResourceRequestedCh := make (chan []string , 1 )
804
+ onStreamReq := func (_ int64 , req * v3discoverypb.DiscoveryRequest ) error {
805
+ if req .GetTypeUrl () == version .V3ClusterURL {
806
+ switch len (req .GetResourceNames ()) {
807
+ case 0 :
808
+ select {
809
+ case cdsResourceCanceledCh <- struct {}{}:
810
+ case <- ctx .Done ():
811
+ }
812
+ default :
813
+ select {
814
+ case cdsResourceRequestedCh <- req .GetResourceNames ():
815
+ case <- ctx .Done ():
816
+ }
817
+ }
818
+ }
819
+ return nil
820
+ }
821
+ mgmtServer , nodeID , cc , r , _ := setupWithManagementServer (t , lis , onStreamReq )
810
822
811
823
// Grab the wrapped connection from the listener wrapper. This will be used
812
824
// to verify the connection is closed.
813
- ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
814
- defer cancel ()
815
825
val , err := lis .NewConnCh .Receive (ctx )
816
826
if err != nil {
817
827
t .Fatalf ("Failed to receive new connection from wrapped listener: %v" , err )
@@ -949,15 +959,21 @@ func (s) TestResolverError(t *testing.T) {
949
959
// - when the cluster resource is re-sent by the management server, RPCs
950
960
// should start succeeding.
951
961
func (s ) TestClusterUpdate_ResourceNotFound (t * testing.T ) {
952
- mgmtServer , nodeID , cc , _ , _ , cdsResourceRequestedCh , cdsResourceCanceledCh := setupWithManagementServer (t )
953
-
954
- // Verify that the specified cluster resource is requested.
955
962
ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
956
963
defer cancel ()
957
- wantNames := []string {clusterName }
958
- if err := waitForResourceNames (ctx , cdsResourceRequestedCh , wantNames ); err != nil {
959
- t .Fatal (err )
964
+ cdsResourceCanceledCh := make (chan struct {}, 1 )
965
+ onStreamReq := func (_ int64 , req * v3discoverypb.DiscoveryRequest ) error {
966
+ if req .GetTypeUrl () == version .V3ClusterURL {
967
+ if len (req .GetResourceNames ()) == 0 {
968
+ select {
969
+ case cdsResourceCanceledCh <- struct {}{}:
970
+ case <- ctx .Done ():
971
+ }
972
+ }
973
+ }
974
+ return nil
960
975
}
976
+ mgmtServer , nodeID , cc , _ , _ := setupWithManagementServer (t , nil , onStreamReq )
961
977
962
978
// Start a test service backend.
963
979
server := stubserver .StartTestService (t , nil )
@@ -1028,7 +1044,7 @@ func (s) TestClusterUpdate_ResourceNotFound(t *testing.T) {
1028
1044
func (s ) TestClose (t * testing.T ) {
1029
1045
cdsBalancerCh := registerWrappedCDSPolicy (t )
1030
1046
_ , _ , _ , childPolicyCloseCh := registerWrappedClusterResolverPolicy (t )
1031
- mgmtServer , nodeID , cc , _ , _ , _ , _ := setupWithManagementServer (t )
1047
+ mgmtServer , nodeID , cc , _ , _ := setupWithManagementServer (t , nil , nil )
1032
1048
1033
1049
// Start a test service backend.
1034
1050
server := stubserver .StartTestService (t , nil )
@@ -1075,7 +1091,7 @@ func (s) TestClose(t *testing.T) {
1075
1091
func (s ) TestExitIdle (t * testing.T ) {
1076
1092
cdsBalancerCh := registerWrappedCDSPolicy (t )
1077
1093
_ , _ , exitIdleCh , _ := registerWrappedClusterResolverPolicy (t )
1078
- mgmtServer , nodeID , cc , _ , _ , _ , _ := setupWithManagementServer (t )
1094
+ mgmtServer , nodeID , cc , _ , _ := setupWithManagementServer (t , nil , nil )
1079
1095
1080
1096
// Start a test service backend.
1081
1097
server := stubserver .StartTestService (t , nil )
0 commit comments