@@ -3,6 +3,17 @@ package datadog.trace.agent.test
33import ch.qos.logback.classic.Level
44import ch.qos.logback.classic.Logger
55import ch.qos.logback.classic.util.ContextInitializer
6+ import com.datadog.debugger.agent.ClassesToRetransformFinder
7+ import com.datadog.debugger.agent.Configuration
8+ import com.datadog.debugger.agent.ConfigurationUpdater
9+ import com.datadog.debugger.agent.DebuggerTransformer
10+ import com.datadog.debugger.agent.DenyListHelper
11+ import com.datadog.debugger.agent.JsonSnapshotSerializer
12+ import com.datadog.debugger.codeorigin.DefaultCodeOriginRecorder
13+ import com.datadog.debugger.instrumentation.InstrumentationResult
14+ import com.datadog.debugger.probe.ProbeDefinition
15+ import com.datadog.debugger.sink.DebuggerSink
16+ import com.datadog.debugger.sink.ProbeStatusSink
617import com.google.common.collect.Sets
718import datadog.communication.ddagent.DDAgentFeaturesDiscovery
819import datadog.communication.monitor.Monitoring
@@ -28,6 +39,7 @@ import datadog.trace.api.time.SystemTimeSource
2839import datadog.trace.bootstrap.ActiveSubsystems
2940import datadog.trace.bootstrap.CallDepthThreadLocalMap
3041import datadog.trace.bootstrap.InstrumentationErrors
42+ import datadog.trace.bootstrap.debugger.DebuggerContext
3143import datadog.trace.bootstrap.instrumentation.api.AgentDataStreamsMonitoring
3244import datadog.trace.bootstrap.instrumentation.api.AgentSpan
3345import datadog.trace.bootstrap.instrumentation.api.AgentTracer.TracerAPI
@@ -71,7 +83,10 @@ import static datadog.communication.http.OkHttpUtils.buildHttpClient
7183import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_HOST
7284import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_TIMEOUT
7385import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT
86+ import static datadog.trace.api.config.TraceInstrumentationConfig.CODE_ORIGIN_FOR_SPANS_ENABLED
7487import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious
88+ import static org.mockito.Mockito.mock
89+ import static org.mockito.Mockito.when
7590
7691/**
7792 * A spock test runner which automatically applies instrumentation and exposes a global trace
@@ -288,6 +303,39 @@ abstract class AgentTestRunner extends DDSpecification implements AgentBuilder.L
288303 ((Logger ) LoggerFactory . getLogger(" org.testcontainers" )). setLevel(Level . DEBUG )
289304 }
290305
306+ void codeOriginSetup () {
307+ injectSysConfig(CODE_ORIGIN_FOR_SPANS_ENABLED , " true" , true )
308+
309+ def configuration = Configuration . builder()
310+ .setService(" grpc code origin test" )
311+ .build()
312+
313+ def config = mock(Config . class)
314+ when(config. isDebuggerEnabled()). thenReturn(true )
315+ when(config. isDebuggerClassFileDumpEnabled()). thenReturn(true )
316+ when(config. isDebuggerVerifyByteCode()). thenReturn(false )
317+ when(config. getFinalDebuggerSnapshotUrl())
318+ .thenReturn(" http://localhost:8126/debugger/v1/input" )
319+ when(config. getFinalDebuggerSymDBUrl()). thenReturn(" http://localhost:8126/symdb/v1/input" )
320+ when(config. getDebuggerCodeOriginMaxUserFrames()). thenReturn(8 )
321+
322+ def probeStatusSink = mock(ProbeStatusSink . class)
323+
324+ def sink = new DebuggerSink (config, probeStatusSink)
325+ def configurationUpdater = new ConfigurationUpdater (INSTRUMENTATION , DebuggerTransformer ::new , config, sink, new ClassesToRetransformFinder ())
326+
327+ def currentTransformer = new DebuggerTransformer (config, configuration, {
328+ ProbeDefinition definition, InstrumentationResult result ->
329+ }, sink)
330+ INSTRUMENTATION . addTransformer(currentTransformer)
331+
332+ DebuggerContext . initProbeResolver(configurationUpdater)
333+ DebuggerContext . initClassFilter(new DenyListHelper (null ))
334+ DebuggerContext . initValueSerializer(new JsonSnapshotSerializer ())
335+
336+ DebuggerContext . initCodeOrigin(new DefaultCodeOriginRecorder (config, configurationUpdater))
337+ }
338+
291339 @SuppressForbidden
292340 void setupSpec () {
293341
0 commit comments