use of io.grpc.xds.XdsClient.EdsUpdate in project grpc-java by grpc.
the class ClientXdsClientTestBase method edsResourceUpdated.
@Test
public void edsResourceUpdated() {
DiscoveryRpcCall call = startResourceWatcher(EDS, EDS_RESOURCE, edsResourceWatcher);
verifyResourceMetadataRequested(EDS, EDS_RESOURCE);
// Initial EDS response.
call.sendResponse(EDS, testClusterLoadAssignment, VERSION_1, "0000");
call.verifyRequest(EDS, EDS_RESOURCE, VERSION_1, "0000", NODE);
verify(edsResourceWatcher).onChanged(edsUpdateCaptor.capture());
EdsUpdate edsUpdate = edsUpdateCaptor.getValue();
validateTestClusterLoadAssigment(edsUpdate);
verifyResourceMetadataAcked(EDS, EDS_RESOURCE, testClusterLoadAssignment, VERSION_1, TIME_INCREMENT);
// Updated EDS response.
Any updatedClusterLoadAssignment = Any.pack(mf.buildClusterLoadAssignment(EDS_RESOURCE, ImmutableList.of(mf.buildLocalityLbEndpoints("region2", "zone2", "subzone2", mf.buildLbEndpoint("172.44.2.2", 8000, "unknown", 3), 2, 0)), ImmutableList.<Message>of()));
call.sendResponse(EDS, updatedClusterLoadAssignment, VERSION_2, "0001");
verify(edsResourceWatcher, times(2)).onChanged(edsUpdateCaptor.capture());
edsUpdate = edsUpdateCaptor.getValue();
assertThat(edsUpdate.clusterName).isEqualTo(EDS_RESOURCE);
assertThat(edsUpdate.dropPolicies).isEmpty();
assertThat(edsUpdate.localityLbEndpointsMap).containsExactly(Locality.create("region2", "zone2", "subzone2"), LocalityLbEndpoints.create(ImmutableList.of(LbEndpoint.create("172.44.2.2", 8000, 3, true)), 2, 0));
verifyResourceMetadataAcked(EDS, EDS_RESOURCE, updatedClusterLoadAssignment, VERSION_2, TIME_INCREMENT * 2);
verifySubscribedResourcesMetadataSizes(0, 0, 0, 1);
}
use of io.grpc.xds.XdsClient.EdsUpdate in project grpc-java by grpc.
the class ClientXdsClientTestBase method multipleEdsWatchers.
@Test
public void multipleEdsWatchers() {
String edsResourceTwo = "cluster-load-assignment-bar.googleapis.com";
EdsResourceWatcher watcher1 = mock(EdsResourceWatcher.class);
EdsResourceWatcher watcher2 = mock(EdsResourceWatcher.class);
xdsClient.watchEdsResource(EDS_RESOURCE, edsResourceWatcher);
xdsClient.watchEdsResource(edsResourceTwo, watcher1);
xdsClient.watchEdsResource(edsResourceTwo, watcher2);
DiscoveryRpcCall call = resourceDiscoveryCalls.poll();
call.verifyRequest(EDS, Arrays.asList(EDS_RESOURCE, edsResourceTwo), "", "", NODE);
verifyResourceMetadataRequested(EDS, EDS_RESOURCE);
verifyResourceMetadataRequested(EDS, edsResourceTwo);
verifySubscribedResourcesMetadataSizes(0, 0, 0, 2);
fakeClock.forwardTime(ClientXdsClient.INITIAL_RESOURCE_FETCH_TIMEOUT_SEC, TimeUnit.SECONDS);
verify(edsResourceWatcher).onResourceDoesNotExist(EDS_RESOURCE);
verify(watcher1).onResourceDoesNotExist(edsResourceTwo);
verify(watcher2).onResourceDoesNotExist(edsResourceTwo);
verifyResourceMetadataDoesNotExist(EDS, EDS_RESOURCE);
verifyResourceMetadataDoesNotExist(EDS, edsResourceTwo);
verifySubscribedResourcesMetadataSizes(0, 0, 0, 2);
call.sendResponse(EDS, testClusterLoadAssignment, VERSION_1, "0000");
verify(edsResourceWatcher).onChanged(edsUpdateCaptor.capture());
EdsUpdate edsUpdate = edsUpdateCaptor.getValue();
validateTestClusterLoadAssigment(edsUpdate);
verifyNoMoreInteractions(watcher1, watcher2);
verifyResourceMetadataAcked(EDS, EDS_RESOURCE, testClusterLoadAssignment, VERSION_1, TIME_INCREMENT);
verifyResourceMetadataDoesNotExist(EDS, edsResourceTwo);
verifySubscribedResourcesMetadataSizes(0, 0, 0, 2);
Any clusterLoadAssignmentTwo = Any.pack(mf.buildClusterLoadAssignment(edsResourceTwo, ImmutableList.of(mf.buildLocalityLbEndpoints("region2", "zone2", "subzone2", mf.buildLbEndpoint("172.44.2.2", 8000, "healthy", 3), 2, 0)), ImmutableList.<Message>of()));
call.sendResponse(EDS, clusterLoadAssignmentTwo, VERSION_2, "0001");
verify(watcher1).onChanged(edsUpdateCaptor.capture());
edsUpdate = edsUpdateCaptor.getValue();
assertThat(edsUpdate.clusterName).isEqualTo(edsResourceTwo);
assertThat(edsUpdate.dropPolicies).isEmpty();
assertThat(edsUpdate.localityLbEndpointsMap).containsExactly(Locality.create("region2", "zone2", "subzone2"), LocalityLbEndpoints.create(ImmutableList.of(LbEndpoint.create("172.44.2.2", 8000, 3, true)), 2, 0));
verify(watcher2).onChanged(edsUpdateCaptor.capture());
edsUpdate = edsUpdateCaptor.getValue();
assertThat(edsUpdate.clusterName).isEqualTo(edsResourceTwo);
assertThat(edsUpdate.dropPolicies).isEmpty();
assertThat(edsUpdate.localityLbEndpointsMap).containsExactly(Locality.create("region2", "zone2", "subzone2"), LocalityLbEndpoints.create(ImmutableList.of(LbEndpoint.create("172.44.2.2", 8000, 3, true)), 2, 0));
verifyNoMoreInteractions(edsResourceWatcher);
verifyResourceMetadataAcked(EDS, edsResourceTwo, clusterLoadAssignmentTwo, VERSION_2, TIME_INCREMENT * 2);
verifyResourceMetadataAcked(EDS, EDS_RESOURCE, testClusterLoadAssignment, VERSION_1, TIME_INCREMENT);
verifySubscribedResourcesMetadataSizes(0, 0, 0, 2);
}
use of io.grpc.xds.XdsClient.EdsUpdate in project grpc-java by grpc.
the class ClientXdsClientTestBase method edsResponseErrorHandling_someResourcesFailedUnpack.
@Test
public void edsResponseErrorHandling_someResourcesFailedUnpack() {
DiscoveryRpcCall call = startResourceWatcher(EDS, EDS_RESOURCE, edsResourceWatcher);
verifyResourceMetadataRequested(EDS, EDS_RESOURCE);
// Correct resource is in the middle to ensure processing continues on errors.
List<Any> resources = ImmutableList.of(FAILING_ANY, testClusterLoadAssignment, FAILING_ANY);
call.sendResponse(EDS, resources, VERSION_1, "0000");
// All errors recorded in the metadata of successfully unpacked subscribed resources.
List<String> errors = ImmutableList.of("EDS response Resource index 0 - can't decode ClusterLoadAssignment: ", "EDS response Resource index 2 - can't decode ClusterLoadAssignment: ");
verifyResourceMetadataAcked(EDS, EDS_RESOURCE, testClusterLoadAssignment, VERSION_1, TIME_INCREMENT);
verifySubscribedResourcesMetadataSizes(0, 0, 0, 1);
// The response is NACKed with the same error message.
call.verifyRequestNack(EDS, EDS_RESOURCE, "", "0000", NODE, errors);
verify(edsResourceWatcher).onChanged(edsUpdateCaptor.capture());
EdsUpdate edsUpdate = edsUpdateCaptor.getValue();
assertThat(edsUpdate.clusterName).isEqualTo(EDS_RESOURCE);
}
Aggregations