Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Azure/AzurePublishingContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,9 @@ private void MapParameter(object? candidate)

if (!p.Secret && p.Default is not null)
{
#pragma warning disable CS0618 // Type or member is obsolete
pp.Value = p.Value;
#pragma warning restore CS0618 // Type or member is obsolete
}

ParameterLookup[p] = pp;
Expand Down
2 changes: 2 additions & 0 deletions src/Aspire.Hosting.Docker/DockerComposeServiceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,14 @@ public static string AsEnvironmentPlaceholder(this ParameterResource parameter,

// Treat secrets as environment variable placeholders as for now
// this doesn't handle generation of parameter values with defaults
#pragma warning disable CS0618 // Type or member is obsolete
return dockerComposeService.Parent.AddEnvironmentVariable(
env,
description: $"Parameter {parameter.Name}",
defaultValue: parameter.Secret || parameter.Default is null ? null : parameter.Value,
source: parameter
);
#pragma warning restore CS0618 // Type or member is obsolete
}

internal static string AsContainerImagePlaceholder(this DockerComposeServiceResource dockerComposeService)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,9 @@ private static HelmExpressionWithValue AllocateParameter(ParameterResource param
formattedName.ToHelmSecretExpression(resource.Name) :
formattedName.ToHelmConfigExpression(resource.Name);

#pragma warning disable CS0618 // Type or member is obsolete
var value = parameter.Default is null || parameter.Secret ? null : parameter.Value;
#pragma warning restore CS0618 // Type or member is obsolete
return new(expression, value);
}

Expand Down
4 changes: 4 additions & 0 deletions src/Aspire.Hosting/ApplicationModel/ParameterResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ public ParameterResource(string name, Func<ParameterDefault?, string> callback,
/// <summary>
/// Gets the value of the parameter.
/// </summary>
/// <remarks>
/// This property is obsolete. Use <see cref="GetValueAsync(CancellationToken)"/> for async access or pass the <see cref="ParameterResource"/> directly to methods that accept it (e.g., environment variables).
/// </remarks>
[Obsolete("Use GetValueAsync for async access or pass the ParameterResource directly to methods that accept it (e.g., environment variables).")]
public string Value => GetValueAsync(default).AsTask().GetAwaiter().GetResult()!;

internal string ValueInternal => _lazyValue.Value;
Expand Down
4 changes: 4 additions & 0 deletions tests/Aspire.Hosting.Azure.Tests/AzureRedisExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@ public async Task AddAzureRedisRunAsContainerProducesCorrectConnectionString()
Assert.True(redis.Resource.IsContainer(), "The resource should now be a container resource.");

Assert.NotNull(redisResource?.PasswordParameter);
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"localhost:12455,password={redisResource.PasswordParameter.Value}", await redis.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None));
#pragma warning restore CS0618 // Type or member is obsolete
}

[Fact]
Expand Down Expand Up @@ -195,7 +197,9 @@ public async Task PublishAsRedisPublishesRedisAsAzureRedisInfrastructure()
Assert.True(redis.Resource.IsContainer());
Assert.NotNull(redis.Resource.PasswordParameter);

#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"localhost:12455,password={redis.Resource.PasswordParameter.Value}", await redis.Resource.GetConnectionStringAsync());
#pragma warning restore CS0618 // Type or member is obsolete

var manifest = await AzureManifestUtils.GetManifestWithBicep(redis.Resource);

Expand Down
2 changes: 2 additions & 0 deletions tests/Aspire.Hosting.Milvus.Tests/MilvusFunctionalTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,9 @@ public async Task WithDataShouldPersistStateBetweenUsages(bool useVolume)
{
using var builder1 = TestDistributedApplicationBuilder.CreateWithTestContainerRegistry(testOutputHelper);
var milvus1 = builder1.AddMilvus("milvus1");
#pragma warning disable CS0618 // Type or member is obsolete
var password = milvus1.Resource.ApiKeyParameter.Value;
#pragma warning restore CS0618 // Type or member is obsolete

var db1 = milvus1.AddDatabase("milvusdb1", dbname);

Expand Down
4 changes: 4 additions & 0 deletions tests/Aspire.Hosting.MongoDB.Tests/AddMongoDBTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,13 @@ public async Task MongoDBCreatesConnectionString()
Assert.NotNull(connectionStringResource);
var connectionString = await connectionStringResource.GetConnectionStringAsync();

#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"mongodb://admin:{dbResource.Parent.PasswordParameter?.Value}@localhost:27017?authSource=admin&authMechanism=SCRAM-SHA-256", await serverResource.GetConnectionStringAsync());
#pragma warning restore CS0618 // Type or member is obsolete
Assert.Equal("mongodb://admin:{mongodb-password.value}@{mongodb.bindings.tcp.host}:{mongodb.bindings.tcp.port}?authSource=admin&authMechanism=SCRAM-SHA-256", serverResource.ConnectionStringExpression.ValueExpression);
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"mongodb://admin:{dbResource.Parent.PasswordParameter?.Value}@localhost:27017/mydatabase?authSource=admin&authMechanism=SCRAM-SHA-256", connectionString);
#pragma warning restore CS0618 // Type or member is obsolete
Assert.Equal("mongodb://admin:{mongodb-password.value}@{mongodb.bindings.tcp.host}:{mongodb.bindings.tcp.port}/mydatabase?authSource=admin&authMechanism=SCRAM-SHA-256", connectionStringResource.ConnectionStringExpression.ValueExpression);
}

