using Omika.Core.Configuration;
using Omika.Core.Observability;
namespace Omika.Tests.Observability;
///
/// Fabrique de test partagée pour le pipeline d'observabilité.
///
internal static class ObservabilityTestHarness
{
public static (SafeTelemetrySink Sink, PriorityTelemetryQueue Queue, TelemetryCounters Counters)
CreatePipeline(ObservabilityOptions? options = null)
{
ObservabilityOptions opts = options ?? new ObservabilityOptions();
var counters = new TelemetryCounters();
var queue = new PriorityTelemetryQueue(opts, counters);
var sink = new SafeTelemetrySink(opts, queue, counters);
return (sink, queue, counters);
}
public static TelemetryEvent NewEvent(
EventCode code,
TelemetryLevel level = TelemetryLevel.Info,
TelemetryPriority? priority = null,
TelemetryMetadata? metadata = null) =>
new()
{
EventCode = code,
Level = level,
Priority = priority,
Metadata = metadata
};
public static DiagnosticEvent NewDiagnostic(
EventCode code,
TelemetryLevel level = TelemetryLevel.Info,
TelemetryPriority? priority = null) =>
new()
{
EventCode = code,
Level = level,
Priority = priority
};
public static async Task WaitUntilAsync(Func condition, int timeoutMs = 3000)
{
DateTimeOffset deadline = DateTimeOffset.UtcNow.AddMilliseconds(timeoutMs);
while (!condition() && DateTimeOffset.UtcNow < deadline)
{
await Task.Delay(10);
}
Assert.True(condition(), "La condition n'a pas été atteinte dans le délai imparti.");
}
}