Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can do this in a much better way and consistent, way, but we can do that post 9.1

(DistributedApplicationOperation.Publish, IManifestExpressionProvider provider) => new(provider.ValueExpression, false),
(_, { } o) => new(o.ToString(), false),
(_, null) => new(null, false),
Expand Down
21 changes: 21 additions & 0 deletions tests/Aspire.Hosting.Tests/ResourceExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,27 @@ public async Task GetEnvironmentVariableValuesAsyncReturnCorrectVariablesUsingMa
});
}

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

builder.AddResource(surrogate);
builder.AddResource(secretParameter);
builder.AddResource(nonSecretParameter);

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

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

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

Expand Down