tests-integration/Elastic.Serilog.Sinks.IntegrationTests/SerilogOutputTests.cs (67 lines of code) (raw):

using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using Elastic.Channels; using Elastic.Channels.Diagnostics; using Elastic.Clients.Elasticsearch; using Elastic.Clients.Elasticsearch.IndexManagement; using Elastic.CommonSchema; using Elastic.Elasticsearch.Xunit.XunitPlumbing; using FluentAssertions; using Serilog; using Serilog.Core; using Xunit.Abstractions; using DataStreamName = Elastic.Ingest.Elasticsearch.DataStreams.DataStreamName; namespace Elastic.Serilog.Sinks.IntegrationTests { public class SerilogOutputTests : SerilogTestBase { private IChannelDiagnosticsListener? _listener = null; private readonly CountdownEvent _waitHandle; private ElasticsearchSinkOptions SinkOptions { get; } public SerilogOutputTests(SerilogCluster cluster, ITestOutputHelper output) : base(cluster, output) { var logs = new Action<Logger>[] { l => l.Information("Hello Information"), l => l.Debug("Hello Debug"), l => l.Warning("Hello Warning"), l => l.Error("Hello Error"), l => l.Fatal("Hello Fatal") }; _waitHandle = new CountdownEvent(1); SinkOptions = new ElasticsearchSinkOptions(Client.Transport) { DataStream = new DataStreamName("logs", "serilog", "tests"), ConfigureChannel = c => { c.BufferOptions = new BufferOptions { WaitHandle = _waitHandle, OutboundBufferMaxSize = logs.Length }; }, ChannelDiagnosticsCallback = (l) => _listener = l }; var loggerConfig = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.ColoredConsole() .WriteTo.Elasticsearch(SinkOptions); using var logger = loggerConfig.CreateLogger(); foreach (var a in logs) a(logger); } [I] public async Task AssertLogs() { if (!_waitHandle.WaitHandle.WaitOne(TimeSpan.FromSeconds(10))) throw new Exception($"No flush occurred in 10 seconds: {_listener}", _listener?.ObservedException); var indexName = SinkOptions.DataStream.ToString(); var refreshed = await Client.Indices.RefreshAsync(new RefreshRequest(indexName)); refreshed.IsValidResponse.Should().BeTrue("{0}", refreshed.DebugInformation); var search = await Client.SearchAsync<EcsDocument>(new SearchRequest(indexName)); // Informational should be filtered search.Documents.Count.Should().Be(4); var messages = search.Documents.Select(e => e.Message); messages.Should().Contain("Hello Error"); } } }