From fe93a14aefd360610b5be8342f89b853bf1dbfdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Tue, 3 Aug 2021 16:49:42 +0200 Subject: [PATCH 1/6] Add online jacoco runner prototype. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Silva --- index.html | 115 +++++++ pom.xml | 7 + .../stamp_project/testrunner/EntryPoint.java | 101 ++++++- ...ineCoveredTestResultPerTestMethodImpl.java | 281 ++++++++++++++++++ ...CoveredTestResultsPerJUnit4TestMethod.java | 128 ++++++++ .../coverage/JUnit4OnlineJacocoRunner.java | 50 ++++ .../runner/coverage/JacocoOnlineRunner.java | 53 ++++ .../testrunner/EntryPointTest.java | 30 ++ 8 files changed, 755 insertions(+), 10 deletions(-) create mode 100644 index.html create mode 100644 src/main/java/eu/stamp_project/testrunner/listener/impl/OnlineCoveredTestResultPerTestMethodImpl.java create mode 100644 src/main/java/eu/stamp_project/testrunner/listener/junit4/OnlineCoveredTestResultsPerJUnit4TestMethod.java create mode 100644 src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4OnlineJacocoRunner.java create mode 100644 src/main/java/eu/stamp_project/testrunner/runner/coverage/JacocoOnlineRunner.java diff --git a/index.html b/index.html new file mode 100644 index 00000000..f72e6981 --- /dev/null +++ b/index.html @@ -0,0 +1,115 @@ + + + + + + + + JaCoCo - Java Code Coverage Library + + + + +
+ +

JaCoCo - Java Code Coverage Library

+ +

+ JaCoCo is a free Java code coverage library distributed under the + Eclipse Public License. Check + http://www.jacoco.org/jacoco for updates and feedback. +

+ +

+ This is the distribution of version 0.8.7.202105040129 created on + 2021/05/04 based on commit + d19ea595a67af6f16d76b49ccdc12858c3570298. +

+ +

Contents

+ + + +

+ The JaCoCo distribution contains the following libraries in the + ./lib folder: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileOSGi BundleDescriptionDependencies
jacocoagent.jarnoJava agent for execution data recording- (all dependencies included)
jacocoant.jarnoJaCoCo Ant tasksAnt (all other dependencies included)
jacococli.jarnoJaCoCo Command Line Interface- (all dependencies included)
org.jacoco.agent_0.8.7.202105040129.jaryesJaCoCo agent-
org.jacoco.core_0.8.7.202105040129.jaryesJaCoCo coreASM
org.jacoco.report_0.8.7.202105040129.jaryesJaCoCo reportingorg.jacoco.core, ASM
org.jacoco.ant_0.8.7.202105040129.jaryesJaCoCo Ant tasksorg.jacoco.core, org.jacoco.agent, org.jacoco.report, ASM, Ant
+ +

+ All libraries as well as the the JaCoCo Maven plug-in + are also available from the Maven repository. +

