@@ -76,11 +76,14 @@ void AssertIntTagGreaterThanZero(Activity activity, string name)
76
76
}
77
77
78
78
[ Theory ]
79
- [ InlineData ( true ) ]
80
- [ InlineData ( false ) ]
81
- public async Task TestPublisherAndConsumerActivityTags ( bool useRoutingKeyAsOperationName )
79
+ [ InlineData ( true , true ) ]
80
+ [ InlineData ( true , false ) ]
81
+ [ InlineData ( false , true ) ]
82
+ [ InlineData ( false , false ) ]
83
+ public async Task TestPublisherAndConsumerActivityTags ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
82
84
{
83
85
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
86
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
84
87
var _activities = new List < Activity > ( ) ;
85
88
using ActivityListener activityListener = StartActivityListener ( _activities ) ;
86
89
await Task . Delay ( 500 ) ;
@@ -106,15 +109,18 @@ public async Task TestPublisherAndConsumerActivityTags(bool useRoutingKeyAsOpera
106
109
107
110
await _channel . BasicCancelAsync ( consumerTag ) ;
108
111
await Task . Delay ( 500 ) ;
109
- AssertActivityData ( useRoutingKeyAsOperationName , queueName , _activities , true ) ;
112
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queueName , _activities , true ) ;
110
113
}
111
114
112
115
[ Theory ]
113
- [ InlineData ( true ) ]
114
- [ InlineData ( false ) ]
115
- public async Task TestPublisherWithCachedStringsAndConsumerActivityTags ( bool useRoutingKeyAsOperationName )
116
+ [ InlineData ( true , true ) ]
117
+ [ InlineData ( true , false ) ]
118
+ [ InlineData ( false , true ) ]
119
+ [ InlineData ( false , false ) ]
120
+ public async Task TestPublisherWithCachedStringsAndConsumerActivityTags ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
116
121
{
117
122
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
123
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
118
124
var _activities = new List < Activity > ( ) ;
119
125
using ActivityListener activityListener = StartActivityListener ( _activities ) ;
120
126
await Task . Delay ( 500 ) ;
@@ -142,15 +148,18 @@ public async Task TestPublisherWithCachedStringsAndConsumerActivityTags(bool use
142
148
143
149
await _channel . BasicCancelAsync ( consumerTag ) ;
144
150
await Task . Delay ( 500 ) ;
145
- AssertActivityData ( useRoutingKeyAsOperationName , queueName , _activities , true ) ;
151
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queueName , _activities , true ) ;
146
152
}
147
153
148
154
[ Theory ]
149
- [ InlineData ( true ) ]
150
- [ InlineData ( false ) ]
151
- public async Task TestPublisherWithPublicationAddressAndConsumerActivityTags ( bool useRoutingKeyAsOperationName )
155
+ [ InlineData ( true , true ) ]
156
+ [ InlineData ( true , false ) ]
157
+ [ InlineData ( false , true ) ]
158
+ [ InlineData ( false , false ) ]
159
+ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTags ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
152
160
{
153
161
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
162
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
154
163
var _activities = new List < Activity > ( ) ;
155
164
using ActivityListener activityListener = StartActivityListener ( _activities ) ;
156
165
await Task . Delay ( 500 ) ;
@@ -177,15 +186,18 @@ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTags(boo
177
186
178
187
await _channel . BasicCancelAsync ( consumerTag ) ;
179
188
await Task . Delay ( 500 ) ;
180
- AssertActivityData ( useRoutingKeyAsOperationName , queueName , _activities , true ) ;
189
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queueName , _activities , true ) ;
181
190
}
182
191
183
192
[ Theory ]
184
- [ InlineData ( true ) ]
185
- [ InlineData ( false ) ]
186
- public async Task TestPublisherAndConsumerActivityTagsAsync ( bool useRoutingKeyAsOperationName )
193
+ [ InlineData ( true , true ) ]
194
+ [ InlineData ( true , false ) ]
195
+ [ InlineData ( false , true ) ]
196
+ [ InlineData ( false , false ) ]
197
+ public async Task TestPublisherAndConsumerActivityTagsAsync ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
187
198
{
188
199
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
200
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
189
201
var activities = new List < Activity > ( ) ;
190
202
using ActivityListener activityListener = StartActivityListener ( activities ) ;
191
203
await Task . Delay ( 500 ) ;
@@ -212,15 +224,18 @@ public async Task TestPublisherAndConsumerActivityTagsAsync(bool useRoutingKeyAs
212
224
213
225
await _channel . BasicCancelAsync ( consumerTag ) ;
214
226
await Task . Delay ( 500 ) ;
215
- AssertActivityData ( useRoutingKeyAsOperationName , queueName , activities , true ) ;
227
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queueName , activities , true ) ;
216
228
}
217
229
218
230
[ Theory ]
219
- [ InlineData ( true ) ]
220
- [ InlineData ( false ) ]
221
- public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync ( bool useRoutingKeyAsOperationName )
231
+ [ InlineData ( true , true ) ]
232
+ [ InlineData ( true , false ) ]
233
+ [ InlineData ( false , true ) ]
234
+ [ InlineData ( false , false ) ]
235
+ public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
222
236
{
223
237
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
238
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
224
239
var activities = new List < Activity > ( ) ;
225
240
using ActivityListener activityListener = StartActivityListener ( activities ) ;
226
241
await Task . Delay ( 500 ) ;
@@ -249,15 +264,18 @@ public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync(boo
249
264
250
265
await _channel . BasicCancelAsync ( consumerTag ) ;
251
266
await Task . Delay ( 500 ) ;
252
- AssertActivityData ( useRoutingKeyAsOperationName , queueName , activities , true ) ;
267
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queueName , activities , true ) ;
253
268
}
254
269
255
270
[ Theory ]
256
- [ InlineData ( true ) ]
257
- [ InlineData ( false ) ]
258
- public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsync ( bool useRoutingKeyAsOperationName )
271
+ [ InlineData ( true , true ) ]
272
+ [ InlineData ( true , false ) ]
273
+ [ InlineData ( false , true ) ]
274
+ [ InlineData ( false , false ) ]
275
+ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsync ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
259
276
{
260
277
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
278
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
261
279
var activities = new List < Activity > ( ) ;
262
280
using ActivityListener activityListener = StartActivityListener ( activities ) ;
263
281
await Task . Delay ( 500 ) ;
@@ -285,15 +303,18 @@ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsyn
285
303
286
304
await _channel . BasicCancelAsync ( consumerTag ) ;
287
305
await Task . Delay ( 500 ) ;
288
- AssertActivityData ( useRoutingKeyAsOperationName , queueName , activities , true ) ;
306
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queueName , activities , true ) ;
289
307
}
290
308
291
309
[ Theory ]
292
- [ InlineData ( true ) ]
293
- [ InlineData ( false ) ]
294
- public async Task TestPublisherAndBasicGetActivityTags ( bool useRoutingKeyAsOperationName )
310
+ [ InlineData ( true , true ) ]
311
+ [ InlineData ( true , false ) ]
312
+ [ InlineData ( false , true ) ]
313
+ [ InlineData ( false , false ) ]
314
+ public async Task TestPublisherAndBasicGetActivityTags ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
295
315
{
296
316
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
317
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
297
318
var activities = new List < Activity > ( ) ;
298
319
using ActivityListener activityListener = StartActivityListener ( activities ) ;
299
320
await Task . Delay ( 500 ) ;
@@ -311,7 +332,7 @@ public async Task TestPublisherAndBasicGetActivityTags(bool useRoutingKeyAsOpera
311
332
ok = await _channel . QueueDeclarePassiveAsync ( queue ) ;
312
333
Assert . Equal ( 0u , ok . MessageCount ) ;
313
334
await Task . Delay ( 500 ) ;
314
- AssertActivityData ( useRoutingKeyAsOperationName , queue , activities , false ) ;
335
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queue , activities , false ) ;
315
336
}
316
337
finally
317
338
{
@@ -320,11 +341,14 @@ public async Task TestPublisherAndBasicGetActivityTags(bool useRoutingKeyAsOpera
320
341
}
321
342
322
343
[ Theory ]
323
- [ InlineData ( true ) ]
324
- [ InlineData ( false ) ]
325
- public async Task TestPublisherWithCachedStringsAndBasicGetActivityTags ( bool useRoutingKeyAsOperationName )
344
+ [ InlineData ( true , true ) ]
345
+ [ InlineData ( true , false ) ]
346
+ [ InlineData ( false , true ) ]
347
+ [ InlineData ( false , false ) ]
348
+ public async Task TestPublisherWithCachedStringsAndBasicGetActivityTags ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
326
349
{
327
350
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
351
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
328
352
var activities = new List < Activity > ( ) ;
329
353
using ActivityListener activityListener = StartActivityListener ( activities ) ;
330
354
await Task . Delay ( 500 ) ;
@@ -344,7 +368,7 @@ public async Task TestPublisherWithCachedStringsAndBasicGetActivityTags(bool use
344
368
ok = await _channel . QueueDeclarePassiveAsync ( queue ) ;
345
369
Assert . Equal ( 0u , ok . MessageCount ) ;
346
370
await Task . Delay ( 500 ) ;
347
- AssertActivityData ( useRoutingKeyAsOperationName , queue , activities , false ) ;
371
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queue , activities , false ) ;
348
372
}
349
373
finally
350
374
{
@@ -353,11 +377,14 @@ public async Task TestPublisherWithCachedStringsAndBasicGetActivityTags(bool use
353
377
}
354
378
355
379
[ Theory ]
356
- [ InlineData ( true ) ]
357
- [ InlineData ( false ) ]
358
- public async Task TestPublisherWithPublicationAddressAndBasicGetActivityTags ( bool useRoutingKeyAsOperationName )
380
+ [ InlineData ( true , true ) ]
381
+ [ InlineData ( true , false ) ]
382
+ [ InlineData ( false , true ) ]
383
+ [ InlineData ( false , false ) ]
384
+ public async Task TestPublisherWithPublicationAddressAndBasicGetActivityTags ( bool useRoutingKeyAsOperationName , bool useParentChildLinking )
359
385
{
360
386
RabbitMQActivitySource . UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName ;
387
+ RabbitMQActivitySource . LinkType = useParentChildLinking ? OpenTelemetryLinkType . AlwaysParentChild : OpenTelemetryLinkType . AlwaysLink ;
361
388
var activities = new List < Activity > ( ) ;
362
389
using ActivityListener activityListener = StartActivityListener ( activities ) ;
363
390
await Task . Delay ( 500 ) ;
@@ -377,7 +404,7 @@ public async Task TestPublisherWithPublicationAddressAndBasicGetActivityTags(boo
377
404
ok = await _channel . QueueDeclarePassiveAsync ( queue ) ;
378
405
Assert . Equal ( 0u , ok . MessageCount ) ;
379
406
await Task . Delay ( 500 ) ;
380
- AssertActivityData ( useRoutingKeyAsOperationName , queue , activities , false ) ;
407
+ AssertActivityData ( useRoutingKeyAsOperationName , useParentChildLinking , queue , activities , false ) ;
381
408
}
382
409
finally
383
410
{
@@ -399,7 +426,7 @@ private static ActivityListener StartActivityListener(List<Activity> activities)
399
426
return activityListener ;
400
427
}
401
428
402
- private void AssertActivityData ( bool useRoutingKeyAsOperationName , string queueName ,
429
+ private void AssertActivityData ( bool useRoutingKeyAsOperationName , bool useParentChildLinking , string queueName ,
403
430
List < Activity > activityList , bool isDeliver = false )
404
431
{
405
432
string childName = isDeliver ? "deliver" : "fetch" ;
@@ -422,11 +449,21 @@ private void AssertActivityData(bool useRoutingKeyAsOperationName, string queueN
422
449
x . GetTagItem ( RabbitMQActivitySource . MessagingDestinationRoutingKey ) is string routingKeyTag &&
423
450
routingKeyTag == $ "{ queueName } ") ;
424
451
Activity receiveActivity = activities . Single ( x =>
425
- x . OperationName == ( useRoutingKeyAsOperationName ? $ "{ childName } { queueName } " : childName ) &&
426
- x . Links . First ( ) . Context . TraceId == sendActivity . TraceId ) ;
452
+ x . OperationName == ( useRoutingKeyAsOperationName ? $ "{ childName } { queueName } " : childName ) ) ;
427
453
Assert . Equal ( ActivityKind . Producer , sendActivity . Kind ) ;
428
454
Assert . Equal ( ActivityKind . Consumer , receiveActivity . Kind ) ;
429
- Assert . Null ( receiveActivity . ParentId ) ;
455
+ if ( useParentChildLinking )
456
+ {
457
+ Assert . Empty ( receiveActivity . Links ) ;
458
+ Assert . Equal ( sendActivity . Id , receiveActivity . ParentId ) ;
459
+ Assert . Equal ( sendActivity . TraceId , receiveActivity . TraceId ) ;
460
+ }
461
+ else
462
+ {
463
+ Assert . Equal ( sendActivity . TraceId , receiveActivity . Links . Single ( ) . Context . TraceId ) ;
464
+ Assert . Null ( receiveActivity . ParentId ) ;
465
+ Assert . NotEqual ( sendActivity . TraceId , receiveActivity . TraceId ) ;
466
+ }
430
467
AssertStringTagNotNullOrEmpty ( sendActivity , "network.peer.address" ) ;
431
468
AssertStringTagNotNullOrEmpty ( sendActivity , "network.local.address" ) ;
432
469
AssertStringTagNotNullOrEmpty ( sendActivity , "server.address" ) ;
0 commit comments