Expand Down
2 changes: 2 additions & 0 deletions tests/Aspire.Hosting.MongoDB.Tests/MongoDbFunctionalTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,9 @@ public async Task WithDataShouldPersistStateBetweenUsages(bool useVolume)
{
using var builder1 = TestDistributedApplicationBuilder.CreateWithTestContainerRegistry(testOutputHelper);
var mongodb1 = builder1.AddMongoDB("mongodb");
#pragma warning disable CS0618 // Type or member is obsolete
var password = mongodb1.Resource.PasswordParameter!.Value;
#pragma warning restore CS0618 // Type or member is obsolete
var db1 = mongodb1.AddDatabase(dbName);

if (useVolume)
Expand Down
2 changes: 2 additions & 0 deletions tests/Aspire.Hosting.MySql.Tests/MySqlFunctionalTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,9 @@ public async Task WithDataShouldPersistStateBetweenUsages(bool useVolume)
using var builder1 = TestDistributedApplicationBuilder.CreateWithTestContainerRegistry(testOutputHelper);

var mysql1 = builder1.AddMySql("mysql").WithEnvironment("MYSQL_DATABASE", mySqlDbName);
#pragma warning disable CS0618 // Type or member is obsolete
var password = mysql1.Resource.PasswordParameter.Value;
#pragma warning restore CS0618 // Type or member is obsolete

var db1 = mysql1.AddDatabase(mySqlDbName);

Expand Down
6 changes: 6 additions & 0 deletions tests/Aspire.Hosting.Nats.Tests/AddNatsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ public async Task AddNatsSetsDefaultUserNameAndPasswordAndIncludesThemInConnecti
.WithEndpoint("tcp", e => e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 4222));

Assert.NotNull(nats.Resource.PasswordParameter);
#pragma warning disable CS0618 // Type or member is obsolete
Assert.False(string.IsNullOrEmpty(nats.Resource.PasswordParameter!.Value));
#pragma warning restore CS0618 // Type or member is obsolete

using var app = appBuilder.Build();

Expand All @@ -51,7 +53,9 @@ public async Task AddNatsSetsDefaultUserNameAndPasswordAndIncludesThemInConnecti
Assert.NotNull(connectionStringResource);
var connectionString = await connectionStringResource.GetConnectionStringAsync();

#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"nats://nats:{natsResource.PasswordParameter?.Value}@localhost:4222", connectionString);
#pragma warning restore CS0618 // Type or member is obsolete
Assert.Equal("nats://nats:{nats-password.value}@{nats.bindings.tcp.host}:{nats.bindings.tcp.port}", connectionStringResource.ConnectionStringExpression.ValueExpression);
}

Expand All @@ -68,8 +72,10 @@ public async Task AddNatsSetsUserNameAndPasswordAndIncludesThemInConnection()
Assert.NotNull(nats.Resource.UserNameParameter);
Assert.NotNull(nats.Resource.PasswordParameter);

#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal("usr", nats.Resource.UserNameParameter!.Value);
Assert.Equal("password", nats.Resource.PasswordParameter!.Value);
#pragma warning restore CS0618 // Type or member is obsolete

using var app = appBuilder.Build();

Expand Down
2 changes: 2 additions & 0 deletions tests/Aspire.Hosting.Oracle.Tests/OracleFunctionalTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ public async Task WithDataShouldPersistStateBetweenUsages(bool useVolume)

var oracle1 = builder1.AddOracle("oracle");

#pragma warning disable CS0618 // Type or member is obsolete
var password = oracle1.Resource.PasswordParameter.Value;
#pragma warning restore CS0618 // Type or member is obsolete

var db1 = oracle1.AddDatabase(oracleDbName);

Expand Down
10 changes: 10 additions & 0 deletions tests/Aspire.Hosting.PostgreSQL.Tests/AddPostgresTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,9 @@ public async Task PostgresCreatesConnectionString()

