Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
using Omika.Core.Configuration;
|
||||
using Omika.Core.Observability;
|
||||
|
||||
namespace Omika.Tests.Observability;
|
||||
|
||||
/// <summary>
|
||||
/// Contrat du chemin chaud <c>Track()</c> : il doit rester synchrone, rapide et
|
||||
/// sans exception dans tous les états du pipeline (désactivé, file vide, presque
|
||||
/// pleine, pleine, tempête). Aucun IO réseau/fichier/base n'est réalisé : le
|
||||
/// chemin est purement en mémoire.
|
||||
/// </summary>
|
||||
public class TelemetryHotPathTests
|
||||
{
|
||||
[Fact]
|
||||
public void Track_Disabled_ReturnsImmediately()
|
||||
{
|
||||
var options = new ObservabilityOptions { Enabled = false };
|
||||
var (sink, _, counters) = ObservabilityTestHarness.CreatePipeline(options);
|
||||
|
||||
sink.Track(ObservabilityTestHarness.NewEvent(TelemetryEventCodes.MobileAppStarted));
|
||||
|
||||
Assert.Equal(1L, counters.DroppedDisabled);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Track_EmptyQueue_Accepts()
|
||||
{
|
||||
var (sink, queue, counters) = ObservabilityTestHarness.CreatePipeline();
|
||||
|
||||
sink.Track(ObservabilityTestHarness.NewEvent(TelemetryEventCodes.MobileAppStarted));
|
||||
|
||||
Assert.Equal(1L, counters.Accepted);
|
||||
Assert.Equal(1, queue.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Track_NearFullQueue_Accepts()
|
||||
{
|
||||
var options = new ObservabilityOptions
|
||||
{
|
||||
P0QueueCapacity = 1,
|
||||
P1QueueCapacity = 1,
|
||||
P2QueueCapacity = 1,
|
||||
P3QueueCapacity = 1,
|
||||
P4QueueCapacity = 1
|
||||
};
|
||||
var (sink, _, counters) = ObservabilityTestHarness.CreatePipeline(options);
|
||||
|
||||
sink.Track(ObservabilityTestHarness.NewEvent(TelemetryEventCodes.MobileAppStarted));
|
||||
|
||||
Assert.Equal(1L, counters.Accepted);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Track_FullQueue_DropsWithoutThrow()
|
||||
{
|
||||
var options = new ObservabilityOptions
|
||||
{
|
||||
P0QueueCapacity = 1,
|
||||
P1QueueCapacity = 1,
|
||||
P2QueueCapacity = 1,
|
||||
P3QueueCapacity = 1,
|
||||
P4QueueCapacity = 1
|
||||
};
|
||||
var (sink, _, counters) = ObservabilityTestHarness.CreatePipeline(options);
|
||||
|
||||
sink.Track(ObservabilityTestHarness.NewEvent(TelemetryEventCodes.MobileAppStarted));
|
||||
sink.Track(ObservabilityTestHarness.NewEvent(TelemetryEventCodes.MobileAppStarted));
|
||||
|
||||
Assert.Equal(1L, counters.Accepted);
|
||||
Assert.Equal(1L, counters.DroppedQueueFull);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Track_LogStorm_DoesNotThrow()
|
||||
{
|
||||
var (sink, _, counters) = ObservabilityTestHarness.CreatePipeline();
|
||||
|
||||
for (int i = 0; i < 100_000; i++)
|
||||
{
|
||||
sink.Track(ObservabilityTestHarness.NewEvent(TelemetryEventCodes.MobileAppStarted));
|
||||
}
|
||||
|
||||
// Aucune exception ; le flux est borné et comptabilisé.
|
||||
Assert.Equal(100_000L, counters.Accepted + counters.DroppedTotal);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user