public void Inbound_WithoutTraceParent(bool contextualActivity)
    {
        var listener = new CollectingTraceListener();

        this.strategy.TraceSource = new TraceSource("test", SourceLevels.ActivityTracing)
        {
            Listeners = { listener },
        };

        Guid testActivityId = contextualActivity ? Guid.NewGuid() : Guid.Empty;

        Trace.CorrelationManager.ActivityId = testActivityId;
        try
        {
            using (IDisposable? state = this.strategy.ApplyInboundActivity(this.request))
            {
                Assert.NotEqual(testActivityId, Trace.CorrelationManager.ActivityId);
            }

            // No transfers should have been recorded since there was no parent activity.
            Assert.Empty(listener.Transfers);

            Assert.Equal(testActivityId, Trace.CorrelationManager.ActivityId);
        }
        finally
        {
            Trace.CorrelationManager.ActivityId = Guid.Empty;
        }
    }
    public void Inbound_Activity(bool predefinedActivity, bool upperCaseTraceParent)
    {
        var listener = new CollectingTraceListener();

        this.strategy.TraceSource = new TraceSource("test", SourceLevels.ActivityTracing)
        {
            Listeners = { listener },
        };

        Guid testContext = Guid.NewGuid();

        if (predefinedActivity)
        {
            Trace.CorrelationManager.ActivityId = testContext;
        }

        this.request.TraceParent = upperCaseTraceParent ? SampleTraceParent.ToUpperInvariant() : SampleTraceParent;
        (Guid RelatedActivityId, Guid CurrentActivityId)transfer1;
        using (this.strategy.ApplyInboundActivity(this.request))
        {
            transfer1 = Assert.Single(listener.Transfers);
            Assert.Equal(SampleParentId, transfer1.CurrentActivityId);
            Assert.NotEqual(SampleParentId, transfer1.RelatedActivityId);
            Assert.NotEqual(testContext, transfer1.RelatedActivityId);

            Assert.Equal(transfer1.RelatedActivityId, Trace.CorrelationManager.ActivityId);

            var start = listener.Events.Single(e => e.EventType == TraceEventType.Start);
            Assert.Equal(this.request.Method, start.Message);
        }

        Assert.Equal(predefinedActivity ? testContext : Guid.Empty, Trace.CorrelationManager.ActivityId);

        var stop = listener.Events.Single(e => e.EventType == TraceEventType.Stop);

        Assert.Equal(this.request.Method, stop.Message);

        Assert.Equal(2, listener.Transfers.Count);
        var transfer2 = listener.Transfers[1];

        Assert.Equal(SampleParentId, transfer2.RelatedActivityId);
        Assert.Equal(transfer1.RelatedActivityId, transfer2.CurrentActivityId);
    }