|
26 | 26 |
|
27 | 27 | import com.google.common.collect.ImmutableList; |
28 | 28 | import com.google.common.collect.ImmutableMap; |
| 29 | +import com.google.protobuf.Any; |
29 | 30 | import io.envoyproxy.envoy.config.listener.v3.Listener; |
| 31 | +import io.envoyproxy.envoy.service.discovery.v3.DiscoveryResponse; |
30 | 32 | import io.grpc.MetricRecorder; |
31 | 33 | import io.grpc.Status; |
32 | 34 | import io.grpc.StatusOr; |
@@ -149,22 +151,34 @@ public void isolatedResourceDeletions() { |
149 | 151 | */ |
150 | 152 | @Test |
151 | 153 | public void isolatedResourceUpdates() { |
152 | | - Listener serverListener = ControlPlaneRule.buildServerListener(); |
153 | | - Listener clientListener1 = ControlPlaneRule.buildClientListener("test-server"); |
154 | | - Listener clientListener2 = ControlPlaneRule.buildClientListener( |
155 | | - "xdstp://server-one/envoy.config.listener.v3.Listener/test-server"); |
156 | | - // trafficdirector (top-level server) erroneously sends a listener owned by server-one. |
157 | | - trafficdirector.getService().setXdsConfig(XdsTestControlPlaneService.ADS_TYPE_URL_LDS, |
158 | | - ImmutableMap.of( |
159 | | - serverListener.getName(), serverListener, |
160 | | - clientListener1.getName(), clientListener1, |
161 | | - clientListener2.getName(), clientListener2)); |
| 154 | + trafficdirector.setLdsConfig(ControlPlaneRule.buildServerListener(), |
| 155 | + ControlPlaneRule.buildClientListener("test-server")); |
162 | 156 |
|
163 | 157 | xdsClient.watchXdsResource(XdsListenerResource.getInstance(), "test-server", mockWatcher); |
164 | 158 | xdsClient.watchXdsResource(XdsListenerResource.getInstance(), |
165 | 159 | "xdstp://server-one/envoy.config.listener.v3.Listener/test-server", mockDirectPathWatcher); |
166 | 160 |
|
167 | 161 | verify(mockWatcher, timeout(10000)).onResourceChanged(any()); |
| 162 | + |
| 163 | + // trafficdirector (top-level server) erroneously sends a response containing both an update |
| 164 | + // for test-server and a listener owned by server-one. |
| 165 | + Listener alienListener = ControlPlaneRule.buildClientListener( |
| 166 | + "xdstp://server-one/envoy.config.listener.v3.Listener/test-server"); |
| 167 | + Listener updatedClientListener = ControlPlaneRule.buildClientListener("test-server", |
| 168 | + "new-route-config.googleapis.com"); |
| 169 | + DiscoveryResponse rogueResponse = DiscoveryResponse.newBuilder() |
| 170 | + .setTypeUrl(XdsTestControlPlaneService.ADS_TYPE_URL_LDS) |
| 171 | + .setVersionInfo("rogue-version-1") |
| 172 | + .setNonce("rogue-nonce-1") |
| 173 | + .addResources(Any.pack(updatedClientListener)) |
| 174 | + .addResources(Any.pack(alienListener)) |
| 175 | + .build(); |
| 176 | + trafficdirector.getService().sendDiscoveryResponse(rogueResponse); |
| 177 | + |
| 178 | + // Confirm that trafficdirector's second response was processed by waiting for mockWatcher |
| 179 | + // to receive the updated test-server config. |
| 180 | + verify(mockWatcher, timeout(10000).times(2)).onResourceChanged(any()); |
| 181 | + |
168 | 182 | // mockDirectPathWatcher should not receive the update sent by trafficdirector. |
169 | 183 | verify(mockDirectPathWatcher, never()).onResourceChanged(any()); |
170 | 184 |
|
|
0 commit comments