Skip to content

Commit 9614cb6

Browse files
committed
Unit tests and review point fixed
1 parent 02e346a commit 9614cb6

File tree

4 files changed

+116
-3
lines changed

4 files changed

+116
-3
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package io.grpc.xds;
1818

19+
import com.google.common.annotations.VisibleForTesting;
1920
import com.google.protobuf.Any;
2021
import com.google.protobuf.InvalidProtocolBufferException;
2122
import io.grpc.xds.GcpAuthenticationFilter.AudienceMetadataParser;
@@ -45,7 +46,8 @@ ClusterMetadataValueParser findParser(String typeUrl) {
4546
return supportedParsers.get(typeUrl);
4647
}
4748

48-
private void registerParser(ClusterMetadataValueParser parser) {
49+
@VisibleForTesting
50+
void registerParser(ClusterMetadataValueParser parser) {
4951
supportedParsers.put(parser.getTypeUrl(), parser);
5052
}
5153

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ static class AudienceMetadataParser implements ClusterMetadataValueParser {
229229

230230
@Override
231231
public String getTypeUrl() {
232-
return "extensions.filters.http.gcp_authn.v3.Audience";
232+
return "type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.Audience";
233233
}
234234

235235
@Override

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,13 @@ private static ImmutableMap<String, Object> parseClusterMetadata(Metadata metada
202202
parsedMetadata.put(key, parsedValue);
203203
}
204204
}
205+
// building once to reuse in the next loop
206+
ImmutableMap<String, Object> intermediateParsedMetadata = parsedMetadata.build();
205207

206208
// Process filter_metadata for remaining keys
207209
for (Map.Entry<String, Struct> entry : metadata.getFilterMetadataMap().entrySet()) {
208210
String key = entry.getKey();
209-
if (!parsedMetadata.build().containsKey(key)) {
211+
if (!intermediateParsedMetadata.containsKey(key)) {
210212
Struct structValue = entry.getValue();
211213
Object jsonValue = ProtobufJsonConverter.convertToJson(structValue);
212214
parsedMetadata.put(key, jsonValue);

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

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import io.envoyproxy.envoy.config.core.v3.DataSource;
5151
import io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions;
5252
import io.envoyproxy.envoy.config.core.v3.Locality;
53+
import io.envoyproxy.envoy.config.core.v3.Metadata;
5354
import io.envoyproxy.envoy.config.core.v3.PathConfigSource;
5455
import io.envoyproxy.envoy.config.core.v3.RuntimeFractionalPercent;
5556
import io.envoyproxy.envoy.config.core.v3.SelfConfigSource;
@@ -84,6 +85,7 @@
8485
import io.envoyproxy.envoy.extensions.filters.common.fault.v3.FaultDelay;
8586
import io.envoyproxy.envoy.extensions.filters.http.fault.v3.FaultAbort;
8687
import io.envoyproxy.envoy.extensions.filters.http.fault.v3.HTTPFault;
88+
import io.envoyproxy.envoy.extensions.filters.http.gcp_authn.v3.Audience;
8789
import io.envoyproxy.envoy.extensions.filters.http.rbac.v3.RBACPerRoute;
8890
import io.envoyproxy.envoy.extensions.filters.http.router.v3.Router;
8991
import io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager;
@@ -2342,6 +2344,113 @@ public void parseCluster_validateEdsSourceConfig() throws ResourceInvalidExcepti
23422344
LoadBalancerRegistry.getDefaultRegistry());
23432345
}
23442346

2347+
@Test
2348+
public void processCluster_parsesMetadata()
2349+
throws ResourceInvalidException, InvalidProtocolBufferException {
2350+
ClusterMetadataRegistry testRegistry = ClusterMetadataRegistry.getInstance();
2351+
testRegistry.registerParser(new ClusterMetadataRegistry.ClusterMetadataValueParser() {
2352+
@Override
2353+
public String getTypeUrl() {
2354+
return "type.googleapis.com/test.Type";
2355+
}
2356+
2357+
@Override
2358+
public Object parse(Any value) {
2359+
return "testValue";
2360+
}
2361+
});
2362+
2363+
Any typedFilterMetadata = Any.newBuilder()
2364+
.setTypeUrl("type.googleapis.com/test.Type")
2365+
.setValue(ByteString.copyFromUtf8("test"))
2366+
.build();
2367+
2368+
Struct filterMetadata = Struct.newBuilder()
2369+
.putFields("key1", Value.newBuilder().setStringValue("value1").build())
2370+
.putFields("key2", Value.newBuilder().setNumberValue(42).build())
2371+
.build();
2372+
2373+
Metadata metadata = Metadata.newBuilder()
2374+
.putTypedFilterMetadata("TYPED_FILTER_METADATA", typedFilterMetadata)
2375+
.putFilterMetadata("FILTER_METADATA", filterMetadata)
2376+
.build();
2377+
2378+
Cluster cluster = Cluster.newBuilder()
2379+
.setName("cluster-foo.googleapis.com")
2380+
.setType(DiscoveryType.EDS)
2381+
.setEdsClusterConfig(
2382+
EdsClusterConfig.newBuilder()
2383+
.setEdsConfig(
2384+
ConfigSource.newBuilder()
2385+
.setAds(AggregatedConfigSource.getDefaultInstance()))
2386+
.setServiceName("service-foo.googleapis.com"))
2387+
.setLbPolicy(LbPolicy.ROUND_ROBIN)
2388+
.setMetadata(metadata)
2389+
.build();
2390+
2391+
CdsUpdate update = XdsClusterResource.processCluster(
2392+
cluster, null, LRS_SERVER_INFO,
2393+
LoadBalancerRegistry.getDefaultRegistry());
2394+
2395+
ImmutableMap<String, Object> expectedParsedMetadata = ImmutableMap.of(
2396+
"TYPED_FILTER_METADATA", "testValue",
2397+
"FILTER_METADATA", ImmutableMap.of(
2398+
"key1", "value1",
2399+
"key2", 42.0));
2400+
assertThat(update.parsedMetadata()).isEqualTo(expectedParsedMetadata);
2401+
}
2402+
2403+
@Test
2404+
public void processCluster_parsesAudienceMetadata()
2405+
throws ResourceInvalidException, InvalidProtocolBufferException {
2406+
ClusterMetadataRegistry.getInstance();
2407+
2408+
Audience audience = Audience.newBuilder()
2409+
.setUrl("https://example.com")
2410+
.build();
2411+
2412+
Any audienceMetadata = Any.newBuilder()
2413+
.setTypeUrl("type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.Audience")
2414+
.setValue(audience.toByteString())
2415+
.build();
2416+
2417+
Struct filterMetadata = Struct.newBuilder()
2418+
.putFields("key1", Value.newBuilder().setStringValue("value1").build())
2419+
.putFields("key2", Value.newBuilder().setNumberValue(42).build())
2420+
.build();
2421+
2422+
Metadata metadata = Metadata.newBuilder()
2423+
.putTypedFilterMetadata("AUDIENCE_METADATA", audienceMetadata)
2424+
.putFilterMetadata("FILTER_METADATA", filterMetadata)
2425+
.build();
2426+
2427+
Cluster cluster = Cluster.newBuilder()
2428+
.setName("cluster-foo.googleapis.com")
2429+
.setType(DiscoveryType.EDS)
2430+
.setEdsClusterConfig(
2431+
EdsClusterConfig.newBuilder()
2432+
.setEdsConfig(
2433+
ConfigSource.newBuilder()
2434+
.setAds(AggregatedConfigSource.getDefaultInstance()))
2435+
.setServiceName("service-foo.googleapis.com"))
2436+
.setLbPolicy(LbPolicy.ROUND_ROBIN)
2437+
.setMetadata(metadata)
2438+
.build();
2439+
2440+
CdsUpdate update = XdsClusterResource.processCluster(
2441+
cluster, null, LRS_SERVER_INFO,
2442+
LoadBalancerRegistry.getDefaultRegistry());
2443+
System.out.println("XXXXX");
2444+
System.out.println(update.parsedMetadata());
2445+
2446+
ImmutableMap<String, Object> expectedParsedMetadata = ImmutableMap.of(
2447+
"AUDIENCE_METADATA", "https://example.com",
2448+
"FILTER_METADATA", ImmutableMap.of(
2449+
"key1", "value1",
2450+
"key2", 42.0));
2451+
assertThat(update.parsedMetadata()).isEqualTo(expectedParsedMetadata);
2452+
}
2453+
23452454
@Test
23462455
public void parseServerSideListener_invalidTrafficDirection() throws ResourceInvalidException {
23472456
Listener listener =

0 commit comments

Comments
 (0)