public void AzureClientSpansAreCollectedForHttpException()
        {
            using (var listener = new DiagnosticListener("Azure.SomeClient"))
                using (var module = new DependencyTrackingTelemetryModule())
                {
                    module.Initialize(this.configuration);

                    var      exception    = new InvalidOperationException();
                    Activity httpActivity = new Activity("Azure.SomeClient.Http.Request")
                                            .AddTag("http.method", "PATCH")
                                            .AddTag("http.url", "http://host/path?query#fragment");

                    listener.StartActivity(httpActivity, null);
                    listener.Write("Azure.SomeClient.Send.Exception", exception);

                    listener.StopActivity(httpActivity, null);

                    var telemetry = this.sentItems.Last() as DependencyTelemetry;

                    Assert.IsNotNull(telemetry);
                    Assert.AreEqual("PATCH /path", telemetry.Name);
                    Assert.AreEqual("host", telemetry.Target);
                    Assert.AreEqual("http://host/path?query#fragment", telemetry.Data);
                    Assert.IsNull(telemetry.ResultCode);
                    Assert.AreEqual("Http", telemetry.Type);
                    Assert.IsFalse(telemetry.Success.Value);
                    Assert.AreEqual(exception.ToInvariantString(), telemetry.Properties["Error"]);

                    Assert.IsNull(telemetry.Context.Operation.ParentId);
                    Assert.AreEqual(httpActivity.TraceId.ToHexString(), telemetry.Context.Operation.Id);
                    Assert.AreEqual(httpActivity.SpanId.ToHexString(), telemetry.Id);
                }
        }
        public void AzureClientSpansAreCollectedForEventHubs()
        {
            using (var listener = new DiagnosticListener("Azure.SomeClient"))
                using (var module = new DependencyTrackingTelemetryModule())
                {
                    module.Initialize(this.configuration);

                    var      exception    = new InvalidOperationException();
                    Activity sendActivity = new Activity("Azure.SomeClient.Send")
                                            .AddTag("peer.address", "amqps://eventHub.servicebus.windows.net/")
                                            .AddTag("message_bus.destination", "queueName")
                                            .AddTag("kind", "producer")
                                            .AddTag("component", "eventhubs");

                    listener.StartActivity(sendActivity, null);
                    listener.Write("Azure.SomeClient.Send.Exception", exception);
                    listener.StopActivity(sendActivity, null);

                    var telemetry = this.sentItems.Last() as DependencyTelemetry;

                    Assert.IsNotNull(telemetry);
                    Assert.AreEqual("SomeClient.Send", telemetry.Name);
                    Assert.AreEqual("amqps://eventHub.servicebus.windows.net/ | queueName", telemetry.Target);
                    Assert.AreEqual(string.Empty, telemetry.Data);
                    Assert.AreEqual(string.Empty, telemetry.ResultCode);
                    Assert.AreEqual("Azure Event Hubs", telemetry.Type);
                    Assert.IsFalse(telemetry.Success.Value);
                    Assert.AreEqual(exception.ToInvariantString(), telemetry.Properties["Error"]);
                    Assert.IsNull(telemetry.Context.Operation.ParentId);
                    Assert.AreEqual(sendActivity.TraceId.ToHexString(), telemetry.Context.Operation.Id);
                    Assert.AreEqual(sendActivity.SpanId.ToHexString(), telemetry.Id);
                }
        }
        public void AzureClientSpansAreMarkedAsFailed()
        {
            using (var listener = new DiagnosticListener("Azure.SomeClient"))
                using (var module = new DependencyTrackingTelemetryModule())
                {
                    module.Initialize(this.configuration);

                    var      exception    = new InvalidOperationException();
                    Activity sendActivity = null;

                    var telemetry = this.TrackOperation <DependencyTelemetry>(
                        listener,
                        "Azure.SomeClient.Send",
                        null,
                        () =>
                    {
                        sendActivity = Activity.Current;
                        listener.Write("Azure.SomeClient.Send.Exception", exception);
                    });

                    Assert.IsNotNull(telemetry);
                    Assert.AreEqual("SomeClient.Send", telemetry.Name);
                    Assert.IsFalse(telemetry.Success.Value);

                    Assert.AreEqual(exception.ToInvariantString(), telemetry.Properties["Error"]);

                    Assert.IsNull(telemetry.Context.Operation.ParentId);
                    Assert.AreEqual(sendActivity.TraceId.ToHexString(), telemetry.Context.Operation.Id);
                    Assert.AreEqual(sendActivity.SpanId.ToHexString(), telemetry.Id);
                }
        }