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

84 lines
2.9 KiB
C#

using System.Text.Json;
using Omika.Core.Observability.External;
using Omika.Core.Observability.Outbox;
namespace Omika.Tests.Observability.Forwarding;
/// <summary>Fabrique de test partagée pour le forwarder T19.</summary>
internal static class ForwardingTestHarness
{
private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web);
public static string CreateTempDirectory()
{
string dir = Path.Combine(Path.GetTempPath(), "omika-forwarding-tests", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
return dir;
}
public static void DeleteDirectory(string dir)
{
try
{
if (Directory.Exists(dir))
{
Directory.Delete(dir, recursive: true);
}
}
catch
{
// Best-effort.
}
}
public static RemoteDiagnosticRecord NewRecord(
string clientCode = "BATIK.01",
string component = "test",
Guid? eventId = null,
string? screenCode = null,
string? featureCode = null) =>
new()
{
ReceivedAtUtc = DateTimeOffset.UtcNow,
BatchId = Guid.NewGuid(),
IngestionTraceId = Guid.NewGuid().ToString("D"),
ClientCode = clientCode,
ActorKey = "a" + new string('0', 63),
ActorKeyVersion = 1,
DeviceKey = "d" + new string('0', 63),
DeviceKeyVersion = 1,
LicenseNumber = "b600a641d61c485b8e928cd3aab281b1",
ServerInstance = "API-SRV-01",
Environment = "Production",
Event = new DiagnosticEventDto
{
EventId = eventId ?? Guid.NewGuid(),
EventCode = "OMK-MOB-APP-001",
TimestampUtc = DateTimeOffset.UtcNow,
Level = "Info",
Priority = "P3",
Component = component,
ScreenCode = screenCode,
FeatureCode = featureCode
}
};
/// <summary>Sérialise un enregistrement au format JSONL canonique (camelCase).</summary>
public static string Serialize(RemoteDiagnosticRecord record) =>
JsonSerializer.Serialize(record, JsonOptions);
/// <summary>Écrit un fichier JSONL de spool (nom exact, ex. omika-mobile-diagnostic-20261002-001.jsonl).</summary>
public static void WriteSpoolFile(string directory, string fileName, IReadOnlyList<RemoteDiagnosticRecord> records)
{
Directory.CreateDirectory(directory);
File.WriteAllLines(Path.Combine(directory, fileName), records.Select(Serialize));
}
/// <summary>Écrit un fichier de spool avec un contenu brut arbitraire (tests quota/taille).</summary>
public static void WriteRawSpoolFile(string directory, string fileName, string content)
{
Directory.CreateDirectory(directory);
File.WriteAllText(Path.Combine(directory, fileName), content);
}
}