Skip to content

Commit fc60ef9

Browse files
committed
Added unit test to verify ResourceMetadata.isCached() set to false on Nacked resource
1 parent 7dd4402 commit fc60ef9

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

xds/src/main/java/io/grpc/xds/XdsClientMetricReporterImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ static final class MetricReporterCallback implements ServerConnectionCallback {
200200
}
201201

202202
// TODO(dnvindhya): include the "authority" label once xds.authority is available.
203-
public void reportResourceCountGauge(long resourceCount, String cacheState,
203+
void reportResourceCountGauge(long resourceCount, String cacheState,
204204
String resourceType) {
205205
recorder.recordLongGauge(RESOURCES_GAUGE, resourceCount,
206206
Arrays.asList(target, cacheState, resourceType), Collections.emptyList());

xds/src/test/java/io/grpc/xds/GrpcXdsClientImplTestBase.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1666,6 +1666,36 @@ public void rdsResourceUpdated() {
16661666
TIME_INCREMENT * 2);
16671667
}
16681668

1669+
@Test
1670+
public void rdsResourceInvalid() {
1671+
xdsClient.watchXdsResource(XdsRouteConfigureResource.getInstance(), "A", rdsResourceWatcher);
1672+
xdsClient.watchXdsResource(XdsRouteConfigureResource.getInstance(), "B", rdsResourceWatcher);
1673+
DiscoveryRpcCall call = resourceDiscoveryCalls.poll();
1674+
assertThat(call).isNotNull();
1675+
verifyResourceMetadataRequested(RDS, "A");
1676+
verifyResourceMetadataRequested(RDS, "B");
1677+
verifySubscribedResourcesMetadataSizes(0, 0, 2, 0);
1678+
1679+
// RDS -> {A, B}, version 1
1680+
// Failed to parse endpoint B
1681+
List<Message> vhostsV1 = mf.buildOpaqueVirtualHosts(1);
1682+
ImmutableMap<String, Any> resourcesV1 = ImmutableMap.of(
1683+
"A", Any.pack(mf.buildRouteConfiguration("A", vhostsV1)),
1684+
"B", Any.pack(mf.buildRouteConfigurationInvalid("B")));
1685+
call.sendResponse(RDS, resourcesV1.values().asList(), VERSION_1, "0000");
1686+
1687+
// {A} -> ACK, version 1
1688+
// {B} -> NACK, version 1, rejected version 1, rejected reason: Failed to parse B
1689+
List<String> errorsV1 =
1690+
ImmutableList.of("RDS response RouteConfiguration 'B' validation error: ");
1691+
verifyResourceMetadataAcked(RDS, "A", resourcesV1.get("A"), VERSION_1, TIME_INCREMENT);
1692+
verifyResourceMetadataNacked(RDS, "B", null, "", 0,
1693+
VERSION_1, TIME_INCREMENT, errorsV1, false);
1694+
// Check metric data.
1695+
verifyResourceValidInvalidCount(1, 1, 1, xdsServerInfo.target(), RDS.typeUrl());
1696+
verifySubscribedResourcesMetadataSizes(0, 0, 2, 0);
1697+
}
1698+
16691699
@Test
16701700
public void rdsResourceDeletedByLdsApiListener() {
16711701
xdsClient.watchXdsResource(XdsListenerResource.getInstance(), LDS_RESOURCE,

0 commit comments

Comments
 (0)