@@ -134,5 +134,36 @@ describe('core xDS functionality', () => {
134
134
} ) ;
135
135
} , reason => done ( reason ) ) ;
136
136
} , reason => done ( reason ) ) ;
137
+ } ) ;
138
+ it ( 'should handle cluster config changes' , async ( ) => {
139
+ const [ backend1 , backend2 ] = await createBackends ( 2 ) ;
140
+ const serverRoute1 = new FakeServerRoute ( backend1 . getPort ( ) , 'serverRoute' ) ;
141
+ const serverRoute2 = new FakeServerRoute ( backend2 . getPort ( ) , 'serverRoute2' ) ;
142
+ xdsServer . setRdsResource ( serverRoute1 . getRouteConfiguration ( ) ) ;
143
+ xdsServer . setLdsResource ( serverRoute1 . getListener ( ) ) ;
144
+ xdsServer . setRdsResource ( serverRoute2 . getRouteConfiguration ( ) ) ;
145
+ xdsServer . setLdsResource ( serverRoute2 . getListener ( ) ) ;
146
+ xdsServer . addResponseListener ( ( typeUrl , responseState ) => {
147
+ if ( responseState . state === 'NACKED' ) {
148
+ client ?. stopCalls ( ) ;
149
+ assert . fail ( `Client NACKED ${ typeUrl } resource with message ${ responseState . errorMessage } ` ) ;
150
+ }
151
+ } ) ;
152
+ const cluster1 = new FakeEdsCluster ( 'cluster1' , 'endpoint1' , [ { backends : [ backend1 ] , locality :{ region : 'region1' } } ] ) ;
153
+ const routeGroup1 = new FakeRouteGroup ( 'listener1' , 'route1' , [ { cluster : cluster1 } ] ) ;
154
+ await routeGroup1 . startAllBackends ( xdsServer ) ;
155
+ xdsServer . setEdsResource ( cluster1 . getEndpointConfig ( ) ) ;
156
+ xdsServer . setCdsResource ( cluster1 . getClusterConfig ( ) ) ;
157
+ xdsServer . setRdsResource ( routeGroup1 . getRouteConfiguration ( ) ) ;
158
+ xdsServer . setLdsResource ( routeGroup1 . getListener ( ) ) ;
159
+ client = XdsTestClient . createFromServer ( 'listener1' , xdsServer ) ;
160
+ client . startCalls ( 100 ) ;
161
+ await cluster1 . waitForAllBackendsToReceiveTraffic ( ) ;
162
+ const cluster2 = new FakeEdsCluster ( 'cluster1' , 'endpoint1' , [ { backends : [ backend2 ] , locality :{ region : 'region2' } } ] ) ;
163
+ await cluster2 . startAllBackends ( xdsServer ) ;
164
+ xdsServer . setEdsResource ( cluster2 . getEndpointConfig ( ) ) ;
165
+ await cluster2 . waitForAllBackendsToReceiveTraffic ( ) ;
166
+ client . stopCalls ( ) ;
167
+
137
168
} )
138
169
} ) ;
0 commit comments