@@ -102,7 +102,34 @@ public void budgets() {
102102 assertEquals (runs * LogProbe .NON_CAPTURING_PROBE_BUDGET , sink .highRate );
103103 }
104104
105+ @ Test
106+ public void budgetsOnLineProbes () {
107+ BudgetSink sink = new BudgetSink (getConfig (), mock (ProbeStatusSink .class ));
108+ DebuggerAgentHelper .injectSink (sink );
109+
110+ TracerAPI tracer =
111+ CoreTracer .builder ().idGenerationStrategy (IdGenerationStrategy .fromName ("random" )).build ();
112+ AgentTracer .registerIfAbsent (tracer );
113+ int runs = 100 ;
114+ for (int i = 0 ; i < runs ; i ++) {
115+ runTrace (tracer , true , 100 );
116+ }
117+ assertEquals (runs * LogProbe .CAPTURING_PROBE_BUDGET , sink .captures );
118+
119+ sink = new BudgetSink (getConfig (), mock (ProbeStatusSink .class ));
120+ DebuggerAgentHelper .injectSink (sink );
121+ runs = 1010 ;
122+ for (int i = 0 ; i < runs ; i ++) {
123+ runTrace (tracer , false , 100 );
124+ }
125+ assertEquals (runs * LogProbe .NON_CAPTURING_PROBE_BUDGET , sink .highRate );
126+ }
127+
105128 private void runTrace (TracerAPI tracer , boolean captureSnapshot ) {
129+ runTrace (tracer , captureSnapshot , null );
130+ }
131+
132+ private void runTrace (TracerAPI tracer , boolean captureSnapshot , Integer line ) {
106133 AgentSpan span = tracer .startSpan ("budget testing" , "test span" );
107134 span .setTag (Tags .PROPAGATED_DEBUG , "12345:1" );
108135 try (AgentScope scope = tracer .activateSpan (span , ScopeSource .MANUAL )) {
@@ -125,7 +152,11 @@ private void runTrace(TracerAPI tracer, boolean captureSnapshot) {
125152 int runs = budget + 20 ;
126153
127154 for (int i = 0 ; i < runs ; i ++) {
128- logProbe .commit (entryContext , exitContext , emptyList ());
155+ if (line == null ) {
156+ logProbe .commit (entryContext , exitContext , emptyList ());
157+ } else {
158+ logProbe .commit (entryContext , line );
159+ }
129160 }
130161 assertEquals (runs , span .getLocalRootSpan ().getTag (format ("_dd.ld.probe_id.%s" , logProbe .id )));
131162 }
@@ -172,6 +203,29 @@ private static CapturedContext capturedContext(AgentSpan span, ProbeDefinition p
172203 return context ;
173204 }
174205
206+ @ Test
207+ public void testDebugLineProbes () {
208+ BudgetSink sink = new BudgetSink (getConfig (), mock (ProbeStatusSink .class ));
209+ DebuggerAgentHelper .injectSink (sink );
210+
211+ TracerAPI tracer =
212+ CoreTracer .builder ().idGenerationStrategy (IdGenerationStrategy .fromName ("random" )).build ();
213+ AgentTracer .registerIfAbsent (tracer );
214+ int runs = 100 ;
215+ for (int i = 0 ; i < runs ; i ++) {
216+ runTrace (tracer , true );
217+ }
218+ assertEquals (runs * LogProbe .CAPTURING_PROBE_BUDGET , sink .captures );
219+
220+ sink = new BudgetSink (getConfig (), mock (ProbeStatusSink .class ));
221+ DebuggerAgentHelper .injectSink (sink );
222+ runs = 1010 ;
223+ for (int i = 0 ; i < runs ; i ++) {
224+ runTrace (tracer , false );
225+ }
226+ assertEquals (runs * LogProbe .NON_CAPTURING_PROBE_BUDGET , sink .highRate );
227+ }
228+
175229 @ Test
176230 public void log () {
177231 LogProbe logProbe = createLog (null ).build ();
0 commit comments