public static void Initialize() { if (Interlocked.Exchange(ref _firstInitialization, 0) != 1) { // Initialize() was already called before return; } Log.Information("Initializing CI Visibility"); LifetimeManager.Instance.AddAsyncShutdownTask(ShutdownAsync); TracerSettings tracerSettings = _settings.TracerSettings; // Set the service name if empty Log.Information("Setting up the service name"); if (string.IsNullOrEmpty(tracerSettings.ServiceName)) { // Extract repository name from the git url and use it as a default service name. tracerSettings.ServiceName = GetServiceNameFromRepository(CIEnvironmentValues.Instance.Repository); } // Initialize Tracer Log.Information("Initialize Test Tracer instance"); TracerManager.ReplaceGlobalManager(tracerSettings.Build(), new CITracerManagerFactory(_settings)); }
public void LockedTracerInstanceSwap() { var tracerOne = TracerHelper.Create(); var tracerTwo = new LockedTracer(); TracerRestorerAttribute.SetTracer(tracerOne); Tracer.Instance.Should().Be(tracerOne); Tracer.Instance.TracerManager.Should().Be(tracerOne.TracerManager); TracerRestorerAttribute.SetTracer(null); Tracer.Instance.Should().BeNull(); // Set the locked tracer TracerRestorerAttribute.SetTracer(tracerTwo); Tracer.Instance.Should().Be(tracerTwo); Tracer.Instance.TracerManager.Should().Be(tracerTwo.TracerManager); // We test the locked tracer cannot be replaced. #pragma warning disable CS0618 // Setter isn't actually obsolete, just should be internal Assert.Throws <InvalidOperationException>(() => Tracer.Instance = tracerOne); Assert.Throws <InvalidOperationException>(() => Tracer.Instance = null); Assert.Throws <InvalidOperationException>(() => TracerManager.ReplaceGlobalManager(null, TracerManagerFactory.Instance)); Assert.Throws <InvalidOperationException>(() => TracerManager.ReplaceGlobalManager(null, new CITracerManagerFactory(CIVisibility.Settings))); }