|
26 | 26 |
|
27 | 27 | import com.google.common.collect.ImmutableList; |
28 | 28 | import com.google.common.collect.ImmutableMap; |
| 29 | +import io.envoyproxy.envoy.config.listener.v3.Listener; |
29 | 30 | import io.grpc.MetricRecorder; |
30 | 31 | import io.grpc.Status; |
31 | 32 | import io.grpc.StatusOr; |
@@ -142,6 +143,39 @@ public void isolatedResourceDeletions() { |
142 | 143 | verify(mockDirectPathWatcher, never()).onAmbientError(any()); |
143 | 144 | } |
144 | 145 |
|
| 146 | + /** |
| 147 | + * Assures that resource updates happening in one control plane do not trigger update events |
| 148 | + * in watchers of resources owned by other control planes. |
| 149 | + */ |
| 150 | + @Test |
| 151 | + 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)); |
| 162 | + |
| 163 | + xdsClient.watchXdsResource(XdsListenerResource.getInstance(), "test-server", mockWatcher); |
| 164 | + xdsClient.watchXdsResource(XdsListenerResource.getInstance(), |
| 165 | + "xdstp://server-one/envoy.config.listener.v3.Listener/test-server", mockDirectPathWatcher); |
| 166 | + |
| 167 | + verify(mockWatcher, timeout(10000)).onResourceChanged(any()); |
| 168 | + // mockDirectPathWatcher should not receive the update sent by trafficdirector. |
| 169 | + verify(mockDirectPathWatcher, never()).onResourceChanged(any()); |
| 170 | + |
| 171 | + // When server-one sends its LDS config, mockDirectPathWatcher should then receive the update. |
| 172 | + directpathPa.setLdsConfig(ControlPlaneRule.buildServerListener(), |
| 173 | + ControlPlaneRule.buildClientListener( |
| 174 | + "xdstp://server-one/envoy.config.listener.v3.Listener/test-server")); |
| 175 | + |
| 176 | + verify(mockDirectPathWatcher, timeout(10000)).onResourceChanged(any()); |
| 177 | + } |
| 178 | + |
145 | 179 | /** |
146 | 180 | * Assures that when an {@link XdsClient} is asked to add cluster locality stats it appropriately |
147 | 181 | * starts {@link LoadReportClient}s to do that. |
|
0 commit comments