TermRemoteCtl/apps/windows_agent/tests/TermRemoteCtl.Agent.Tests/Configuration/AgentOptionsPipelineTests.cs

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();
}
}