Skip to content

Commit

Permalink
jacoco is happy.
Browse files Browse the repository at this point in the history
all glory to the code coverage gods.
  • Loading branch information
evanchooly committed Sep 6, 2024
1 parent 8b80244 commit df83442
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 92 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,7 @@

public final class DebuggerConfiguration {
public static boolean isDebuggerEnabled(AgentSpan span) {
boolean enabled = false;
if (span.context() instanceof DDSpanContext) {
String debug = getDebugLevel(span);
enabled = debug != null && !("false".equals(debug) || "0".equals(debug));
}

return enabled;
}

public static boolean isDebuggerDisabled(AgentSpan span) {
boolean disabled = true;
if (span.context() instanceof DDSpanContext) {
String debug = getDebugLevel(span);
disabled = "false".equals(debug) || "0".equals(debug);
}

return disabled;
return "1".equals(getDebugLevel(span));
}

private static String getDebugLevel(AgentSpan span) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.datadog.debugger.probe;

import static com.datadog.debugger.codeorigin.DebuggerConfiguration.isDebuggerDisabled;
import static com.datadog.debugger.codeorigin.DebuggerConfiguration.isDebuggerEnabled;
import static datadog.trace.api.DDTags.DD_STACK_CODE_ORIGIN_FRAME;
import static datadog.trace.api.DDTags.DD_STACK_CODE_ORIGIN_TYPE;
Expand Down Expand Up @@ -92,35 +91,33 @@ public void commit(
}

private void applySpanOriginTags(AgentSpan span) {
if (!isDebuggerDisabled(span)) {
List<StackTraceElement> entries = getUserStackFrames();
if (!entries.isEmpty()) {
Set<AgentSpan> spans = new LinkedHashSet<>();
spans.add(span);
if (entrySpanProbe) {
AgentSpan rootSpan = span.getLocalRootSpan() != null ? span.getLocalRootSpan() : span;
if (rootSpan != null) {
spans.add(rootSpan);
}
StackTraceElement entry = entries.get(0);
for (AgentSpan s : spans) {
s.setTag(DDTags.DD_CODE_ORIGIN_FILE, toFileName(entry.getClassName()));
s.setTag(DDTags.DD_CODE_ORIGIN_METHOD, entry.getMethodName());
s.setTag(DDTags.DD_CODE_ORIGIN_LINE, entry.getLineNumber());
s.setTag(DDTags.DD_CODE_ORIGIN_TYPE, entry.getClassName());
s.setTag(DDTags.DD_CODE_ORIGIN_METHOD_SIGNATURE, signature);
}
List<StackTraceElement> entries = getUserStackFrames();
if (!entries.isEmpty()) {
Set<AgentSpan> spans = new LinkedHashSet<>();
spans.add(span);
if (entrySpanProbe) {
AgentSpan rootSpan = span.getLocalRootSpan() != null ? span.getLocalRootSpan() : span;
if (rootSpan != null) {
spans.add(rootSpan);
}
StackTraceElement entry = entries.get(0);
for (AgentSpan s : spans) {
s.setTag(format(DD_STACK_CODE_ORIGIN_TYPE), entrySpanProbe ? "entry" : "exit");

for (int i = 0; i < entries.size(); i++) {
StackTraceElement info = entries.get(i);
s.setTag(format(DD_STACK_CODE_ORIGIN_FRAME, i, "file"), info.getFileName());
s.setTag(format(DD_STACK_CODE_ORIGIN_FRAME, i, "line"), info.getLineNumber());
s.setTag(format(DD_STACK_CODE_ORIGIN_FRAME, i, "method"), info.getMethodName());
s.setTag(format(DD_STACK_CODE_ORIGIN_FRAME, i, "type"), info.getClassName());
}
s.setTag(DDTags.DD_CODE_ORIGIN_FILE, toFileName(entry.getClassName()));
s.setTag(DDTags.DD_CODE_ORIGIN_METHOD, entry.getMethodName());
s.setTag(DDTags.DD_CODE_ORIGIN_LINE, entry.getLineNumber());
s.setTag(DDTags.DD_CODE_ORIGIN_TYPE, entry.getClassName());
s.setTag(DDTags.DD_CODE_ORIGIN_METHOD_SIGNATURE, signature);
}
}
for (AgentSpan s : spans) {
s.setTag(format(DD_STACK_CODE_ORIGIN_TYPE), entrySpanProbe ? "entry" : "exit");

for (int i = 0; i < entries.size(); i++) {
StackTraceElement info = entries.get(i);
s.setTag(format(DD_STACK_CODE_ORIGIN_FRAME, i, "file"), info.getFileName());
s.setTag(format(DD_STACK_CODE_ORIGIN_FRAME, i, "line"), info.getLineNumber());
s.setTag(format(DD_STACK_CODE_ORIGIN_FRAME, i, "method"), info.getMethodName());
s.setTag(format(DD_STACK_CODE_ORIGIN_FRAME, i, "type"), info.getClassName());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static datadog.trace.api.DDTags.DD_STACK_CODE_ORIGIN_FRAME;
import static java.lang.String.format;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
Expand Down Expand Up @@ -46,6 +47,7 @@
import datadog.trace.core.CoreTracer;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
Expand All @@ -60,6 +62,20 @@

public class CodeOriginTest {

private static final List<String> CODE_ORIGIN_TAGS =
asList(
DDTags.DD_CODE_ORIGIN_FILE,
DDTags.DD_CODE_ORIGIN_LINE,
DDTags.DD_CODE_ORIGIN_METHOD,
DDTags.DD_CODE_ORIGIN_METHOD_SIGNATURE);
private static final List<String> STACK_FRAME_TAGS =
asList(
format(DD_STACK_CODE_ORIGIN_FRAME, 0, "file"),
format(DD_STACK_CODE_ORIGIN_FRAME, 0, "line"),
format(DD_STACK_CODE_ORIGIN_FRAME, 0, "method"),
format(DD_STACK_CODE_ORIGIN_FRAME, 0, "type"));
private static final List<String> COMBO_TAGS = new ArrayList<>();

private final Instrumentation instr = ByteBuddyAgent.install();
private final TestTraceInterceptor traceInterceptor = new TestTraceInterceptor();

Expand All @@ -86,6 +102,11 @@ public class CodeOriginTest {

private TracerAPI tracerAPI;

static {
COMBO_TAGS.addAll(CODE_ORIGIN_TAGS);
COMBO_TAGS.addAll(STACK_FRAME_TAGS);
}

@Test
public void testParents() {
AgentSpan top = newSpan("root");
Expand Down Expand Up @@ -156,36 +177,6 @@ public void onlyInstrument() throws Exception {
assertEquals(0, listener.snapshots.size());
List<? extends MutableSpan> spans = traceInterceptor.getAllTraces().get(0);
assertEquals(3, spans.size());
// assertEquals(asList("main", "fullTrace", "exit"), spans.stream().map(span ->
// span.getOperationName()).collect(Collectors.toList()));
assertEquals("main", spans.get(2).getLocalRootSpan().getOperationName());

List<? extends MutableSpan> list =
spans.stream()
.filter(span -> !span.getOperationName().equals("exit"))
.collect(Collectors.toList());

for (MutableSpan span : list) {
checkEntrySpanTags(span, false);
}
Optional<? extends MutableSpan> exit =
spans.stream().filter(span -> span.getOperationName().equals("exit")).findFirst();
assertTrue(exit.isPresent());
exit.ifPresent(CodeOriginTest::checkExitSpanTags);
}

@Test
public void debugLevel1() throws Exception {
Config config = createConfig();
setupCodeOrigin(config);
final String CLASS_NAME = "com.datadog.debugger.CodeOrigin01";
Class<?> testClass = compileAndLoadClass(CLASS_NAME);
int result = Reflect.onClass(testClass).call("main", "debug_1").get();
assertEquals(0, result);
Collection<CodeOriginProbe> probes = probeManager.getProbes();
assertEquals(2, probes.size());
List<? extends MutableSpan> spans = traceInterceptor.getAllTraces().get(0);
assertEquals(3, spans.size());
assertEquals("main", spans.get(2).getLocalRootSpan().getOperationName());

List<? extends MutableSpan> list =
Expand All @@ -194,38 +185,32 @@ public void debugLevel1() throws Exception {
.collect(Collectors.toList());

for (MutableSpan span : list) {
checkEntrySpanTags(span, true);
checkForTags(span, "entry", COMBO_TAGS, emptyList());
}
Optional<? extends MutableSpan> exit =
spans.stream().filter(span -> span.getOperationName().equals("exit")).findFirst();
assertTrue(exit.isPresent());
exit.ifPresent(CodeOriginTest::checkExitSpanTags);
}

private static void checkEntrySpanTags(MutableSpan span, boolean includeSnapshot) {
private static void checkForTags(
MutableSpan span, String spanType, List<String> included, List<String> excluded) {
String keys =
String.format(
format(
"Existing keys for %s: %s",
span.getOperationName(), new TreeSet<>(span.getTags().keySet()));

assertNotNull(span.getTag(DDTags.DD_CODE_ORIGIN_FILE), keys);
assertNotNull(span.getTag(DDTags.DD_CODE_ORIGIN_LINE), keys);
assertNotNull(span.getTag(DDTags.DD_CODE_ORIGIN_METHOD), keys);
assertNotNull(span.getTag(DDTags.DD_CODE_ORIGIN_METHOD_SIGNATURE), keys);

assertEquals(span.getTag(DDTags.DD_STACK_CODE_ORIGIN_TYPE), "entry", keys);
assertNotNull(span.getTag(format(DD_STACK_CODE_ORIGIN_FRAME, 0, "file")));
assertNotNull(span.getTag(format(DD_STACK_CODE_ORIGIN_FRAME, 0, "line")));
assertNotNull(span.getTag(format(DD_STACK_CODE_ORIGIN_FRAME, 0, "method")));
assertNotNull(span.getTag(format(DD_STACK_CODE_ORIGIN_FRAME, 0, "type")));
if (includeSnapshot) {
assertNotNull(span.getTag(format(DD_STACK_CODE_ORIGIN_FRAME, 0, "snapshot_id")));
assertEquals(span.getTag(DDTags.DD_STACK_CODE_ORIGIN_TYPE), spanType, keys);
for (String tag : included) {
assertNotNull(span.getTag(tag), tag + " not found. " + keys);
}
for (String tag : excluded) {
assertNull(span.getTag(tag), tag + " not found. " + keys);
}
}

private static void checkExitSpanTags(MutableSpan span) {
String keys =
String.format(
format(
"Existing keys for %s: %s",
span.getOperationName(), new TreeSet<>(span.getTags().keySet()));

Expand Down

0 comments on commit df83442

Please sign in to comment.