var connectionString = await connectionStringResource.GetConnectionStringAsync();
Assert.Equal("Host={postgres.bindings.tcp.host};Port={postgres.bindings.tcp.port};Username=postgres;Password={postgres-password.value}", connectionStringResource.ConnectionStringExpression.ValueExpression);
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"Host=localhost;Port=2000;Username=postgres;Password={postgres.Resource.PasswordParameter.Value}", connectionString);
#pragma warning restore CS0618 // Type or member is obsolete
}

[Fact]
Expand Down Expand Up @@ -492,7 +494,9 @@ public async Task WithPostgresProducesValidServersJsonFile()
Assert.Equal("postgres", servers.GetProperty("1").GetProperty("Username").GetString());
Assert.Equal("prefer", servers.GetProperty("1").GetProperty("SSLMode").GetString());
Assert.Equal("postgres", servers.GetProperty("1").GetProperty("MaintenanceDB").GetString());
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"echo '{pg1.Resource.PasswordParameter.Value}'", servers.GetProperty("1").GetProperty("PasswordExecCommand").GetString());
#pragma warning restore CS0618 // Type or member is obsolete

// Make sure the second server is correct.
Assert.Equal(pg2.Resource.Name, servers.GetProperty("2").GetProperty("Name").GetString());
Expand All @@ -502,7 +506,9 @@ public async Task WithPostgresProducesValidServersJsonFile()
Assert.Equal("myuser", servers.GetProperty("2").GetProperty("Username").GetString());
Assert.Equal("prefer", servers.GetProperty("2").GetProperty("SSLMode").GetString());
Assert.Equal("postgres", servers.GetProperty("2").GetProperty("MaintenanceDB").GetString());
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"echo '{pg2.Resource.PasswordParameter.Value}'", servers.GetProperty("2").GetProperty("PasswordExecCommand").GetString());
#pragma warning restore CS0618 // Type or member is obsolete
}

[Fact]
Expand Down Expand Up @@ -620,6 +626,7 @@ public void CanAddDatabasesWithTheSameNameOnMultipleServers()

