using System; using System.Threading; using Amazon.CloudWatchLogs.Model; using AWS.Logger.SeriLog; using AWS.Logger.TestUtils; using Microsoft.Extensions.Configuration; using Serilog; using Xunit; namespace AWS.Logger.SeriLog.Tests { // This project can output the Class library as a NuGet Package. // To enable this option, right-click on the project and select the Properties menu item. // In the Build tab select "Produce outputs on build". public class SeriLoggerTestClass : BaseTestClass { public SeriLoggerTestClass(TestFixture testFixture) : base(testFixture) { } private void CreateLoggerFromConfiguration(string configurationFile) { var configuration = new ConfigurationBuilder() .AddJsonFile(configurationFile) .Build(); Log.Logger = new LoggerConfiguration(). ReadFrom.Configuration(configuration). WriteTo.AWSSeriLog( configuration).CreateLogger(); } #region Test Cases [Fact] public void SeriLogger() { CreateLoggerFromConfiguration("AWSSeriLogGroup.json"); SimpleLoggingTest("AWSSeriLogGroup"); } [Fact] public void MultiThreadTest() { CreateLoggerFromConfiguration("AWSSeriLogGroupMultiThreadTest.json"); MultiThreadTestGroup("AWSSeriLogGroupMultiThreadTest"); } [Fact] public void MultiThreadBufferFullTest() { CreateLoggerFromConfiguration("AWSSeriLogGroupMultiThreadBufferFullTest.json"); MultiThreadBufferFullTestGroup("AWSSeriLogGroupMultiThreadBufferFullTest"); } [Fact] public void RestrictedToMinimumLevelTest() { string logGroupName = "AWSSeriLogGroupRestrictedtoMinimumLevel"; // Create logger var configuration = new ConfigurationBuilder() .AddJsonFile("AWSSeriLogGroupRestrictedToMinimumLevel.json") .Build(); Log.Logger = new LoggerConfiguration(). ReadFrom.Configuration(configuration).CreateLogger(); ExecuteRestrictedToMinimumLevelTest(logGroupName); } private void ExecuteRestrictedToMinimumLevelTest(string logGroupName) { // Log 4 Debug messages for (int i = 0; i < 3; i++) { Log.Debug(string.Format("Test logging message {0} SeriLog, Thread Id:{1}", i, Thread.CurrentThread.ManagedThreadId)); } // Log 5 Error messages for (int i = 0; i < 5; i++) { Log.Error(string.Format("Test logging message {0} SeriLog, Thread Id:{1}", i, Thread.CurrentThread.ManagedThreadId)); } Log.Error(LASTMESSAGE); GetLogEventsResponse getLogEventsResponse = new GetLogEventsResponse(); if (NotifyLoggingCompleted("AWSSeriLogGroupRestrictedtoMinimumLevel", "LASTMESSAGE")) { DescribeLogStreamsResponse describeLogstreamsResponse = Client.DescribeLogStreamsAsync(new DescribeLogStreamsRequest { Descending = true, LogGroupName = logGroupName, OrderBy = "LastEventTime" }).Result; getLogEventsResponse = Client.GetLogEventsAsync(new GetLogEventsRequest { LogGroupName = logGroupName, LogStreamName = describeLogstreamsResponse.LogStreams[0].LogStreamName }).Result; } Assert.Equal(6, getLogEventsResponse.Events.Count); } /// /// This method posts debug messages onto CloudWatchLogs. /// /// The number of messages that would be posted onto CloudWatchLogs protected override void LogMessages(int count) { for (int i = 0; i < count - 1; i++) { Log.Debug(string.Format("Test logging message {0} SeriLog, Thread Id:{1}", i, Thread.CurrentThread.ManagedThreadId)); } Log.Debug(LASTMESSAGE); } #endregion } }