+ +
+ + + + diff --git a/pom.xml b/pom.xml index 396779b7..89a35061 100644 --- a/pom.xml +++ b/pom.xml @@ -115,6 +115,13 @@ 0.8.7 + + org.jacoco + org.jacoco.agent + runtime + 0.8.7 + + junit diff --git a/src/main/java/eu/stamp_project/testrunner/EntryPoint.java b/src/main/java/eu/stamp_project/testrunner/EntryPoint.java index 7498eadf..4b7ee81c 100644 --- a/src/main/java/eu/stamp_project/testrunner/EntryPoint.java +++ b/src/main/java/eu/stamp_project/testrunner/EntryPoint.java @@ -1,14 +1,8 @@ package eu.stamp_project.testrunner; import eu.stamp_project.mutationtest.descartes.DescartesMutationEngine; -import eu.stamp_project.testrunner.listener.Coverage; -import eu.stamp_project.testrunner.listener.CoveragePerTestMethod; -import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; -import eu.stamp_project.testrunner.listener.TestResult; -import eu.stamp_project.testrunner.listener.impl.CoverageImpl; -import eu.stamp_project.testrunner.listener.impl.CoveragePerTestMethodImpl; -import eu.stamp_project.testrunner.listener.impl.CoveredTestResultPerTestMethodImpl; -import eu.stamp_project.testrunner.listener.impl.TestResultImpl; +import eu.stamp_project.testrunner.listener.*; +import eu.stamp_project.testrunner.listener.impl.*; import eu.stamp_project.testrunner.listener.junit4.JUnit4Coverage; import eu.stamp_project.testrunner.listener.pit.AbstractParser; import eu.stamp_project.testrunner.listener.pit.AbstractPitResult; @@ -17,6 +11,7 @@ import eu.stamp_project.testrunner.runner.pit.PitRunner; import eu.stamp_project.testrunner.utils.ConstantsHelper; import org.apache.commons.io.FileUtils; +import org.jacoco.agent.rt.RT; import org.jacoco.core.runtime.IRuntime; import org.junit.jupiter.api.extension.ExtensionContext; import org.objectweb.asm.ClassReader; @@ -567,7 +562,88 @@ public static CoveredTestResultPerTestMethod runCoveredTestResultPerTestMethods( return load; } - /* COMPUTE MUTATION SCORE WITH PIT API */ + /* COMPUTE ONLINE COVERED TEST RESULT PER TEST METHOD API */ + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String fullQualifiedNameOfTestClass) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, + new String[]{fullQualifiedNameOfTestClass}, new String[0]); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String fullQualifiedNameOfTestClass, String testMethodName) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, + new String[]{fullQualifiedNameOfTestClass}, new String[]{testMethodName}); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String fullQualifiedNameOfTestClass, String[] testMethodNames) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, + new String[]{fullQualifiedNameOfTestClass}, testMethodNames); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String[] fullQualifiedNameOfTestClasses) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, fullQualifiedNameOfTestClasses, + new String[0]); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String[] fullQualifiedNameOfTestClasses, String[] methodNames) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods( + classpath, + Collections.singletonList(targetProjectClasses.split(ConstantsHelper.PATH_SEPARATOR)[0]), + Collections.singletonList(targetProjectClasses.split(ConstantsHelper.PATH_SEPARATOR)[1]), + fullQualifiedNameOfTestClasses, + methodNames + ); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, + List targetSourceClasses, + List targetTestClasses, + String[] fullQualifiedNameOfTestClasses, + String[] methodNames) throws TimeoutException { + final String javaCommand = String.join(ConstantsHelper.WHITE_SPACE, + new String[]{ + getJavaCommand(), + (classpath + ConstantsHelper.PATH_SEPARATOR + ABSOLUTE_PATH_TO_RUNNER_CLASSES + + ConstantsHelper.PATH_SEPARATOR + ABSOLUTE_PATH_TO_JACOCO_DEPENDENCIES).replaceAll(" ", "%20"), + "-javaagent:/home/andre/Repos/test-runner/lib/jacocoagent.jar=jmx=true,dumponexit=false", + "-Dcom.sun.management.jmxremote.port=9999", + "-Dcom.sun.management.jmxremote.ssl=false", + "-Dcom.sun.management.jmxremote.authenticate=false", + EntryPoint.jUnit5Mode ? EntryPoint.JUNIT5_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME : EntryPoint.JUNIT4_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME, + ParserOptions.FLAG_pathToCompiledClassesOfTheProject, + targetSourceClasses.stream().reduce((x, y) -> x + ConstantsHelper.PATH_SEPARATOR + y).get().replaceAll(" ", "%20"), + ParserOptions.FLAG_pathToCompiledTestClassesOfTheProject, + targetTestClasses.stream().reduce((x, y) -> x + ConstantsHelper.PATH_SEPARATOR + y).get().replaceAll(" ", "%20"), + ParserOptions.FLAG_fullQualifiedNameOfTestClassToRun, + String.join(ConstantsHelper.PATH_SEPARATOR, fullQualifiedNameOfTestClasses), + methodNames.length == 0 ? "" : ParserOptions.FLAG_testMethodNamesToRun + ConstantsHelper.WHITE_SPACE + + String.join(ConstantsHelper.PATH_SEPARATOR, methodNames), + EntryPoint.blackList.isEmpty() ? "" + : (ParserOptions.FLAG_blackList + ConstantsHelper.WHITE_SPACE + + String.join(ConstantsHelper.PATH_SEPARATOR, EntryPoint.blackList)), + EntryPoint.coverageDetail == ParserOptions.CoverageTransformerDetail.SUMMARIZED ? "" : + (ParserOptions.FLAG_coverage_detail + ConstantsHelper.WHITE_SPACE + + EntryPoint.coverageDetail.name()), + }); + try { + EntryPoint.runGivenCommandLine(javaCommand); + } catch (TimeoutException e) { + LOGGER.warn("Timeout when running {}", javaCommand); + throw e; + } + final CoveredTestResultPerTestMethod load = OnlineCoveredTestResultPerTestMethodImpl.load(); + if (EntryPoint.verbose) { + LOGGER.info("Coverage per test methods has been computed {}{}", ConstantsHelper.LINE_SEPARATOR, + load.toString()); + } + return load; + } + + /* COMPUTE MUTATION SCORE WITH PIT API */ /** * @param classpath the classpath of the project for which we need to compute the mutation score @@ -728,6 +804,11 @@ private static void reset() { private static final String JUNIT5_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME = "eu.stamp_project.testrunner.runner.coverage.JUnit5JacocoRunnerCoveredResultPerTestMethod"; + private static final String JUNIT4_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME = "eu.stamp_project.testrunner.runner.coverage.JUnit4OnlineJacocoRunner"; + + // TODO: Fix this + private static final String JUNIT5_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME = "eu.stamp_project.testrunner.runner.coverage.JUnit4OnlineJacocoRunner"; + private static final String ABSOLUTE_PATH_TO_RUNNER_CLASSES = initAbsolutePathToRunnerClasses(); private static final int DEFAULT_TIMEOUT = 10000; @@ -757,7 +838,7 @@ private static String RemoveWinFileSeparator(String string) { .peek(path -> LOGGER.info("{}", path)) .collect(Collectors.joining(ConstantsHelper.PATH_SEPARATOR)); - private static final List> JACOCO_DEPENDENCIES = Arrays.asList(IRuntime.class, FileUtils.class, ClassReader.class); + private static final List> JACOCO_DEPENDENCIES = Arrays.asList(IRuntime.class, RT.class, FileUtils.class, ClassReader.class); private static final String ABSOLUTE_PATH_TO_JACOCO_DEPENDENCIES = CLASSES_TO_PATH_OF_DEPENDENCIES .apply(JACOCO_DEPENDENCIES); diff --git a/src/main/java/eu/stamp_project/testrunner/listener/impl/OnlineCoveredTestResultPerTestMethodImpl.java b/src/main/java/eu/stamp_project/testrunner/listener/impl/OnlineCoveredTestResultPerTestMethodImpl.java new file mode 100644 index 00000000..5cda5518 --- /dev/null +++ b/src/main/java/eu/stamp_project/testrunner/listener/impl/OnlineCoveredTestResultPerTestMethodImpl.java @@ -0,0 +1,281 @@ +package eu.stamp_project.testrunner.listener.impl; + +import eu.stamp_project.testrunner.listener.Coverage; +import eu.stamp_project.testrunner.listener.CoverageTransformer; +import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; +import eu.stamp_project.testrunner.listener.TestResult; +import eu.stamp_project.testrunner.runner.Failure; +import eu.stamp_project.testrunner.runner.Loader; +import org.jacoco.agent.rt.RT; +import org.jacoco.core.data.ExecutionDataStore; +import org.jacoco.core.data.SessionInfoStore; +import org.jacoco.core.tools.ExecFileLoader; + +import javax.management.MBeanServerConnection; +import javax.management.MBeanServerInvocationHandler; +import javax.management.ObjectName; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class OnlineCoveredTestResultPerTestMethodImpl implements CoveredTestResultPerTestMethod { + + private static final long serialVersionUID = 3860229575340959882L; + + protected final Map coverageResultsMap; + + protected final List classesDirectory; + + protected transient ExecFileLoader execFileLoader; + + protected transient CoverageTransformer coverageTransformer; + + private final List runningTests; + private final List failingTests; + private final List assumptionFailingTests; + private final List ignoredTests; + + private static final String SERVICE_URL = "service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi"; + + public OnlineCoveredTestResultPerTestMethodImpl(List classesDirectory, CoverageTransformer coverageTransformer) { + this.classesDirectory = classesDirectory; + this.coverageResultsMap = new HashMap<>(); + this.coverageTransformer = coverageTransformer; + this.runningTests = new ArrayList<>(); + this.failingTests = new ArrayList<>(); + this.assumptionFailingTests = new ArrayList<>(); + this.ignoredTests = new ArrayList<>(); + } + + public static void setSessionId(String id) { + RT.getAgent().setSessionId(id); + /* + try { + // Open connection to the coverage agent: + final JMXServiceURL url = new JMXServiceURL(SERVICE_URL); + final JMXConnector jmxc = JMXConnectorFactory.connect(url, null); + final MBeanServerConnection connection = jmxc + .getMBeanServerConnection(); + + final IProxy proxy = (IProxy) MBeanServerInvocationHandler + .newProxyInstance(connection, + new ObjectName("org.jacoco:type=Runtime"), IProxy.class, + false); + + // Set new session id + proxy.setSessionId(id); + + // Close connection: + jmxc.close(); + } catch (Exception e) { + throw new RuntimeException(e); + } + */ + } + + public void collect() { + try { + execFileLoader = new ExecFileLoader(); + execFileLoader.load(new ByteArrayInputStream(RT.getAgent().getExecutionData(false))); + /* + // Open connection to the coverage agent: + final JMXServiceURL url = new JMXServiceURL(SERVICE_URL); + final JMXConnector jmxc = JMXConnectorFactory.connect(url, null); + final MBeanServerConnection connection = jmxc + .getMBeanServerConnection(); + + final IProxy proxy = (IProxy) MBeanServerInvocationHandler + .newProxyInstance(connection, + new ObjectName("org.jacoco:type=Runtime"), IProxy.class, + false); + + // Collect + execFileLoader = new ExecFileLoader(); + execFileLoader.load(new ByteArrayInputStream(proxy.getExecutionData(false))); + + // Close connection: + jmxc.close(); + */ + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void reset() { + RT.getAgent().reset(); + RT.getAgent().getExecutionData(true); + /* + try { + // Open connection to the coverage agent: + final JMXServiceURL url = new JMXServiceURL(SERVICE_URL); + final JMXConnector jmxc = JMXConnectorFactory.connect(url, null); + final MBeanServerConnection connection = jmxc + .getMBeanServerConnection(); + + final IProxy proxy = (IProxy) MBeanServerInvocationHandler + .newProxyInstance(connection, + new ObjectName("org.jacoco:type=Runtime"), IProxy.class, + false); + + // Collect + proxy.reset(); + + // Close connection: + jmxc.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + */ + } + + public List getClassesDirectory() { + return classesDirectory; + } + + public ExecutionDataStore getExecutionData() { + return execFileLoader.getExecutionDataStore(); + } + + public SessionInfoStore getSessionInfos() { + return execFileLoader.getSessionInfoStore(); + } + + public CoverageTransformer getCoverageTransformer() { + return coverageTransformer; + } + + @Override + public Map getCoverageResultsMap() { + return coverageResultsMap; + } + + @Override + public Coverage getCoverageOf(String testMethodName) { + return this.getCoverageResultsMap().get(testMethodName); + } + + @Override + public List getRunningTests() { + return runningTests; + } + + @Override + public List getPassingTests() { + final List failing = this.failingTests.stream() + .map(failure -> failure.testCaseName) + .collect(Collectors.toList()); + final List assumptionFailing = this.assumptionFailingTests.stream() + .map(failure -> failure.testCaseName) + .collect(Collectors.toList()); + return this.runningTests.stream() + .filter(description -> !assumptionFailing.contains(description)) + .filter(description -> !failing.contains(description)) + .collect(Collectors.toList()); + } + + @Override + public TestResult aggregate(TestResult that) { + if (that instanceof OnlineCoveredTestResultPerTestMethodImpl) { + final OnlineCoveredTestResultPerTestMethodImpl thatListener = (OnlineCoveredTestResultPerTestMethodImpl) that; + this.runningTests.addAll(thatListener.runningTests); + this.failingTests.addAll(thatListener.failingTests); + this.assumptionFailingTests.addAll(thatListener.assumptionFailingTests); + this.ignoredTests.addAll(thatListener.ignoredTests); + } + return this; + } + + @Override + public List getFailingTests() { + return failingTests; + } + + @Override + public List getAssumptionFailingTests() { + return assumptionFailingTests; + } + + @Override + public List getIgnoredTests() { + return ignoredTests; + } + + @Override + public Failure getFailureOf(String testMethodName) { + return this.getFailingTests().stream() + .filter(failure -> failure.testCaseName.equals(testMethodName)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(String.format("Could not find %s in failing test", testMethodName))); + } + + @Override + public void save() { + File outputDir = new File(TestResult.OUTPUT_DIR); + if (!outputDir.exists()) { + if (!outputDir.mkdirs()) { + System.err.println("Error while creating output dir"); + } + } + File f = new File(outputDir, SERIALIZE_NAME + EXTENSION); + try (FileOutputStream fout = new FileOutputStream(f)) { + try (ObjectOutputStream oos = new ObjectOutputStream(fout)) { + oos.writeObject(this); + } catch (Exception e) { + throw new RuntimeException(e); + } + } catch (Exception e) { + System.err.println("Error while writing serialized file."); + throw new RuntimeException(e); + } + System.out.println("File saved to the following path: " + f.getAbsolutePath()); + } + + /** + * Load from serialized object + * + * @return an Instance of OnlineCoveredTestResultPerTestMethodImpl loaded from a serialized file. + */ + public static OnlineCoveredTestResultPerTestMethodImpl load() { + return new Loader().load(SERIALIZE_NAME); + } + + @Override + public String toString() { + return "OnlineCoveredTestResultPerTestMethodImpl{" + + "coverageResultsMap=" + coverageResultsMap + + ", classesDirectory=" + classesDirectory + + ", coverageTransformer=" + coverageTransformer + + ", runningTests=" + runningTests + + ", failingTests=" + failingTests + + ", assumptionFailingTests=" + assumptionFailingTests + + ", ignoredTests=" + ignoredTests + + '}'; + } + + /** + * Interface for JMX proxy + */ + public interface IProxy { + String getVersion(); + + String getSessionId(); + + void setSessionId(String id); + + byte[] getExecutionData(boolean reset); + + void dump(boolean reset); + + void reset(); + } +} diff --git a/src/main/java/eu/stamp_project/testrunner/listener/junit4/OnlineCoveredTestResultsPerJUnit4TestMethod.java b/src/main/java/eu/stamp_project/testrunner/listener/junit4/OnlineCoveredTestResultsPerJUnit4TestMethod.java new file mode 100644 index 00000000..ffb5b75b --- /dev/null +++ b/src/main/java/eu/stamp_project/testrunner/listener/junit4/OnlineCoveredTestResultsPerJUnit4TestMethod.java @@ -0,0 +1,128 @@ +package eu.stamp_project.testrunner.listener.junit4; + +import eu.stamp_project.testrunner.listener.Coverage; +import eu.stamp_project.testrunner.listener.CoverageTransformer; +import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; +import eu.stamp_project.testrunner.listener.TestResult; +import eu.stamp_project.testrunner.listener.impl.OnlineCoveredTestResultPerTestMethodImpl; +import eu.stamp_project.testrunner.runner.Failure; +import org.junit.runner.Description; + +import java.util.List; +import java.util.Map; + +public class OnlineCoveredTestResultsPerJUnit4TestMethod extends JUnit4TestResult implements CoveredTestResultPerTestMethod { + + private static final long serialVersionUID = -8098503960956110904L; + + private final OnlineCoveredTestResultPerTestMethodImpl internalCoveredTestResult; + + public OnlineCoveredTestResultsPerJUnit4TestMethod(List classesDirectory, CoverageTransformer coverageTransformer) { + this.internalCoveredTestResult = new OnlineCoveredTestResultPerTestMethodImpl(classesDirectory, coverageTransformer); + } + + @Override + public synchronized void testStarted(Description description) throws Exception { + this.internalCoveredTestResult.setSessionId(this.toString.apply(description)); + this.internalCoveredTestResult.reset(); + } + + @Override + public synchronized void testFinished(Description description) throws Exception { + this.internalCoveredTestResult.getRunningTests().add(this.toString.apply(description)); + this.internalCoveredTestResult.collect(); + + Coverage jUnit4Coverage = + internalCoveredTestResult.getCoverageTransformer().transformJacocoObject( + this.internalCoveredTestResult.getExecutionData(), + this.internalCoveredTestResult.getClassesDirectory() + ); + + this.internalCoveredTestResult.getCoverageResultsMap().put(this.toString.apply(description), jUnit4Coverage); + } + + @Override + public void testFailure(org.junit.runner.notification.Failure failure) throws Exception { + this.internalCoveredTestResult.getFailingTests().add( + new Failure( + this.toString.apply(failure.getDescription()), + failure.getDescription().getClassName(), + failure.getException() + ) + ); + } + + @Override + public void testAssumptionFailure(org.junit.runner.notification.Failure failure) { + this.internalCoveredTestResult.getAssumptionFailingTests().add( + new Failure( + this.toString.apply(failure.getDescription()), + failure.getDescription().getClassName(), + failure.getException() + ) + ); + } + + @Override + public void testIgnored(Description description) throws Exception { + this.internalCoveredTestResult.getIgnoredTests().add(this.toString.apply(description)); + } + + @Override + public Map getCoverageResultsMap() { + return this.internalCoveredTestResult.getCoverageResultsMap(); + } + + @Override + public Coverage getCoverageOf(String testMethodName) { + return this.internalCoveredTestResult.getCoverageOf(testMethodName); + } + + @Override + public List getRunningTests() { + return this.internalCoveredTestResult.getRunningTests(); + } + + @Override + public List getPassingTests() { + return this.internalCoveredTestResult.getPassingTests(); + } + + @Override + public TestResult aggregate(TestResult that) { + if (that instanceof OnlineCoveredTestResultsPerJUnit4TestMethod) { + return this.internalCoveredTestResult.aggregate(((OnlineCoveredTestResultsPerJUnit4TestMethod) that).internalCoveredTestResult); + } else { + return this; + } + } + + @Override + public List getFailingTests() { + return this.internalCoveredTestResult.getFailingTests(); + } + + @Override + public List getAssumptionFailingTests() { + return this.internalCoveredTestResult.getAssumptionFailingTests(); + } + + @Override + public List getIgnoredTests() { + return this.internalCoveredTestResult.getIgnoredTests(); + } + + @Override + public Failure getFailureOf(String testMethodName) { + return this.getFailingTests().stream() + .filter(failure -> failure.testCaseName.equals(testMethodName)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(String.format("Could not find %s in failing test", testMethodName))); + } + + @Override + public void save() { + this.internalCoveredTestResult.save(); + } + +} diff --git a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4OnlineJacocoRunner.java b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4OnlineJacocoRunner.java new file mode 100644 index 00000000..541ed232 --- /dev/null +++ b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4OnlineJacocoRunner.java @@ -0,0 +1,50 @@ +package eu.stamp_project.testrunner.runner.coverage; + +import eu.stamp_project.testrunner.listener.CoverageTransformer; +import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; +import eu.stamp_project.testrunner.listener.junit4.JUnit4TestResult; +import eu.stamp_project.testrunner.listener.junit4.OnlineCoveredTestResultsPerJUnit4TestMethod; +import eu.stamp_project.testrunner.runner.JUnit4Runner; +import eu.stamp_project.testrunner.runner.ParserOptions; + +import java.util.Collections; +import java.util.List; + +public class JUnit4OnlineJacocoRunner extends JacocoOnlineRunner { + + public JUnit4OnlineJacocoRunner(List classesDirectory, List testClassesDirectory, CoverageTransformer coverageTransformer) { + this(classesDirectory, testClassesDirectory, Collections.emptyList(), coverageTransformer); + } + + public JUnit4OnlineJacocoRunner(List classesDirectory, List testClassesDirectory, List blackList, CoverageTransformer coverageTransformer) { + super(classesDirectory, testClassesDirectory, blackList, coverageTransformer); + } + + @Override + protected CoveredTestResultPerTestMethod executeCoveredTestPerTestMethod(List classesDirectory, String[] testClassNames, String[] testMethodNames) { + final OnlineCoveredTestResultsPerJUnit4TestMethod listener = new OnlineCoveredTestResultsPerJUnit4TestMethod(classesDirectory, coverageTransformer); + JUnit4Runner.run( + testClassNames, + testMethodNames, + Collections.emptyList(), + (JUnit4TestResult) listener, + JUnit4OnlineJacocoRunner.class.getClassLoader() + ); + return listener; + } + + public static void main(String[] args) { + final ParserOptions options = ParserOptions.parse(args); + new JUnit4OnlineJacocoRunner( + options.getPathToCompiledClassesOfTheProject(), + options.getPathToCompiledTestClassesOfTheProject(), + options.getBlackList(), + options.getCoverageTransformer() + ).runCoveredTestResultPerTestMethod( + options.getPathToCompiledClassesOfTheProject(), + options.getPathToCompiledTestClassesOfTheProject(), + options.getFullQualifiedNameOfTestClassesToRun(), + options.getTestMethodNamesToRun() + ).save(); + } +} diff --git a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JacocoOnlineRunner.java b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JacocoOnlineRunner.java new file mode 100644 index 00000000..065e782d --- /dev/null +++ b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JacocoOnlineRunner.java @@ -0,0 +1,53 @@ +package eu.stamp_project.testrunner.runner.coverage; + +import eu.stamp_project.testrunner.listener.CoverageTransformer; +import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; +import eu.stamp_project.testrunner.listener.TestResult; +import eu.stamp_project.testrunner.runner.Failure; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public abstract class JacocoOnlineRunner { + + protected List classesDirectories; + + protected List testClassesDirectories; + + protected List blackList; + + protected CoverageTransformer coverageTransformer; + + public JacocoOnlineRunner(List classesDirectory, List testClassesDirectory, CoverageTransformer coverageTransformer) { + this(classesDirectory, testClassesDirectory, Collections.emptyList(), coverageTransformer); + } + + public JacocoOnlineRunner(List classesDirectory, List testClassesDirectory, List blackList, CoverageTransformer coverageTransformer) { + this.classesDirectories = classesDirectory; + this.testClassesDirectories = testClassesDirectory; + this.blackList = blackList; + this.coverageTransformer = coverageTransformer; + } + + protected abstract CoveredTestResultPerTestMethod executeCoveredTestPerTestMethod(List classesDirectory, + String[] testClassNames, + String[] testMethodNames); + + public CoveredTestResultPerTestMethod runCoveredTestResultPerTestMethod(List classesDirectory, + List testClassesDirectory, + String[] testClassNames, + String[] testMethodNames) { + final CoveredTestResultPerTestMethod listener = this.executeCoveredTestPerTestMethod(classesDirectory, testClassNames, testMethodNames); + if (!((TestResult) listener).getFailingTests().isEmpty()) { + System.err.println("Some test(s) failed during computation of coverage:\n" + + ((TestResult) listener).getFailingTests() + .stream() + .map(Failure::toString) + .collect(Collectors.joining("\n")) + ); + } + return listener; + } + +} diff --git a/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java b/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java index 24be673c..0427371b 100644 --- a/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java +++ b/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java @@ -555,6 +555,36 @@ Test the runCoveredTestResultPerTestMethods() of EntryPoint. assertEquals(NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8").getInstructionsTotal()); } + @Test + public void testRunOnlineCoveredTestResultPerTestMethods() throws Exception { + + /* + Test the runCoveredTestResultPerTestMethods() of EntryPoint. + It should return the CoveredTestResult with the instruction coverage computed by Jacoco. + */ + final String classpath = JUNIT_CP + ConstantsHelper.PATH_SEPARATOR + JUNIT5_CP; + + final CoveredTestResultPerTestMethod coveredTestResultPerTestMethod = EntryPoint.runOnlineCoveredTestResultPerTestMethods( + classpath + ConstantsHelper.PATH_SEPARATOR + SOURCE_PROJECT_CLASSES + ConstantsHelper.PATH_SEPARATOR + TEST_PROJECT_CLASSES, + SOURCE_PROJECT_CLASSES + ConstantsHelper.PATH_SEPARATOR + TEST_PROJECT_CLASSES, + "example.TestSuiteExample", + new String[]{"test8", "test3"} + ); + + // Assert test results + assertEquals(2, coveredTestResultPerTestMethod.getRunningTests().size()); + assertEquals(2, coveredTestResultPerTestMethod.getPassingTests().size()); + assertEquals(0, coveredTestResultPerTestMethod.getFailingTests().size()); + assertEquals(0, coveredTestResultPerTestMethod.getIgnoredTests().size()); + + // Assert coverage + assertEquals(2, coveredTestResultPerTestMethod.getCoverageResultsMap().size()); + assertEquals(23, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test3").getInstructionsCovered()); + assertEquals(NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test3").getInstructionsTotal()); + assertEquals(23, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8").getInstructionsCovered()); + assertEquals(NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8").getInstructionsTotal()); + } + @Ignore @Test public void testOnParametrizedForOneTestMethodCoveredTestResultPerTestMethod() throws TimeoutException { From a3b8675fef0e8af040c1402653ee25d5c242f2eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Tue, 17 Aug 2021 17:54:10 +0200 Subject: [PATCH 2/6] Online instrumentation for JUnit5. Jacoco agent `includes`, `excludes` options. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Silva --- .../stamp_project/testrunner/EntryPoint.java | 324 +++++++------ .../CoverageCollectorDetailedCompressed.java | 14 +- ...ineCoveredTestResultPerTestMethodImpl.java | 428 +++++++----------- ...CoveredTestResultsPerJUnit4TestMethod.java | 227 +++++----- ...CoveredTestResultsPerJUnit5TestMethod.java | 86 ++++ .../coverage/JUnit4OnlineJacocoRunner.java | 1 + .../coverage/JUnit5OnlineJacocoRunner.java | 54 +++ .../testrunner/EntryPointJUnit5Test.java | 41 +- .../testrunner/EntryPointTest.java | 21 +- 9 files changed, 660 insertions(+), 536 deletions(-) create mode 100644 src/main/java/eu/stamp_project/testrunner/listener/junit5/OnlineCoveredTestResultsPerJUnit5TestMethod.java create mode 100644 src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit5OnlineJacocoRunner.java diff --git a/src/main/java/eu/stamp_project/testrunner/EntryPoint.java b/src/main/java/eu/stamp_project/testrunner/EntryPoint.java index 4b7ee81c..a9012c8f 100644 --- a/src/main/java/eu/stamp_project/testrunner/EntryPoint.java +++ b/src/main/java/eu/stamp_project/testrunner/EntryPoint.java @@ -1,7 +1,10 @@ package eu.stamp_project.testrunner; import eu.stamp_project.mutationtest.descartes.DescartesMutationEngine; -import eu.stamp_project.testrunner.listener.*; +import eu.stamp_project.testrunner.listener.Coverage; +import eu.stamp_project.testrunner.listener.CoveragePerTestMethod; +import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; +import eu.stamp_project.testrunner.listener.TestResult; import eu.stamp_project.testrunner.listener.impl.*; import eu.stamp_project.testrunner.listener.junit4.JUnit4Coverage; import eu.stamp_project.testrunner.listener.pit.AbstractParser; @@ -11,6 +14,7 @@ import eu.stamp_project.testrunner.runner.pit.PitRunner; import eu.stamp_project.testrunner.utils.ConstantsHelper; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.jacoco.agent.rt.RT; import org.jacoco.core.runtime.IRuntime; import org.junit.jupiter.api.extension.ExtensionContext; @@ -23,10 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintStream; +import java.io.*; import java.lang.ProcessBuilder.Redirect; import java.lang.reflect.Method; import java.net.URL; @@ -149,6 +150,16 @@ public class EntryPoint { public static ParserOptions.CoverageTransformerDetail coverageDetail = ParserOptions.CoverageTransformerDetail.SUMMARIZED; + /** + * Each value represents a pattern for the `includes` argument of the jacoco agent + */ + public static String jacocoAgentIncludes; + + /** + * Each value represents a pattern for the `excludes` argument of the jacoco agent + */ + public static String jacocoAgentExcludes; + // PIT OPTIONS /** @@ -287,30 +298,30 @@ public static Coverage runCoverage(String classpath, String targetProjectClasses ); } - /** - * Compute of the instruction coverage using JaCoCo for various test classes. - *

- * This method compute the instruction coverage, using JaCoCo obtained by executing the - * given test classes. This method require the path to the binaries, i.e. - * .class, of the source code on which the instruction must be computed. This - * method computes the "global" coverage, i.e. the coverage obtained if - * all the test are run. For a test method per test method result, see - * {@link EntryPoint#runCoveragePerTestMethods(String, String, String[], String[])} - *

- * - * @param classpath the classpath required to run the given tests classes. - * @param targetSourceClasses path to the folders that contain source binaries, i.e. .class, on which - * Jacoco computes the coverage. - * @param targetTestClasses path to the folders that contain test binaries, i.e. .class, on which - * Jacoco computes the coverage. - * @param fullQualifiedNameOfTestClasses test classes to be run. - * @param methodNames test methods to be run. Can be empty - * @return an instance of Coverage {@link Coverage} containing result of the - * execution of test classes. - * @throws TimeoutException when the execution takes longer than timeoutInMs - */ + /** + * Compute of the instruction coverage using JaCoCo for various test classes. + *

+ * This method compute the instruction coverage, using JaCoCo obtained by executing the + * given test classes. This method require the path to the binaries, i.e. + * .class, of the source code on which the instruction must be computed. This + * method computes the "global" coverage, i.e. the coverage obtained if + * all the test are run. For a test method per test method result, see + * {@link EntryPoint#runCoveragePerTestMethods(String, String, String[], String[])} + *

+ * + * @param classpath the classpath required to run the given tests classes. + * @param targetSourceClasses path to the folders that contain source binaries, i.e. .class, on which + * Jacoco computes the coverage. + * @param targetTestClasses path to the folders that contain test binaries, i.e. .class, on which + * Jacoco computes the coverage. + * @param fullQualifiedNameOfTestClasses test classes to be run. + * @param methodNames test methods to be run. Can be empty + * @return an instance of Coverage {@link Coverage} containing result of the + * execution of test classes. + * @throws TimeoutException when the execution takes longer than timeoutInMs + */ public static Coverage runCoverage(String classpath, List targetSourceClasses, List targetTestClasses, @@ -391,33 +402,33 @@ public static CoveragePerTestMethod runCoveragePerTestMethods(String classpath, ); } - /** - * Compute of the instruction coverage using JaCoCo for various test methods - * inside the given test class. - *

- * This method computes the instruction coverage, using JaCoCo obtained by executing the - * given test methods inside the given test classes. This method requires the - * path to the binaries, i.e. .class, of the source code on which the - * instruction must be computed. This method computes the per test method - * coverage, i.e. the coverage obtained by each test methods, separately. - * It does not run one by one test methods, but rather use a specific - * implementation of {@link org.junit.runner.notification.RunListener}. - *

- * - * @param classpath the classpath required to run the given tests classes. - * @param targetSourceClasses paths to the folders that contain source binaries, i.e. .class, on which - * Jacoco computes the coverage. - * @param targetTestClasses paths to the folders that contain test binaries, i.e. .class, on which - * Jacoco computes the coverage. - * @param fullQualifiedNameOfTestClasses test classes to be run. - * @param methodNames test methods to be run. - * @return a Map that associate each test method name to its instruction - * coverage, as an instance of JUnit4Coverage {@link JUnit4Coverage} of - * test classes. - * @throws TimeoutException when the execution takes longer than timeoutInMs - */ + /** + * Compute of the instruction coverage using JaCoCo for various test methods + * inside the given test class. + *

+ * This method computes the instruction coverage, using JaCoCo obtained by executing the + * given test methods inside the given test classes. This method requires the + * path to the binaries, i.e. .class, of the source code on which the + * instruction must be computed. This method computes the per test method + * coverage, i.e. the coverage obtained by each test methods, separately. + * It does not run one by one test methods, but rather use a specific + * implementation of {@link org.junit.runner.notification.RunListener}. + *

+ * + * @param classpath the classpath required to run the given tests classes. + * @param targetSourceClasses paths to the folders that contain source binaries, i.e. .class, on which + * Jacoco computes the coverage. + * @param targetTestClasses paths to the folders that contain test binaries, i.e. .class, on which + * Jacoco computes the coverage. + * @param fullQualifiedNameOfTestClasses test classes to be run. + * @param methodNames test methods to be run. + * @return a Map that associate each test method name to its instruction + * coverage, as an instance of JUnit4Coverage {@link JUnit4Coverage} of + * test classes. + * @throws TimeoutException when the execution takes longer than timeoutInMs + */ public static CoveragePerTestMethod runCoveragePerTestMethods(String classpath, List targetSourceClasses, List targetTestClasses, @@ -442,7 +453,7 @@ public static CoveragePerTestMethod runCoveragePerTestMethods(String classpath, + String.join(ConstantsHelper.PATH_SEPARATOR, EntryPoint.blackList)), EntryPoint.coverageDetail == ParserOptions.CoverageTransformerDetail.SUMMARIZED ? "" : (ParserOptions.FLAG_coverage_detail + ConstantsHelper.WHITE_SPACE - + EntryPoint.coverageDetail.name()), + + EntryPoint.coverageDetail.name()), }); try { EntryPoint.runGivenCommandLine(javaCommand); @@ -461,31 +472,31 @@ public static CoveragePerTestMethod runCoveragePerTestMethods(String classpath, /* COMPUTE COVERED TEST RESULT PER TEST METHOD API */ public static CoveredTestResultPerTestMethod runCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String fullQualifiedNameOfTestClass) throws TimeoutException { + String fullQualifiedNameOfTestClass) throws TimeoutException { return EntryPoint.runCoveredTestResultPerTestMethods(classpath, targetProjectClasses, new String[]{fullQualifiedNameOfTestClass}, new String[0]); } public static CoveredTestResultPerTestMethod runCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String fullQualifiedNameOfTestClass, String testMethodName) throws TimeoutException { + String fullQualifiedNameOfTestClass, String testMethodName) throws TimeoutException { return EntryPoint.runCoveredTestResultPerTestMethods(classpath, targetProjectClasses, new String[]{fullQualifiedNameOfTestClass}, new String[]{testMethodName}); } public static CoveredTestResultPerTestMethod runCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String fullQualifiedNameOfTestClass, String[] testMethodNames) throws TimeoutException { + String fullQualifiedNameOfTestClass, String[] testMethodNames) throws TimeoutException { return EntryPoint.runCoveredTestResultPerTestMethods(classpath, targetProjectClasses, new String[]{fullQualifiedNameOfTestClass}, testMethodNames); } public static CoveredTestResultPerTestMethod runCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String[] fullQualifiedNameOfTestClasses) throws TimeoutException { + String[] fullQualifiedNameOfTestClasses) throws TimeoutException { return EntryPoint.runCoveredTestResultPerTestMethods(classpath, targetProjectClasses, fullQualifiedNameOfTestClasses, new String[0]); } public static CoveredTestResultPerTestMethod runCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String[] fullQualifiedNameOfTestClasses, String[] methodNames) throws TimeoutException { + String[] fullQualifiedNameOfTestClasses, String[] methodNames) throws TimeoutException { return EntryPoint.runCoveredTestResultPerTestMethods( classpath, Collections.singletonList(targetProjectClasses.split(ConstantsHelper.PATH_SEPARATOR)[0]), @@ -562,88 +573,100 @@ public static CoveredTestResultPerTestMethod runCoveredTestResultPerTestMethods( return load; } - /* COMPUTE ONLINE COVERED TEST RESULT PER TEST METHOD API */ - - public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String fullQualifiedNameOfTestClass) throws TimeoutException { - return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, - new String[]{fullQualifiedNameOfTestClass}, new String[0]); - } - - public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String fullQualifiedNameOfTestClass, String testMethodName) throws TimeoutException { - return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, - new String[]{fullQualifiedNameOfTestClass}, new String[]{testMethodName}); - } - - public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String fullQualifiedNameOfTestClass, String[] testMethodNames) throws TimeoutException { - return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, - new String[]{fullQualifiedNameOfTestClass}, testMethodNames); - } - - public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String[] fullQualifiedNameOfTestClasses) throws TimeoutException { - return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, fullQualifiedNameOfTestClasses, - new String[0]); - } - - public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, - String[] fullQualifiedNameOfTestClasses, String[] methodNames) throws TimeoutException { - return EntryPoint.runOnlineCoveredTestResultPerTestMethods( - classpath, - Collections.singletonList(targetProjectClasses.split(ConstantsHelper.PATH_SEPARATOR)[0]), - Collections.singletonList(targetProjectClasses.split(ConstantsHelper.PATH_SEPARATOR)[1]), - fullQualifiedNameOfTestClasses, - methodNames - ); - } - - public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, - List targetSourceClasses, - List targetTestClasses, - String[] fullQualifiedNameOfTestClasses, - String[] methodNames) throws TimeoutException { - final String javaCommand = String.join(ConstantsHelper.WHITE_SPACE, - new String[]{ - getJavaCommand(), - (classpath + ConstantsHelper.PATH_SEPARATOR + ABSOLUTE_PATH_TO_RUNNER_CLASSES - + ConstantsHelper.PATH_SEPARATOR + ABSOLUTE_PATH_TO_JACOCO_DEPENDENCIES).replaceAll(" ", "%20"), - "-javaagent:/home/andre/Repos/test-runner/lib/jacocoagent.jar=jmx=true,dumponexit=false", - "-Dcom.sun.management.jmxremote.port=9999", - "-Dcom.sun.management.jmxremote.ssl=false", - "-Dcom.sun.management.jmxremote.authenticate=false", - EntryPoint.jUnit5Mode ? EntryPoint.JUNIT5_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME : EntryPoint.JUNIT4_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME, - ParserOptions.FLAG_pathToCompiledClassesOfTheProject, - targetSourceClasses.stream().reduce((x, y) -> x + ConstantsHelper.PATH_SEPARATOR + y).get().replaceAll(" ", "%20"), - ParserOptions.FLAG_pathToCompiledTestClassesOfTheProject, - targetTestClasses.stream().reduce((x, y) -> x + ConstantsHelper.PATH_SEPARATOR + y).get().replaceAll(" ", "%20"), - ParserOptions.FLAG_fullQualifiedNameOfTestClassToRun, - String.join(ConstantsHelper.PATH_SEPARATOR, fullQualifiedNameOfTestClasses), - methodNames.length == 0 ? "" : ParserOptions.FLAG_testMethodNamesToRun + ConstantsHelper.WHITE_SPACE + - String.join(ConstantsHelper.PATH_SEPARATOR, methodNames), - EntryPoint.blackList.isEmpty() ? "" - : (ParserOptions.FLAG_blackList + ConstantsHelper.WHITE_SPACE - + String.join(ConstantsHelper.PATH_SEPARATOR, EntryPoint.blackList)), - EntryPoint.coverageDetail == ParserOptions.CoverageTransformerDetail.SUMMARIZED ? "" : - (ParserOptions.FLAG_coverage_detail + ConstantsHelper.WHITE_SPACE - + EntryPoint.coverageDetail.name()), - }); - try { - EntryPoint.runGivenCommandLine(javaCommand); - } catch (TimeoutException e) { - LOGGER.warn("Timeout when running {}", javaCommand); - throw e; - } - final CoveredTestResultPerTestMethod load = OnlineCoveredTestResultPerTestMethodImpl.load(); - if (EntryPoint.verbose) { - LOGGER.info("Coverage per test methods has been computed {}{}", ConstantsHelper.LINE_SEPARATOR, - load.toString()); - } - return load; - } - - /* COMPUTE MUTATION SCORE WITH PIT API */ + /* COMPUTE ONLINE COVERED TEST RESULT PER TEST METHOD API */ + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String fullQualifiedNameOfTestClass) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, + new String[]{fullQualifiedNameOfTestClass}, new String[0]); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String fullQualifiedNameOfTestClass, String testMethodName) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, + new String[]{fullQualifiedNameOfTestClass}, new String[]{testMethodName}); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String fullQualifiedNameOfTestClass, String[] testMethodNames) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, + new String[]{fullQualifiedNameOfTestClass}, testMethodNames); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String[] fullQualifiedNameOfTestClasses) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods(classpath, targetProjectClasses, fullQualifiedNameOfTestClasses, + new String[0]); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, String targetProjectClasses, + String[] fullQualifiedNameOfTestClasses, String[] methodNames) throws TimeoutException { + return EntryPoint.runOnlineCoveredTestResultPerTestMethods( + classpath, + Collections.singletonList(targetProjectClasses.split(ConstantsHelper.PATH_SEPARATOR)[0]), + Collections.singletonList(targetProjectClasses.split(ConstantsHelper.PATH_SEPARATOR)[1]), + fullQualifiedNameOfTestClasses, + methodNames + ); + } + + public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMethods(String classpath, + List targetSourceClasses, + List targetTestClasses, + String[] fullQualifiedNameOfTestClasses, + String[] methodNames) throws TimeoutException { + // We do this because simply getting the path won't result in a path that can be used for the java command, + // when calling test-runner from a different project (i.e. when test-runner is packaged into a jar) + final File jacocoAgentJar; + try { + final InputStream is = EntryPoint.class.getClassLoader().getResourceAsStream("jacocoagent.jar"); + jacocoAgentJar = File.createTempFile("test-runner", "jacoco-agent"); + jacocoAgentJar.deleteOnExit(); + final OutputStream os = new FileOutputStream(jacocoAgentJar); + IOUtils.copy(is, os); + } catch (IOException e) { + throw new RuntimeException(e); + } + + final String javaCommand = String.join(ConstantsHelper.WHITE_SPACE, + new String[]{ + getJavaCommand(), + (classpath + ConstantsHelper.PATH_SEPARATOR + ABSOLUTE_PATH_TO_RUNNER_CLASSES + + ConstantsHelper.PATH_SEPARATOR + ABSOLUTE_PATH_TO_JACOCO_DEPENDENCIES).replaceAll(" ", "%20"), + "-javaagent:" + jacocoAgentJar.getAbsolutePath() + "=dumponexit=false" + + (EntryPoint.jacocoAgentIncludes != null ? (",includes=" + EntryPoint.jacocoAgentIncludes) : "") + + (EntryPoint.jacocoAgentIncludes != null ? (",excludes=" + EntryPoint.jacocoAgentExcludes) : ""), + EntryPoint.jUnit5Mode ? EntryPoint.JUNIT5_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME : EntryPoint.JUNIT4_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME, + ParserOptions.FLAG_pathToCompiledClassesOfTheProject, + targetSourceClasses.stream().reduce((x, y) -> x + ConstantsHelper.PATH_SEPARATOR + y).get().replaceAll(" ", "%20"), + ParserOptions.FLAG_pathToCompiledTestClassesOfTheProject, + targetTestClasses.stream().reduce((x, y) -> x + ConstantsHelper.PATH_SEPARATOR + y).get().replaceAll(" ", "%20"), + ParserOptions.FLAG_fullQualifiedNameOfTestClassToRun, + String.join(ConstantsHelper.PATH_SEPARATOR, fullQualifiedNameOfTestClasses), + methodNames.length == 0 ? "" : ParserOptions.FLAG_testMethodNamesToRun + ConstantsHelper.WHITE_SPACE + + String.join(ConstantsHelper.PATH_SEPARATOR, methodNames), + EntryPoint.blackList.isEmpty() ? "" + : (ParserOptions.FLAG_blackList + ConstantsHelper.WHITE_SPACE + + String.join(ConstantsHelper.PATH_SEPARATOR, EntryPoint.blackList)), + EntryPoint.coverageDetail == ParserOptions.CoverageTransformerDetail.SUMMARIZED ? "" : + (ParserOptions.FLAG_coverage_detail + ConstantsHelper.WHITE_SPACE + + EntryPoint.coverageDetail.name()), + }); + try { + EntryPoint.runGivenCommandLine(javaCommand); + } catch (TimeoutException e) { + LOGGER.warn("Timeout when running {}", javaCommand); + throw e; + } + final CoveredTestResultPerTestMethod load = OnlineCoveredTestResultPerTestMethodImpl.load(); + if (EntryPoint.verbose) { + LOGGER.info("Coverage per test methods has been computed {}{}", ConstantsHelper.LINE_SEPARATOR, + load.toString()); + } + return load; + } + + /* COMPUTE MUTATION SCORE WITH PIT API */ /** * @param classpath the classpath of the project for which we need to compute the mutation score @@ -722,7 +745,7 @@ private static void runGivenCommandLine(String commandLine) throws TimeoutExcept } else { // Redirecting to null file is required to avoid thread deadlocks (when verbose // is disabled) - pb.redirectOutput(File. createTempFile("test-runner-error", ".tmp")) + pb.redirectOutput(File.createTempFile("test-runner-error", ".tmp")) .redirectErrorStream(true); } process = pb.start(); @@ -736,8 +759,8 @@ private static void runGivenCommandLine(String commandLine) throws TimeoutExcept long endTime = System.currentTimeMillis(); if (!finished) { throw new RuntimeException("Forked process did not finish correctly. " + - "Timeout set was " + timeoutInMs + " ms, " + - "process took " + (endTime - startTime) + " ms before ending."); + "Timeout set was " + timeoutInMs + " ms, " + + "process took " + (endTime - startTime) + " ms before ending."); } } catch (IOException | InterruptedException e) { throw new RuntimeException(e); @@ -776,6 +799,8 @@ private static void reset() { EntryPoint.outPrintStream = null; EntryPoint.errPrintStream = null; EntryPoint.blackList.clear(); + EntryPoint.jacocoAgentIncludes = null; + EntryPoint.jacocoAgentExcludes = null; } /* @@ -804,10 +829,9 @@ private static void reset() { private static final String JUNIT5_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME = "eu.stamp_project.testrunner.runner.coverage.JUnit5JacocoRunnerCoveredResultPerTestMethod"; - private static final String JUNIT4_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME = "eu.stamp_project.testrunner.runner.coverage.JUnit4OnlineJacocoRunner"; + private static final String JUNIT4_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME = "eu.stamp_project.testrunner.runner.coverage.JUnit4OnlineJacocoRunner"; - // TODO: Fix this - private static final String JUNIT5_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME = "eu.stamp_project.testrunner.runner.coverage.JUnit4OnlineJacocoRunner"; + private static final String JUNIT5_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME = "eu.stamp_project.testrunner.runner.coverage.JUnit5OnlineJacocoRunner"; private static final String ABSOLUTE_PATH_TO_RUNNER_CLASSES = initAbsolutePathToRunnerClasses(); diff --git a/src/main/java/eu/stamp_project/testrunner/listener/impl/CoverageCollectorDetailedCompressed.java b/src/main/java/eu/stamp_project/testrunner/listener/impl/CoverageCollectorDetailedCompressed.java index 6492f00f..c6a725a4 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/impl/CoverageCollectorDetailedCompressed.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/impl/CoverageCollectorDetailedCompressed.java @@ -5,9 +5,9 @@ import org.jacoco.core.analysis.CoverageBuilder; import org.jacoco.core.analysis.IClassCoverage; import org.jacoco.core.analysis.IMethodCoverage; +import org.jacoco.core.data.ExecutionData; import org.jacoco.core.data.ExecutionDataStore; -import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; @@ -21,15 +21,19 @@ public class CoverageCollectorDetailedCompressed implements CoverageTransformer { @Override - public CoverageDetailed transformJacocoObject(ExecutionDataStore executionData, List classesDirectory) { + public CoverageDetailed transformJacocoObject(ExecutionDataStore executionDataStore, List classesDirectory) { CoverageInformation covered = new CoverageInformation(); final CoverageBuilder coverageBuilder = new CoverageBuilder(); - final Analyzer analyzer = new Analyzer(executionData, coverageBuilder); + final Analyzer analyzer = new Analyzer(executionDataStore, coverageBuilder); try { - for (String directory : classesDirectory) { - analyzer.analyzeAll(new File(directory)); + for (ExecutionData executionData : executionDataStore.getContents()) { + analyzer.analyzeClass( + CoverageCollectorDetailedCompressed.class.getClassLoader() + .getResourceAsStream(executionData.getName() + ".class"), + "./" + ); } } catch (IOException e) { throw new RuntimeException(e); diff --git a/src/main/java/eu/stamp_project/testrunner/listener/impl/OnlineCoveredTestResultPerTestMethodImpl.java b/src/main/java/eu/stamp_project/testrunner/listener/impl/OnlineCoveredTestResultPerTestMethodImpl.java index 5cda5518..8d8ca59a 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/impl/OnlineCoveredTestResultPerTestMethodImpl.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/impl/OnlineCoveredTestResultPerTestMethodImpl.java @@ -4,278 +4,182 @@ import eu.stamp_project.testrunner.listener.CoverageTransformer; import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; import eu.stamp_project.testrunner.listener.TestResult; +import eu.stamp_project.testrunner.listener.utils.ListenerUtils; import eu.stamp_project.testrunner.runner.Failure; -import eu.stamp_project.testrunner.runner.Loader; import org.jacoco.agent.rt.RT; import org.jacoco.core.data.ExecutionDataStore; import org.jacoco.core.data.SessionInfoStore; import org.jacoco.core.tools.ExecFileLoader; -import javax.management.MBeanServerConnection; -import javax.management.MBeanServerInvocationHandler; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; import java.io.ByteArrayInputStream; import java.io.File; -import java.io.FileOutputStream; -import java.io.ObjectOutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; public class OnlineCoveredTestResultPerTestMethodImpl implements CoveredTestResultPerTestMethod { - private static final long serialVersionUID = 3860229575340959882L; - - protected final Map coverageResultsMap; - - protected final List classesDirectory; - - protected transient ExecFileLoader execFileLoader; - - protected transient CoverageTransformer coverageTransformer; - - private final List runningTests; - private final List failingTests; - private final List assumptionFailingTests; - private final List ignoredTests; - - private static final String SERVICE_URL = "service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi"; - - public OnlineCoveredTestResultPerTestMethodImpl(List classesDirectory, CoverageTransformer coverageTransformer) { - this.classesDirectory = classesDirectory; - this.coverageResultsMap = new HashMap<>(); - this.coverageTransformer = coverageTransformer; - this.runningTests = new ArrayList<>(); - this.failingTests = new ArrayList<>(); - this.assumptionFailingTests = new ArrayList<>(); - this.ignoredTests = new ArrayList<>(); - } - - public static void setSessionId(String id) { - RT.getAgent().setSessionId(id); - /* - try { - // Open connection to the coverage agent: - final JMXServiceURL url = new JMXServiceURL(SERVICE_URL); - final JMXConnector jmxc = JMXConnectorFactory.connect(url, null); - final MBeanServerConnection connection = jmxc - .getMBeanServerConnection(); - - final IProxy proxy = (IProxy) MBeanServerInvocationHandler - .newProxyInstance(connection, - new ObjectName("org.jacoco:type=Runtime"), IProxy.class, - false); - - // Set new session id - proxy.setSessionId(id); - - // Close connection: - jmxc.close(); - } catch (Exception e) { - throw new RuntimeException(e); - } - */ - } - - public void collect() { - try { - execFileLoader = new ExecFileLoader(); - execFileLoader.load(new ByteArrayInputStream(RT.getAgent().getExecutionData(false))); - /* - // Open connection to the coverage agent: - final JMXServiceURL url = new JMXServiceURL(SERVICE_URL); - final JMXConnector jmxc = JMXConnectorFactory.connect(url, null); - final MBeanServerConnection connection = jmxc - .getMBeanServerConnection(); - - final IProxy proxy = (IProxy) MBeanServerInvocationHandler - .newProxyInstance(connection, - new ObjectName("org.jacoco:type=Runtime"), IProxy.class, - false); - - // Collect - execFileLoader = new ExecFileLoader(); - execFileLoader.load(new ByteArrayInputStream(proxy.getExecutionData(false))); - - // Close connection: - jmxc.close(); - */ - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public void reset() { - RT.getAgent().reset(); - RT.getAgent().getExecutionData(true); - /* - try { - // Open connection to the coverage agent: - final JMXServiceURL url = new JMXServiceURL(SERVICE_URL); - final JMXConnector jmxc = JMXConnectorFactory.connect(url, null); - final MBeanServerConnection connection = jmxc - .getMBeanServerConnection(); - - final IProxy proxy = (IProxy) MBeanServerInvocationHandler - .newProxyInstance(connection, - new ObjectName("org.jacoco:type=Runtime"), IProxy.class, - false); - - // Collect - proxy.reset(); - - // Close connection: - jmxc.close(); - } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - */ - } - - public List getClassesDirectory() { - return classesDirectory; - } - - public ExecutionDataStore getExecutionData() { - return execFileLoader.getExecutionDataStore(); - } - - public SessionInfoStore getSessionInfos() { - return execFileLoader.getSessionInfoStore(); - } - - public CoverageTransformer getCoverageTransformer() { - return coverageTransformer; - } - - @Override - public Map getCoverageResultsMap() { - return coverageResultsMap; - } - - @Override - public Coverage getCoverageOf(String testMethodName) { - return this.getCoverageResultsMap().get(testMethodName); - } - - @Override - public List getRunningTests() { - return runningTests; - } - - @Override - public List getPassingTests() { - final List failing = this.failingTests.stream() - .map(failure -> failure.testCaseName) - .collect(Collectors.toList()); - final List assumptionFailing = this.assumptionFailingTests.stream() - .map(failure -> failure.testCaseName) - .collect(Collectors.toList()); - return this.runningTests.stream() - .filter(description -> !assumptionFailing.contains(description)) - .filter(description -> !failing.contains(description)) - .collect(Collectors.toList()); - } - - @Override - public TestResult aggregate(TestResult that) { - if (that instanceof OnlineCoveredTestResultPerTestMethodImpl) { - final OnlineCoveredTestResultPerTestMethodImpl thatListener = (OnlineCoveredTestResultPerTestMethodImpl) that; - this.runningTests.addAll(thatListener.runningTests); - this.failingTests.addAll(thatListener.failingTests); - this.assumptionFailingTests.addAll(thatListener.assumptionFailingTests); - this.ignoredTests.addAll(thatListener.ignoredTests); - } - return this; - } - - @Override - public List getFailingTests() { - return failingTests; - } - - @Override - public List getAssumptionFailingTests() { - return assumptionFailingTests; - } - - @Override - public List getIgnoredTests() { - return ignoredTests; - } - - @Override - public Failure getFailureOf(String testMethodName) { - return this.getFailingTests().stream() - .filter(failure -> failure.testCaseName.equals(testMethodName)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException(String.format("Could not find %s in failing test", testMethodName))); - } - - @Override - public void save() { - File outputDir = new File(TestResult.OUTPUT_DIR); - if (!outputDir.exists()) { - if (!outputDir.mkdirs()) { - System.err.println("Error while creating output dir"); - } - } - File f = new File(outputDir, SERIALIZE_NAME + EXTENSION); - try (FileOutputStream fout = new FileOutputStream(f)) { - try (ObjectOutputStream oos = new ObjectOutputStream(fout)) { - oos.writeObject(this); - } catch (Exception e) { - throw new RuntimeException(e); - } - } catch (Exception e) { - System.err.println("Error while writing serialized file."); - throw new RuntimeException(e); - } - System.out.println("File saved to the following path: " + f.getAbsolutePath()); - } - - /** - * Load from serialized object - * - * @return an Instance of OnlineCoveredTestResultPerTestMethodImpl loaded from a serialized file. - */ - public static OnlineCoveredTestResultPerTestMethodImpl load() { - return new Loader().load(SERIALIZE_NAME); - } - - @Override - public String toString() { - return "OnlineCoveredTestResultPerTestMethodImpl{" + - "coverageResultsMap=" + coverageResultsMap + - ", classesDirectory=" + classesDirectory + - ", coverageTransformer=" + coverageTransformer + - ", runningTests=" + runningTests + - ", failingTests=" + failingTests + - ", assumptionFailingTests=" + assumptionFailingTests + - ", ignoredTests=" + ignoredTests + - '}'; - } - - /** - * Interface for JMX proxy - */ - public interface IProxy { - String getVersion(); - - String getSessionId(); - - void setSessionId(String id); - - byte[] getExecutionData(boolean reset); - - void dump(boolean reset); - - void reset(); - } + private static final long serialVersionUID = 3860229575340959882L; + + protected transient final Map executionDataStoreMap; + + protected final ConcurrentHashMap coverageResultsMap; + + protected final List classesDirectory; + + protected transient ExecFileLoader execFileLoader; + + protected transient CoverageTransformer coverageTransformer; + + private final Set runningTests; + private final Set failingTests; + private final Set assumptionFailingTests; + private final Set ignoredTests; + + public OnlineCoveredTestResultPerTestMethodImpl(List classesDirectory, CoverageTransformer coverageTransformer) { + this.classesDirectory = classesDirectory; + this.executionDataStoreMap = new HashMap<>(); + this.coverageResultsMap = new ConcurrentHashMap<>(); + this.coverageTransformer = coverageTransformer; + this.runningTests = new HashSet<>(); + this.failingTests = new HashSet<>(); + this.assumptionFailingTests = new HashSet<>(); + this.ignoredTests = new HashSet<>(); + } + + public static void setSessionId(String id) { + RT.getAgent().setSessionId(id); + } + + public Map getExecutionDataStoreMap() { + return executionDataStoreMap; + } + + public void collect() { + try { + execFileLoader = new ExecFileLoader(); + execFileLoader.load(new ByteArrayInputStream(RT.getAgent().getExecutionData(false))); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void reset() { + RT.getAgent().reset(); + RT.getAgent().getExecutionData(true); + } + + public List getClassesDirectory() { + return classesDirectory; + } + + public ExecutionDataStore getExecutionData() { + return execFileLoader.getExecutionDataStore(); + } + + public SessionInfoStore getSessionInfos() { + return execFileLoader.getSessionInfoStore(); + } + + public CoverageTransformer getCoverageTransformer() { + return coverageTransformer; + } + + @Override + public Map getCoverageResultsMap() { + return coverageResultsMap; + } + + @Override + public Coverage getCoverageOf(String testMethodName) { + return this.getCoverageResultsMap().get(testMethodName); + } + + @Override + public Set getRunningTests() { + return runningTests; + } + + @Override + public Set getPassingTests() { + Set passingTests = new HashSet<>(runningTests); + passingTests.removeAll(failingTests.stream().map(x -> x.testCaseName).collect(Collectors.toSet())); + passingTests.removeAll(assumptionFailingTests.stream().map(x -> x.testCaseName).collect(Collectors.toSet())); + return passingTests; + } + + @Override + public TestResult aggregate(TestResult that) { + if (that instanceof OnlineCoveredTestResultPerTestMethodImpl) { + final OnlineCoveredTestResultPerTestMethodImpl thatListener = (OnlineCoveredTestResultPerTestMethodImpl) that; + this.runningTests.addAll(thatListener.runningTests); + this.failingTests.addAll(thatListener.failingTests); + this.assumptionFailingTests.addAll(thatListener.assumptionFailingTests); + this.ignoredTests.addAll(thatListener.ignoredTests); + } + return this; + } + + @Override + public Set getFailingTests() { + return failingTests; + } + + @Override + public Set getAssumptionFailingTests() { + return assumptionFailingTests; + } + + @Override + public Set getIgnoredTests() { + return ignoredTests; + } + + @Override + public Failure getFailureOf(String testMethodName) { + return this.getFailingTests().stream() + .filter(failure -> failure.testCaseName.equals(testMethodName)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(String.format("Could not find %s in failing test", testMethodName))); + } + + @Override + public void save() { + ListenerUtils.saveToMemoryMappedFile(new File(OUTPUT_DIR, SHARED_MEMORY_FILE), this); + } + + @Override + public void computeCoverages() { + executionDataStoreMap.entrySet().parallelStream() + .forEach(x -> { + Coverage jUnit4Coverage = coverageTransformer.transformJacocoObject( + x.getValue(), + classesDirectory + ); + coverageResultsMap.put(x.getKey(), jUnit4Coverage); + }); + } + + /** + * Load from serialized object + * + * @return an Instance of OnlineCoveredTestResultPerTestMethodImpl loaded from a serialized file. + */ + public static OnlineCoveredTestResultPerTestMethodImpl load() { + return ListenerUtils.loadFromMemoryMappedFile(ListenerUtils.computeTargetFilePath(OUTPUT_DIR, SHARED_MEMORY_FILE)); + } + + @Override + public String toString() { + return "OnlineCoveredTestResultPerTestMethodImpl{" + + "coverageResultsMap=" + coverageResultsMap + + ", classesDirectory=" + classesDirectory + + ", coverageTransformer=" + coverageTransformer + + ", runningTests=" + runningTests + + ", failingTests=" + failingTests + + ", assumptionFailingTests=" + assumptionFailingTests + + ", ignoredTests=" + ignoredTests + + '}'; + } + } diff --git a/src/main/java/eu/stamp_project/testrunner/listener/junit4/OnlineCoveredTestResultsPerJUnit4TestMethod.java b/src/main/java/eu/stamp_project/testrunner/listener/junit4/OnlineCoveredTestResultsPerJUnit4TestMethod.java index ffb5b75b..36e1c3e3 100644 --- a/src/main/java/eu/stamp_project/testrunner/listener/junit4/OnlineCoveredTestResultsPerJUnit4TestMethod.java +++ b/src/main/java/eu/stamp_project/testrunner/listener/junit4/OnlineCoveredTestResultsPerJUnit4TestMethod.java @@ -5,124 +5,129 @@ import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; import eu.stamp_project.testrunner.listener.TestResult; import eu.stamp_project.testrunner.listener.impl.OnlineCoveredTestResultPerTestMethodImpl; +import eu.stamp_project.testrunner.listener.utils.ListenerUtils; import eu.stamp_project.testrunner.runner.Failure; import org.junit.runner.Description; import java.util.List; import java.util.Map; +import java.util.Set; public class OnlineCoveredTestResultsPerJUnit4TestMethod extends JUnit4TestResult implements CoveredTestResultPerTestMethod { - private static final long serialVersionUID = -8098503960956110904L; - - private final OnlineCoveredTestResultPerTestMethodImpl internalCoveredTestResult; - - public OnlineCoveredTestResultsPerJUnit4TestMethod(List classesDirectory, CoverageTransformer coverageTransformer) { - this.internalCoveredTestResult = new OnlineCoveredTestResultPerTestMethodImpl(classesDirectory, coverageTransformer); - } - - @Override - public synchronized void testStarted(Description description) throws Exception { - this.internalCoveredTestResult.setSessionId(this.toString.apply(description)); - this.internalCoveredTestResult.reset(); - } - - @Override - public synchronized void testFinished(Description description) throws Exception { - this.internalCoveredTestResult.getRunningTests().add(this.toString.apply(description)); - this.internalCoveredTestResult.collect(); - - Coverage jUnit4Coverage = - internalCoveredTestResult.getCoverageTransformer().transformJacocoObject( - this.internalCoveredTestResult.getExecutionData(), - this.internalCoveredTestResult.getClassesDirectory() - ); - - this.internalCoveredTestResult.getCoverageResultsMap().put(this.toString.apply(description), jUnit4Coverage); - } - - @Override - public void testFailure(org.junit.runner.notification.Failure failure) throws Exception { - this.internalCoveredTestResult.getFailingTests().add( - new Failure( - this.toString.apply(failure.getDescription()), - failure.getDescription().getClassName(), - failure.getException() - ) - ); - } - - @Override - public void testAssumptionFailure(org.junit.runner.notification.Failure failure) { - this.internalCoveredTestResult.getAssumptionFailingTests().add( - new Failure( - this.toString.apply(failure.getDescription()), - failure.getDescription().getClassName(), - failure.getException() - ) - ); - } - - @Override - public void testIgnored(Description description) throws Exception { - this.internalCoveredTestResult.getIgnoredTests().add(this.toString.apply(description)); - } - - @Override - public Map getCoverageResultsMap() { - return this.internalCoveredTestResult.getCoverageResultsMap(); - } - - @Override - public Coverage getCoverageOf(String testMethodName) { - return this.internalCoveredTestResult.getCoverageOf(testMethodName); - } - - @Override - public List getRunningTests() { - return this.internalCoveredTestResult.getRunningTests(); - } - - @Override - public List getPassingTests() { - return this.internalCoveredTestResult.getPassingTests(); - } - - @Override - public TestResult aggregate(TestResult that) { - if (that instanceof OnlineCoveredTestResultsPerJUnit4TestMethod) { - return this.internalCoveredTestResult.aggregate(((OnlineCoveredTestResultsPerJUnit4TestMethod) that).internalCoveredTestResult); - } else { - return this; - } - } - - @Override - public List getFailingTests() { - return this.internalCoveredTestResult.getFailingTests(); - } - - @Override - public List getAssumptionFailingTests() { - return this.internalCoveredTestResult.getAssumptionFailingTests(); - } - - @Override - public List getIgnoredTests() { - return this.internalCoveredTestResult.getIgnoredTests(); - } - - @Override - public Failure getFailureOf(String testMethodName) { - return this.getFailingTests().stream() - .filter(failure -> failure.testCaseName.equals(testMethodName)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException(String.format("Could not find %s in failing test", testMethodName))); - } - - @Override - public void save() { - this.internalCoveredTestResult.save(); - } + private static final long serialVersionUID = -8098503960956110904L; + + private final OnlineCoveredTestResultPerTestMethodImpl internalCoveredTestResult; + + public OnlineCoveredTestResultsPerJUnit4TestMethod(List classesDirectory, CoverageTransformer coverageTransformer) { + this.internalCoveredTestResult = new OnlineCoveredTestResultPerTestMethodImpl(classesDirectory, coverageTransformer); + } + + @Override + public synchronized void testStarted(Description description) throws Exception { + this.internalCoveredTestResult.setSessionId(this.toString.apply(description)); + this.internalCoveredTestResult.reset(); + } + + @Override + public synchronized void testFinished(Description description) throws Exception { + this.internalCoveredTestResult.getRunningTests().add(this.toString.apply(description)); + + this.internalCoveredTestResult.collect(); + + this.internalCoveredTestResult.getExecutionDataStoreMap().put( + this.toString.apply(description), + ListenerUtils.cloneExecutionDataStore(this.internalCoveredTestResult.getExecutionData()) + ); + } + + @Override + public void testFailure(org.junit.runner.notification.Failure failure) throws Exception { + this.internalCoveredTestResult.getFailingTests().add( + new Failure( + this.toString.apply(failure.getDescription()), + failure.getDescription().getClassName(), + failure.getException() + ) + ); + } + + @Override + public void testAssumptionFailure(org.junit.runner.notification.Failure failure) { + this.internalCoveredTestResult.getAssumptionFailingTests().add( + new Failure( + this.toString.apply(failure.getDescription()), + failure.getDescription().getClassName(), + failure.getException() + ) + ); + } + + @Override + public void testIgnored(Description description) throws Exception { + this.internalCoveredTestResult.getIgnoredTests().add(this.toString.apply(description)); + } + + @Override + public Map getCoverageResultsMap() { + return this.internalCoveredTestResult.getCoverageResultsMap(); + } + + @Override + public Coverage getCoverageOf(String testMethodName) { + return this.internalCoveredTestResult.getCoverageOf(testMethodName); + } + + @Override + public Set getRunningTests() { + return this.internalCoveredTestResult.getRunningTests(); + } + + @Override + public Set getPassingTests() { + return this.internalCoveredTestResult.getPassingTests(); + } + + @Override + public TestResult aggregate(TestResult that) { + if (that instanceof OnlineCoveredTestResultsPerJUnit4TestMethod) { + return this.internalCoveredTestResult.aggregate(((OnlineCoveredTestResultsPerJUnit4TestMethod) that).internalCoveredTestResult); + } else { + return this; + } + } + + @Override + public Set getFailingTests() { + return this.internalCoveredTestResult.getFailingTests(); + } + + @Override + public Set getAssumptionFailingTests() { + return this.internalCoveredTestResult.getAssumptionFailingTests(); + } + + @Override + public Set getIgnoredTests() { + return this.internalCoveredTestResult.getIgnoredTests(); + } + + @Override + public Failure getFailureOf(String testMethodName) { + return this.getFailingTests().stream() + .filter(failure -> failure.testCaseName.equals(testMethodName)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(String.format("Could not find %s in failing test", testMethodName))); + } + + @Override + public void save() { + this.internalCoveredTestResult.save(); + } + + @Override + public void computeCoverages() { + this.internalCoveredTestResult.computeCoverages(); + } } diff --git a/src/main/java/eu/stamp_project/testrunner/listener/junit5/OnlineCoveredTestResultsPerJUnit5TestMethod.java b/src/main/java/eu/stamp_project/testrunner/listener/junit5/OnlineCoveredTestResultsPerJUnit5TestMethod.java new file mode 100644 index 00000000..41e13319 --- /dev/null +++ b/src/main/java/eu/stamp_project/testrunner/listener/junit5/OnlineCoveredTestResultsPerJUnit5TestMethod.java @@ -0,0 +1,86 @@ +package eu.stamp_project.testrunner.listener.junit5; + +import eu.stamp_project.testrunner.listener.Coverage; +import eu.stamp_project.testrunner.listener.CoverageTransformer; +import eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod; +import eu.stamp_project.testrunner.listener.impl.OnlineCoveredTestResultPerTestMethodImpl; +import eu.stamp_project.testrunner.listener.utils.ListenerUtils; +import eu.stamp_project.testrunner.runner.Failure; +import org.junit.platform.engine.TestExecutionResult; +import org.junit.platform.launcher.TestIdentifier; + +import java.util.List; +import java.util.Map; + +public class OnlineCoveredTestResultsPerJUnit5TestMethod extends JUnit5TestResult implements CoveredTestResultPerTestMethod { + + private static final long serialVersionUID = -6377245801235679892L; + + private final OnlineCoveredTestResultPerTestMethodImpl internalCoveredTestResult; + + public OnlineCoveredTestResultsPerJUnit5TestMethod(List classesDirectory, CoverageTransformer coverageTransformer) { + this.internalCoveredTestResult = new OnlineCoveredTestResultPerTestMethodImpl(classesDirectory, coverageTransformer); + } + + @Override + public void executionSkipped(TestIdentifier testIdentifier, String reason) { + if (testIdentifier.isTest()) { + this.internalCoveredTestResult.getIgnoredTests().add(this.toString.apply(testIdentifier)); + } + } + + @Override + public synchronized void executionStarted(TestIdentifier testIdentifier) { + if (testIdentifier.isTest()) { + this.internalCoveredTestResult.setSessionId(this.toString.apply(testIdentifier)); + this.internalCoveredTestResult.reset(); + this.internalCoveredTestResult.getRunningTests().add(this.toString.apply(testIdentifier)); + } + } + + @Override + public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) { + if (testIdentifier.isTest()) { + this.internalCoveredTestResult.collect(); + + this.internalCoveredTestResult.getExecutionDataStoreMap().put( + this.toString.apply(testIdentifier), + ListenerUtils.cloneExecutionDataStore(this.internalCoveredTestResult.getExecutionData()) + ); + + switch (testExecutionResult.getStatus()) { + case FAILED: + this.internalCoveredTestResult.getFailingTests().add( + new Failure( + this.toString.apply(testIdentifier), + this.toClassName.apply(testIdentifier), + testExecutionResult.getThrowable().get() + ) + ); + break; + default: + break; + } + } + } + + @Override + public Map getCoverageResultsMap() { + return this.internalCoveredTestResult.getCoverageResultsMap(); + } + + @Override + public Coverage getCoverageOf(String testMethodName) { + return this.internalCoveredTestResult.getCoverageOf(testMethodName); + } + + @Override + public synchronized void save() { + this.internalCoveredTestResult.save(); + } + + @Override + public void computeCoverages() { + this.internalCoveredTestResult.computeCoverages(); + } +} diff --git a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4OnlineJacocoRunner.java b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4OnlineJacocoRunner.java index 541ed232..3bab4c0f 100644 --- a/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4OnlineJacocoRunner.java +++ b/src/main/java/eu/stamp_project/testrunner/runner/coverage/JUnit4OnlineJacocoRunner.java @@ -30,6 +30,7 @@ protected CoveredTestResultPerTestMethod executeCoveredTestPerTestMethod(List classesDirectory, List testClassesDirectory, CoverageTransformer coverageTransformer) { + this(classesDirectory, testClassesDirectory, Collections.emptyList(), coverageTransformer); + } + + public JUnit5OnlineJacocoRunner(List classesDirectory, List testClassesDirectory, List blackList, CoverageTransformer coverageTransformer) { + super(classesDirectory, testClassesDirectory, blackList, coverageTransformer); + } + + @Override + protected CoveredTestResultPerTestMethod executeCoveredTestPerTestMethod(List classesDirectory, String[] testClassNames, String[] testMethodNames) { + final OnlineCoveredTestResultsPerJUnit5TestMethod listener = new OnlineCoveredTestResultsPerJUnit5TestMethod(classesDirectory, coverageTransformer); + JUnit5Runner.run( + testClassNames, + testMethodNames, + Collections.emptyList(), + (JUnit5TestResult) listener, + JUnit5OnlineJacocoRunner.class.getClassLoader() + ); + listener.computeCoverages(); + return listener; + } + + public static void main(String[] args) { + final ParserOptions options = ParserOptions.parse(args); + new JUnit5OnlineJacocoRunner( + options.getPathToCompiledClassesOfTheProject(), + options.getPathToCompiledTestClassesOfTheProject(), + options.getBlackList(), + options.getCoverageTransformer() + ).runCoveredTestResultPerTestMethod( + options.getPathToCompiledClassesOfTheProject(), + options.getPathToCompiledTestClassesOfTheProject(), + options.getFullQualifiedNameOfTestClassesToRun(), + options.getTestMethodNamesToRun() + ).save(); + } +} diff --git a/src/test/java/eu/stamp_project/testrunner/EntryPointJUnit5Test.java b/src/test/java/eu/stamp_project/testrunner/EntryPointJUnit5Test.java index 0475d59a..b64e58d7 100644 --- a/src/test/java/eu/stamp_project/testrunner/EntryPointJUnit5Test.java +++ b/src/test/java/eu/stamp_project/testrunner/EntryPointJUnit5Test.java @@ -13,7 +13,6 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import org.junit.jupiter.api.extension.ExtensionContext; import java.io.ByteArrayOutputStream; import java.io.PrintStream; @@ -21,7 +20,6 @@ import java.util.concurrent.TimeoutException; import static org.junit.Assert.*; -import static org.junit.Assert.assertEquals; /** * created by Benjamin DANGLOT @@ -486,6 +484,45 @@ Test the runCoveredTestResultPerTestMethods() of EntryPoint. assertEquals(EntryPointTest.NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test8").getInstructionsTotal()); } + @Test + public void testRunOnlineCoveredTestResultPerTestMethods() throws Exception { + EntryPoint.coverageDetail = ParserOptions.CoverageTransformerDetail.DETAIL_COMPRESSED; + EntryPoint.jacocoAgentIncludes = "example.*:tobemocked.*"; + EntryPoint.jacocoAgentExcludes = "junit5.TestSuiteExample"; + + /* + Test the runOnlineCoveredTestResultPerTestMethods() of EntryPoint. + It should return the CoveredTestResultPerTestMethod with the instruction coverage computed by Jacoco. + */ + final String classpath = JUNIT_CP + ConstantsHelper.PATH_SEPARATOR + JUNIT5_CP; + + final CoveredTestResultPerTestMethod coveredTestResultPerTestMethod = EntryPoint.runOnlineCoveredTestResultPerTestMethods( + classpath + ConstantsHelper.PATH_SEPARATOR + SOURCE_PROJECT_CLASSES + ConstantsHelper.PATH_SEPARATOR + TEST_PROJECT_CLASSES, + SOURCE_PROJECT_CLASSES + ConstantsHelper.PATH_SEPARATOR + TEST_PROJECT_CLASSES, + "junit5.TestSuiteExample", + new String[]{"test8", "test3"} + ); + + // Assert test results + assertEquals(2, coveredTestResultPerTestMethod.getRunningTests().size()); + assertEquals(2, coveredTestResultPerTestMethod.getPassingTests().size()); + assertEquals(0, coveredTestResultPerTestMethod.getFailingTests().size()); + assertEquals(0, coveredTestResultPerTestMethod.getIgnoredTests().size()); + + // Assert detailed coverage + assertEquals(2, coveredTestResultPerTestMethod.getCoverageResultsMap().size()); + + assertTrue(coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test3") instanceof CoverageDetailed); + CoverageDetailed coverageDetailed = (CoverageDetailed) coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test3"); + assertNotNull(coverageDetailed.getDetailedCoverage()); + assertEquals(1, coverageDetailed.getDetailedCoverage().size()); + + assertTrue(coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test8") instanceof CoverageDetailed); + coverageDetailed = (CoverageDetailed) coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test8"); + assertNotNull(coverageDetailed.getDetailedCoverage()); + assertEquals(1, coverageDetailed.getDetailedCoverage().size()); + } + // Tests when running same named test methods from different classes @Test public void testRunCoveredTestResultPerTestMethodsSameNamedMethodsDetailedCoverage() throws Exception { diff --git a/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java b/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java index 0427371b..4ea5a719 100644 --- a/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java +++ b/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java @@ -557,9 +557,12 @@ Test the runCoveredTestResultPerTestMethods() of EntryPoint. @Test public void testRunOnlineCoveredTestResultPerTestMethods() throws Exception { + EntryPoint.coverageDetail = ParserOptions.CoverageTransformerDetail.DETAIL_COMPRESSED; + EntryPoint.jacocoAgentIncludes = "example.*:tobemocked.*"; + EntryPoint.jacocoAgentExcludes = "example.TestSuiteExample"; /* - Test the runCoveredTestResultPerTestMethods() of EntryPoint. + Test the runOnlineCoveredTestResultPerTestMethods() of EntryPoint. It should return the CoveredTestResult with the instruction coverage computed by Jacoco. */ final String classpath = JUNIT_CP + ConstantsHelper.PATH_SEPARATOR + JUNIT5_CP; @@ -577,12 +580,18 @@ Test the runCoveredTestResultPerTestMethods() of EntryPoint. assertEquals(0, coveredTestResultPerTestMethod.getFailingTests().size()); assertEquals(0, coveredTestResultPerTestMethod.getIgnoredTests().size()); - // Assert coverage + // Assert detailed coverage assertEquals(2, coveredTestResultPerTestMethod.getCoverageResultsMap().size()); - assertEquals(23, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test3").getInstructionsCovered()); - assertEquals(NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test3").getInstructionsTotal()); - assertEquals(23, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8").getInstructionsCovered()); - assertEquals(NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8").getInstructionsTotal()); + + assertTrue(coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test3") instanceof CoverageDetailed); + CoverageDetailed coverageDetailed = (CoverageDetailed) coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test3"); + assertNotNull(coverageDetailed.getDetailedCoverage()); + assertEquals(1, coverageDetailed.getDetailedCoverage().size()); + + assertTrue(coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8") instanceof CoverageDetailed); + coverageDetailed = (CoverageDetailed) coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8"); + assertNotNull(coverageDetailed.getDetailedCoverage()); + assertEquals(1, coverageDetailed.getDetailedCoverage().size()); } @Ignore From a90e6ef8529f01b58841cb2790ab780784192cb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Tue, 17 Aug 2021 18:05:01 +0200 Subject: [PATCH 3/6] Add `jacocoagent.jar` resource MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Silva --- src/main/resources/jacocoagent.jar | Bin 0 -> 292059 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/jacocoagent.jar diff --git a/src/main/resources/jacocoagent.jar b/src/main/resources/jacocoagent.jar new file mode 100644 index 0000000000000000000000000000000000000000..653955c388913bc1da48628861590a3e9fcba6a6 GIT binary patch literal 292059 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%0DG$(7sZl>Q>4`CDUtuA}8!@Opmyr5ko7La9LMeh% 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

Pum+I0MHE44{qnHf@)g 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�d4Zz#fPl)=eq>O&S;!eMh(f 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 z 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 z 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 literal 0 HcmV?d00001 From 4adea1c138b6ae2ce564981cfe57ae04ad51d594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Tue, 17 Aug 2021 19:13:10 +0200 Subject: [PATCH 4/6] Fix jacoco version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Silva --- index.html | 115 ----------------------------------------------------- pom.xml | 2 +- 2 files changed, 1 insertion(+), 116 deletions(-) delete mode 100644 index.html diff --git a/index.html b/index.html deleted file mode 100644 index f72e6981..00000000 --- a/index.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - JaCoCo - Java Code Coverage Library - - - -

-
- -

JaCoCo - Java Code Coverage Library

- -

- JaCoCo is a free Java code coverage library distributed under the - Eclipse Public License. Check - http://www.jacoco.org/jacoco for updates and feedback. -

- -

- This is the distribution of version 0.8.7.202105040129 created on - 2021/05/04 based on commit - d19ea595a67af6f16d76b49ccdc12858c3570298. -

- -

Contents

- - - -

- The JaCoCo distribution contains the following libraries in the - ./lib folder: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileOSGi BundleDescriptionDependencies
jacocoagent.jarnoJava agent for execution data recording- (all dependencies included)
jacocoant.jarnoJaCoCo Ant tasksAnt (all other dependencies included)
jacococli.jarnoJaCoCo Command Line Interface- (all dependencies included)
org.jacoco.agent_0.8.7.202105040129.jaryesJaCoCo agent-
org.jacoco.core_0.8.7.202105040129.jaryesJaCoCo coreASM
org.jacoco.report_0.8.7.202105040129.jaryesJaCoCo reportingorg.jacoco.core, ASM
org.jacoco.ant_0.8.7.202105040129.jaryesJaCoCo Ant tasksorg.jacoco.core, org.jacoco.agent, org.jacoco.report, ASM, Ant
- -

- All libraries as well as the the JaCoCo Maven plug-in - are also available from the Maven repository. -

- -
- - - - diff --git a/pom.xml b/pom.xml index 89a35061..abf4e8ed 100644 --- a/pom.xml +++ b/pom.xml @@ -251,7 +251,7 @@ org.jacoco jacoco-maven-plugin - 0.7.5.201505241946 + 0.8.7 From d8c937d7e4d214c4548064560a5f7124befc1c64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Wed, 18 Aug 2021 11:11:25 +0200 Subject: [PATCH 5/6] Replace coveralls with codecov MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Silva --- src/main/java/eu/stamp_project/testrunner/EntryPoint.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/stamp_project/testrunner/EntryPoint.java b/src/main/java/eu/stamp_project/testrunner/EntryPoint.java index a9012c8f..97093a48 100644 --- a/src/main/java/eu/stamp_project/testrunner/EntryPoint.java +++ b/src/main/java/eu/stamp_project/testrunner/EntryPoint.java @@ -633,7 +633,7 @@ public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMe getJavaCommand(), (classpath + ConstantsHelper.PATH_SEPARATOR + ABSOLUTE_PATH_TO_RUNNER_CLASSES + ConstantsHelper.PATH_SEPARATOR + ABSOLUTE_PATH_TO_JACOCO_DEPENDENCIES).replaceAll(" ", "%20"), - "-javaagent:" + jacocoAgentJar.getAbsolutePath() + "=dumponexit=false" + + "-javaagent:" + jacocoAgentJar.getAbsolutePath() + "=destfile=test-runner.exec,dumponexit=false" + (EntryPoint.jacocoAgentIncludes != null ? (",includes=" + EntryPoint.jacocoAgentIncludes) : "") + (EntryPoint.jacocoAgentIncludes != null ? (",excludes=" + EntryPoint.jacocoAgentExcludes) : ""), EntryPoint.jUnit5Mode ? EntryPoint.JUNIT5_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME : EntryPoint.JUNIT4_ONLINE_JACOCO_RUNNER_COVERED_RESULT_PER_TEST_QUALIFIED_NAME, @@ -658,6 +658,9 @@ public static CoveredTestResultPerTestMethod runOnlineCoveredTestResultPerTestMe LOGGER.warn("Timeout when running {}", javaCommand); throw e; } + // Delete test-runner.exec file + new File(EntryPoint.workingDirectory, "test-runner.exec").delete(); + final CoveredTestResultPerTestMethod load = OnlineCoveredTestResultPerTestMethodImpl.load(); if (EntryPoint.verbose) { LOGGER.info("Coverage per test methods has been computed {}{}", ConstantsHelper.LINE_SEPARATOR, From 18e6ed2d2a161aba93011792001363e73215ff79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Wed, 18 Aug 2021 14:09:21 +0200 Subject: [PATCH 6/6] Add tests and documentation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Silva --- README.md | 17 ++++++++++ .../testrunner/EntryPointJUnit5Test.java | 32 +++++++++++++++++++ .../testrunner/EntryPointTest.java | 32 +++++++++++++++++++ 3 files changed, 81 insertions(+) diff --git a/README.md b/README.md index c959eb4c..4128303a 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,13 @@ The output of all `runCoveragePerTestMethods()` API is a [`eu.stamp_project.test In the same way, you can have the covered results per test method using `runCoveredTestResultPerTestMethods()` API of `EntryPoint` class. +#### Online covered results per test method + +In the same way, you can have the covered results per test method using `runOnlineCoveredTestResultPerTestMethods()` API of `EntryPoint` class. + +Note that, in this case, all covered classes will be instrumented and recorded by default, or according to the jacoco parameters `includes` and `excludes` +available through `EntryPoint.jacocoAgentIncludes` and `EntryPoint.jacocoAgentExcludes` respectively. + ##### Output The output of all `runCoveredTestResultPerTestMethods()` API is a [`eu.stamp_project.testrunner.listener.CoveredTestResultPerTestMethod`](https://github.com/STAMP-project/testrunner/blob/master/src/main/java/eu/stamp_project/testrunner/listener/CoveragePerTestMethod.java#L13). @@ -142,6 +149,14 @@ The output of all `runCoveredTestResultPerTestMethods()` API is a [`eu.stamp_pro * `getAssumptionFailingTests()`: returns the list of test methods that have a failing assumption. For example, in JUnit4 one can make assumptions using `org.junit.Assume` API, _e.g._ `Assume.assumeTrue(myBoolean)`. If the assumption does not hold, it is not necessary because the program is broken but rather than the test is irrelevant in the current state, _e.g._ one can make dedicated test to a platform. * `getIgnoredTests()`: returns the list of test methods that are ignored. +###### WARNING: Detailed compressed coverage + +Unlike other coverage transformers, which analyze the classes available under the source binary directories, this transformer +analyzes all classes whose execution was recorded by jacoco, loading them from the system's classloader. + +Using this transformer outside the online mode provided through `runOnlineCoveredTestResultPerTestMethods` might +result in classloading issues, as the executed classes may not be available or coherent between different classloaders. + #### Mutation Score The test runner can now compute the mutation using [PIT](http://pitest.org). @@ -186,6 +201,8 @@ In `EntryPoint` class, you have access to several fields that allow to configure * `MutationEngine mutationEngine`: configure the mutation engine to be used. Possible values are `MutationEngine.DESCARTES` or `MutationEngine.GREGOR`. Default is `MutationEngine.DESCARTES`. You must use the accessor to set this value, see [EntryPoint#setMutationEngine(ConstantsHelper.MutationEngine mutationEngine)](https://github.com/STAMP-project/testrunner/blob/master/src/main/java/eu/stamp_project/testrunner/EntryPoint.java#L156). * `List pitMutators`: List of mutators to be used. These mutators are designed by a string. They must match with the used mutation engine. By default, it uses the default mutators for descartes and the mutator `ALL` for gregor. This value is modified when you change the mutation engine with [EntryPoint#setMutationEngine(ConstantsHelper.MutationEngine mutationEngine)](https://github.com/STAMP-project/testrunner/blob/master/src/main/java/eu/stamp_project/testrunner/EntryPoint.java#L156). * `AbstractParser.OutputFormat pitOutputFormat`: specify the output format to be used for the mutation analyzed. Possible values are `AbstractParser.OutputFormat.XML` or `AbstractParser.OutputFormat.CSV`. Default is `AbstractParser.OutputFormat.XML`. The `AbstractParser.OutputFormat.XML` contains more information than the `AbstractParser.OutputFormat.CSV`. + * `String jacocoAgentIncludes`: used in the online mode of coverage computation. Passed to the jacoco agent as the `includes` option. + * `String jacocoAgentExcludes`: used in the online mode of coverage computation. Passed to the jacoco agent as the `excludes` option. ## Dependency: diff --git a/src/test/java/eu/stamp_project/testrunner/EntryPointJUnit5Test.java b/src/test/java/eu/stamp_project/testrunner/EntryPointJUnit5Test.java index b64e58d7..149bc96b 100644 --- a/src/test/java/eu/stamp_project/testrunner/EntryPointJUnit5Test.java +++ b/src/test/java/eu/stamp_project/testrunner/EntryPointJUnit5Test.java @@ -486,6 +486,38 @@ Test the runCoveredTestResultPerTestMethods() of EntryPoint. @Test public void testRunOnlineCoveredTestResultPerTestMethods() throws Exception { + EntryPoint.jacocoAgentIncludes = "example.*:tobemocked.*"; + EntryPoint.jacocoAgentExcludes = "junit5.TestSuiteExample"; + + /* + Test the runOnlineCoveredTestResultPerTestMethods() of EntryPoint. + It should return the CoveredTestResultPerTestMethod with the instruction coverage computed by Jacoco. + */ + final String classpath = JUNIT_CP + ConstantsHelper.PATH_SEPARATOR + JUNIT5_CP; + + final CoveredTestResultPerTestMethod coveredTestResultPerTestMethod = EntryPoint.runOnlineCoveredTestResultPerTestMethods( + classpath + ConstantsHelper.PATH_SEPARATOR + SOURCE_PROJECT_CLASSES + ConstantsHelper.PATH_SEPARATOR + TEST_PROJECT_CLASSES, + SOURCE_PROJECT_CLASSES + ConstantsHelper.PATH_SEPARATOR + TEST_PROJECT_CLASSES, + "junit5.TestSuiteExample", + new String[]{"test8", "test3"} + ); + + // Assert test results + assertEquals(2, coveredTestResultPerTestMethod.getRunningTests().size()); + assertEquals(2, coveredTestResultPerTestMethod.getPassingTests().size()); + assertEquals(0, coveredTestResultPerTestMethod.getFailingTests().size()); + assertEquals(0, coveredTestResultPerTestMethod.getIgnoredTests().size()); + + // Assert coverage + assertEquals(2, coveredTestResultPerTestMethod.getCoverageResultsMap().size()); + assertEquals(23, coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test3").getInstructionsCovered()); + assertEquals(EntryPointTest.NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test3").getInstructionsTotal()); + assertEquals(23, coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test8").getInstructionsCovered()); + assertEquals(EntryPointTest.NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("junit5.TestSuiteExample#test8").getInstructionsTotal()); + } + + @Test + public void testRunOnlineCoveredTestResultPerTestMethodsDetailedCompressedCoverage() throws Exception { EntryPoint.coverageDetail = ParserOptions.CoverageTransformerDetail.DETAIL_COMPRESSED; EntryPoint.jacocoAgentIncludes = "example.*:tobemocked.*"; EntryPoint.jacocoAgentExcludes = "junit5.TestSuiteExample"; diff --git a/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java b/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java index 4ea5a719..dd74b5a8 100644 --- a/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java +++ b/src/test/java/eu/stamp_project/testrunner/EntryPointTest.java @@ -557,6 +557,38 @@ Test the runCoveredTestResultPerTestMethods() of EntryPoint. @Test public void testRunOnlineCoveredTestResultPerTestMethods() throws Exception { + EntryPoint.jacocoAgentIncludes = "example.*:tobemocked.*"; + EntryPoint.jacocoAgentExcludes = "example.TestSuiteExample"; + + /* + Test the runOnlineCoveredTestResultPerTestMethods() of EntryPoint. + It should return the CoveredTestResult with the instruction coverage computed by Jacoco. + */ + final String classpath = JUNIT_CP + ConstantsHelper.PATH_SEPARATOR + JUNIT5_CP; + + final CoveredTestResultPerTestMethod coveredTestResultPerTestMethod = EntryPoint.runOnlineCoveredTestResultPerTestMethods( + classpath + ConstantsHelper.PATH_SEPARATOR + SOURCE_PROJECT_CLASSES + ConstantsHelper.PATH_SEPARATOR + TEST_PROJECT_CLASSES, + SOURCE_PROJECT_CLASSES + ConstantsHelper.PATH_SEPARATOR + TEST_PROJECT_CLASSES, + "example.TestSuiteExample", + new String[]{"test8", "test3"} + ); + + // Assert test results + assertEquals(2, coveredTestResultPerTestMethod.getRunningTests().size()); + assertEquals(2, coveredTestResultPerTestMethod.getPassingTests().size()); + assertEquals(0, coveredTestResultPerTestMethod.getFailingTests().size()); + assertEquals(0, coveredTestResultPerTestMethod.getIgnoredTests().size()); + + // Assert coverage + assertEquals(2, coveredTestResultPerTestMethod.getCoverageResultsMap().size()); + assertEquals(23, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test3").getInstructionsCovered()); + assertEquals(NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test3").getInstructionsTotal()); + assertEquals(23, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8").getInstructionsCovered()); + assertEquals(NUMBER_OF_INSTRUCTIONS, coveredTestResultPerTestMethod.getCoverageOf("example.TestSuiteExample#test8").getInstructionsTotal()); + } + + @Test + public void testRunOnlineCoveredTestResultPerTestMethodsDetailedCompressedCoverage() throws Exception { EntryPoint.coverageDetail = ParserOptions.CoverageTransformerDetail.DETAIL_COMPRESSED; EntryPoint.jacocoAgentIncludes = "example.*:tobemocked.*"; EntryPoint.jacocoAgentExcludes = "example.TestSuiteExample";