Skip to content

Commit ca324ef

Browse files
deejgregoramarziali
authored andcommitted
Fail fast on muzzle or instrumentation errors
1 parent 4f536b7 commit ca324ef

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/ListWriterAssert.groovy

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package datadog.trace.agent.test.asserts
22

33
import static TraceAssert.assertTrace
44

5+
import datadog.trace.agent.tooling.muzzle.MuzzleCheck
6+
import datadog.trace.bootstrap.InstrumentationErrors
57
import datadog.trace.common.writer.ListWriter
68
import datadog.trace.core.DDSpan
79
import groovy.transform.stc.ClosureParams
@@ -47,7 +49,15 @@ class ListWriterAssert {
4749
@ClosureParams(value = SimpleType, options = ['datadog.trace.agent.test.asserts.ListWriterAssert'])
4850
@DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST) Closure spec) {
4951
try {
50-
writer.waitForTraces(expectedSize)
52+
// Fail fast if we see any muzzle errors or instrumentation errors
53+
for (int timeoutRemaining = ListWriter.WAIT_FOR_TRACES_TIMEOUT_SECONDS; timeoutRemaining > 0; timeoutRemaining--) {
54+
if (writer.waitForTracesMax(expectedSize, 1)) {
55+
break
56+
}
57+
assertNoErrors()
58+
}
59+
assertNoErrors() // even if we break immediately above, make sure we check for errors at least once
60+
writer.waitForTraces(expectedSize, 0)
5161
def array = writer.toArray()
5262
assert array.length == expectedSize
5363
def traces = (Arrays.asList(array) as List<List<DDSpan>>)
@@ -91,6 +101,12 @@ class ListWriterAssert {
91101
}
92102
}
93103

104+
static void assertNoErrors() {
105+
assert InstrumentationErrors.getErrors().size() == 0 : "Instrumentation errors were seen, failing fast"
106+
assert MuzzleCheck.getErrors().size() == 0 : "Muzzle errors were seen, failing fast"
107+
// InstrumentationSpecification.{cleanup,cleanupAfterAgent} will provide details later
108+
}
109+
94110
void sortSpansByStart() {
95111
traces = traces.collect {
96112
return new ArrayList<DDSpan>(it).sort { a, b ->

dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
/** List writer used by tests mostly */
2020
public class ListWriter extends CopyOnWriteArrayList<List<DDSpan>> implements Writer {
21+
public static final int WAIT_FOR_TRACES_TIMEOUT_SECONDS = 20;
22+
2123
private static final Logger log = LoggerFactory.getLogger(ListWriter.class);
2224
private static final Filter ACCEPT_ALL = trace -> true;
2325

@@ -85,7 +87,12 @@ public boolean waitForTracesMax(final int number, int seconds) throws Interrupte
8587
}
8688

8789
public void waitForTraces(final int number) throws InterruptedException, TimeoutException {
88-
if (!waitForTracesMax(number, 20)) {
90+
waitForTraces(number, WAIT_FOR_TRACES_TIMEOUT_SECONDS);
91+
}
92+
93+
public void waitForTraces(final int number, final int seconds)
94+
throws InterruptedException, TimeoutException {
95+
if (!waitForTracesMax(number, seconds)) {
8996
String msg =
9097
"Timeout waiting for "
9198
+ number

0 commit comments

Comments
 (0)