|
8 | 8 | using Microsoft.AspNetCore.Hosting;
|
9 | 9 | using Microsoft.AspNetCore.HttpOverrides;
|
10 | 10 | using Microsoft.Extensions.Configuration;
|
| 11 | +using Microsoft.Extensions.Configuration.Json; |
11 | 12 | using Microsoft.Extensions.DependencyInjection;
|
12 | 13 | using Microsoft.Extensions.Options;
|
13 | 14 | using Steeltoe.Common.TestResources;
|
@@ -322,6 +323,151 @@ public async Task ForwardedHeadersMiddleware_uses_customized_options_when_runnin
|
322 | 323 | await host.StopAsync(TestContext.Current.CancellationToken);
|
323 | 324 | }
|
324 | 325 |
|
| 326 | + [Fact] |
| 327 | + public void Loads_VCAP_APPLICATION_from_stream() |
| 328 | + { |
| 329 | + const string environment = """ |
| 330 | + { |
| 331 | + "application_id": "fa05c1a9-0fc1-4fbd-bae1-139850dec7a3", |
| 332 | + "application_name": "my-app", |
| 333 | + "application_uris": ["my-app.10.244.0.34.xip.io"], |
| 334 | + "application_version": "fb8fbcc6-8d58-479e-bcc7-3b4ce5a7f0ca", |
| 335 | + "limits": { |
| 336 | + "disk": 1024, |
| 337 | + "fds": 16384, |
| 338 | + "mem": 256 |
| 339 | + }, |
| 340 | + "name": "my-app", |
| 341 | + "space_id": "06450c72-4669-4dc6-8096-45f9777db68a", |
| 342 | + "space_name": "my-space", |
| 343 | + "uris": [ |
| 344 | + "my-app.10.244.0.34.xip.io", |
| 345 | + "my-app2.10.244.0.34.xip.io" |
| 346 | + ], |
| 347 | + "users": null, |
| 348 | + "version": "fb8fbcc6-8d58-479e-bcc7-3b4ce5a7f0ca" |
| 349 | + } |
| 350 | + """; |
| 351 | + |
| 352 | + using Stream stream = CloudFoundryConfigurationProvider.GetStream(environment); |
| 353 | + |
| 354 | + var source = new JsonStreamConfigurationSource |
| 355 | + { |
| 356 | + Stream = stream |
| 357 | + }; |
| 358 | + |
| 359 | + var builder = new ConfigurationBuilder(); |
| 360 | + builder.Add(source); |
| 361 | + IConfigurationRoot root = builder.Build(); |
| 362 | + |
| 363 | + root["application_id"].Should().Be("fa05c1a9-0fc1-4fbd-bae1-139850dec7a3"); |
| 364 | + root["limits:disk"].Should().Be("1024"); |
| 365 | + root["uris:0"].Should().Be("my-app.10.244.0.34.xip.io"); |
| 366 | + root["uris:1"].Should().Be("my-app2.10.244.0.34.xip.io"); |
| 367 | + } |
| 368 | + |
| 369 | + [Fact] |
| 370 | + public void Loads_VCAP_SERVICES_from_stream() |
| 371 | + { |
| 372 | + const string environment = """ |
| 373 | + { |
| 374 | + "p-config-server": [{ |
| 375 | + "name": "myConfigServer", |
| 376 | + "label": "p-config-server", |
| 377 | + "tags": [ |
| 378 | + "configuration", |
| 379 | + "spring-cloud" |
| 380 | + ], |
| 381 | + "plan": "standard", |
| 382 | + "credentials": { |
| 383 | + "uri": "https://config-eafc353b-77e2-4dcc-b52a-25777e996ed9.apps.test-cloud.com", |
| 384 | + "client_id": "p-config-server-9bff4c87-7ffd-4536-9e76-e67ea3ec81d0", |
| 385 | + "client_secret": "AJUAjyxP3nO9", |
| 386 | + "access_token_uri": "https://p-spring-cloud-services.uaa.system.test-cloud.com/oauth/token" |
| 387 | + } |
| 388 | + }], |
| 389 | + "p-service-registry": [{ |
| 390 | + "name": "myServiceRegistry", |
| 391 | + "label": "p-service-registry", |
| 392 | + "tags": [ |
| 393 | + "eureka", |
| 394 | + "discovery", |
| 395 | + "registry", |
| 396 | + "spring-cloud" |
| 397 | + ], |
| 398 | + "plan": "standard", |
| 399 | + "credentials": { |
| 400 | + "uri": "https://eureka-f4b98d1c-3166-4741-b691-79abba5b2d51.apps.test-cloud.com", |
| 401 | + "client_id": "p-service-registry-9121b185-cd3b-497c-99f7-8e8064d4a6f0", |
| 402 | + "client_secret": "3Rv1U79siLDa", |
| 403 | + "access_token_uri": "https://p-spring-cloud-services.uaa.system.test-cloud.com/oauth/token" |
| 404 | + } |
| 405 | + }], |
| 406 | + "p-mysql": [{ |
| 407 | + "name": "mySql1", |
| 408 | + "label": "p-mysql", |
| 409 | + "tags": [ |
| 410 | + "mysql", |
| 411 | + "relational" |
| 412 | + ], |
| 413 | + "plan": "100mb-dev", |
| 414 | + "credentials": { |
| 415 | + "hostname": "192.168.0.97", |
| 416 | + "port": 3306, |
| 417 | + "name": "cf_0f5dda44_e678_4727_993f_30e6d455cc31", |
| 418 | + "username": "9vD0Mtk3wFFuaaaY", |
| 419 | + "password": "Cjn4HsAiKV8sImst", |
| 420 | + "uri": "mysql://9vD0Mtk3wFFuaaaY:[email protected]:3306/cf_0f5dda44_e678_4727_993f_30e6d455cc31?reconnect=true", |
| 421 | + "jdbcUrl": "jdbc:mysql://192.168.0.97:3306/cf_0f5dda44_e678_4727_993f_30e6d455cc31?user=9vD0Mtk3wFFuaaaY&password=Cjn4HsAiKV8sImst" |
| 422 | + } |
| 423 | + }, |
| 424 | + { |
| 425 | + "name": "mySql2", |
| 426 | + "label": "p-mysql", |
| 427 | + "tags": ["mysql","relational"], |
| 428 | + "plan": "100mb-dev", |
| 429 | + "credentials": { |
| 430 | + "hostname": "192.168.0.97", |
| 431 | + "port": 3306, |
| 432 | + "name": "cf_b2d83697_5fa1_4a51_991b_975c9d7e5515", |
| 433 | + "username": "gxXQb2pMbzFsZQW8", |
| 434 | + "password": "lvMkGf6oJQvKSOwn", |
| 435 | + "uri": "mysql://gxXQb2pMbzFsZQW8:[email protected]:3306/cf_b2d83697_5fa1_4a51_991b_975c9d7e5515?reconnect=true", |
| 436 | + "jdbcUrl": "jdbc:mysql://192.168.0.97:3306/cf_b2d83697_5fa1_4a51_991b_975c9d7e5515?user=gxXQb2pMbzFsZQW8&password=lvMkGf6oJQvKSOwn" |
| 437 | + } |
| 438 | + }] |
| 439 | + } |
| 440 | + """; |
| 441 | + |
| 442 | + using Stream stream = CloudFoundryConfigurationProvider.GetStream(environment); |
| 443 | + |
| 444 | + var source = new JsonStreamConfigurationSource |
| 445 | + { |
| 446 | + Stream = stream |
| 447 | + }; |
| 448 | + |
| 449 | + var provider = new JsonStreamConfigurationProvider(source); |
| 450 | + provider.Load(); |
| 451 | + |
| 452 | + provider.TryGet("p-config-server:0:name", out string? value).Should().BeTrue(); |
| 453 | + value.Should().Be("myConfigServer"); |
| 454 | + |
| 455 | + provider.TryGet("p-config-server:0:credentials:uri", out value).Should().BeTrue(); |
| 456 | + value.Should().Be("https://config-eafc353b-77e2-4dcc-b52a-25777e996ed9.apps.test-cloud.com"); |
| 457 | + |
| 458 | + provider.TryGet("p-service-registry:0:name", out value).Should().BeTrue(); |
| 459 | + value.Should().Be("myServiceRegistry"); |
| 460 | + |
| 461 | + provider.TryGet("p-service-registry:0:credentials:uri", out value).Should().BeTrue(); |
| 462 | + value.Should().Be("https://eureka-f4b98d1c-3166-4741-b691-79abba5b2d51.apps.test-cloud.com"); |
| 463 | + |
| 464 | + provider.TryGet("p-mysql:1:name", out value).Should().BeTrue(); |
| 465 | + value.Should().Be("mySql2"); |
| 466 | + |
| 467 | + provider.TryGet("p-mysql:1:credentials:uri", out value).Should().BeTrue(); |
| 468 | + value.Should().Be("mysql://gxXQb2pMbzFsZQW8:[email protected]:3306/cf_b2d83697_5fa1_4a51_991b_975c9d7e5515?reconnect=true"); |
| 469 | + } |
| 470 | + |
325 | 471 | private sealed class VcapApp
|
326 | 472 | {
|
327 | 473 | #pragma warning disable S3459 // Unassigned members should be removed
|
|
0 commit comments