private static string CreatePgWebBookmarkfileContent(PostgresDatabaseResource postgresDatabase)
{
#pragma warning disable CS0618 // Type or member is obsolete
var user = postgresDatabase.Parent.UserNameParameter?.Value ?? "postgres";

// We're hardcoding references to container resources based on a default Aspire network
Expand All @@ -632,6 +639,7 @@ private static string CreatePgWebBookmarkfileContent(PostgresDatabaseResource po
database = "{postgresDatabase.DatabaseName}"
sslmode = "disable"
""";
#pragma warning restore CS0618 // Type or member is obsolete

return fileContent;
}
Expand Down Expand Up @@ -673,6 +681,8 @@ public async Task VerifyPostgresServerResourceWithUserName()
.WithEndpoint("tcp", e => e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 2000));

var connectionString = await postgres.Resource.GetConnectionStringAsync();
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"Host=localhost;Port=2000;Username=user1;Password={postgres.Resource.PasswordParameter.Value}", connectionString);
#pragma warning restore CS0618 // Type or member is obsolete
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ public async Task WithDataShouldPersistStateBetweenUsages(bool useVolume)
{
using var builder1 = TestDistributedApplicationBuilder.CreateWithTestContainerRegistry(testOutputHelper);
var rabbitMQ1 = builder1.AddRabbitMQ("rabbitMQ");
#pragma warning disable CS0618 // Type or member is obsolete
var password = rabbitMQ1.Resource.PasswordParameter.Value;
#pragma warning restore CS0618 // Type or member is obsolete

if (useVolume)
{
Expand Down
8 changes: 8 additions & 0 deletions tests/Aspire.Hosting.Redis.Tests/AddRedisTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,9 @@ public async Task WithRedisInsightProducesCorrectEnvironmentVariables()
(item) =>
{
Assert.Equal("RI_REDIS_PASSWORD1", item.Key);
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal(redis1.Resource.PasswordParameter!.Value, item.Value);
#pragma warning restore CS0618 // Type or member is obsolete
},
(item) =>
{
Expand All @@ -342,7 +344,9 @@ public async Task WithRedisInsightProducesCorrectEnvironmentVariables()
(item) =>
{
Assert.Equal("RI_REDIS_PASSWORD2", item.Key);
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal(redis2.Resource.PasswordParameter!.Value, item.Value);
#pragma warning restore CS0618 // Type or member is obsolete
},
(item) =>
{
Expand Down Expand Up @@ -497,7 +501,9 @@ public async Task SingleRedisInstanceWithoutPasswordProducesCorrectRedisHostsVar
DistributedApplicationOperation.Run,
TestServiceProvider.Instance);

#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"myredis1:{redis.Resource.Name}:6379:0:{redis.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
#pragma warning restore CS0618 // Type or member is obsolete
}

[Fact]
Expand Down Expand Up @@ -542,7 +548,9 @@ public async Task MultipleRedisInstanceProducesCorrectRedisHostsVariable()
DistributedApplicationOperation.Run,
TestServiceProvider.Instance);

#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"myredis1:{redis1.Resource.Name}:6379:0:{redis1.Resource.PasswordParameter?.Value},myredis2:myredis2:6379:0:{redis2.Resource.PasswordParameter?.Value}", config["REDIS_HOSTS"]);
#pragma warning restore CS0618 // Type or member is obsolete
}

[Theory]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,9 @@ public async Task WithDataShouldPersistStateBetweenUsages(bool useVolume)
var sqlserver1 = builder1.AddSqlServer("sqlserver");
var db1 = sqlserver1.AddDatabase(databaseName);

#pragma warning disable CS0618 // Type or member is obsolete
var password = sqlserver1.Resource.PasswordParameter.Value;
#pragma warning restore CS0618 // Type or member is obsolete

if (useVolume)
{
Expand Down
12 changes: 12 additions & 0 deletions tests/Aspire.Hosting.Tests/AddParameterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ public void ParametersWithConfigurationValueDoNotGetDefaultValue()
var appModel = app.Services.GetRequiredService<DistributedApplicationModel>();

var parameterResource = Assert.Single(appModel.Resources.OfType<ParameterResource>());
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal("ValueFromConfiguration", parameterResource.Value);
#pragma warning restore CS0618 // Type or member is obsolete
}

[Theory]
Expand Down Expand Up @@ -98,7 +100,9 @@ public async Task ParametersWithDefaultValueStringOverloadUsedRegardlessOfConfig

// Make sure the code value is used, ignoring any config value
var parameterResource = Assert.Single(appModel.Resources.OfType<ParameterResource>(), r => r.Name == "pass");
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"DefaultValue", parameterResource.Value);
#pragma warning restore CS0618 // Type or member is obsolete

// The manifest should not include anything about the default value
var paramManifest = await ManifestUtils.GetManifest(appModel.Resources.OfType<ParameterResource>().Single(r => r.Name == "pass")).DefaultTimeout();
Expand Down Expand Up @@ -148,7 +152,9 @@ public async Task ParametersWithDefaultValueGetPublishedIfPublishFlagIsPassed(bo

// Make sure the code value is used, ignoring any config value
var parameterResource = Assert.Single(appModel.Resources.OfType<ParameterResource>(), r => r.Name == "pass");
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"DefaultValue", parameterResource.Value);
#pragma warning restore CS0618 // Type or member is obsolete

// The manifest should include the default value, since we passed publishValueAsDefault: true
var paramManifest = await ManifestUtils.GetManifest(appModel.Resources.OfType<ParameterResource>().Single(r => r.Name == "pass")).DefaultTimeout();
Expand Down Expand Up @@ -207,13 +213,17 @@ public async Task ParametersWithDefaultValueObjectOverloadUseConfigurationValueW
var parameterResource = Assert.Single(appModel.Resources.OfType<ParameterResource>(), r => r.Name == "pass");
if (hasConfig)
{
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal("ValueFromConfiguration", parameterResource.Value);
#pragma warning restore CS0618 // Type or member is obsolete
}
else
{
#pragma warning disable CS0618 // Type or member is obsolete
Assert.NotEqual("ValueFromConfiguration", parameterResource.Value);
// We can't test the exact value since it's random, but we can test the length
Assert.Equal(10, parameterResource.Value.Length);
#pragma warning restore CS0618 // Type or member is obsolete
}

// The manifest should always include the fields for the generated default value
Expand Down Expand Up @@ -269,7 +279,9 @@ public async Task ParametersCanGetValueFromNonDefaultConfigurationKeys()
var appModel = app.Services.GetRequiredService<DistributedApplicationModel>();

var parameterResource = Assert.Single(appModel.Resources.OfType<ParameterResource>(), r => r.Name == "val");
#pragma warning disable CS0618 // Type or member is obsolete
Assert.Equal($"MyAccessToken", parameterResource.Value);
#pragma warning restore CS0618 // Type or member is obsolete

// The manifest is not affected by the custom configuration key
var paramManifest = await ManifestUtils.GetManifest(appModel.Resources.OfType<ParameterResource>().Single(r => r.Name == "val")).DefaultTimeout();
Expand Down
Loading
Loading