Files
Omika/tests/Omika.Tests/Observability/SafeTelemetrySinkFailOpenTests.cs
T
2026-10-23 18:46:50 +02:00

60 lines
2.0 KiB
C#

using Omika.Core.Configuration;
using Omika.Core.Observability;
namespace Omika.Tests.Observability;
public class SafeTelemetrySinkFailOpenTests
{
[Fact]
public void ThrowingQueue_DoesNotPropagate_AndCountsInternalDrop()
{
var options = new ObservabilityOptions();
var counters = new TelemetryCounters();
var sink = new SafeTelemetrySink(options, new ThrowingQueue(), counters);
sink.Track(ObservabilityTestHarness.NewEvent(TelemetryEventCodes.MobileAppStarted));
Assert.Equal(1L, counters.DroppedInternal);
Assert.Equal(0L, counters.Accepted);
}
[Fact]
public void ThrowingQueue_Log_DoesNotPropagate()
{
var sink = new SafeTelemetrySink(
new ObservabilityOptions(), new ThrowingQueue(), new TelemetryCounters());
sink.Log(ObservabilityTestHarness.NewDiagnostic(TelemetryEventCodes.ApiRequestFailed));
// Aucune exception : l'assertion porte sur l'absence de levée.
}
[Fact]
public void UnknownMode_IsTreatedAsOff_NoThrow()
{
var options = new ObservabilityOptions { Mode = (TelemetryMode)999 };
var (sink, _, counters) = ObservabilityTestHarness.CreatePipeline(options);
sink.Track(ObservabilityTestHarness.NewEvent(TelemetryEventCodes.MobileAppStarted));
Assert.Equal(1L, counters.DroppedDisabled);
}
[Fact]
public void OutOfRangePriority_IsDowngraded_NoThrow()
{
var (sink, queue, counters) = ObservabilityTestHarness.CreatePipeline();
sink.Track(ObservabilityTestHarness.NewEvent(
TelemetryEventCodes.MobileAppStarted, priority: (TelemetryPriority)999));
// Rétrogradée vers la file P4 (la moins critique).
Assert.Equal(1, queue.GetQueueCount(TelemetryPriorityQueues.P4));
Assert.Equal(1L, counters.Accepted);
}
private sealed class ThrowingQueue : ITelemetryQueue
{
public bool TryEnqueue(OmikaEvent @event) => throw new InvalidOperationException("queue défaillante (test)");
}
}