Skip to content

Commit 948fe8a

Browse files
add support for BeforeParam and AfterParam
1 parent f35cbd4 commit 948fe8a

12 files changed

Lines changed: 900 additions & 1 deletion

File tree

dd-java-agent/instrumentation/junit-4.10/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterInstrumentation.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ public JUnit4BeforeAfterInstrumentation() {
2424
public String[] knownMatchingTypes() {
2525
return new String[] {
2626
"org.junit.internal.runners.statements.RunBefores",
27-
"org.junit.internal.runners.statements.RunAfters"
27+
"org.junit.internal.runners.statements.RunAfters",
28+
"org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters$RunBeforeParams",
29+
"org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters$RunAfterParams",
2830
};
2931
}
3032

dd-java-agent/instrumentation/junit-4.10/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/JUnit4BeforeAfterOperationsTracer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.junit.AfterClass;
1010
import org.junit.Before;
1111
import org.junit.BeforeClass;
12+
import org.junit.runners.Parameterized;
1213

1314
public class JUnit4BeforeAfterOperationsTracer {
1415
public static AgentScope startTrace(final Method method) {
@@ -21,6 +22,10 @@ public static AgentScope startTrace(final Method method) {
2122
span.setTag(Tags.TEST_CALLBACK, "BeforeClass");
2223
} else if (method.isAnnotationPresent(AfterClass.class)) {
2324
span.setTag(Tags.TEST_CALLBACK, "AfterClass");
25+
} else if (method.isAnnotationPresent(Parameterized.BeforeParam.class)) {
26+
span.setTag(Tags.TEST_CALLBACK, "BeforeParam");
27+
} else if (method.isAnnotationPresent(Parameterized.AfterParam.class)) {
28+
span.setTag(Tags.TEST_CALLBACK, "AfterParam");
2429
}
2530
return AgentTracer.activateSpan(span);
2631
}

dd-java-agent/instrumentation/junit-4.10/junit-4.13/src/test/groovy/JUnit413Test.groovy

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ import datadog.trace.instrumentation.junit4.TestEventsHandlerHolder
44
import junit.runner.Version
55
import org.example.TestFailedAfter
66
import org.example.TestFailedAfterClass
7+
import org.example.TestFailedAfterParam
78
import org.example.TestFailedBefore
89
import org.example.TestFailedBeforeClass
10+
import org.example.TestFailedBeforeParam
911
import org.example.TestSucceedBeforeAfter
1012
import org.example.TestSucceedBeforeClassAfterClass
13+
import org.example.TestSucceedBeforeParamAfterParam
1114
import org.junit.runner.JUnitCore
1215

1316
@DisableTestTrace(reason = "avoid self-tracing")
@@ -24,10 +27,13 @@ class JUnit413Test extends CiVisibilityInstrumentationTest {
2427
testcaseName | tests | expectedTracesCount
2528
"test-succeed-before-after" | [TestSucceedBeforeAfter] | 3
2629
"test-succeed-before-class-after-class" | [TestSucceedBeforeClassAfterClass] | 3
30+
"test-succeed-before-param-after-param" | [TestSucceedBeforeParamAfterParam] | 2
2731
"test-failed-before-class" | [TestFailedBeforeClass] | 1
2832
"test-failed-after-class" | [TestFailedAfterClass] | 3
2933
"test-failed-before" | [TestFailedBefore] | 3
3034
"test-failed-after" | [TestFailedAfter] | 3
35+
"test-failed-before-param" | [TestFailedBeforeParam] | 2
36+
"test-failed-after-param" | [TestFailedAfterParam] | 2
3137
}
3238

3339
private void runTests(Collection<Class<?>> tests) {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.example;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.util.Arrays;
6+
import java.util.Collection;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.junit.runners.Parameterized;
10+
11+
@RunWith(Parameterized.class)
12+
public class TestFailedAfterParam {
13+
private final int num1;
14+
private final int num2;
15+
private final int sum;
16+
17+
public TestFailedAfterParam(final int num1, final int num2, final int sum) {
18+
this.num1 = num1;
19+
this.num2 = num2;
20+
this.sum = sum;
21+
}
22+
23+
@Parameterized.BeforeParam
24+
public static void setup() {}
25+
26+
@Parameterized.AfterParam
27+
public static void tearDown() {
28+
throw new RuntimeException("after param setup failed");
29+
}
30+
31+
@Parameterized.Parameters
32+
public static Collection<Object[]> data() {
33+
return Arrays.asList(new Object[][] {{0, 0, 0}, {1, 1, 2}});
34+
}
35+
36+
@Test
37+
public void parameterized_test_succeed() {
38+
assertEquals(num1 + num2, sum);
39+
}
40+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.example;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.util.Arrays;
6+
import java.util.Collection;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.junit.runners.Parameterized;
10+
11+
@RunWith(Parameterized.class)
12+
public class TestFailedBeforeParam {
13+
private final int num1;
14+
private final int num2;
15+
private final int sum;
16+
17+
public TestFailedBeforeParam(final int num1, final int num2, final int sum) {
18+
this.num1 = num1;
19+
this.num2 = num2;
20+
this.sum = sum;
21+
}
22+
23+
@Parameterized.BeforeParam
24+
public static void setup() {
25+
throw new RuntimeException("before param setup failed");
26+
}
27+
28+
@Parameterized.AfterParam
29+
public static void tearDown() {}
30+
31+
@Parameterized.Parameters
32+
public static Collection<Object[]> data() {
33+
return Arrays.asList(new Object[][] {{0, 0, 0}, {1, 1, 2}});
34+
}
35+
36+
@Test
37+
public void parameterized_test_succeed() {
38+
assertEquals(num1 + num2, sum);
39+
}
40+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.example;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.util.Arrays;
6+
import java.util.Collection;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.junit.runners.Parameterized;
10+
11+
@RunWith(Parameterized.class)
12+
public class TestSucceedBeforeParamAfterParam {
13+
private final int num1;
14+
private final int num2;
15+
private final int sum;
16+
17+
public TestSucceedBeforeParamAfterParam(final int num1, final int num2, final int sum) {
18+
this.num1 = num1;
19+
this.num2 = num2;
20+
this.sum = sum;
21+
}
22+
23+
@Parameterized.BeforeParam
24+
public static void setup() {}
25+
26+
@Parameterized.AfterParam
27+
public static void tearDown() {}
28+
29+
@Parameterized.Parameters
30+
public static Collection<Object[]> data() {
31+
return Arrays.asList(new Object[][] {{0, 0, 0}, {1, 1, 2}});
32+
}
33+
34+
@Test
35+
public void parameterized_test_succeed() {
36+
assertEquals(num1 + num2, sum);
37+
}
38+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[ ]

0 commit comments

Comments
 (0)