0

Here is the unit test causing crashes on all others unit tests when launched as coverage configuration :

public class JiraBcel362TestCase extends AbstractTestCase {
    @Test
    public void testProcessConstantPoolWithCondyEntry() throws ClassNotFoundException {
        final JavaClass clazz = getTestJavaClass("issue362.Bcel362");
        final ConstantPoolGen constantPoolGen = assertDoesNotThrow(() -> new ConstantPoolGen(clazz.getConstantPool()));
        assertTrue(constantPoolGen.lookupUtf8("$jacocoData") != -1);
    }
}

An input class for this test :

package issue362;

public class Bcel362 {
  public static void main(String[] args) {
    System.out.println("Hello world!");
  }
}

The test runs fine with :

  • Run As -> JUnit Test.
  • Command line mvn test

When any other test of the project is run with Coverage As -> JUnit Test, I have this crash:

Error while loading coverage session (code 5001).
Error while analyzing package fragment root java at F/commons-bcel/target/test-classes (code 5007).
Error while analyzing Bcel362.class with JaCoCo 0.8.8.202204050719/5dcf34a.

Only after deleting JiraBcel362TestCase and Bcel362, I manage to run coverage sessions on other unit tests.

Stack trace related to the crash is found in the Error Log view in Eclipse.

org.eclipse.core.runtime.CoreException: Error while analyzing package fragment root java at F/commons-bcel/target/test-classes (code 5007).
    at org.eclipse.eclemma.internal.core.analysis.PackageFragementRootAnalyzer.analyzeInternal(PackageFragementRootAnalyzer.java:79)
    at org.eclipse.eclemma.internal.core.analysis.PackageFragementRootAnalyzer.analyze(PackageFragementRootAnalyzer.java:51)
    at org.eclipse.eclemma.internal.core.analysis.SessionAnalyzer.processPackageFragmentRoot(SessionAnalyzer.java:100)
    at org.eclipse.eclemma.internal.core.analysis.SessionAnalyzer.processSession(SessionAnalyzer.java:80)
    at org.eclipse.eclemma.internal.core.JavaCoverageLoader$LoadSessionJob.run(JavaCoverageLoader.java:83)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.io.IOException: Error while analyzing Bcel362.class with JaCoCo 0.8.8.202204050719/5dcf34a.
    at org.jacoco.core.analysis.Analyzer.analyzerError(Analyzer.java:163)
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:135)
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:158)
    at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:195)
    at org.eclipse.eclemma.internal.core.analysis.ResourceTreeWalker.walkResource(ResourceTreeWalker.java:63)
    at org.eclipse.eclemma.internal.core.analysis.ResourceTreeWalker.walkResource(ResourceTreeWalker.java:75)
    at org.eclipse.eclemma.internal.core.analysis.ResourceTreeWalker.walkResource(ResourceTreeWalker.java:75)
    at org.eclipse.eclemma.internal.core.analysis.ResourceTreeWalker.walk(ResourceTreeWalker.java:51)
    at org.eclipse.eclemma.internal.core.analysis.PackageFragementRootAnalyzer.analyzeInternal(PackageFragementRootAnalyzer.java:74)
    ... 5 more
Caused by: java.lang.IllegalStateException: Cannot process instrumented class issue362/Bcel362. Please supply original non-instrumented classes.
    at org.jacoco.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:238)
    at org.jacoco.core.internal.analysis.ClassAnalyzer.visitMethod(ClassAnalyzer.java:98)
    at org.jacoco.core.internal.flow.ClassProbesAdapter.visitMethod(ClassProbesAdapter.java:66)
    at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1353)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:744)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:424)
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:117)
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:133)
    ... 12 more

Not sure what is meant here by Please supply original non-instrumented classes especially considering that coverage session runs fine in command-line and in CI.

The javap output of Bcel362 :

Compiled from "Bcel362.java"
public class issue362.Bcel362 {
  public issue362.Bcel362();
    Code:
       0: ldc           #42 // Dynamic #0:$jacocoData:Ljava/lang/Object;
       2: checkcast     #44 // class "[Z"
       5: astore_1
       6: aload_0
       7: invokespecial #1  // Method java/lang/Object."<init>":()V
      10: aload_1
      11: iconst_0
      12: iconst_1
      13: bastore
      14: return

  public static void main(java.lang.String[]);
    Code:
       0: ldc           #42 // Dynamic #0:$jacocoData:Ljava/lang/Object;
       2: checkcast     #44 // class "[Z"
       5: astore_1
       6: getstatic     #7  // Field java/lang/System.out:Ljava/io/PrintStream;
       9: ldc           #13 // String Hello world!
      11: invokevirtual #15 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      14: aload_1
      15: iconst_1
      16: iconst_1
      17: bastore
      18: return

  private static boolean[] $jacocoInit(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.Class);
    Code:
       0: ldc2_w        #45 // long -7406015067494855438l
       3: ldc           #47 // String issue362/Bcel362
       5: iconst_2
       6: invokestatic  #53 // Method org/jacoco/agent/rt/internal_b6258fc/Offline.getProbes:(JLjava/lang/String;I)[Z
       9: areturn
}
Sybuser
  • 735
  • 10
  • 27

0 Answers0