Skip to content

Commit

Permalink
add unit tests for config processing
Browse files Browse the repository at this point in the history
  • Loading branch information
tskimmett committed Oct 7, 2024
1 parent 79e1a0d commit bb10791
Showing 1 changed file with 106 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
using System.Text;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Orleans.Configuration;
using Xunit;

namespace Tester.AzureUtils;

public class AzureQueueStreamProviderBuilderTests
{
[Fact]
public void Missing_ConnectionString()
{
string json = """
{
"Orleans": {
"Streaming": {
"AzureQueueProvider": {
"ProviderType": "AzureQueueStorage",
"QueueNames": [
"q1"
]
}
}
}
}
""";

var queueOptions = ConfigureSilo(json).Services.BuildServiceProvider().GetOptionsByName<AzureQueueOptions>(null);

Assert.Null(queueOptions.QueueServiceClient);
}

[Fact]
public void Minimal_Configuration()
{
string json = """
{
"Orleans": {
"Streaming": {
"AzureQueueProvider": {
"ProviderType": "AzureQueueStorage",
"ConnectionString": "UseDevelopmentStorage=true",
"QueueNames": [
"q1"
]
}
}
}
}
""";

var queueOptions = ConfigureSilo(json).Services.BuildServiceProvider().GetOptionsByName<AzureQueueOptions>(null);

Assert.NotNull(queueOptions.QueueServiceClient);
Assert.Equal("devstoreaccount1", queueOptions.QueueServiceClient.AccountName);
Assert.Equal(["q1"], queueOptions.QueueNames);
Assert.Null(queueOptions.MessageVisibilityTimeout);
}

[Fact]
public void Full_Configuration()
{
string json = """
{
"Orleans": {
"Streaming": {
"AzureQueueProvider": {
"ProviderType": "AzureQueueStorage",
"ConnectionString": "UseDevelopmentStorage=true",
"MessageVisibilityTimeout": "00:00:37",
"QueueNames": [
"q1",
"q2"
]
}
}
}
}
""";

var queueOptions = ConfigureSilo(json).Services.BuildServiceProvider().GetOptionsByName<AzureQueueOptions>(null);

Assert.NotNull(queueOptions.QueueServiceClient);
Assert.Equal("devstoreaccount1", queueOptions.QueueServiceClient.AccountName);
Assert.Equal(["q1", "q2"], queueOptions.QueueNames);
Assert.Equal(TimeSpan.FromSeconds(37), queueOptions.MessageVisibilityTimeout);
}

static TestSiloBuilder ConfigureSilo(string json)
{
var siloBuilder = new TestSiloBuilder(json);
var aqsBuilder = new AzureQueueStreamProviderBuilder();
aqsBuilder.Configure(siloBuilder, null, siloBuilder.Configuration.GetSection("Orleans:Streaming:AzureQueueProvider"));
return siloBuilder;
}

class TestSiloBuilder(string json) : ISiloBuilder
{
public IServiceCollection Services { get; } = new ServiceCollection();

public IConfiguration Configuration { get; } = GetConfig(json);
}

static IConfigurationRoot GetConfig(string json) => new ConfigurationBuilder().AddJsonStream(new MemoryStream(Encoding.UTF8.GetBytes(json))).Build();
}

0 comments on commit bb10791

Please sign in to comment.