11package com .datadog .debugger .agent ;
22
3- import static com .datadog .debugger .agent .DebuggerProductChangesListener .MAX_ALLOWED_LOG_PROBES ;
4- import static com .datadog .debugger .agent .DebuggerProductChangesListener .MAX_ALLOWED_METRIC_PROBES ;
5- import static com .datadog .debugger .agent .DebuggerProductChangesListener .MAX_ALLOWED_SPAN_DECORATION_PROBES ;
6- import static com .datadog .debugger .agent .DebuggerProductChangesListener .MAX_ALLOWED_SPAN_PROBES ;
73import static com .datadog .debugger .util .LogProbeTestHelper .parseTemplate ;
84import static datadog .remoteconfig .PollingHinterNoop .NOOP ;
95import static org .junit .jupiter .api .Assertions .assertDoesNotThrow ;
1915import com .datadog .debugger .probe .ProbeDefinition ;
2016import com .datadog .debugger .probe .SpanDecorationProbe ;
2117import com .datadog .debugger .probe .SpanProbe ;
18+ import com .datadog .debugger .probe .TriggerProbe ;
19+ import com .datadog .debugger .probe .Where ;
2220import datadog .remoteconfig .state .ParsedConfigKey ;
2321import datadog .trace .api .Config ;
22+ import datadog .trace .bootstrap .debugger .ProbeId ;
2423import java .io .IOException ;
2524import java .nio .charset .StandardCharsets ;
2625import java .util .Arrays ;
@@ -133,6 +132,9 @@ public void testMultipleSingleProbesConfigurations() {
133132 MetricProbe metricProbe = createMetricProbe (UUID .randomUUID ().toString ());
134133 LogProbe logProbe = createLogProbe (UUID .randomUUID ().toString ());
135134 SpanProbe spanProbe = createSpanProbe (UUID .randomUUID ().toString ());
135+ SpanDecorationProbe spanDecorationProbe =
136+ createSpanDecorationProbe (UUID .randomUUID ().toString ());
137+ TriggerProbe triggerProbe = createTriggerProbe (UUID .randomUUID ().toString ());
136138
137139 acceptMetricProbe (listener , metricProbe );
138140 listener .commit (NOOP );
@@ -146,16 +148,40 @@ public void testMultipleSingleProbesConfigurations() {
146148 listener .commit (NOOP );
147149 assertDefinitions (acceptor .getDefinitions (), metricProbe , logProbe , spanProbe );
148150
151+ acceptSpanDecorationProbe (listener , spanDecorationProbe );
152+ listener .commit (NOOP );
153+ assertDefinitions (
154+ acceptor .getDefinitions (), metricProbe , logProbe , spanProbe , spanDecorationProbe );
155+
156+ acceptTriggerProbe (listener , triggerProbe );
157+ listener .commit (NOOP );
158+ assertDefinitions (
159+ acceptor .getDefinitions (),
160+ metricProbe ,
161+ logProbe ,
162+ spanProbe ,
163+ spanDecorationProbe ,
164+ triggerProbe );
165+
149166 removeMetricProbe (listener , metricProbe );
150167 listener .commit (NOOP );
151- assertDefinitions (acceptor .getDefinitions (), logProbe , spanProbe );
168+ assertDefinitions (
169+ acceptor .getDefinitions (), logProbe , spanProbe , spanDecorationProbe , triggerProbe );
152170
153171 removeLogProbe (listener , logProbe );
154172 listener .commit (NOOP );
155- assertDefinitions (acceptor .getDefinitions (), spanProbe );
173+ assertDefinitions (acceptor .getDefinitions (), spanProbe , spanDecorationProbe , triggerProbe );
156174
157175 removeSpanProbe (listener , spanProbe );
158176 listener .commit (NOOP );
177+ assertDefinitions (acceptor .getDefinitions (), spanDecorationProbe , triggerProbe );
178+
179+ removeSpanDecorationProbe (listener , spanDecorationProbe );
180+ listener .commit (NOOP );
181+ assertDefinitions (acceptor .getDefinitions (), triggerProbe );
182+
183+ removeTriggerProbe (listener , triggerProbe );
184+ listener .commit (NOOP );
159185 assertTrue (acceptor .getDefinitions ().isEmpty ());
160186 }
161187
@@ -170,13 +196,17 @@ public void testMergeConfigWithSingleProbe() {
170196 MetricProbe metricProbe = createMetricProbe ("345" );
171197 LogProbe logProbe = createLogProbe ("567" );
172198 SpanProbe spanProbe = createSpanProbe ("890" );
199+ SpanDecorationProbe spanDecorationProbe = createSpanDecorationProbe ("891" );
200+ TriggerProbe triggerProbe = createTriggerProbe ("892" );
173201
174202 Configuration config =
175203 Configuration .builder ()
176204 .setService (SERVICE_NAME )
177205 .add (metricProbe )
178206 .add (logProbe )
179207 .add (spanProbe )
208+ .add (spanDecorationProbe )
209+ .add (triggerProbe )
180210 .add (new LogProbe .Sampling (3.0 ))
181211 .addDenyList (createFilteredList ())
182212 .build ();
@@ -185,7 +215,13 @@ public void testMergeConfigWithSingleProbe() {
185215 acceptConfig (listener , config , UUID .randomUUID ().toString ());
186216 listener .commit (NOOP );
187217 assertDefinitions (
188- acceptor .getDefinitions (), logProbeWithSnapshot , metricProbe , logProbe , spanProbe );
218+ acceptor .getDefinitions (),
219+ logProbeWithSnapshot ,
220+ metricProbe ,
221+ logProbe ,
222+ spanProbe ,
223+ spanDecorationProbe ,
224+ triggerProbe );
189225 }
190226
191227 @ Test
@@ -197,74 +233,6 @@ public void badConfigIDFailsToAccept() throws IOException {
197233 assertNull (acceptor .definitions );
198234 }
199235
200- @ Test
201- public void maxLogProbes () {
202- SimpleAcceptor acceptor = new SimpleAcceptor ();
203- DebuggerProductChangesListener listener =
204- new DebuggerProductChangesListener (tracerConfig , acceptor );
205- for (int i = 0 ; i < 200 ; i ++) {
206- LogProbe probe =
207- LogProbe .builder ()
208- .probeId (String .valueOf (i ), 0 )
209- .where ("java.lang.String" , "concat" + i )
210- .build ();
211- acceptLogProbe (listener , probe );
212- }
213- listener .commit (NOOP );
214- assertEquals (MAX_ALLOWED_LOG_PROBES , acceptor .getDefinitions ().size ());
215- }
216-
217- @ Test
218- public void maxMetricProbes () {
219- SimpleAcceptor acceptor = new SimpleAcceptor ();
220- DebuggerProductChangesListener listener =
221- new DebuggerProductChangesListener (tracerConfig , acceptor );
222- for (int i = 0 ; i < 200 ; i ++) {
223- MetricProbe probe =
224- MetricProbe .builder ()
225- .probeId (String .valueOf (i ), 0 )
226- .where ("java.lang.String" , "concat" + i )
227- .build ();
228- acceptMetricProbe (listener , probe );
229- }
230- listener .commit (NOOP );
231- assertEquals (MAX_ALLOWED_METRIC_PROBES , acceptor .getDefinitions ().size ());
232- }
233-
234- @ Test
235- public void maxSpanProbes () {
236- SimpleAcceptor acceptor = new SimpleAcceptor ();
237- DebuggerProductChangesListener listener =
238- new DebuggerProductChangesListener (tracerConfig , acceptor );
239- for (int i = 0 ; i < 200 ; i ++) {
240- SpanProbe probe =
241- SpanProbe .builder ()
242- .probeId (String .valueOf (i ), 0 )
243- .where ("java.lang.String" , "concat" + i )
244- .build ();
245- acceptSpanProbe (listener , probe );
246- }
247- listener .commit (NOOP );
248- assertEquals (MAX_ALLOWED_SPAN_PROBES , acceptor .getDefinitions ().size ());
249- }
250-
251- @ Test
252- public void maxSpanDecorationProbes () {
253- SimpleAcceptor acceptor = new SimpleAcceptor ();
254- DebuggerProductChangesListener listener =
255- new DebuggerProductChangesListener (tracerConfig , acceptor );
256- for (int i = 0 ; i < 200 ; i ++) {
257- SpanDecorationProbe probe =
258- SpanDecorationProbe .builder ()
259- .probeId (String .valueOf (i ), 0 )
260- .where ("java.lang.String" , "concat" + i )
261- .build ();
262- acceptSpanDecorationProbe (listener , probe );
263- }
264- listener .commit (NOOP );
265- assertEquals (MAX_ALLOWED_SPAN_DECORATION_PROBES , acceptor .getDefinitions ().size ());
266- }
267-
268236 @ Test
269237 public void parsingException () throws IOException {
270238 SimpleAcceptor acceptor = new SimpleAcceptor ();
@@ -320,6 +288,12 @@ byte[] toContent(SpanDecorationProbe probe) {
320288 .getBytes (StandardCharsets .UTF_8 );
321289 }
322290
291+ byte [] toContent (TriggerProbe probe ) {
292+ return DebuggerProductChangesListener .Adapter .TRIGGER_PROBE_JSON_ADAPTER
293+ .toJson (probe )
294+ .getBytes (StandardCharsets .UTF_8 );
295+ }
296+
323297 void acceptConfig (
324298 DebuggerProductChangesListener listener , Configuration config , String configId ) {
325299 assertDoesNotThrow (() -> listener .accept (createConfigKey (configId ), toContent (config ), NOOP ));
@@ -361,10 +335,28 @@ void acceptSpanDecorationProbe(
361335 createConfigKey ("spanDecorationProbe_" + probe .getId ()), toContent (probe ), NOOP ));
362336 }
363337
338+ void acceptTriggerProbe (DebuggerProductChangesListener listener , TriggerProbe probe ) {
339+ assertDoesNotThrow (
340+ () ->
341+ listener .accept (
342+ createConfigKey ("triggerProbe_" + probe .getId ()), toContent (probe ), NOOP ));
343+ }
344+
364345 void removeSpanProbe (DebuggerProductChangesListener listener , SpanProbe probe ) {
365346 assertDoesNotThrow (() -> listener .remove (createConfigKey ("spanProbe_" + probe .getId ()), NOOP ));
366347 }
367348
349+ void removeSpanDecorationProbe (
350+ DebuggerProductChangesListener listener , SpanDecorationProbe probe ) {
351+ assertDoesNotThrow (
352+ () -> listener .remove (createConfigKey ("spanDecorationProbe_" + probe .getId ()), NOOP ));
353+ }
354+
355+ void removeTriggerProbe (DebuggerProductChangesListener listener , TriggerProbe probe ) {
356+ assertDoesNotThrow (
357+ () -> listener .remove (createConfigKey ("triggerProbe_" + probe .getId ()), NOOP ));
358+ }
359+
368360 LogProbe createLogProbeWithSnapshot (String id ) {
369361 return LogProbe .builder ()
370362 .probeId (id , 0 )
@@ -397,6 +389,18 @@ SpanProbe createSpanProbe(String id) {
397389 .build ();
398390 }
399391
392+ SpanDecorationProbe createSpanDecorationProbe (String id ) {
393+ return SpanDecorationProbe .builder ()
394+ .probeId (id , 0 )
395+ .where (null , null , null , 1966 , "src/main/java/java/lang/String.java" )
396+ .targetSpan (SpanDecorationProbe .TargetSpan .ACTIVE )
397+ .build ();
398+ }
399+
400+ TriggerProbe createTriggerProbe (String id ) {
401+ return new TriggerProbe (new ProbeId (id , 0 ), Where .of ("java.lang.String" , "indexOf" , null ));
402+ }
403+
400404 Configuration .FilterList createFilteredList () {
401405 return new Configuration .FilterList (
402406 Collections .singletonList ("datadog" ), Collections .singletonList ("class1" ));
0 commit comments