From ce7bd9e79bfd7cc664535465bce174c6d00d18b7 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Tue, 1 Mar 2022 15:43:31 -0800 Subject: [PATCH] few remaining tests --- .../LogsHelperTests.cs | 42 +++++++++++++++ .../MessageDataTests.cs | 43 +++++++++++++++ .../TelemetryExceptionDataTests.cs | 53 ++++++++++++++++--- 3 files changed, 130 insertions(+), 8 deletions(-) create mode 100644 sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/MessageDataTests.cs diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/LogsHelperTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/LogsHelperTests.cs index 63c010461e53..4da5ec6b15be 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/LogsHelperTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/LogsHelperTests.cs @@ -1,10 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System; using System.Collections.Generic; using Azure.Core; using Azure.Monitor.OpenTelemetry.Exporter.Models; using Microsoft.Extensions.Logging; +using OpenTelemetry; using OpenTelemetry.Logs; using Xunit; @@ -41,6 +43,7 @@ public void MessageIsSetToFormattedMessageWhenIncludeFormattedMessageIsSet() Assert.Equal("tomato", name); Assert.True(properties.TryGetValue("price", out string price)); Assert.Equal("2.99", price); + Assert.Equal(3, properties.Count); } [Fact] @@ -70,6 +73,7 @@ public void MessageIsSetToOriginalFormatWhenIncludeFormattedMessageIsNotSet() Assert.Equal("tomato", name); Assert.True(properties.TryGetValue("price", out string price)); Assert.Equal("2.99", price); + Assert.Equal(2, properties.Count); } [Fact] @@ -97,6 +101,7 @@ public void PropertiesContainFieldsFromStructuredLogs() Assert.Equal("tomato", name); Assert.True(properties.TryGetValue("price", out string price)); Assert.Equal("2.99", price); + Assert.Equal(2, properties.Count); } [Fact] @@ -124,6 +129,7 @@ public void PropertiesContainFieldsFromStructuredLogsIfParseStateValuesIsSet() Assert.Equal("Tomato", name); Assert.True(properties.TryGetValue("Price", out string price)); Assert.Equal("2.99", price); + Assert.Equal(2, properties.Count); } [Fact] @@ -152,6 +158,7 @@ public void PropertiesContainEventIdAndEventNameIfSetOnLog() Assert.Equal("1", eventId); Assert.True(properties.TryGetValue("EventName", out string eventName)); Assert.Equal("TestEvent", eventName); + Assert.Equal(2, properties.Count); } [Fact] @@ -164,5 +171,40 @@ public void ValidateSeverityLevels() Assert.Equal(SeverityLevel.Verbose, LogsHelper.GetSeverityLevel(LogLevel.Debug)); Assert.Equal(SeverityLevel.Verbose, LogsHelper.GetSeverityLevel(LogLevel.Trace)); } + + [Theory] + [InlineData("ExceptionData")] + [InlineData("MessageData")] + public void ValidateTelemetryItem(string type) + { + var logRecords = new List(); + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.AddOpenTelemetry(options => + { + options.ParseStateValues = true; + options.AddInMemoryExporter(logRecords); + }); + builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace); + }); + + var logger = loggerFactory.CreateLogger(); + + if (type == "MessageData") + { + logger.LogInformation("This is a test log"); + } + else + { + logger.LogWarning(new Exception("Test Exception"), "Test Exception"); + } + + var telemetryItem = LogsHelper.OtelToAzureMonitorLogs(new Batch(logRecords.ToArray(), logRecords.Count), "roleName", "roleInstance", "Ikey"); + + Assert.Equal(type, telemetryItem[0].Data.BaseType); + Assert.Equal("Ikey", telemetryItem[0].InstrumentationKey); + Assert.Equal("roleName", telemetryItem[0].Tags[ContextTagKeys.AiCloudRole.ToString()]); + Assert.Equal("roleInstance", telemetryItem[0].Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]); + } } } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/MessageDataTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/MessageDataTests.cs new file mode 100644 index 000000000000..e9c1f4bffbb3 --- /dev/null +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/MessageDataTests.cs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using Azure.Monitor.OpenTelemetry.Exporter.Models; +using Microsoft.Extensions.Logging; +using OpenTelemetry.Logs; +using Xunit; + +namespace Azure.Monitor.OpenTelemetry.Exporter.Tests +{ + public class MessageDataTests + { + [Theory] + [InlineData(LogLevel.Information)] + [InlineData(LogLevel.Warning)] + [InlineData(LogLevel.Critical)] + [InlineData(LogLevel.Error)] + public void ValidateMessageData(LogLevel logLevel) + { + var logRecords = new List(); + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.AddOpenTelemetry(options => + { + options.AddInMemoryExporter(logRecords); + }); + builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace); + }); + + var logger = loggerFactory.CreateLogger(); + + logger.Log(logLevel, "Log Message"); + + var messageData = new MessageData(2, logRecords[0]); + + Assert.Equal("Log Message", messageData.Message); + Assert.Equal(LogsHelper.GetSeverityLevel(logLevel), messageData.SeverityLevel); + Assert.Empty(messageData.Properties); + Assert.Empty(messageData.Measurements); + } + } +} diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/TelemetryExceptionDataTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/TelemetryExceptionDataTests.cs index 97659575e06d..f07aa9e45c94 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/TelemetryExceptionDataTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/TelemetryExceptionDataTests.cs @@ -184,10 +184,10 @@ public void ExceptionDataContainsExceptionDetails() { options.AddInMemoryExporter(logRecords); }); - builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace); + builder.AddFilter(typeof(TelemetryExceptionDataTests).FullName, LogLevel.Trace); }); - var logger = loggerFactory.CreateLogger(); + var logger = loggerFactory.CreateLogger(); var exception = CreateException(1); logger.LogWarning(exception, exception.Message); @@ -207,10 +207,10 @@ public void ExceptionDataContainsExceptionDetailsofAllInnerExceptionsOfAggregate { options.AddInMemoryExporter(logRecords); }); - builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace); + builder.AddFilter(typeof(TelemetryExceptionDataTests).FullName, LogLevel.Trace); }); - var logger = loggerFactory.CreateLogger(); + var logger = loggerFactory.CreateLogger(); Exception innerException1 = new ArgumentException("Inner1"); Exception innerException2 = new ArgumentException("Inner2"); @@ -239,10 +239,10 @@ public void ExceptionDataContainsExceptionDetailsWithAllInnerExceptions() { options.AddInMemoryExporter(logRecords); }); - builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace); + builder.AddFilter(typeof(TelemetryExceptionDataTests).FullName, LogLevel.Trace); }); - var logger = loggerFactory.CreateLogger(); + var logger = loggerFactory.CreateLogger(); var innerException1 = new Exception("Inner1"); @@ -272,10 +272,10 @@ public void AggregateExceptionsWithMultipleNestedExceptionsAreTrimmedAfterReachi { options.AddInMemoryExporter(logRecords); }); - builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace); + builder.AddFilter(typeof(TelemetryExceptionDataTests).FullName, LogLevel.Trace); }); - var logger = loggerFactory.CreateLogger(); + var logger = loggerFactory.CreateLogger(); int numberOfExceptions = 15; int maxNumberOfExceptionsAllowed = 10; @@ -315,6 +315,43 @@ public void AggregateExceptionsWithMultipleNestedExceptionsAreTrimmedAfterReachi lastExceptionInList.Message); } + [Theory] + [InlineData(LogLevel.Information)] + [InlineData(LogLevel.Warning)] + [InlineData(LogLevel.Critical)] + [InlineData(LogLevel.Error)] + public void ValidateTelemetryExceptionData(LogLevel logLevel) + { + var logRecords = new List(); + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.AddOpenTelemetry(options => + { + options.AddInMemoryExporter(logRecords); + }); + builder.AddFilter(typeof(TelemetryExceptionDataTests).FullName, LogLevel.Trace); + }); + + var logger = loggerFactory.CreateLogger(); + + var ex = new Exception("Message"); + logger.Log(logLevel, ex, "Message"); + + var exceptionData = new TelemetryExceptionData(2, logRecords[0]); + + Assert.Equal(2, exceptionData.Version); + Assert.Equal(LogsHelper.GetSeverityLevel(logLevel), exceptionData.SeverityLevel); + Assert.Empty(exceptionData.Properties); + Assert.Empty(exceptionData.Measurements); + Assert.Equal(typeof(Exception).FullName + " at UnknownMethod", exceptionData.ProblemId); + Assert.Equal(1, exceptionData.Exceptions.Count); + Assert.Equal("Message", exceptionData.Exceptions[0].Message); + Assert.Null(exceptionData.Exceptions[0].Stack); + Assert.Equal(ex.GetHashCode(), exceptionData.Exceptions[0].Id); + Assert.Empty(exceptionData.Exceptions[0].ParsedStack); + Assert.True(exceptionData.Exceptions[0].HasFullStack); + } + [MethodImpl(MethodImplOptions.NoInlining)] private Exception CreateException(int stackDepth) {