| File: OrleansProviderTypeTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Orleans.Tests\Aspire.Hosting.Orleans.Tests.csproj (Aspire.Hosting.Orleans.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Hosting.ApplicationModel; using Aspire.Hosting.Utils; namespace Aspire.Hosting.Orleans.Tests; public class OrleansProviderTypeTests { [Fact] public async Task ProviderTypeDefaultsToResourceTypeNameWithoutResourceSuffix() { using var builder = TestDistributedApplicationBuilder.Create(); var provider = builder.AddResource(new TestProviderResource("provider") { ConnectionString = "connectionString" }); var orleans = builder.AddOrleans("orleans") .WithClustering(provider); var silo = builder.AddContainer("silo", "image") .WithReference(orleans); var config = await GetEnvironmentVariablesAsync(silo.Resource, builder); Assert.Equal("TestProvider", config["Orleans__Clustering__ProviderType"]); Assert.Equal("provider", config["Orleans__Clustering__ServiceKey"]); } [Fact] public async Task WithOrleansProviderTypeOverridesProviderType() { using var builder = TestDistributedApplicationBuilder.Create(); var provider = builder.AddResource(new TestProviderResource("provider") { ConnectionString = "connectionString" }).WithOrleansProviderType("Redis"); var orleans = builder.AddOrleans("orleans") .WithClustering(provider); var silo = builder.AddContainer("silo", "image") .WithReference(orleans); var config = await GetEnvironmentVariablesAsync(silo.Resource, builder); Assert.Equal("Redis", config["Orleans__Clustering__ProviderType"]); Assert.Equal("provider", config["Orleans__Clustering__ServiceKey"]); } [Fact] public async Task WithOrleansProviderTypeReplacesPreviousProviderType() { using var builder = TestDistributedApplicationBuilder.Create(); var provider = builder.AddResource(new TestProviderResource("provider") { ConnectionString = "connectionString" }) .WithOrleansProviderType("Redis") .WithOrleansProviderType("AdoNet"); var orleans = builder.AddOrleans("orleans") .WithClustering(provider); var silo = builder.AddContainer("silo", "image") .WithReference(orleans); var config = await GetEnvironmentVariablesAsync(silo.Resource, builder); Assert.Equal("AdoNet", config["Orleans__Clustering__ProviderType"]); } [Fact] public void WithOrleansProviderTypeShouldThrowWhenBuilderIsNull() { IResourceBuilder<TestProviderResource> builder = null!; var action = () => builder.WithOrleansProviderType("Redis"); var exception = Assert.Throws<ArgumentNullException>(action); Assert.Equal(nameof(builder), exception.ParamName); } [Theory] [InlineData(null)] [InlineData("")] [InlineData(" ")] public void WithOrleansProviderTypeShouldThrowWhenProviderTypeIsNullOrWhiteSpace(string? providerType) { using var builder = TestDistributedApplicationBuilder.Create(); var provider = builder.AddResource(new TestProviderResource("provider") { ConnectionString = "connectionString" }); var action = () => provider.WithOrleansProviderType(providerType!); var exception = providerType is null ? Assert.Throws<ArgumentNullException>(action) : Assert.Throws<ArgumentException>(action); Assert.Equal(nameof(providerType), exception.ParamName); } private sealed class TestProviderResource(string name) : Resource(name), IResourceWithConnectionString { public string? ConnectionString { get; init; } public ReferenceExpression ConnectionStringExpression => ReferenceExpression.Create($"{ConnectionString}"); } private static async Task<Dictionary<string, object>> GetEnvironmentVariablesAsync(IResource resource, IDistributedApplicationBuilder builder) { var env = new Dictionary<string, object>(); var context = new EnvironmentCallbackContext(builder.ExecutionContext, resource, env); foreach (var callback in resource.Annotations.OfType<EnvironmentCallbackAnnotation>()) { await callback.Callback(context).ConfigureAwait(false); } return env; } }