use of io.grpc.xds.XdsClient.CdsResourceWatcher in project grpc-java by grpc.
the class ClientXdsClientTestBase method edsResourceDeletedByCds.
@Test
public void edsResourceDeletedByCds() {
String resource = "backend-service.googleapis.com";
CdsResourceWatcher cdsWatcher = mock(CdsResourceWatcher.class);
EdsResourceWatcher edsWatcher = mock(EdsResourceWatcher.class);
xdsClient.watchCdsResource(resource, cdsWatcher);
xdsClient.watchEdsResource(resource, edsWatcher);
xdsClient.watchCdsResource(CDS_RESOURCE, cdsResourceWatcher);
xdsClient.watchEdsResource(EDS_RESOURCE, edsResourceWatcher);
verifyResourceMetadataRequested(CDS, CDS_RESOURCE);
verifyResourceMetadataRequested(CDS, resource);
verifyResourceMetadataRequested(EDS, EDS_RESOURCE);
verifyResourceMetadataRequested(EDS, resource);
verifySubscribedResourcesMetadataSizes(0, 2, 0, 2);
DiscoveryRpcCall call = resourceDiscoveryCalls.poll();
List<Any> clusters = ImmutableList.of(Any.pack(mf.buildEdsCluster(resource, null, "round_robin", null, null, true, null, "envoy.transport_sockets.tls", null)), Any.pack(mf.buildEdsCluster(CDS_RESOURCE, EDS_RESOURCE, "round_robin", null, null, false, null, "envoy.transport_sockets.tls", null)));
call.sendResponse(CDS, clusters, VERSION_1, "0000");
verify(cdsWatcher).onChanged(cdsUpdateCaptor.capture());
CdsUpdate cdsUpdate = cdsUpdateCaptor.getValue();
assertThat(cdsUpdate.edsServiceName()).isEqualTo(null);
assertThat(cdsUpdate.lrsServerInfo()).isEqualTo(lrsServerInfo);
verify(cdsResourceWatcher).onChanged(cdsUpdateCaptor.capture());
cdsUpdate = cdsUpdateCaptor.getValue();
assertThat(cdsUpdate.edsServiceName()).isEqualTo(EDS_RESOURCE);
assertThat(cdsUpdate.lrsServerInfo()).isNull();
verifyResourceMetadataAcked(CDS, resource, clusters.get(0), VERSION_1, TIME_INCREMENT);
verifyResourceMetadataAcked(CDS, CDS_RESOURCE, clusters.get(1), VERSION_1, TIME_INCREMENT);
verifyResourceMetadataRequested(EDS, EDS_RESOURCE);
verifyResourceMetadataRequested(EDS, resource);
List<Any> clusterLoadAssignments = ImmutableList.of(Any.pack(mf.buildClusterLoadAssignment(EDS_RESOURCE, ImmutableList.of(lbEndpointHealthy), ImmutableList.of(mf.buildDropOverload("lb", 200), mf.buildDropOverload("throttle", 1000)))), Any.pack(mf.buildClusterLoadAssignment(resource, ImmutableList.of(mf.buildLocalityLbEndpoints("region2", "zone2", "subzone2", mf.buildLbEndpoint("192.168.0.2", 9090, "healthy", 3), 1, 0)), ImmutableList.of(mf.buildDropOverload("lb", 100)))));
call.sendResponse(EDS, clusterLoadAssignments, VERSION_1, "0000");
verify(edsWatcher).onChanged(edsUpdateCaptor.capture());
assertThat(edsUpdateCaptor.getValue().clusterName).isEqualTo(resource);
verify(edsResourceWatcher).onChanged(edsUpdateCaptor.capture());
assertThat(edsUpdateCaptor.getValue().clusterName).isEqualTo(EDS_RESOURCE);
verifyResourceMetadataAcked(EDS, EDS_RESOURCE, clusterLoadAssignments.get(0), VERSION_1, TIME_INCREMENT * 2);
verifyResourceMetadataAcked(EDS, resource, clusterLoadAssignments.get(1), VERSION_1, TIME_INCREMENT * 2);
// CDS not changed.
verifyResourceMetadataAcked(CDS, resource, clusters.get(0), VERSION_1, TIME_INCREMENT);
verifyResourceMetadataAcked(CDS, CDS_RESOURCE, clusters.get(1), VERSION_1, TIME_INCREMENT);
verifySubscribedResourcesMetadataSizes(0, 2, 0, 2);
clusters = ImmutableList.of(Any.pack(mf.buildEdsCluster(resource, null, "round_robin", null, null, true, null, "envoy.transport_sockets.tls", // no change
null)), Any.pack(mf.buildEdsCluster(CDS_RESOURCE, null, "round_robin", null, null, false, null, "envoy.transport_sockets.tls", null)));
call.sendResponse(CDS, clusters, VERSION_2, "0001");
verify(cdsResourceWatcher, times(2)).onChanged(cdsUpdateCaptor.capture());
assertThat(cdsUpdateCaptor.getValue().edsServiceName()).isNull();
verify(edsResourceWatcher).onResourceDoesNotExist(EDS_RESOURCE);
verifyNoMoreInteractions(cdsWatcher, edsWatcher);
verifyResourceMetadataDoesNotExist(EDS, EDS_RESOURCE);
verifyResourceMetadataAcked(EDS, resource, clusterLoadAssignments.get(1), VERSION_1, // no change
TIME_INCREMENT * 2);
verifyResourceMetadataAcked(CDS, resource, clusters.get(0), VERSION_2, TIME_INCREMENT * 3);
verifyResourceMetadataAcked(CDS, CDS_RESOURCE, clusters.get(1), VERSION_2, TIME_INCREMENT * 3);
verifySubscribedResourcesMetadataSizes(0, 2, 0, 2);
}
use of io.grpc.xds.XdsClient.CdsResourceWatcher in project grpc-java by grpc.
the class ClientXdsClientTestBase method cachedCdsResource_data.
@Test
public void cachedCdsResource_data() {
DiscoveryRpcCall call = startResourceWatcher(CDS, CDS_RESOURCE, cdsResourceWatcher);
call.sendResponse(CDS, testClusterRoundRobin, VERSION_1, "0000");
// Client sends an ACK CDS request.
call.verifyRequest(CDS, CDS_RESOURCE, VERSION_1, "0000", NODE);
CdsResourceWatcher watcher = mock(CdsResourceWatcher.class);
xdsClient.watchCdsResource(CDS_RESOURCE, watcher);
verify(watcher).onChanged(cdsUpdateCaptor.capture());
CdsUpdate cdsUpdate = cdsUpdateCaptor.getValue();
assertThat(cdsUpdate.clusterName()).isEqualTo(CDS_RESOURCE);
assertThat(cdsUpdate.clusterType()).isEqualTo(ClusterType.EDS);
assertThat(cdsUpdate.edsServiceName()).isNull();
assertThat(cdsUpdate.lbPolicy()).isEqualTo(LbPolicy.ROUND_ROBIN);
assertThat(cdsUpdate.lrsServerInfo()).isNull();
assertThat(cdsUpdate.maxConcurrentRequests()).isNull();
assertThat(cdsUpdate.upstreamTlsContext()).isNull();
call.verifyNoMoreRequest();
verifyResourceMetadataAcked(CDS, CDS_RESOURCE, testClusterRoundRobin, VERSION_1, TIME_INCREMENT);
verifySubscribedResourcesMetadataSizes(0, 1, 0, 0);
}
use of io.grpc.xds.XdsClient.CdsResourceWatcher in project grpc-java by grpc.
the class ClientXdsClientTestBase method cachedCdsResource_absent.
@Test
public void cachedCdsResource_absent() {
DiscoveryRpcCall call = startResourceWatcher(CDS, CDS_RESOURCE, cdsResourceWatcher);
fakeClock.forwardTime(ClientXdsClient.INITIAL_RESOURCE_FETCH_TIMEOUT_SEC, TimeUnit.SECONDS);
verify(cdsResourceWatcher).onResourceDoesNotExist(CDS_RESOURCE);
CdsResourceWatcher watcher = mock(CdsResourceWatcher.class);
xdsClient.watchCdsResource(CDS_RESOURCE, watcher);
verify(watcher).onResourceDoesNotExist(CDS_RESOURCE);
call.verifyNoMoreRequest();
verifyResourceMetadataDoesNotExist(CDS, CDS_RESOURCE);
verifySubscribedResourcesMetadataSizes(0, 1, 0, 0);
}
use of io.grpc.xds.XdsClient.CdsResourceWatcher in project grpc-java by grpc.
the class ClientXdsClientTestBase method multipleCdsWatchers.
@Test
public void multipleCdsWatchers() {
String cdsResourceTwo = "cluster-bar.googleapis.com";
CdsResourceWatcher watcher1 = mock(CdsResourceWatcher.class);
CdsResourceWatcher watcher2 = mock(CdsResourceWatcher.class);
xdsClient.watchCdsResource(CDS_RESOURCE, cdsResourceWatcher);
xdsClient.watchCdsResource(cdsResourceTwo, watcher1);
xdsClient.watchCdsResource(cdsResourceTwo, watcher2);
DiscoveryRpcCall call = resourceDiscoveryCalls.poll();
call.verifyRequest(CDS, Arrays.asList(CDS_RESOURCE, cdsResourceTwo), "", "", NODE);
verifyResourceMetadataRequested(CDS, CDS_RESOURCE);
verifyResourceMetadataRequested(CDS, cdsResourceTwo);
verifySubscribedResourcesMetadataSizes(0, 2, 0, 0);
fakeClock.forwardTime(ClientXdsClient.INITIAL_RESOURCE_FETCH_TIMEOUT_SEC, TimeUnit.SECONDS);
verify(cdsResourceWatcher).onResourceDoesNotExist(CDS_RESOURCE);
verify(watcher1).onResourceDoesNotExist(cdsResourceTwo);
verify(watcher2).onResourceDoesNotExist(cdsResourceTwo);
verifyResourceMetadataDoesNotExist(CDS, CDS_RESOURCE);
verifyResourceMetadataDoesNotExist(CDS, cdsResourceTwo);
verifySubscribedResourcesMetadataSizes(0, 2, 0, 0);
String dnsHostAddr = "dns-service-bar.googleapis.com";
int dnsHostPort = 443;
String edsService = "eds-service-bar.googleapis.com";
List<Any> clusters = ImmutableList.of(Any.pack(mf.buildLogicalDnsCluster(CDS_RESOURCE, dnsHostAddr, dnsHostPort, "round_robin", null, null, false, null, null)), Any.pack(mf.buildEdsCluster(cdsResourceTwo, edsService, "round_robin", null, null, true, null, "envoy.transport_sockets.tls", null)));
call.sendResponse(CDS, clusters, VERSION_1, "0000");
verify(cdsResourceWatcher).onChanged(cdsUpdateCaptor.capture());
CdsUpdate cdsUpdate = cdsUpdateCaptor.getValue();
assertThat(cdsUpdate.clusterName()).isEqualTo(CDS_RESOURCE);
assertThat(cdsUpdate.clusterType()).isEqualTo(ClusterType.LOGICAL_DNS);
assertThat(cdsUpdate.dnsHostName()).isEqualTo(dnsHostAddr + ":" + dnsHostPort);
assertThat(cdsUpdate.lbPolicy()).isEqualTo(LbPolicy.ROUND_ROBIN);
assertThat(cdsUpdate.lrsServerInfo()).isNull();
assertThat(cdsUpdate.maxConcurrentRequests()).isNull();
assertThat(cdsUpdate.upstreamTlsContext()).isNull();
verify(watcher1).onChanged(cdsUpdateCaptor.capture());
cdsUpdate = cdsUpdateCaptor.getValue();
assertThat(cdsUpdate.clusterName()).isEqualTo(cdsResourceTwo);
assertThat(cdsUpdate.clusterType()).isEqualTo(ClusterType.EDS);
assertThat(cdsUpdate.edsServiceName()).isEqualTo(edsService);
assertThat(cdsUpdate.lbPolicy()).isEqualTo(LbPolicy.ROUND_ROBIN);
assertThat(cdsUpdate.lrsServerInfo()).isEqualTo(lrsServerInfo);
assertThat(cdsUpdate.maxConcurrentRequests()).isNull();
assertThat(cdsUpdate.upstreamTlsContext()).isNull();
verify(watcher2).onChanged(cdsUpdateCaptor.capture());
cdsUpdate = cdsUpdateCaptor.getValue();
assertThat(cdsUpdate.clusterName()).isEqualTo(cdsResourceTwo);
assertThat(cdsUpdate.clusterType()).isEqualTo(ClusterType.EDS);
assertThat(cdsUpdate.edsServiceName()).isEqualTo(edsService);
assertThat(cdsUpdate.lbPolicy()).isEqualTo(LbPolicy.ROUND_ROBIN);
assertThat(cdsUpdate.lrsServerInfo()).isEqualTo(lrsServerInfo);
assertThat(cdsUpdate.maxConcurrentRequests()).isNull();
assertThat(cdsUpdate.upstreamTlsContext()).isNull();
// Metadata of both clusters is stored.
verifyResourceMetadataAcked(CDS, CDS_RESOURCE, clusters.get(0), VERSION_1, TIME_INCREMENT);
verifyResourceMetadataAcked(CDS, cdsResourceTwo, clusters.get(1), VERSION_1, TIME_INCREMENT);
verifySubscribedResourcesMetadataSizes(0, 2, 0, 0);
}
Aggregations