1
1
'use strict'
2
2
3
+ const sinon = require ( 'sinon' )
3
4
const semver = require ( 'semver' )
4
5
const agent = require ( '../../dd-trace/test/plugins/agent' )
5
6
const { ERROR_MESSAGE , ERROR_TYPE , ERROR_STACK } = require ( '../../dd-trace/src/constants' )
6
7
const { expectedSchema, rawExpectedSchema } = require ( './naming' )
7
8
9
+ const MongodbCorePlugin = require ( '../../datadog-plugin-mongodb-core/src/index' )
10
+ const ddpv = require ( 'mocha/package.json' ) . version
11
+
8
12
const withTopologies = fn => {
9
13
withVersions ( 'mongodb-core' , [ 'mongodb-core' , 'mongodb' ] , '<4' , ( version , moduleName ) => {
10
14
describe ( 'using the server topology' , ( ) => {
@@ -29,6 +33,7 @@ describe('Plugin', () => {
29
33
let id
30
34
let tracer
31
35
let collection
36
+ let injectDbmCommandSpy
32
37
33
38
describe ( 'mongodb-core (core)' , ( ) => {
34
39
withTopologies ( getServer => {
@@ -397,6 +402,119 @@ describe('Plugin', () => {
397
402
}
398
403
)
399
404
} )
405
+
406
+ describe ( 'with dbmPropagationMode service' , ( ) => {
407
+ before ( ( ) => {
408
+ return agent . load ( 'mongodb-core' , { dbmPropagationMode : 'service' } )
409
+ } )
410
+
411
+ after ( ( ) => {
412
+ return agent . close ( { ritmReset : false } )
413
+ } )
414
+
415
+ beforeEach ( done => {
416
+ const Server = getServer ( )
417
+
418
+ server = new Server ( {
419
+ host : '127.0.0.1' ,
420
+ port : 27017 ,
421
+ reconnect : false
422
+ } )
423
+
424
+ server . on ( 'connect' , ( ) => done ( ) )
425
+ server . on ( 'error' , done )
426
+
427
+ server . connect ( )
428
+
429
+ injectDbmCommandSpy = sinon . spy ( MongodbCorePlugin . prototype , 'injectDbmCommand' )
430
+ } )
431
+
432
+ afterEach ( ( ) => {
433
+ injectDbmCommandSpy ?. restore ( )
434
+ } )
435
+
436
+ it ( 'DBM propagation should inject service mode as comment' , done => {
437
+ agent
438
+ . use ( traces => {
439
+ const span = traces [ 0 ] [ 0 ]
440
+
441
+ expect ( injectDbmCommandSpy . called ) . to . be . true
442
+ const instrumentedCommand = injectDbmCommandSpy . getCall ( 0 ) . returnValue
443
+ expect ( instrumentedCommand ) . to . have . property ( 'comment' )
444
+ expect ( instrumentedCommand . comment ) . to . equal (
445
+ `dddb='${ encodeURIComponent ( span . meta [ 'db.name' ] ) } ',` +
446
+ 'dddbs=\'test-mongodb\',' +
447
+ 'dde=\'tester\',' +
448
+ `ddh='${ encodeURIComponent ( span . meta [ 'out.host' ] ) } ',` +
449
+ `ddps='${ encodeURIComponent ( span . meta . service ) } ',` +
450
+ `ddpv='${ ddpv } ',` +
451
+ `ddprs='${ encodeURIComponent ( span . meta [ 'peer.service' ] ) } '`
452
+ )
453
+ } )
454
+ . then ( done )
455
+ . catch ( done )
456
+
457
+ server . insert ( `test.${ collection } ` , [ { a : 1 } ] , ( ) => { } )
458
+ } )
459
+ } )
460
+
461
+ describe ( 'with dbmPropagationMode full' , ( ) => {
462
+ before ( ( ) => {
463
+ return agent . load ( 'mongodb-core' , { dbmPropagationMode : 'service' } )
464
+ } )
465
+
466
+ after ( ( ) => {
467
+ return agent . close ( { ritmReset : false } )
468
+ } )
469
+
470
+ beforeEach ( done => {
471
+ const Server = getServer ( )
472
+
473
+ server = new Server ( {
474
+ host : '127.0.0.1' ,
475
+ port : 27017 ,
476
+ reconnect : false
477
+ } )
478
+
479
+ server . on ( 'connect' , ( ) => done ( ) )
480
+ server . on ( 'error' , done )
481
+
482
+ server . connect ( )
483
+
484
+ injectDbmCommandSpy = sinon . spy ( MongodbCorePlugin . prototype , 'injectDbmCommand' )
485
+ } )
486
+
487
+ afterEach ( ( ) => {
488
+ injectDbmCommandSpy ?. restore ( )
489
+ } )
490
+
491
+ it ( 'DBM propagation should inject full mode with traceparent as comment' , done => {
492
+ agent
493
+ . use ( traces => {
494
+ const span = traces [ 0 ] [ 0 ]
495
+ const traceId = span . meta [ '_dd.p.tid' ] + span . trace_id . toString ( 16 ) . padStart ( 16 , '0' )
496
+ const spanId = span . span_id . toString ( 16 ) . padStart ( 16 , '0' )
497
+
498
+ expect ( injectDbmCommandSpy . called ) . to . be . true
499
+ const instrumentedCommand = injectDbmCommandSpy . getCall ( 0 ) . returnValue
500
+ expect ( instrumentedCommand ) . to . have . property ( 'comment' )
501
+ expect ( instrumentedCommand . comment ) . to . equal (
502
+ `dddb='${ encodeURIComponent ( span . meta [ 'db.name' ] ) } ',` +
503
+ 'dddbs=\'test-mongodb\',' +
504
+ 'dde=\'tester\',' +
505
+ `ddh='${ encodeURIComponent ( span . meta [ 'out.host' ] ) } ',` +
506
+ `ddps='${ encodeURIComponent ( span . meta . service ) } ',` +
507
+ `ddpv='${ ddpv } ',` +
508
+ `ddprs='${ encodeURIComponent ( span . meta [ 'peer.service' ] ) } ',` +
509
+ `traceparent='00-${ traceId } -${ spanId } -00'`
510
+ )
511
+ } )
512
+ . then ( done )
513
+ . catch ( done )
514
+
515
+ server . insert ( `test.${ collection } ` , [ { a : 1 } ] , ( ) => { } )
516
+ } )
517
+ } )
400
518
} )
401
519
} )
402
520
} )
0 commit comments