feat: Web-UI als zweiter Ausgabeweg neben Avalonia-Shell (#490)
- Einheitlicher WebserverWorker in IBKRTrader.Hosting auf Kestrel-Basis - Token-Authentifizierung (AuthService) mit zeitkonstantem Vergleich und HMAC-Session-Tokens - OrderManager im Core fuer Bestands- und Reservierungsabgleich offener Broker-Orders - SettingsSchema fuer reflexionsbasiertes Auslesen und sichere Aktualisierung ohne Klartext-Passwoerter - SSE-Streaming (LogStreamService) fuer Echtzeit-Logs ueber isolierte Channels - Statische Single-Page-Application in wwwroot (Avalonia Fluent / Polytrader Theme) fuer alle 9 Ansichten - Unit-Tests fuer OrderManager, AuthService, SettingsSchema, LogStreamService und WebserverWorker (498 Tests gruen)
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using FluentAssertions;
|
||||
using IBKRTrader.Core.Logging;
|
||||
using IBKRTrader.Hosting.Web;
|
||||
|
||||
namespace IBKRTrader.Tests.Web;
|
||||
|
||||
[Trait("cat", "unit")]
|
||||
public class LogStreamServiceTests
|
||||
{
|
||||
[Fact]
|
||||
public void GetRecent_CapturesLogEntries_AndCapsAtRingBufferSize()
|
||||
{
|
||||
var logger = new LoggingService();
|
||||
using var sut = new LogStreamService(logger);
|
||||
|
||||
for (int i = 0; i < 150; i++)
|
||||
{
|
||||
logger.Info("TestModule", $"Message {i}");
|
||||
}
|
||||
|
||||
var recent = sut.GetRecent();
|
||||
recent.Count.Should().Be(100);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Dispose_UnsubscribesFromLogger()
|
||||
{
|
||||
var logger = new LoggingService();
|
||||
var sut = new LogStreamService(logger);
|
||||
|
||||
logger.Info("TestModule", "Before dispose");
|
||||
sut.GetRecent().Count.Should().Be(1);
|
||||
|
||||
sut.Dispose();
|
||||
|
||||
logger.Info("TestModule", "After dispose");
|
||||
sut.GetRecent().Count.Should().Be(1);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user