@@ -502,6 +502,79 @@ describe('jest CommonJS', () => {
502502 done ( )
503503 } ) . catch ( done )
504504 } )
505+
506+ it ( 'can work with Dynamic Instrumentation' , ( done ) => {
507+ receiver . setSettings ( {
508+ flaky_test_retries_enabled : true ,
509+ di_enabled : true
510+ } )
511+ let snapshotIdByTest , snapshotIdByLog
512+ let spanIdByTest , spanIdByLog , traceIdByTest , traceIdByLog
513+ const eventsPromise = receiver
514+ . gatherPayloadsMaxTimeout ( ( { url } ) => url . endsWith ( '/api/v2/citestcycle' ) , ( payloads ) => {
515+ const events = payloads . flatMap ( ( { payload } ) => payload . events )
516+
517+ const tests = events . filter ( event => event . type === 'test' ) . map ( event => event . content )
518+ const retriedTests = tests . filter ( test => test . meta [ TEST_IS_RETRY ] === 'true' )
519+
520+ assert . equal ( retriedTests . length , 2 )
521+ const [ retriedTest ] = retriedTests
522+
523+ assert . propertyVal ( retriedTest . meta , DI_ERROR_DEBUG_INFO_CAPTURED , 'true' )
524+
525+ assert . isTrue (
526+ retriedTest . meta [ `${ DI_DEBUG_ERROR_PREFIX } .0.${ DI_DEBUG_ERROR_FILE_SUFFIX } ` ]
527+ . endsWith ( 'ci-visibility/dynamic-instrumentation/dependency.js' )
528+ )
529+ assert . equal ( retriedTest . metrics [ `${ DI_DEBUG_ERROR_PREFIX } .0.${ DI_DEBUG_ERROR_LINE_SUFFIX } ` ] , 4 )
530+
531+ const snapshotIdKey = `${ DI_DEBUG_ERROR_PREFIX } .0.${ DI_DEBUG_ERROR_SNAPSHOT_ID_SUFFIX } `
532+ assert . exists ( retriedTest . meta [ snapshotIdKey ] )
533+
534+ snapshotIdByTest = retriedTest . meta [ snapshotIdKey ]
535+ spanIdByTest = retriedTest . span_id . toString ( )
536+ traceIdByTest = retriedTest . trace_id . toString ( )
537+
538+ const notRetriedTest = tests . find ( test => test . meta [ TEST_NAME ] . includes ( 'is not retried' ) )
539+
540+ assert . notProperty ( notRetriedTest . meta , DI_ERROR_DEBUG_INFO_CAPTURED )
541+ } )
542+
543+ const logsPromise = receiver
544+ . gatherPayloadsMaxTimeout ( ( { url } ) => url . endsWith ( '/api/v2/logs' ) , ( payloads ) => {
545+ const [ { logMessage : [ diLog ] } ] = payloads
546+ assert . deepInclude ( diLog , {
547+ ddsource : 'dd_debugger' ,
548+ level : 'error'
549+ } )
550+ assert . equal ( diLog . debugger . snapshot . language , 'javascript' )
551+ spanIdByLog = diLog . dd . span_id
552+ traceIdByLog = diLog . dd . trace_id
553+ snapshotIdByLog = diLog . debugger . snapshot . id
554+ } )
555+
556+ childProcess = exec ( runTestsWithCoverageCommand ,
557+ {
558+ cwd,
559+ env : {
560+ ...getCiVisAgentlessConfig ( receiver . port ) ,
561+ TESTS_TO_RUN : 'dynamic-instrumentation/test-' ,
562+ DD_TEST_DYNAMIC_INSTRUMENTATION_ENABLED : 'true' ,
563+ RUN_IN_PARALLEL : true
564+ } ,
565+ stdio : 'inherit'
566+ }
567+ )
568+
569+ childProcess . on ( 'exit' , ( ) => {
570+ Promise . all ( [ eventsPromise , logsPromise ] ) . then ( ( ) => {
571+ assert . equal ( snapshotIdByTest , snapshotIdByLog )
572+ assert . equal ( spanIdByTest , spanIdByLog )
573+ assert . equal ( traceIdByTest , traceIdByLog )
574+ done ( )
575+ } ) . catch ( done )
576+ } )
577+ } )
505578 } )
506579
507580 it ( 'reports timeout error message' , ( done ) => {
0 commit comments