AgentTestRunner.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * Copyright The OpenTelemetry Authors
  3. * SPDX-License-Identifier: Apache-2.0
  4. */
  5. package io.opentelemetry.instrumentation.test;
  6. import ch.qos.logback.classic.Level;
  7. import ch.qos.logback.classic.Logger;
  8. import groovy.lang.Closure;
  9. import groovy.lang.DelegatesTo;
  10. import groovy.transform.stc.ClosureParams;
  11. import groovy.transform.stc.SimpleType;
  12. import io.opentelemetry.api.trace.Span;
  13. import io.opentelemetry.instrumentation.test.asserts.InMemoryExporterAssert;
  14. import io.opentelemetry.javaagent.testing.common.AgentTestingExporterAccess;
  15. import io.opentelemetry.javaagent.testing.common.TestAgentListenerAccess;
  16. import org.slf4j.LoggerFactory;
  17. public final class AgentTestRunner {
  18. /**
  19. * For test runs, agent's global tracer will report to this list writer.
  20. *
  21. * <p>Before the start of each test the reported traces will be reset.
  22. */
  23. public static final InMemoryExporter TEST_WRITER = new InMemoryExporter();
  24. static {
  25. ((Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).setLevel(Level.WARN);
  26. ((Logger) LoggerFactory.getLogger("io.opentelemetry")).setLevel(Level.DEBUG);
  27. }
  28. public void setupBeforeTests() {
  29. TestAgentListenerAccess.reset();
  30. }
  31. public void beforeTest() {
  32. assert !Span.current().getSpanContext().isValid()
  33. : "Span is active before test has started: " + Span.current();
  34. AgentTestingExporterAccess.reset();
  35. }
  36. public static synchronized void agentCleanup() {
  37. // Cleanup before assertion.
  38. assert TestAgentListenerAccess.getInstrumentationErrorCount() == 0
  39. : TestAgentListenerAccess.getInstrumentationErrorCount()
  40. + " Instrumentation errors during test";
  41. assert TestAgentListenerAccess.getIgnoredButTransformedClassNames().isEmpty()
  42. : "Transformed classes match global libraries ignore matcher: "
  43. + TestAgentListenerAccess.getIgnoredButTransformedClassNames();
  44. }
  45. public static void assertTraces(
  46. int size,
  47. @ClosureParams(
  48. value = SimpleType.class,
  49. options = "io.opentelemetry.instrumentation.test.asserts.ListWriterAssert")
  50. @DelegatesTo(value = InMemoryExporterAssert.class, strategy = Closure.DELEGATE_FIRST)
  51. Closure spec) {
  52. InMemoryExporterAssert.assertTraces(AgentTestingExporterAccess::getExportedSpans, size, spec);
  53. }
  54. }