doctor enhancements, setup, enhancements, ui functionality and design consolidation and , test projects fixes , product advisory attestation/rekor and delta verfications enhancements
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Microsoft.Extensions.Time.Testing;
|
||||
using StellaOps.TestKit;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Router.Config.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Unit tests for <see cref="RouterConfigProvider"/> with timer-based hot reload using FakeTimeProvider.
|
||||
/// </summary>
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
public sealed class RouterConfigProviderHotReloadTests : IDisposable
|
||||
{
|
||||
private readonly FakeTimeProvider _timeProvider;
|
||||
private RouterConfigProvider? _provider;
|
||||
|
||||
public RouterConfigProviderHotReloadTests()
|
||||
{
|
||||
_timeProvider = new FakeTimeProvider(new DateTimeOffset(2026, 1, 18, 12, 0, 0, TimeSpan.Zero));
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.Dispose();
|
||||
}
|
||||
|
||||
private RouterConfigProvider CreateProvider(RouterConfigOptions? options = null)
|
||||
{
|
||||
var opts = Options.Create(options ?? new RouterConfigOptions { EnableHotReload = true });
|
||||
_provider = new RouterConfigProvider(opts, NullLogger<RouterConfigProvider>.Instance, _timeProvider);
|
||||
return _provider;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_WithHotReloadEnabled_DoesNotThrow()
|
||||
{
|
||||
// Arrange & Act
|
||||
var action = () => CreateProvider(new RouterConfigOptions { EnableHotReload = true });
|
||||
|
||||
// Assert
|
||||
action.Should().NotThrow();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_WithTimeProvider_UsesTimeProvider()
|
||||
{
|
||||
// Arrange & Act
|
||||
var provider = CreateProvider(new RouterConfigOptions { EnableHotReload = true });
|
||||
|
||||
// Assert
|
||||
provider.Should().NotBeNull();
|
||||
provider.Current.Should().NotBeNull();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task HotReloadTimer_WhenEnabled_ContinuesWorking()
|
||||
{
|
||||
// Arrange
|
||||
var provider = CreateProvider(new RouterConfigOptions
|
||||
{
|
||||
EnableHotReload = true
|
||||
});
|
||||
|
||||
// Act - advance time to simulate hot reload timer firing
|
||||
_timeProvider.Advance(TimeSpan.FromSeconds(35));
|
||||
|
||||
// Allow timer callback to execute
|
||||
await Task.Delay(100);
|
||||
|
||||
// Assert - provider should still be functional (no exception)
|
||||
provider.Current.Should().NotBeNull();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task HotReloadTimer_MultipleIntervals_ContinuesChecking()
|
||||
{
|
||||
// Arrange
|
||||
var provider = CreateProvider(new RouterConfigOptions
|
||||
{
|
||||
EnableHotReload = true
|
||||
});
|
||||
|
||||
// Act - advance through multiple intervals
|
||||
_timeProvider.Advance(TimeSpan.FromSeconds(35));
|
||||
await Task.Delay(50);
|
||||
_timeProvider.Advance(TimeSpan.FromSeconds(30));
|
||||
await Task.Delay(50);
|
||||
_timeProvider.Advance(TimeSpan.FromSeconds(30));
|
||||
await Task.Delay(50);
|
||||
|
||||
// Assert - provider should still be functional
|
||||
provider.Current.Should().NotBeNull();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Dispose_StopsTimer()
|
||||
{
|
||||
// Arrange
|
||||
var provider = CreateProvider(new RouterConfigOptions
|
||||
{
|
||||
EnableHotReload = true
|
||||
});
|
||||
|
||||
// Act
|
||||
provider.Dispose();
|
||||
|
||||
// Assert - should not throw when advancing time after dispose
|
||||
_timeProvider.Advance(TimeSpan.FromMinutes(5));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Dispose_CanBeCalledMultipleTimes()
|
||||
{
|
||||
// Arrange
|
||||
var provider = CreateProvider(new RouterConfigOptions { EnableHotReload = true });
|
||||
|
||||
// Act
|
||||
provider.Dispose();
|
||||
var action = () => provider.Dispose();
|
||||
|
||||
// Assert
|
||||
action.Should().NotThrow();
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
|
||||
<PackageReference Include="Moq" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
Reference in New Issue
Block a user