Skip to content

Commit a757b05

Browse files
adamintAdam Ratzman
andauthored
Resolve DistributedApplicationResourceBuilder<ResourceWithConnectionStringSurrogate> correctly in args evaluation (#7716)
* 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]>
1 parent ae93d20 commit a757b05

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ internal static async ValueTask ProcessArgumentValuesAsync(
289289
(_, string s) => new(s, false),
290290
(DistributedApplicationOperation.Run, IValueProvider provider) => await GetValue(key: null, provider, logger, resource.IsContainer(), containerHostName, cancellationToken).ConfigureAwait(false),
291291
(DistributedApplicationOperation.Run, DistributedApplicationResourceBuilder<ParameterResource> parameterResourceBuilder) => await GetValue(key: null, parameterResourceBuilder.Resource, logger, resource.IsContainer(), containerHostName, cancellationToken).ConfigureAwait(false),
292+
(DistributedApplicationOperation.Run, DistributedApplicationResourceBuilder<ResourceWithConnectionStringSurrogate> connectionStringSurrogateBuilder) => await GetValue(key: null, connectionStringSurrogateBuilder.Resource, logger, resource.IsContainer(), containerHostName, cancellationToken).ConfigureAwait(false),
292293
(DistributedApplicationOperation.Publish, IManifestExpressionProvider provider) => new(provider.ValueExpression, false),
293294
(_, { } o) => new(o.ToString(), false),
294295
(_, null) => new(null, false),

tests/Aspire.Hosting.Tests/ResourceExtensionsTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,35 @@ public async Task GetEnvironmentVariableValuesAsyncReturnCorrectVariablesUsingMa
259259
});
260260
}
261261

262+
[Fact]
263+
public async Task GetArgumentValuesAsync_ReturnsCorrectValuesForSpecialCases()
264+
{
265+
var builder = DistributedApplication.CreateBuilder();
266+
var surrogate = builder.AddResource(new ResourceWithConnectionStringSurrogate("ResourceWithConnectionStringSurrogate", _ => "ConnectionString", null));
267+
var secretParameter = builder.AddResource(new ParameterResource("SecretParameter", _ => "SecretParameter", true));
268+
var nonSecretParameter = builder.AddResource(new ParameterResource("NonSecretParameter", _ => "NonSecretParameter"));
269+
270+
var containerArgs = await builder.AddContainer("elasticsearch", "library/elasticsearch", "8.14.0")
271+
.WithArgs(surrogate)
272+
.WithArgs(secretParameter)
273+
.WithArgs(nonSecretParameter)
274+
.Resource.GetArgumentValuesAsync().DefaultTimeout();
275+
276+
Assert.Equal<IEnumerable<string>>(["ConnectionString", "SecretParameter", "NonSecretParameter"], containerArgs);
277+
278+
// Executables can also have arguments passed in AddExecutable
279+
var executableArgs = await builder.AddExecutable(
280+
"ping",
281+
"ping",
282+
string.Empty,
283+
surrogate,
284+
secretParameter,
285+
nonSecretParameter)
286+
.Resource.GetArgumentValuesAsync().DefaultTimeout();
287+
288+
Assert.Equal<IEnumerable<string>>(["ConnectionString", "SecretParameter", "NonSecretParameter"], executableArgs);
289+
}
290+
262291
private sealed class ParentResource(string name) : Resource(name)
263292
{
264293

0 commit comments

Comments
 (0)