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:
master
2026-01-19 09:02:59 +02:00
parent 8c4bf54aed
commit 17419ba7c4
809 changed files with 170738 additions and 12244 deletions

View File

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

View File

@@ -20,6 +20,8 @@
<ItemGroup>
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
<PackageReference Include="Moq" />
</ItemGroup>
<ItemGroup>