|
50 | 50 | import io.envoyproxy.envoy.config.core.v3.DataSource; |
51 | 51 | import io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions; |
52 | 52 | import io.envoyproxy.envoy.config.core.v3.Locality; |
| 53 | +import io.envoyproxy.envoy.config.core.v3.Metadata; |
53 | 54 | import io.envoyproxy.envoy.config.core.v3.PathConfigSource; |
54 | 55 | import io.envoyproxy.envoy.config.core.v3.RuntimeFractionalPercent; |
55 | 56 | import io.envoyproxy.envoy.config.core.v3.SelfConfigSource; |
|
84 | 85 | import io.envoyproxy.envoy.extensions.filters.common.fault.v3.FaultDelay; |
85 | 86 | import io.envoyproxy.envoy.extensions.filters.http.fault.v3.FaultAbort; |
86 | 87 | import io.envoyproxy.envoy.extensions.filters.http.fault.v3.HTTPFault; |
| 88 | +import io.envoyproxy.envoy.extensions.filters.http.gcp_authn.v3.Audience; |
87 | 89 | import io.envoyproxy.envoy.extensions.filters.http.rbac.v3.RBACPerRoute; |
88 | 90 | import io.envoyproxy.envoy.extensions.filters.http.router.v3.Router; |
89 | 91 | import io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager; |
@@ -2342,6 +2344,113 @@ public void parseCluster_validateEdsSourceConfig() throws ResourceInvalidExcepti |
2342 | 2344 | LoadBalancerRegistry.getDefaultRegistry()); |
2343 | 2345 | } |
2344 | 2346 |
|
| 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 | + |
2345 | 2454 | @Test |
2346 | 2455 | public void parseServerSideListener_invalidTrafficDirection() throws ResourceInvalidException { |
2347 | 2456 | Listener listener = |
|
0 commit comments