public void GetLogMessageTest()
        {
            // Arrange
            var frame = new byte[]
            {
                1, 0, 0, 0, 0, 0, 0, 43, 91, 50, 48, 49, 57, 45, 48, 50, 45, 48, 56, 32, 48, 50, 58, 50, 51, 58, 50, 50, 32, 58, 32, 83, 116, 97, 114, 116, 105, 110, 103, 32, 69, 100, 103, 101, 32, 65, 103, 101, 110, 116, 10
            };
            var    byteString       = ByteString.FromBytes(frame);
            string iotHub           = "foo.azure-devices.net";
            string deviceId         = "dev1";
            string moduleId         = "mod1";
            string expectedText     = "[2019-02-08 02:23:22 : Starting Edge Agent";
            string expectedStream   = "stdout";
            int    expectedLogLevel = 6;

            // Act
            ModuleLogMessage moduleLogMessage = LogMessageParser.GetLogMessage(byteString, iotHub, deviceId, moduleId);

            // Assert
            Assert.NotNull(moduleLogMessage);
            Assert.Equal(expectedText, moduleLogMessage.Text);
            Assert.Equal(iotHub, moduleLogMessage.IoTHub);
            Assert.Equal(deviceId, moduleLogMessage.DeviceId);
            Assert.Equal(moduleId, moduleLogMessage.ModuleId);
            Assert.Equal(expectedStream, moduleLogMessage.Stream);
            Assert.Equal(expectedLogLevel, moduleLogMessage.LogLevel);
        }
        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());
            }
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
        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);
            }
        }
 public void TestGetStream(byte streamByte, string stream)
 {
     Assert.Equal(stream, LogMessageParser.GetStream(streamByte));
 }
Exemple #7
0
 public LogMessageNotifier(IMessageSender messageSender, LogMessageParser logMessageParser)
 {
     _messageSender    = messageSender;
     _logMessageParser = logMessageParser;
 }