diff --git a/xds/src/main/java/io/grpc/xds/ClientXdsClient.java b/xds/src/main/java/io/grpc/xds/ClientXdsClient.java index 41e80f2fe3..bec73d1c71 100644 --- a/xds/src/main/java/io/grpc/xds/ClientXdsClient.java +++ b/xds/src/main/java/io/grpc/xds/ClientXdsClient.java @@ -1340,12 +1340,11 @@ final class ClientXdsClient extends XdsClient implements XdsResponseHandler, Res return StructOrError.fromStruct(RouteAction.forClusterSpecifierPlugin( namedPluginConfig, hashPolicies, timeoutNano, retryPolicy)); } else { - return StructOrError.fromError("Support for ClusterSpecifierPlugin not enabled"); + return null; } case CLUSTERSPECIFIER_NOT_SET: default: - return StructOrError.fromError( - "Unknown cluster specifier: " + proto.getClusterSpecifierCase()); + return null; } } diff --git a/xds/src/test/java/io/grpc/xds/ClientXdsClientDataTest.java b/xds/src/test/java/io/grpc/xds/ClientXdsClientDataTest.java index 2b75c02d4d..c0df1c48b5 100644 --- a/xds/src/test/java/io/grpc/xds/ClientXdsClientDataTest.java +++ b/xds/src/test/java/io/grpc/xds/ClientXdsClientDataTest.java @@ -17,6 +17,7 @@ package io.grpc.xds; import static com.google.common.truth.Truth.assertThat; +import static io.envoyproxy.envoy.config.route.v3.RouteAction.ClusterSpecifierCase.CLUSTER_SPECIFIER_PLUGIN; import com.github.udpa.udpa.type.v1.TypedStruct; import com.google.common.collect.ImmutableMap; @@ -801,6 +802,30 @@ public class ClientXdsClientDataTest { assertThat(policies.get(1).isTerminal()).isFalse(); } + @Test + public void parseRouteAction_clusterSpecifier_routeLookupDisabled() { + ClientXdsClient.enableRouteLookup = false; + io.envoyproxy.envoy.config.route.v3.RouteAction proto = + io.envoyproxy.envoy.config.route.v3.RouteAction.newBuilder() + .setClusterSpecifierPlugin(CLUSTER_SPECIFIER_PLUGIN.name()) + .build(); + StructOrError struct = + ClientXdsClient.parseRouteAction(proto, filterRegistry, false, + ImmutableMap.of()); + assertThat(struct).isNull(); + } + + @Test + public void parseRouteAction_custerSpecifierNotSet() { + io.envoyproxy.envoy.config.route.v3.RouteAction proto = + io.envoyproxy.envoy.config.route.v3.RouteAction.newBuilder() + .build(); + StructOrError struct = + ClientXdsClient.parseRouteAction(proto, filterRegistry, false, + ImmutableMap.of()); + assertThat(struct).isNull(); + } + @Test public void parseClusterWeight() { io.envoyproxy.envoy.config.route.v3.WeightedCluster.ClusterWeight proto =