Browse Source

Fix sporadic test failure (#386)

Trask Stalnaker 4 years ago
parent
commit
55211ccd73

+ 20 - 0
testing/src/test/groovy/context/FieldBackedProviderTest.groovy

@@ -40,6 +40,10 @@ import static context.ContextTestInstrumentation.UntransformableKeyClass
 
 class FieldBackedProviderTest extends AgentTestRunner {
 
+  static {
+    System.setProperty("ota.integration.context-test-instrumentation.enabled", "true")
+  }
+
   @Override
   boolean onInstrumentationError(
     final String typeName,
@@ -206,6 +210,22 @@ class FieldBackedProviderTest extends AgentTestRunner {
  */
 @Requires({ "false" == System.getProperty("ota.trace.runtime.context.field.injection") })
 class FieldBackedProviderFieldInjectionDisabledTest extends AgentTestRunner {
+
+  static {
+    System.setProperty("ota.integration.context-test-instrumentation.enabled", "true")
+  }
+
+  @Override
+  boolean onInstrumentationError(
+      final String typeName,
+      final ClassLoader classLoader,
+      final JavaModule module,
+      final boolean loaded,
+      final Throwable throwable) {
+    // Incorrect* classes assert on incorrect api usage. Error expected.
+    return !(typeName.startsWith(ContextTestInstrumentation.getName() + '$Incorrect') && throwable.getMessage().startsWith("Incorrect Context Api Usage detected."))
+  }
+
   def "Check that structure is not modified when structure modification is disabled"() {
     setup:
     def keyClass = ContextTestInstrumentation.DisabledKeyClass

+ 9 - 1
testing/src/test/java/context/ContextTestInstrumentation.java

@@ -32,7 +32,15 @@ import net.bytebuddy.matcher.ElementMatcher;
 @AutoService(Instrumenter.class)
 public class ContextTestInstrumentation extends Instrumenter.Default {
   public ContextTestInstrumentation() {
-    super("context-test-isntrumenter1");
+    super("context-test-instrumentation");
+  }
+
+  @Override
+  protected boolean defaultEnabled() {
+    // this instrumentation is disabled by default, so that it doesn't cause sporadic failures
+    // in other tests that do override AgentTestRunner.onInstrumentationError() to filter out
+    // the instrumentation errors that this instrumentation purposefully introduces
+    return false;
   }
 
   @Override

+ 2 - 0
testing/testing.gradle

@@ -62,3 +62,5 @@ tasks.register("testDisabledFieldInjection", Test) {
   include "context/FieldBackedProviderFieldInjectionDisabledTest.class"
 }
 test.dependsOn(testDisabledFieldInjection)
+
+test.forkEvery = 1