public void TestParseLogText(string value, int expectedLogLevel, string expectedDateTime, string expectedText) { // Act (int logLevel, Option <DateTime> timeStamp, string logText) = LogMessageParser.ParseLogText(value); // Assert Assert.Equal(expectedText, logText); Assert.Equal(expectedLogLevel, logLevel); Assert.Equal(timeStamp.HasValue, !string.IsNullOrWhiteSpace(expectedDateTime)); if (timeStamp.HasValue) { Assert.Equal(DateTime.Parse(expectedDateTime), timeStamp.OrDefault()); } }
public async Task GetLogsAsJsonWithCompressionTest() { // Arrange string iotHub = "foo.azure-devices.net"; string deviceId = "dev1"; string moduleId = "mod1"; Option <int> tail = Option.None <int>(); Option <string> since = Option.None <string>(); Option <string> until = Option.None <string>(); Option <bool> includeTimestamp = Option.Some(true); CancellationToken cancellationToken = CancellationToken.None; var runtimeInfoProvider = new Mock <IRuntimeInfoProvider>(); // Note: EdgeAgent automatically includes the timestamp for log parsing by default for content type JSON runtimeInfoProvider.Setup(r => r.GetModuleLogs(moduleId, false, tail, since, until, includeTimestamp, cancellationToken)) .ReturnsAsync(new MemoryStream(DockerFraming.Frame(TestLogTexts))); var logsProcessor = new LogsProcessor(new LogMessageParser(iotHub, deviceId)); var logsProvider = new LogsProvider(runtimeInfoProvider.Object, logsProcessor); ModuleLogFilter filter = new ModuleLogFilter(tail, since, until, Option.None <int>(), includeTimestamp, Option.None <string>()); var logOptions = new ModuleLogOptions(LogsContentEncoding.Gzip, LogsContentType.Json, filter, LogOutputFraming.None, Option.None <LogsOutputGroupingConfig>(), false); // Act byte[] bytes = await logsProvider.GetLogs(moduleId, logOptions, cancellationToken); // Assert byte[] decompressedBytes = Compression.DecompressFromGzip(bytes); var logMessages = decompressedBytes.FromBytes <List <ModuleLogMessage> >(); Assert.NotNull(logMessages); Assert.Equal(TestLogTexts.Length, logMessages.Count); for (int i = 0; i < logMessages.Count; i++) { ModuleLogMessage logMessage = logMessages[i]; (int logLevel, Option <DateTime> timeStamp, string text) = LogMessageParser.ParseLogText(TestLogTexts[i]); Assert.Equal(logLevel, logMessage.LogLevel); Assert.Equal(timeStamp.HasValue, logMessage.TimeStamp.HasValue); Assert.Equal(timeStamp.OrDefault(), logMessage.TimeStamp.OrDefault()); Assert.Equal(text, logMessage.Text); Assert.Equal(iotHub, logMessage.IoTHub); Assert.Equal(deviceId, logMessage.DeviceId); Assert.Equal(moduleId, logMessage.ModuleId); } }
public async Task GetLogsAsJsonWithCompressionTest() { // Arrange string iotHub = "foo.azure-devices.net"; string deviceId = "dev1"; string moduleId = "mod1"; Option <int> tail = Option.None <int>(); CancellationToken cancellationToken = CancellationToken.None; string expectedLogText = TestLogTexts.Join(string.Empty); var runtimeInfoProvider = new Mock <IRuntimeInfoProvider>(); runtimeInfoProvider.Setup(r => r.GetModuleLogs(moduleId, false, tail, cancellationToken)) .ReturnsAsync(new MemoryStream(GetDockerLogsStream(TestLogTexts))); var logsProcessor = new LogsProcessor(new LogMessageParser(iotHub, deviceId)); var logsProvider = new LogsProvider(runtimeInfoProvider.Object, logsProcessor); var logOptions = new ModuleLogOptions(moduleId, LogsContentEncoding.Gzip, LogsContentType.Json); // Act byte[] bytes = await logsProvider.GetLogs(logOptions, cancellationToken); // Assert byte[] decompressedBytes = Compression.DecompressFromGzip(bytes); var logMessages = decompressedBytes.FromBytes <List <ModuleLogMessage> >(); Assert.NotNull(logMessages); Assert.Equal(TestLogTexts.Length, logMessages.Count); for (int i = 0; i < logMessages.Count; i++) { ModuleLogMessage logMessage = logMessages[i]; (int logLevel, Option <DateTime> timeStamp, string text) = LogMessageParser.ParseLogText(TestLogTexts[i]); Assert.Equal(logLevel, logMessage.LogLevel); Assert.Equal(timeStamp.HasValue, logMessage.TimeStamp.HasValue); Assert.Equal(timeStamp.OrDefault(), logMessage.TimeStamp.OrDefault()); Assert.Equal(text, logMessage.Text); Assert.Equal(iotHub, logMessage.IoTHub); Assert.Equal(deviceId, logMessage.DeviceId); Assert.Equal(moduleId, logMessage.ModuleId); } }
public async Task GetLogsAsJsonTest() { // Arrange string iotHub = "foo.azure-devices.net"; string deviceId = "dev1"; string moduleId = "mod1"; Option <int> tail = Option.None <int>(); Option <int> since = Option.None <int>(); CancellationToken cancellationToken = CancellationToken.None; var runtimeInfoProvider = new Mock <IRuntimeInfoProvider>(); runtimeInfoProvider.Setup(r => r.GetModuleLogs(moduleId, false, tail, since, cancellationToken)) .ReturnsAsync(new MemoryStream(DockerFraming.Frame(TestLogTexts))); var logsProcessor = new LogsProcessor(new LogMessageParser(iotHub, deviceId)); var logsProvider = new LogsProvider(runtimeInfoProvider.Object, logsProcessor); var logOptions = new ModuleLogOptions(LogsContentEncoding.None, LogsContentType.Json, ModuleLogFilter.Empty, LogOutputFraming.None, Option.None <LogsOutputGroupingConfig>(), false); // Act byte[] bytes = await logsProvider.GetLogs(moduleId, logOptions, cancellationToken); // Assert var logMessages = bytes.FromBytes <List <ModuleLogMessage> >(); Assert.NotNull(logMessages); Assert.Equal(TestLogTexts.Length, logMessages.Count); for (int i = 0; i < logMessages.Count; i++) { ModuleLogMessage logMessage = logMessages[i]; (int logLevel, Option <DateTime> timeStamp, string text) = LogMessageParser.ParseLogText(TestLogTexts[i]); Assert.Equal(logLevel, logMessage.LogLevel); Assert.Equal(timeStamp.HasValue, logMessage.TimeStamp.HasValue); Assert.Equal(timeStamp.OrDefault(), logMessage.TimeStamp.OrDefault()); Assert.Equal(text, logMessage.Text); Assert.Equal(iotHub, logMessage.IoTHub); Assert.Equal(deviceId, logMessage.DeviceId); Assert.Equal(moduleId, logMessage.ModuleId); } }