diff --git a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs index cd5c0c751dc9..c58650f96475 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs @@ -1,4 +1,4 @@ -// +// // Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. // This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. // @@ -11,6 +11,7 @@ using Datadog.Trace.Configuration.ConfigurationSources; using Datadog.Trace.Configuration.ConfigurationSources.Telemetry; using Datadog.Trace.Configuration.Telemetry; +using Datadog.Trace.Logging; using Datadog.Trace.Telemetry; using Datadog.Trace.Telemetry.Metrics; @@ -32,6 +33,8 @@ namespace Datadog.Trace.ClrProfiler.AutoInstrumentation.ManualInstrumentation.Tr [EditorBrowsable(EditorBrowsableState.Never)] public class ConfigureIntegration { + private static readonly IDatadogLogger Log = DatadogLogging.GetLoggerFor(); + internal static CallTargetState OnMethodBegin(Dictionary values) { ConfigureSettingsWithManualOverrides(values, useLegacySettings: false); @@ -43,6 +46,14 @@ internal static void ConfigureSettingsWithManualOverrides(Dictionary +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +#nullable enable + +using System.Collections.Generic; +using Datadog.Trace.Agent; +using Datadog.Trace.ClrProfiler.AutoInstrumentation.ManualInstrumentation.Tracer; +using Datadog.Trace.Configuration; +using Datadog.Trace.Logging.TracerFlare; +using Datadog.Trace.RemoteConfigurationManagement; +using Datadog.Trace.TestHelpers; +using FluentAssertions; +using Moq; +using Xunit; + +namespace Datadog.Trace.Tests.ManualInstrumentation; + +[Collection(nameof(TracerInstanceTestCollection))] +[TracerRestorer] +public class ConfigureIntegrationTests +{ + [Fact] + public void ConfigureSettingsWithManualOverrides_DoesNotThrow_WhenTracerIsLocked() + { + // Arrange: lock the global tracer manager + TracerManager.UnsafeReplaceGlobalManager(new LockedTracerManager()); + TracerManager.Instance.Should().BeAssignableTo(); + + // Act/Assert: should not throw and should not replace the manager + ConfigureIntegration.ConfigureSettingsWithManualOverrides(new Dictionary(), useLegacySettings: false); + + TracerManager.Instance.Should().BeAssignableTo(); + } + + private class LockedTracerManager : TracerManager, ILockedTracer + { + public LockedTracerManager() + : base(new TracerSettings(), null, null, null, null, null, null, null, null, null, null, null, null, Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()) + { + } + } +}