@@ -134,5 +134,36 @@ describe('core xDS functionality', () => {
134134 } ) ;
135135 } , reason => done ( reason ) ) ;
136136 } , 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+
137168 } )
138169} ) ;
0 commit comments