public async Task Register_WhenLogModeIsNone_ShouldNotWriteToLogFile() { var name = GetTestName(); var path = NewDataPath(forceCreateDir: true); path = Path.Combine(path, Guid.NewGuid().ToString()); Directory.CreateDirectory(path); var loggingSource = new LoggingSource( LogMode.None, path, "LoggingSource" + name, TimeSpan.MaxValue, long.MaxValue, false); var logger = new Logger(loggingSource, "Source" + name, "Logger" + name); var tcs = new TaskCompletionSource <WebSocketReceiveResult>(TaskCreationOptions.RunContinuationsAsynchronously); var socket = new DummyWebSocket(); socket.ReceiveAsyncFunc = () => tcs.Task; var context = new LoggingSource.WebSocketContext(); var _ = loggingSource.Register(socket, context, CancellationToken.None); var uniqForOperation = Guid.NewGuid().ToString(); var uniqForInformation = Guid.NewGuid().ToString(); var logTasks = Task.WhenAll(logger.OperationsAsync(uniqForOperation), logger.InfoAsync(uniqForInformation)); var timeout = TimeSpan.FromSeconds(10); await Task.WhenAny(logTasks, Task.Delay(timeout)); Assert.True(logTasks.IsCompleted, $"Waited over {timeout.TotalSeconds} seconds for log tasks to finish"); tcs.SetResult(new WebSocketReceiveResult(1, WebSocketMessageType.Text, true, WebSocketCloseStatus.NormalClosure, "")); loggingSource.EndLogging(); Assert.Contains(uniqForOperation, socket.LogsReceived); Assert.Contains(uniqForInformation, socket.LogsReceived); var logFile = Directory.GetFiles(path).First(); var logContent = await File.ReadAllTextAsync(logFile); Assert.DoesNotContain(uniqForOperation, logContent); Assert.DoesNotContain(uniqForInformation, logContent); }
public async Task Register_WhenLogModeIsOperations_ShouldWriteToLogFileJustAsLogMode(LogMode logMode) { var timeout = TimeSpan.FromSeconds(10); var name = GetTestName(); var path = NewDataPath(forceCreateDir: true); path = Path.Combine(path, Guid.NewGuid().ToString()); Directory.CreateDirectory(path); var loggingSource = new LoggingSource( logMode, path, "LoggingSource" + name, TimeSpan.MaxValue, long.MaxValue, false); var logger = new Logger(loggingSource, "Source" + name, "Logger" + name); var tcs = new TaskCompletionSource <WebSocketReceiveResult>(TaskCreationOptions.RunContinuationsAsynchronously); var socket = new DummyWebSocket(); socket.ReceiveAsyncFunc = () => tcs.Task; var context = new LoggingSource.WebSocketContext(); //Register var _ = loggingSource.Register(socket, context, CancellationToken.None); var beforeCloseOperation = Guid.NewGuid().ToString(); var beforeCloseInformation = Guid.NewGuid().ToString(); var logTasks = Task.WhenAll(logger.OperationsAsync(beforeCloseOperation), logger.InfoAsync(beforeCloseInformation)); await Task.WhenAny(logTasks, Task.Delay(timeout)); Assert.True(logTasks.IsCompleted, $"Waited over {timeout.TotalSeconds} seconds for log tasks to finish"); const int socketTimeout = 5000; var socketContainsLogs = WaitForValue(() => socket.LogsReceived.Contains(beforeCloseInformation) && socket.LogsReceived.Contains(beforeCloseOperation), true, socketTimeout, 100); Assert.True(socketContainsLogs, $"Waited over {socketTimeout} seconds for log to be written to socket"); //Close socket socket.Close(); tcs.SetResult(new WebSocketReceiveResult(1, WebSocketMessageType.Text, true, WebSocketCloseStatus.NormalClosure, string.Empty)); var afterCloseOperation = Guid.NewGuid().ToString(); var afterCloseInformation = Guid.NewGuid().ToString(); logTasks = Task.WhenAll(logger.OperationsAsync(afterCloseOperation), logger.InfoAsync(afterCloseInformation)); await Task.WhenAny(logTasks, Task.Delay(timeout)); Assert.True(logTasks.IsCompleted || logMode == LogMode.None, $"Waited over {timeout.TotalSeconds} seconds for log tasks to finish"); loggingSource.EndLogging(); string logsFileContentAfter = await ReadLogsFileContent(path); AssertContainsLog(LogMode.Information, logMode)(beforeCloseInformation, logsFileContentAfter); AssertContainsLog(LogMode.Operations, logMode)(beforeCloseOperation, logsFileContentAfter); AssertContainsLog(LogMode.Information, logMode)(afterCloseInformation, logsFileContentAfter); AssertContainsLog(LogMode.Operations, logMode)(afterCloseOperation, logsFileContentAfter); }