Skip to content

Commit

Permalink
[release/9.1] Resolve DistributedApplicationResourceBuilder<ResourceW…
Browse files Browse the repository at this point in the history
…ithConnectionStringSurrogate> correctly in args evaluation (#7727)

* Resolve DistributedApplicationResourceBuilder<ResourceWithConnectionStringSurrogate> correctly in args evaluation

* Add test for special cases in ProcessArgumentValuesAsync

* fix test

* add AddExecutable case invoked with args

---------

Co-authored-by: Adam Ratzman <[email protected]>
  • Loading branch information
github-actions[bot] and Adam Ratzman authored Feb 21, 2025
1 parent 89d5b4a commit 9d98476
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ internal static async ValueTask ProcessArgumentValuesAsync(
(_, string s) => new(s, false),
(DistributedApplicationOperation.Run, IValueProvider provider) => await GetValue(key: null, provider, logger, resource.IsContainer(), containerHostName, cancellationToken).ConfigureAwait(false),
(DistributedApplicationOperation.Run, DistributedApplicationResourceBuilder<ParameterResource> parameterResourceBuilder) => await GetValue(key: null, parameterResourceBuilder.Resource, logger, resource.IsContainer(), containerHostName, cancellationToken).ConfigureAwait(false),
(DistributedApplicationOperation.Run, DistributedApplicationResourceBuilder<ResourceWithConnectionStringSurrogate> connectionStringSurrogateBuilder) => await GetValue(key: null, connectionStringSurrogateBuilder.Resource, logger, resource.IsContainer(), containerHostName, cancellationToken).ConfigureAwait(false),
(DistributedApplicationOperation.Publish, IManifestExpressionProvider provider) => new(provider.ValueExpression, false),
(_, { } o) => new(o.ToString(), false),
(_, null) => new(null, false),
Expand Down
29 changes: 29 additions & 0 deletions tests/Aspire.Hosting.Tests/ResourceExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,35 @@ public async Task GetEnvironmentVariableValuesAsyncReturnCorrectVariablesUsingMa
});
}

[Fact]
public async Task GetArgumentValuesAsync_ReturnsCorrectValuesForSpecialCases()
{
var builder = DistributedApplication.CreateBuilder();
var surrogate = builder.AddResource(new ResourceWithConnectionStringSurrogate("ResourceWithConnectionStringSurrogate", _ => "ConnectionString", null));
var secretParameter = builder.AddResource(new ParameterResource("SecretParameter", _ => "SecretParameter", true));
var nonSecretParameter = builder.AddResource(new ParameterResource("NonSecretParameter", _ => "NonSecretParameter"));

var containerArgs = await builder.AddContainer("elasticsearch", "library/elasticsearch", "8.14.0")
.WithArgs(surrogate)
.WithArgs(secretParameter)
.WithArgs(nonSecretParameter)
.Resource.GetArgumentValuesAsync().DefaultTimeout();

Assert.Equal<IEnumerable<string>>(["ConnectionString", "SecretParameter", "NonSecretParameter"], containerArgs);

// Executables can also have arguments passed in AddExecutable
var executableArgs = await builder.AddExecutable(
"ping",
"ping",
string.Empty,
surrogate,
secretParameter,
nonSecretParameter)
.Resource.GetArgumentValuesAsync().DefaultTimeout();

Assert.Equal<IEnumerable<string>>(["ConnectionString", "SecretParameter", "NonSecretParameter"], executableArgs);
}

private sealed class ParentResource(string name) : Resource(name)
{

Expand Down

0 comments on commit 9d98476

Please sign in to comment.