Commit c3f5153f authored by Lukas Wiest's avatar Lukas Wiest 🚂
Browse files

Merge branch 'feat-dtt-transition' into 'master'

Feat dtt transition

See merge request HFTSoftwareProject/modocot-openjdk11-junit5-jupiter-testrunner!1
parents da1f504a 0a0c6876
from openjdk:11-jdk-slim
env MODOCOT_BASEDIR /modocot
env MODOCOT_TESTDIR $MODOCOT_BASEDIR/test
env MODOCOT_SOURCEDIR $MODOCOT_BASEDIR/src
env MODOCOT_RESULTDIR $MODOCOT_BASEDIR/result
env MODOCOT_LIBSDIR $MODOCOT_BASEDIR/libs
env BASEDIR /data
env TESTDIR $BASEDIR/test
env SOURCEDIR $BASEDIR/src
env RESULTDIR $BASEDIR/result
env LIBSDIR $BASEDIR/libs
run mkdir -p $MODOCOT_TESTDIR \
&& mkdir $MODOCOT_SOURCEDIR \
&& mkdir $MODOCOT_RESULTDIR \
&& mkdir -p /$MODOCOT_LIBSDIR/additional
run mkdir -p $TESTDIR \
&& mkdir $SOURCEDIR \
&& mkdir $RESULTDIR \
&& mkdir -p /$LIBSDIR/additional
add target/modocot-openjdk11-junit5-runner-jar-with-dependencies.jar /$MODOCOT_BASEDIR/app.jar
add https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.jar /$MODOCOT_LIBSDIR/
add https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0.jar /$MODOCOT_LIBSDIR/
add https://repo1.maven.org/maven2/org/apiguardian/apiguardian-api/1.1.1/apiguardian-api-1.1.1.jar /$MODOCOT_LIBSDIR/
add https://repo1.maven.org/maven2/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar /$MODOCOT_LIBSDIR/
add target/dtt-openjdk11-junit5-runner-jar-with-dependencies.jar /$BASEDIR/app.jar
add https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.jar /$LIBSDIR/
add https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0.jar /$LIBSDIR/
add https://repo1.maven.org/maven2/org/apiguardian/apiguardian-api/1.1.1/apiguardian-api-1.1.1.jar /$LIBSDIR/
add https://repo1.maven.org/maven2/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar /$LIBSDIR/
workdir /modocot
workdir $BASEDIR
entrypoint java -Djava.security.egd=file:/dev/./urandom -jar /modocot/app.jar "$MODOCOT_SOURCEDIR/src:$MODOCOT_TESTDIR/test" "$MODOCOT_LIBSDIR/*:$MODOCOT_TESTDIR/libs/*" $MODOCOT_RESULTDIR
entrypoint java -Djava.security.egd=file:/dev/./urandom -jar /$BASEDIR/app.jar "$SOURCEDIR/src:$TESTDIR/test" "$LIBSDIR/*:$TESTDIR/libs/*" $RESULTDIR
......@@ -4,7 +4,7 @@ def version = ""
pipeline {
environment {
registry = "hftstuttgart/modocot-openjdk11-junit5-testrunner"
registry = "hftstuttgart/dtt-openjdk11-junit5-testrunner"
registryCredential = 'Dockerhub'
dockerImage = ''
}
......
......@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>de.hftstuttgart</groupId>
<artifactId>modocot-openjdk11-junit5-runner</artifactId>
<artifactId>dtt-openjdk11-junit5-runner</artifactId>
<version>${buildNumber}</version>
<packaging>jar</packaging>
......@@ -72,7 +72,7 @@
<configuration>
<archive>
<manifest>
<mainClass>de.hftstuttgart.modocot.Testrunner</mainClass>
<mainClass>de.hftstuttgart.dtt.Testrunner</mainClass>
</manifest>
</archive>
<descriptorRefs>
......
package de.hftstuttgart.modocot;
package de.hftstuttgart.dtt;
import de.hftstuttgart.modocot.model.ModocotResult;
import de.hftstuttgart.modocot.model.ModocotResultSummary;
import de.hftstuttgart.modocot.util.ModocotSummaryGeneratingListener;
import de.hftstuttgart.dtt.model.Result;
import de.hftstuttgart.dtt.model.ResultSummary;
import de.hftstuttgart.dtt.util.MySummaryGeneratingListener;
import com.fasterxml.jackson.databind.ObjectMapper;
......@@ -71,7 +71,7 @@ public class Testrunner
sourceFolders = args[0].split(":");
libraryFolders = args[1].split(":");
resultFolder = args[2];
classFolder = Files.createTempDirectory("modocot-testrunner").toAbsolutePath().toString();
classFolder = Files.createTempDirectory("testrunner").toAbsolutePath().toString();
// finding all source files
Set<File> sourceFiles = new HashSet<>();
......@@ -81,13 +81,13 @@ public class Testrunner
}
// call compilation and generate Results for failed compiles
Set<ModocotResult> compilationErrors = generateCompileResults(compile(sourceFiles, new File(classFolder)));
Set<Result> compilationErrors = generateCompileResults(compile(sourceFiles, new File(classFolder)));
// run unit tests found in the compiled class files
ModocotResultSummary resultSummary = runTests();
ResultSummary resultSummary = runTests();
// add compilation errors to summary
resultSummary.compilationErrors = compilationErrors;
resultSummary.results.addAll(compilationErrors);
// serialize result
writeResult(resultSummary);
......@@ -208,16 +208,16 @@ public class Testrunner
return URLClassLoader.newInstance(urls, parentClassLoader);
}
public static Set<ModocotResult> generateCompileResults(List<Diagnostic> compilationErrors)
public static Set<Result> generateCompileResults(List<Diagnostic> compilationErrors)
{
return compilationErrors.stream().map(e ->
{
ModocotResult result = new ModocotResult();
Result result = new Result();
Pattern pattern = Pattern.compile(String.format("^.*%s(.*\\.java).*$", File.separator));
Matcher matcher = pattern.matcher(String.valueOf(e.getSource()));
result.name = (matcher.matches() && matcher.group(1) != null) ? matcher.group(1) : String.valueOf(e.getSource());
result.state = ModocotResult.State.FAILURE.ordinal();
result.state = Result.State.COMPILATIONERROR.ordinal();
result.failureReason = e.getMessage(Locale.ENGLISH);
result.failureType = "Compilation Failed";
result.stacktrace = e.toString();
......@@ -231,7 +231,7 @@ public class Testrunner
.collect(Collectors.toCollection(HashSet::new));
}
public static ModocotResultSummary generateResultSummary(TestExecutionSummary summary, Set<TestIdentifier> successes)
public static ResultSummary generateResultSummary(TestExecutionSummary summary, Set<TestIdentifier> successes)
{
LOG.info("JUnit results:");
LOG.info(String.format(
......@@ -246,22 +246,22 @@ public class Testrunner
.reduce((s1, s2) -> s1 + ":" + s2).orElse("-")
));
ModocotResultSummary resultSummary = new ModocotResultSummary();
resultSummary.successes = successes.stream().map(s ->
ResultSummary resultSummary = new ResultSummary();
resultSummary.results.addAll(successes.stream().map(s ->
{
ModocotResult result = new ModocotResult();
Result result = new Result();
result.name = s.getDisplayName();
result.state = ModocotResult.State.SUCCESS.ordinal();
result.state = Result.State.SUCCESS.ordinal();
return result;
})
.collect(Collectors.toCollection(HashSet::new));
.collect(Collectors.toCollection(HashSet::new)));
resultSummary.failures = summary.getFailures().stream().map(f ->
resultSummary.results.addAll(summary.getFailures().stream().map(f ->
{
ModocotResult result = new ModocotResult();
Result result = new Result();
result.name = f.getTestIdentifier().getDisplayName();
result.state = ModocotResult.State.FAILURE.ordinal();
result.state = Result.State.FAILURE.ordinal();
result.failureReason = f.getException().getMessage();
result.failureType = f.getException().getClass().getName();
......@@ -272,12 +272,7 @@ public class Testrunner
return result;
})
.collect(Collectors.toCollection(HashSet::new));
resultSummary.timestamp = System.currentTimeMillis() / 1000;
resultSummary.testCount = (int) summary.getTestsStartedCount();
resultSummary.successCount = resultSummary.successes.size();
resultSummary.failureCount = resultSummary.failures.size();
.collect(Collectors.toCollection(HashSet::new)));
return resultSummary;
}
......@@ -313,7 +308,7 @@ public class Testrunner
return files;
}
public static ModocotResultSummary runTests() throws MalformedURLException
public static ResultSummary runTests() throws MalformedURLException
{
classPathItems = buildClassPathItems(true);
LOG.info("saving original class loader");
......@@ -332,7 +327,7 @@ public class Testrunner
.selectors(DiscoverySelectors.selectClasspathRoots(Collections.singleton(Paths.get(classFolder).toAbsolutePath())))
.build();
ModocotSummaryGeneratingListener listener = new ModocotSummaryGeneratingListener();
MySummaryGeneratingListener listener = new MySummaryGeneratingListener();
Launcher launcher = LauncherFactory.create();
launcher.registerTestExecutionListeners(listener);
......@@ -359,14 +354,14 @@ public class Testrunner
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
LOG.info("generate modocot result summary from junit");
LOG.info("generate result summary from junit");
return generateResultSummary(summary, successes);
}
public static void writeResult(ModocotResultSummary resultSummary) throws IOException
public static void writeResult(ResultSummary resultSummary) throws IOException
{
Path fileName = Paths.get(resultFolder, "result.json");
LOG.info(String.format("serializing modocdot result as json into %s", fileName.toAbsolutePath().toString()));
LOG.info(String.format("serializing result as json into %s", fileName.toAbsolutePath().toString()));
ObjectMapper objectMapper = new ObjectMapper();
objectMapper
.writerWithDefaultPrettyPrinter()
......
package de.hftstuttgart.modocot.model;
package de.hftstuttgart.dtt.model;
public class ModocotResult
public class Result
{
public String name;
public int state;
......@@ -16,8 +16,9 @@ public class ModocotResult
public static enum State
{
UNKNOWN,
SUCCESS,
FAILURE,
UNKNOWN
COMPILATIONERROR,
}
}
package de.hftstuttgart.dtt.model;
import java.util.HashSet;
import java.util.Set;
public class ResultSummary
{
public long timestamp = System.currentTimeMillis() / 1000;
public String globalStacktrace = null;
public Set<Result> results = new HashSet<>();
}
package de.hftstuttgart.modocot.util;
package de.hftstuttgart.dtt.util;
import org.junit.platform.engine.TestDescriptor;
import org.junit.platform.engine.TestExecutionResult;
......@@ -8,7 +8,7 @@ import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
import java.util.HashSet;
import java.util.Set;
public class ModocotSummaryGeneratingListener extends SummaryGeneratingListener
public class MySummaryGeneratingListener extends org.junit.platform.launcher.listeners.SummaryGeneratingListener
{
protected Set<TestIdentifier> successful = new HashSet<>();
......
package de.hftstuttgart.modocot.util.logging;
package de.hftstuttgart.dtt.util.logging;
import java.util.Date;
import java.util.logging.LogRecord;
......
package de.hftstuttgart.modocot.model;
import java.util.Set;
public class ModocotResultSummary
{
public long timestamp;
public int testCount;
public int failureCount;
public int successCount;
public String globalStacktrace;
public Set<ModocotResult> successes;
public Set<ModocotResult> failures;
public Set<ModocotResult> compilationErrors;
}
handlers=java.util.logging.ConsoleHandler
.level = INFO
java.util.logging.ConsoleHandler.level=INFO
java.util.logging.ConsoleHandler.formatter=de.hftstuttgart.modocot.util.logging.CustomFormatter
java.util.logging.ConsoleHandler.formatter=de.hftstuttgart.dtt.util.logging.CustomFormatter
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment