@@ -1123,6 +1123,147 @@ public void AzureClientSpansAreCollectedForEventHubsException()
11231123 }
11241124 }
11251125
1126+ [ DataRow ( "producer" ) ]
1127+ [ DataRow ( "client" ) ]
1128+ [ DataTestMethod ]
1129+ public void AzureServiceBusSpansAreCollectedAsDependency ( string kind )
1130+ {
1131+ using ( var listener = new DiagnosticListener ( "Azure.SomeClient" ) )
1132+ using ( var module = new DependencyTrackingTelemetryModule ( ) )
1133+ {
1134+ module . Initialize ( this . configuration ) ;
1135+
1136+ Activity sendActivity = new Activity ( "Azure.SomeClient.Method" )
1137+ . AddTag ( "kind" , kind )
1138+ . AddTag ( "az.namespace" , "Microsoft.ServiceBus" )
1139+ . AddTag ( "component" , "servicebus" )
1140+ . AddTag ( "peer.address" , "amqps://my.servicebus.windows.net/" )
1141+ . AddTag ( "message_bus.destination" , "queueName" ) ;
1142+
1143+ listener . StartActivity ( sendActivity , null ) ;
1144+ listener . StopActivity ( sendActivity , null ) ;
1145+
1146+ var telemetry = this . sentItems . Last ( ) as DependencyTelemetry ;
1147+
1148+ Assert . IsNotNull ( telemetry ) ;
1149+ Assert . AreEqual ( "SomeClient.Method" , telemetry . Name ) ;
1150+ if ( kind == "producer" )
1151+ {
1152+ Assert . AreEqual ( "Queue Message | Azure Service Bus" , telemetry . Type ) ;
1153+ }
1154+ else
1155+ {
1156+ Assert . AreEqual ( "Azure Service Bus" , telemetry . Type ) ;
1157+ }
1158+
1159+ Assert . IsTrue ( telemetry . Success . Value ) ;
1160+ Assert . IsNull ( telemetry . Context . Operation . ParentId ) ;
1161+ Assert . AreEqual ( sendActivity . StartTimeUtc , telemetry . Timestamp ) ;
1162+ Assert . AreEqual ( sendActivity . Duration , telemetry . Duration ) ;
1163+ Assert . AreEqual ( sendActivity . TraceId . ToHexString ( ) , telemetry . Context . Operation . Id ) ;
1164+ Assert . AreEqual ( sendActivity . SpanId . ToHexString ( ) , telemetry . Id ) ;
1165+ Assert . AreEqual ( "amqps://my.servicebus.windows.net/queueName" , telemetry . Target ) ;
1166+ }
1167+ }
1168+
1169+ [ DataRow ( "server" ) ]
1170+ [ DataRow ( "consumer" ) ]
1171+ [ DataTestMethod ]
1172+ public void AzureServiceBusSpansAreCollectedAsRequest ( string kind )
1173+ {
1174+ using ( var listener = new DiagnosticListener ( "Azure.SomeClient" ) )
1175+ using ( var module = new DependencyTrackingTelemetryModule ( ) )
1176+ {
1177+ module . Initialize ( this . configuration ) ;
1178+
1179+ Activity sendActivity = new Activity ( "Azure.SomeClient.Process" )
1180+ . AddTag ( "kind" , kind )
1181+ . AddTag ( "az.namespace" , "Microsoft.ServiceBus" )
1182+ . AddTag ( "component" , "servicebus" )
1183+ . AddTag ( "peer.address" , "amqps://my.servicebus.windows.net" )
1184+ . AddTag ( "message_bus.destination" , "queueName" ) ;
1185+
1186+ listener . StartActivity ( sendActivity , null ) ;
1187+ listener . StopActivity ( sendActivity , null ) ;
1188+
1189+ var telemetry = this . sentItems . Last ( ) as RequestTelemetry ;
1190+
1191+ Assert . IsNotNull ( telemetry ) ;
1192+ Assert . AreEqual ( "SomeClient.Process" , telemetry . Name ) ;
1193+ Assert . AreEqual ( "amqps://my.servicebus.windows.net/queueName" , telemetry . Source ) ;
1194+ Assert . IsTrue ( telemetry . Success . Value ) ;
1195+
1196+ Assert . IsNull ( telemetry . Context . Operation . ParentId ) ;
1197+ Assert . AreEqual ( sendActivity . StartTimeUtc , telemetry . Timestamp ) ;
1198+ Assert . AreEqual ( sendActivity . Duration , telemetry . Duration ) ;
1199+ Assert . AreEqual ( sendActivity . TraceId . ToHexString ( ) , telemetry . Context . Operation . Id ) ;
1200+ Assert . AreEqual ( sendActivity . SpanId . ToHexString ( ) , telemetry . Id ) ;
1201+ Assert . IsFalse ( telemetry . Metrics . Any ( ) ) ;
1202+ }
1203+ }
1204+
1205+ [ DataRow ( "producer" ) ]
1206+ [ DataRow ( "client" ) ]
1207+ [ DataRow ( "server" ) ]
1208+ [ DataRow ( "consumer" ) ]
1209+ [ DataTestMethod ]
1210+ public void AzureServiceBusSpansAreCollectedError ( string kind )
1211+ {
1212+ using ( var listener = new DiagnosticListener ( "Azure.SomeClient" ) )
1213+ using ( var module = new DependencyTrackingTelemetryModule ( ) )
1214+ {
1215+ module . Initialize ( this . configuration ) ;
1216+
1217+ var exception = new InvalidOperationException ( ) ;
1218+ Activity sendActivity = new Activity ( "Azure.SomeClient.Method" )
1219+ . AddTag ( "peer.address" , "amqps://my.servicebus.windows.net" )
1220+ . AddTag ( "message_bus.destination" , "queueName" )
1221+ . AddTag ( "kind" , kind )
1222+ . AddTag ( "az.namespace" , "Microsoft.ServiceBus" ) ;
1223+
1224+ listener . StartActivity ( sendActivity , null ) ;
1225+ listener . Write ( "Azure.SomeClient.Send.Exception" , exception ) ;
1226+ listener . StopActivity ( sendActivity , null ) ;
1227+
1228+ var telemetry = this . sentItems . Last ( ) ;
1229+
1230+ Assert . IsNotNull ( telemetry ) ;
1231+ Assert . IsNull ( telemetry . Context . Operation . ParentId ) ;
1232+ Assert . AreEqual ( sendActivity . TraceId . ToHexString ( ) , telemetry . Context . Operation . Id ) ;
1233+
1234+ OperationTelemetry operation = telemetry as OperationTelemetry ;
1235+ Assert . IsFalse ( operation . Success . Value ) ;
1236+ Assert . AreEqual ( exception . ToInvariantString ( ) , operation . Properties [ "Error" ] ) ;
1237+ Assert . AreEqual ( sendActivity . SpanId . ToHexString ( ) , operation . Id ) ;
1238+ Assert . AreEqual ( "SomeClient.Method" , operation . Name ) ;
1239+
1240+ if ( kind == "producer" || kind == "client" || kind == "internal" )
1241+ {
1242+ Assert . IsTrue ( telemetry is DependencyTelemetry ) ;
1243+ DependencyTelemetry dependency = telemetry as DependencyTelemetry ;
1244+ Assert . AreEqual ( string . Empty , dependency . Data ) ;
1245+ Assert . AreEqual ( string . Empty , dependency . ResultCode ) ;
1246+ Assert . AreEqual ( "amqps://my.servicebus.windows.net/queueName" , dependency . Target ) ;
1247+ if ( kind == "producer" )
1248+ {
1249+ Assert . AreEqual ( "Queue Message | Azure Service Bus" , dependency . Type ) ;
1250+ }
1251+ else
1252+ {
1253+ Assert . AreEqual ( "Azure Service Bus" , dependency . Type ) ;
1254+ }
1255+ }
1256+ else
1257+ {
1258+ Assert . IsTrue ( telemetry is RequestTelemetry ) ;
1259+ RequestTelemetry request = telemetry as RequestTelemetry ;
1260+ Assert . AreEqual ( string . Empty , request . ResponseCode ) ;
1261+ Assert . AreEqual ( "amqps://my.servicebus.windows.net/queueName" , request . Source ) ;
1262+ }
1263+ }
1264+ }
1265+
1266+
11261267 private T TrackOperation < T > (
11271268 DiagnosticListener listener ,
11281269 string activityName ,
0 commit comments