69 lines
2.3 KiB
C#
69 lines
2.3 KiB
C#
using System.IO;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
using TermRemoteCtl.Agent.Configuration;
|
|
|
|
namespace TermRemoteCtl.Agent.Tests.Configuration;
|
|
|
|
public class AgentOptionsPipelineTests
|
|
{
|
|
[Fact]
|
|
public void ResolveOptions_Uses_DataRoot_Fallback_When_Config_Omits_DataRoot()
|
|
{
|
|
var configuration = BuildConfiguration(new Dictionary<string, string?>
|
|
{
|
|
["Agent:BindAddress"] = "127.0.0.1",
|
|
["Agent:HttpsPort"] = "9443",
|
|
["Agent:WebSocketFrameFlushMilliseconds"] = "33",
|
|
["Agent:RingBufferLineLimit"] = "4000"
|
|
});
|
|
|
|
var services = new ServiceCollection();
|
|
services.AddAgentOptions(configuration);
|
|
|
|
using var provider = services.BuildServiceProvider();
|
|
var options = provider.GetRequiredService<IOptions<AgentOptions>>().Value;
|
|
|
|
var expectedDataRoot = Path.Combine(
|
|
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
|
|
"TermRemoteCtl");
|
|
|
|
Assert.Equal(expectedDataRoot, options.DataRoot);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("0", "33", "HttpsPort")]
|
|
[InlineData("9443", "0", "WebSocketFrameFlushMilliseconds")]
|
|
public void ResolveOptions_Fails_When_Config_Is_Invalid(
|
|
string httpsPort,
|
|
string flushMilliseconds,
|
|
string expectedFailure)
|
|
{
|
|
var configuration = BuildConfiguration(new Dictionary<string, string?>
|
|
{
|
|
["Agent:BindAddress"] = "127.0.0.1",
|
|
["Agent:HttpsPort"] = httpsPort,
|
|
["Agent:WebSocketFrameFlushMilliseconds"] = flushMilliseconds,
|
|
["Agent:RingBufferLineLimit"] = "4000"
|
|
});
|
|
|
|
var services = new ServiceCollection();
|
|
services.AddAgentOptions(configuration);
|
|
|
|
using var provider = services.BuildServiceProvider();
|
|
|
|
var exception = Assert.Throws<OptionsValidationException>(
|
|
() => provider.GetRequiredService<IOptions<AgentOptions>>().Value);
|
|
|
|
Assert.Contains(exception.Failures, failure => failure.Contains(expectedFailure));
|
|
}
|
|
|
|
private static IConfiguration BuildConfiguration(IReadOnlyDictionary<string, string?> values)
|
|
{
|
|
return new ConfigurationBuilder()
|
|
.AddInMemoryCollection(values)
|
|
.Build();
|
|
}
|
|
}
|