diff --git a/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/BaseDecoratorTest.groovy b/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/BaseDecoratorTest.groovy index b2686d6257c..354a9c6bc4f 100644 --- a/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/BaseDecoratorTest.groovy +++ b/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/BaseDecoratorTest.groovy @@ -5,11 +5,16 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities import datadog.trace.bootstrap.instrumentation.api.Tags +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.test.util.DDSpecification import spock.lang.Shared class BaseDecoratorTest extends DDSpecification { + def setupSpec() { + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + @Shared def decorator = newDecorator() diff --git a/dd-java-agent/agent-installer/src/test/groovy/datadog/trace/agent/test/DefaultInstrumenterForkedTest.groovy b/dd-java-agent/agent-installer/src/test/groovy/datadog/trace/agent/test/DefaultInstrumenterForkedTest.groovy index 9be765964fe..a3500c61ede 100644 --- a/dd-java-agent/agent-installer/src/test/groovy/datadog/trace/agent/test/DefaultInstrumenterForkedTest.groovy +++ b/dd-java-agent/agent-installer/src/test/groovy/datadog/trace/agent/test/DefaultInstrumenterForkedTest.groovy @@ -2,6 +2,7 @@ package datadog.trace.agent.test import datadog.environment.EnvironmentVariables import datadog.trace.agent.tooling.InstrumenterModule +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers import datadog.trace.agent.tooling.bytebuddy.outline.TypePoolFacade import datadog.trace.test.util.DDSpecification @@ -12,6 +13,10 @@ class DefaultInstrumenterForkedTest extends DDSpecification { DDElementMatchers.registerAsSupplier() } + def setupSpec() { + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def "default enabled"() { setup: def target = new TestDefaultInstrumenter("test") diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/InstrumenterIndexTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/InstrumenterIndexTest.groovy index 09ee41ea1cd..4f220451c38 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/InstrumenterIndexTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/InstrumenterIndexTest.groovy @@ -1,10 +1,15 @@ package datadog.trace.agent.tooling +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.test.util.DDSpecification import spock.lang.Shared class InstrumenterIndexTest extends DDSpecification { + def setupSpec() { + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + @Shared def unknownInstrumentation = new InstrumenterModule('unknown') {} diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/csi/BaseCallSiteTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/csi/BaseCallSiteTest.groovy index 8d611b92ca3..1bc45f31015 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/csi/BaseCallSiteTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/csi/BaseCallSiteTest.groovy @@ -4,6 +4,7 @@ import datadog.trace.agent.tooling.bytebuddy.csi.Advices import datadog.trace.agent.tooling.bytebuddy.csi.CallSiteInstrumentation import datadog.trace.agent.tooling.bytebuddy.csi.CallSiteSupplier import datadog.trace.agent.tooling.bytebuddy.csi.CallSiteTransformer +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.test.util.DDSpecification import groovy.transform.CompileDynamic import net.bytebuddy.agent.builder.AgentBuilder @@ -31,6 +32,10 @@ import static net.bytebuddy.matcher.ElementMatchers.named @CompileDynamic class BaseCallSiteTest extends DDSpecification { + def setupSpec() { + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + protected CallSites mockCallSites(final byte type = BEFORE, final CallSiteAdvice advice, final Pointcut target, final String... helpers) { return Stub(CallSites) { accept(_ as CallSites.Container) >> { diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/muzzle/MuzzleVersionScanPluginTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/muzzle/MuzzleVersionScanPluginTest.groovy index 579c51bb8ed..48003a016e3 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/muzzle/MuzzleVersionScanPluginTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/muzzle/MuzzleVersionScanPluginTest.groovy @@ -2,6 +2,7 @@ package datadog.trace.agent.tooling.muzzle import datadog.trace.agent.tooling.Instrumenter import datadog.trace.agent.tooling.InstrumenterModule +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.test.util.DDSpecification import net.bytebuddy.matcher.ElementMatcher @@ -20,6 +21,10 @@ import static datadog.trace.agent.tooling.muzzle.TestInstrumentationClasses.Vali class MuzzleVersionScanPluginTest extends DDSpecification { + def setupSpec() { + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def "test assertInstrumentationMuzzled advice"() { setup: def instrumentationLoader = new ServiceEnabledClassLoader(InstrumenterModule, diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy index 0b9fb35e563..4561236e6ff 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy @@ -10,6 +10,7 @@ import static datadog.trace.api.config.TraceInstrumentationConfig.CODE_ORIGIN_FO import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious import static datadog.trace.util.AgentThreadFactory.AgentThread.TASK_SCHEDULER + import ch.qos.logback.classic.Level import ch.qos.logback.classic.util.ContextInitializer import com.datadog.debugger.agent.ClassesToRetransformFinder diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/AgentTestRunnerTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/AgentTestRunnerTest.groovy index c21a1e0b7f1..4dcdb0dd9d7 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/AgentTestRunnerTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/AgentTestRunnerTest.groovy @@ -1,5 +1,6 @@ import com.google.common.reflect.ClassPath import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.agent.test.BootstrapClasspathSetupListener import datadog.trace.api.GlobalTracer import datadog.trace.api.Platform @@ -26,6 +27,8 @@ class AgentTestRunnerTest extends InstrumentationSpecification { @Override void configurePreAgent() { super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) injectSysConfig(TRACE_CLASSES_EXCLUDE, "config.exclude.packagename.*, config.exclude.SomeClass,config.exclude.SomeClass\$NestedClass") } diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/ConfigResetTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/ConfigResetTest.groovy index d0649db5008..6f4030d954d 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/ConfigResetTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/ConfigResetTest.groovy @@ -1,10 +1,18 @@ import datadog.environment.EnvironmentVariables import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.api.Config import spock.lang.Shared class ConfigResetTest extends InstrumentationSpecification { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + @Shared def sharedInstance = checkStaticAssertions() diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/InstrumentOldBytecode.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/InstrumentOldBytecode.groovy index cc3f1e1f83d..daca6092110 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/InstrumentOldBytecode.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/InstrumentOldBytecode.groovy @@ -1,7 +1,16 @@ import com.ibm.as400.resource.ResourceLevel import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper class InstrumentOldBytecode extends InstrumentationSpecification { + + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def "can instrument old bytecode"() { expect: new ResourceLevel().toString() == "instrumented" diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/TooManyInvocationsErrorListenerTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/TooManyInvocationsErrorListenerTest.groovy index 03d0687e3a7..69e5b47b1b1 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/TooManyInvocationsErrorListenerTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/TooManyInvocationsErrorListenerTest.groovy @@ -1,10 +1,18 @@ import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.agent.test.TestClassShadowingExtension import org.spockframework.mock.* import org.spockframework.mock.runtime.MockInvocation class TooManyInvocationsErrorListenerTest extends InstrumentationSpecification { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + @SuppressWarnings('GroovyAccessibility') void 'test that listener modifies failure'() { setup: diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/TraceCorrelationTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/TraceCorrelationTest.groovy index ba0d4f6efde..91aa98755c3 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/TraceCorrelationTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/TraceCorrelationTest.groovy @@ -1,4 +1,5 @@ import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.api.CorrelationIdentifier import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_128_BIT_TRACEID_LOGGING_ENABLED @@ -6,6 +7,13 @@ import static datadog.trace.api.config.TracerConfig.TRACE_128_BIT_TRACEID_GENERA class TraceCorrelationTest extends InstrumentationSpecification { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def "access trace correlation only under trace"() { when: def span = TEST_TRACER.startSpan("test", "myspan") @@ -28,6 +36,8 @@ class Trace128bitCorrelationTest extends TraceCorrelationTest { @Override void configurePreAgent() { super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) injectSysConfig(TRACE_128_BIT_TRACEID_GENERATION_ENABLED, "true") injectSysConfig(TRACE_128_BIT_TRACEID_LOGGING_ENABLED, "true") } diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/context/FieldInjectionForkedTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/context/FieldInjectionForkedTest.groovy index 6736c3cc503..25dfc0fe52f 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/context/FieldInjectionForkedTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/context/FieldInjectionForkedTest.groovy @@ -2,6 +2,7 @@ package context import datadog.trace.agent.test.AbortTransformationException import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.agent.test.utils.ClasspathUtils import datadog.trace.api.InstrumenterConfig import datadog.trace.test.util.GCUtils @@ -32,6 +33,13 @@ import static context.FieldInjectionTestInstrumentation.ValidSerializableKeyClas class FieldInjectionForkedTest extends InstrumentationSpecification { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + @Override void onDiscovery(String typeName, ClassLoader classLoader, JavaModule module, boolean loaded) { if (typeName?.endsWith("UntransformableKeyClass")) { @@ -219,6 +227,8 @@ class FieldInjectionForkedTest extends InstrumentationSpecification { class FieldInjectionDisabledForkedTest extends InstrumentationSpecification { void configurePreAgent() { super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) injectSysConfig("dd.trace.runtime.context.field.injection", "false") } diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/excludefilter/ExcludeFilterForkedTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/excludefilter/ExcludeFilterForkedTest.groovy index 25083625484..d536739c68a 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/excludefilter/ExcludeFilterForkedTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/excludefilter/ExcludeFilterForkedTest.groovy @@ -1,6 +1,7 @@ package excludefilter import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.FieldBackedContextStores import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter @@ -18,6 +19,13 @@ import static excludefilter.ExcludeFilterTestInstrumentation.RunnableExcludedExe class ExcludeFilterForkedTest extends InstrumentationSpecification { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def "test ExcludeFilter #runnable.class.name"() { expect: ExcludeFilter.exclude(RUNNABLE, runnable) == excluded diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/locator/ClassInjectingForkedTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/locator/ClassInjectingForkedTest.groovy index a456f873cf6..6df0d5eb259 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/locator/ClassInjectingForkedTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/locator/ClassInjectingForkedTest.groovy @@ -1,6 +1,7 @@ package locator import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import net.bytebuddy.agent.builder.AgentBuilder import net.bytebuddy.description.type.TypeDescription import net.bytebuddy.dynamic.DynamicType @@ -16,6 +17,8 @@ class ClassInjectingForkedTest extends InstrumentationSpecification { @Override protected void configurePreAgent() { super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) // Since this method is not at all configurePreAgent, but more like // configurePreAgentAndOhByTheWayBeforeEveryTest we need to not install diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/locator/ClassInjectingLoadClassDisabledForkedTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/locator/ClassInjectingLoadClassDisabledForkedTest.groovy index a9f36303a92..50598422da7 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/locator/ClassInjectingLoadClassDisabledForkedTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/locator/ClassInjectingLoadClassDisabledForkedTest.groovy @@ -1,6 +1,7 @@ package locator import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import net.bytebuddy.agent.builder.AgentBuilder import net.bytebuddy.description.type.TypeDescription import net.bytebuddy.dynamic.DynamicType @@ -19,6 +20,8 @@ class ClassInjectingLoadClassDisabledForkedTest extends InstrumentationSpecifica @Override protected void configurePreAgent() { super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) injectSysConfig("dd.resolver.use.loadclass", "false") diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/server/HttpProxyTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/server/HttpProxyTest.groovy index fb5d04791d2..3f7a5cc41cd 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/server/HttpProxyTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/server/HttpProxyTest.groovy @@ -1,6 +1,7 @@ package server import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.agent.test.server.http.HttpProxy import datadog.trace.agent.test.utils.OkHttpUtils import okhttp3.MediaType @@ -21,6 +22,13 @@ import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer }) class HttpProxyTest extends InstrumentationSpecification { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + @AutoCleanup @Shared def proxy = new HttpProxy() diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/server/HttpServerTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/server/HttpServerTest.groovy index 84510eeab1d..16da158c2c2 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/server/HttpServerTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/server/HttpServerTest.groovy @@ -6,6 +6,7 @@ import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace import datadog.communication.util.IOUtils import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.agent.test.utils.OkHttpUtils import okhttp3.MultipartBody import okhttp3.Request @@ -14,6 +15,14 @@ import spock.lang.Shared /* Don't actually need AgentTestRunner, but it messes up the classloader for AgentTestRunnerTest if this runs first. */ class HttpServerTest extends InstrumentationSpecification { + + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + @Shared def client = OkHttpUtils.client() diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/synthetic/SyntheticForkedTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/synthetic/SyntheticForkedTest.groovy index ffeb41b6196..0b9f545916e 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/synthetic/SyntheticForkedTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/synthetic/SyntheticForkedTest.groovy @@ -1,9 +1,17 @@ package synthetic import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper abstract class SyntheticForkedTestBase extends InstrumentationSpecification { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def "test Synthetic methods"() { expect: SyntheticTestInstrumentation.Compute.result(i) == computed(i) @@ -25,6 +33,8 @@ class SyntheticForkedTest extends SyntheticForkedTestBase { @Override protected void configurePreAgent() { super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) System.setProperty("synthetic.test.enabled", "true") } diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/utils/PortUtilsTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/utils/PortUtilsTest.groovy index 511e6929557..88be11bf2df 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/utils/PortUtilsTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/utils/PortUtilsTest.groovy @@ -1,11 +1,20 @@ package utils import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.agent.test.utils.PortUtils import java.util.concurrent.TimeUnit class PortUtilsTest extends InstrumentationSpecification { + + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def "expect waitForPortToOpen succeed"() { given: int port = PortUtils.randomOpenPort() diff --git a/dd-java-agent/instrumentation-testing/src/test/groovy/utils/ThreadUtilsTest.groovy b/dd-java-agent/instrumentation-testing/src/test/groovy/utils/ThreadUtilsTest.groovy index dbd0f8041ea..f6736550716 100644 --- a/dd-java-agent/instrumentation-testing/src/test/groovy/utils/ThreadUtilsTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/test/groovy/utils/ThreadUtilsTest.groovy @@ -1,6 +1,7 @@ package utils import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.test.util.ThreadUtils import org.spockframework.runtime.ConditionNotSatisfiedError import spock.lang.FailsWith @@ -11,6 +12,13 @@ import java.util.concurrent.atomic.AtomicInteger class ThreadUtilsTest extends InstrumentationSpecification { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation - test module loads test instrumentations with fake names + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + @Shared def counter = new AtomicInteger() diff --git a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/groovy/MeasuredConfigTest.groovy b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/groovy/MeasuredConfigTest.groovy index c3f540b4d38..6ba58ea4a1c 100644 --- a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/groovy/MeasuredConfigTest.groovy +++ b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/groovy/MeasuredConfigTest.groovy @@ -1,4 +1,5 @@ import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import java.util.concurrent.Callable @@ -8,6 +9,7 @@ class MeasuredConfigTest extends InstrumentationSpecification { @Override void configurePreAgent() { super.configurePreAgent() + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) injectSysConfig("dd.trace.methods", "package.ClassName[method1,method2];${ConfigTracedCallable.name}[call];${ConfigTracedCallable2.name}[*];") injectSysConfig("dd.measure.methods", "package.ClassName[method1,method2];${ConfigTracedCallable.name}[call];${ConfigTracedCallable2.name}[*];") } diff --git a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/groovy/TraceConfigTest.groovy b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/groovy/TraceConfigTest.groovy index f1c0874e670..d5e556e1c36 100644 --- a/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/groovy/TraceConfigTest.groovy +++ b/dd-java-agent/instrumentation/datadog/tracing/trace-annotation/src/test/groovy/TraceConfigTest.groovy @@ -1,4 +1,5 @@ import datadog.trace.agent.test.InstrumentationSpecification +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import java.util.concurrent.Callable @@ -8,6 +9,7 @@ class TraceConfigTest extends InstrumentationSpecification { @Override void configurePreAgent() { super.configurePreAgent() + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) injectSysConfig("dd.trace.methods", "package.ClassName[method1,method2];${ConfigTracedCallable.name}[call];${ConfigTracedCallable2.name}[*];${Animal.name}[animalSound];${DictionaryElement.name}[*];${Floor.name}[setNumber];${Mammal.name}[*]") } diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/Elasticsearch2NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/Elasticsearch2NodeClientTest.groovy index 59bea7669e1..408d0dcdabe 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/Elasticsearch2NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/Elasticsearch2NodeClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -29,8 +30,14 @@ class Elasticsearch2NodeClientTest extends InstrumentationSpecification { def client = testNode.client() - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/Elasticsearch2TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/Elasticsearch2TransportClientTest.groovy index e04c446c81e..cbd5b5e1b38 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/Elasticsearch2TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/Elasticsearch2TransportClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -32,8 +33,14 @@ class Elasticsearch2TransportClientTest extends InstrumentationSpecification { @Shared TransportClient client - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy index 2e98f8166b5..b39626c161f 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy @@ -3,6 +3,7 @@ package springdata import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.springframework.context.ApplicationContext @@ -20,6 +21,13 @@ class Elasticsearch2SpringRepositoryTest extends InstrumentationSpecification { @Shared DocRepository repo = applicationContext.getBean(DocRepository) + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def cleanup() { def cleanupSpan = runUnderTrace("cleanup") { repo.refresh() diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy index 62b1b909f07..cb4002309eb 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/latestDepTest/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy @@ -3,6 +3,7 @@ package springdata import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.search.SearchResponse @@ -36,8 +37,14 @@ class Elasticsearch2SpringTemplateTest extends InstrumentationSpecification { @Shared ElasticsearchTemplate template - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2NodeClientTest.groovy index 6e419097bb9..cc066bcd822 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2NodeClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.naming.VersionedNamingTestBase import datadog.trace.api.Config +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.api.DDSpanTypes import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky @@ -26,8 +27,14 @@ abstract class Elasticsearch2NodeClientTest extends VersionedNamingTestBase { def client = testNode.client() - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2TransportClientTest.groovy index a765a46a229..fa2a5d76ccc 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2TransportClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.naming.VersionedNamingTestBase import datadog.trace.api.Config +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.api.DDSpanTypes import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky @@ -34,8 +35,14 @@ abstract class Elasticsearch2TransportClientTest extends VersionedNamingTestBase @Shared TransportClient client - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy index 141d8476270..3f3e0853c66 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy @@ -3,6 +3,7 @@ package springdata import datadog.trace.agent.test.naming.VersionedNamingTestBase import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.springframework.context.ApplicationContext @@ -29,6 +30,13 @@ abstract class Elasticsearch2SpringRepositoryTest extends VersionedNamingTestBas TEST_WRITER.waitUntilReported(cleanupSpan) } + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { // force putting the mapping here to avoid flakiness repo.index(new Doc()) diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy index 6d85d26507b..d5227c37dfa 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy @@ -2,6 +2,7 @@ package springdata import datadog.trace.agent.test.naming.VersionedNamingTestBase import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.search.SearchResponse @@ -35,8 +36,14 @@ abstract class Elasticsearch2SpringTemplateTest extends VersionedNamingTestBase @Shared ElasticsearchTemplate template - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5NodeClientTest.groovy index 198ed0e0b3b..996f7e3d34e 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5NodeClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -28,8 +29,14 @@ class Elasticsearch5NodeClientTest extends InstrumentationSpecification { def client = testNode.client() - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5TransportClientTest.groovy index f9e1637244a..82ed0d6d7a3 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5TransportClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -36,8 +37,14 @@ class Elasticsearch5TransportClientTest extends InstrumentationSpecification { @Shared TransportClient client - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53NodeClientTest.groovy index 06aedcae037..218f75e6454 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53NodeClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -28,8 +29,14 @@ class Elasticsearch53NodeClientTest extends InstrumentationSpecification { def client = testNode.client() - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53TransportClientTest.groovy index cf2afb15466..cb05afcc747 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53TransportClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -37,8 +38,14 @@ class Elasticsearch53TransportClientTest extends InstrumentationSpecification { @Shared String clusterName = UUID.randomUUID().toString() - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/springdata/Elasticsearch53SpringRepositoryTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/springdata/Elasticsearch53SpringRepositoryTest.groovy index c65155597cc..82f22c908e0 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/springdata/Elasticsearch53SpringRepositoryTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/springdata/Elasticsearch53SpringRepositoryTest.groovy @@ -2,6 +2,7 @@ package springdata import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.springframework.context.annotation.AnnotationConfigApplicationContext @@ -54,6 +55,13 @@ class Elasticsearch53SpringRepositoryTest extends InstrumentationSpecification { } } + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { repo.refresh() // lazy init cleanup() diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/springdata/Elasticsearch53SpringTemplateTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/springdata/Elasticsearch53SpringTemplateTest.groovy index b7c2664da3b..b047c5873cf 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/springdata/Elasticsearch53SpringTemplateTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-5.3/src/test/groovy/springdata/Elasticsearch53SpringTemplateTest.groovy @@ -3,6 +3,7 @@ package springdata import com.google.common.collect.ImmutableSet import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.search.SearchResponse @@ -46,8 +47,14 @@ class Elasticsearch53SpringTemplateTest extends InstrumentationSpecification { @Shared ElasticsearchTemplate template - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6NodeClientTest.groovy index 3845d1873eb..1171175820e 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6NodeClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -27,8 +28,14 @@ class Elasticsearch6NodeClientTest extends InstrumentationSpecification { def client = testNode.client() - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6TransportClientTest.groovy index 6df99841620..3fcc03496b5 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6TransportClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -35,6 +36,13 @@ class Elasticsearch6TransportClientTest extends InstrumentationSpecification { @Shared TransportClient client + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-7.3/src/test/groovy/Elasticsearch73NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-7.3/src/test/groovy/Elasticsearch73NodeClientTest.groovy index 6d9e5b44900..d3e192b3f82 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-7.3/src/test/groovy/Elasticsearch73NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-7.3/src/test/groovy/Elasticsearch73NodeClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -27,8 +28,14 @@ class Elasticsearch73NodeClientTest extends InstrumentationSpecification { def client = testNode.client() - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() println "ES work dir: $esWorkingDir" diff --git a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-7.3/src/test/groovy/Elasticsearch73TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-7.3/src/test/groovy/Elasticsearch73TransportClientTest.groovy index 32a4ea411cd..b2a19e0ad2e 100644 --- a/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-7.3/src/test/groovy/Elasticsearch73TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch/elasticsearch-transport/elasticsearch-transport-7.3/src/test/groovy/Elasticsearch73TransportClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest @@ -35,6 +36,13 @@ class Elasticsearch73TransportClientTest extends InstrumentationSpecification { @Shared TransportClient client + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { esWorkingDir = File.createTempDir("test-es-working-dir-", "") esWorkingDir.deleteOnExit() diff --git a/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleForkedTest.groovy b/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleForkedTest.groovy index 07f201d3cae..2fb36652a66 100644 --- a/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleForkedTest.groovy +++ b/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleForkedTest.groovy @@ -8,6 +8,7 @@ import static org.mule.runtime.api.util.MuleTestUtil.muleSpan import com.squareup.moshi.Moshi import com.squareup.moshi.Types import datadog.trace.agent.test.base.WithHttpServer +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.api.DDSpanTypes import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.core.DDSpan @@ -30,6 +31,9 @@ class MuleForkedTest extends WithHttpServer { @Override protected void configurePreAgent() { super.configurePreAgent() + // Opt out of strict config validation because this test loads HttpServerTestHandlerInstrumentation + // which uses the fake instrumentation name "mule4-http-server-test-handler" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) injectSysConfig("integration.mule.enabled", "true") } diff --git a/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleHttpServerForkedTest.groovy b/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleHttpServerForkedTest.groovy index c102754dc74..c5b060a2f2b 100644 --- a/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleHttpServerForkedTest.groovy +++ b/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleHttpServerForkedTest.groovy @@ -4,6 +4,7 @@ import static org.mule.runtime.api.util.MuleTestUtil.muleSpan import datadog.trace.agent.test.asserts.TraceAssert import datadog.trace.agent.test.base.HttpServerTest +import datadog.trace.config.inversion.ConfigHelper import spock.lang.Shared class MuleHttpServerForkedTest extends HttpServerTest { @@ -56,6 +57,7 @@ class MuleHttpServerForkedTest extends HttpServerTest { @Override protected void configurePreAgent() { super.configurePreAgent() + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) injectSysConfig("integration.mule.enabled", "true") } diff --git a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/test/groovy/OpensearchNodeClientTest.groovy b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/test/groovy/OpensearchNodeClientTest.groovy index 488b808d600..153a764ac71 100644 --- a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/test/groovy/OpensearchNodeClientTest.groovy +++ b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/test/groovy/OpensearchNodeClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.opensearch.action.admin.cluster.health.ClusterHealthRequest @@ -33,8 +34,14 @@ class OpensearchNodeClientTest extends InstrumentationSpecification { false } - def setupSpec() { + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { aosWorkingDir = File.createTempDir("test-aos-working-dir-", "") aosWorkingDir.deleteOnExit() println "AOS work dir: $aosWorkingDir" diff --git a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/test/groovy/OpensearchTransportClientTest.groovy b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/test/groovy/OpensearchTransportClientTest.groovy index 273802eb278..42f23f38ea2 100644 --- a/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/test/groovy/OpensearchTransportClientTest.groovy +++ b/dd-java-agent/instrumentation/opensearch/opensearch-transport-1.0/src/test/groovy/OpensearchTransportClientTest.groovy @@ -1,5 +1,6 @@ import datadog.trace.agent.test.InstrumentationSpecification import datadog.trace.api.DDSpanTypes +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.bootstrap.instrumentation.api.Tags import datadog.trace.test.util.Flaky import org.opensearch.action.admin.cluster.health.ClusterHealthRequest @@ -40,6 +41,13 @@ class OpensearchTransportClientTest extends InstrumentationSpecification { false } + @Override + protected void configurePreAgent() { + super.configurePreAgent() + // Opt out of strict config validation because this test loads a BreakTrace test instrumentation with fake name "test" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) + } + def setupSpec() { aosWorkingDir = File.createTempDir("test-aos-working-dir-", "") aosWorkingDir.deleteOnExit() diff --git a/dd-java-agent/instrumentation/wildfly-9.0/src/test/groovy/WildFlyForkedTest.groovy b/dd-java-agent/instrumentation/wildfly-9.0/src/test/groovy/WildFlyForkedTest.groovy index 6ababdb5f24..4c2eb9663a3 100644 --- a/dd-java-agent/instrumentation/wildfly-9.0/src/test/groovy/WildFlyForkedTest.groovy +++ b/dd-java-agent/instrumentation/wildfly-9.0/src/test/groovy/WildFlyForkedTest.groovy @@ -1,5 +1,6 @@ import datadog.environment.JavaVirtualMachine import datadog.trace.agent.test.base.WithHttpServer +import datadog.trace.config.inversion.ConfigHelper import datadog.trace.agent.test.naming.TestingGenericHttpNamingConventions import datadog.trace.agent.test.utils.OkHttpUtils import datadog.trace.api.DDSpanTypes @@ -17,6 +18,7 @@ import test.TestServlet JavaVirtualMachine.isJavaVersionAtLeast(22) }) class WildFlyForkedTest extends WithHttpServer implements TestingGenericHttpNamingConventions.ServerV0 { + @Override EmbeddedWildfly startServer(int port) { // create the archive @@ -39,6 +41,9 @@ class WildFlyForkedTest extends WithHttpServer implements Testi @Override protected void configurePreAgent() { super.configurePreAgent() + // Opt out of strict config validation because this test loads ModulePatchInstrumentation + // which uses the fake instrumentation name "jboss-module-patch" + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.TEST) // otherwise there are differences in setting the resource name across wildfly versions injectSysConfig("undertow.legacy.tracing.enabled", "false") } diff --git a/utils/test-utils/build.gradle.kts b/utils/test-utils/build.gradle.kts index 1f975c4ad45..6ec6b9c66db 100644 --- a/utils/test-utils/build.gradle.kts +++ b/utils/test-utils/build.gradle.kts @@ -9,6 +9,7 @@ dependencies { api(libs.bytebuddyagent) api(project(":components:environment")) + api(project(":utils:config-utils")) api(group = "commons-fileupload", name = "commons-fileupload", version = "1.5") compileOnly(libs.junit.jupiter) diff --git a/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy b/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy index e7967d38006..3e18712f52d 100644 --- a/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy +++ b/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy @@ -1,6 +1,7 @@ package datadog.trace.test.util import datadog.environment.EnvironmentVariables +import datadog.trace.config.inversion.ConfigHelper import de.thetaphi.forbiddenapis.SuppressForbidden import java.lang.reflect.Constructor import java.lang.reflect.Field @@ -21,6 +22,7 @@ abstract class DDSpecification extends Specification { private static Constructor instConfigConstructor private static Field configInstanceField private static Constructor configConstructor + private static ConfigHelper.StrictnessPolicy previousStrictnessPolicy static { allowContextTesting() @@ -90,6 +92,17 @@ abstract class DDSpecification extends Specification { } } + private void enableStrictTestPolicy() { + previousStrictnessPolicy = ConfigHelper.get().configInversionStrictFlag() + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT_TEST) + } + + private void restoreStrictnessPolicy() { + if (previousStrictnessPolicy != null) { + ConfigHelper.get().setConfigInversionStrict(previousStrictnessPolicy) + } + } + private void saveProperties() { originalSystemProperties = new Properties() originalSystemProperties.putAll(System.properties) @@ -117,9 +130,11 @@ abstract class DDSpecification extends Specification { } saveProperties() + enableStrictTestPolicy() } void cleanupSpec() { + restoreStrictnessPolicy() restoreProperties() assert EnvironmentVariables.getAll().findAll { it.key.startsWith("DD_") }.isEmpty() @@ -154,6 +169,12 @@ abstract class DDSpecification extends Specification { } void cleanup() { + // Assert no unsupported configs were encountered during the test + def unsupported = ConfigHelper.get().drainUnsupportedConfigs() + assert unsupported.isEmpty(): "Unsupported configurations found during test. " + + "Add these to metadata/supported-configurations.json or opt out with StrictnessPolicy.TEST:\n " + + unsupported.join("\n ") + environmentVariables.clear() restoreProperties()