diff --git a/Dockerfile b/Dockerfile index 0bae30ef30f525839a469b77dfa3a578db9afcca..4fb8de9a5a2f41c43aabd450897aa2cea4e24f83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,22 @@ 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 diff --git a/Jenkinsfile b/Jenkinsfile index a3ce380b10d82bc611e3bd6e5ee0defa138c075a..9f7c36de9d99c12093306d2a2605e50cdb68744f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ def version = "" pipeline { environment { - registry = "hftstuttgart/modocot-openjdk11-junit5-testrunner" + registry = "hftstuttgart/dtt-openjdk11-junit5-testrunner" registryCredential = 'Dockerhub' dockerImage = '' } diff --git a/pom.xml b/pom.xml index a1d88292ed85b67e88b7a78f4e5380b544d5a98a..2de56b311d33e88774cd2c5c6ae1c54f80ef5743 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 de.hftstuttgart - modocot-openjdk11-junit5-runner + dtt-openjdk11-junit5-runner ${buildNumber} jar @@ -72,7 +72,7 @@ - de.hftstuttgart.modocot.Testrunner + de.hftstuttgart.dtt.Testrunner diff --git a/src/main/java/de/hftstuttgart/modocot/Testrunner.java b/src/main/java/de/hftstuttgart/dtt/Testrunner.java similarity index 84% rename from src/main/java/de/hftstuttgart/modocot/Testrunner.java rename to src/main/java/de/hftstuttgart/dtt/Testrunner.java index c0d61b36ce2d1e472e63cf6252b4a209b126c9c2..7e3ddcb3ba14ea98c4809ed8a94c2b87a1869d30 100644 --- a/src/main/java/de/hftstuttgart/modocot/Testrunner.java +++ b/src/main/java/de/hftstuttgart/dtt/Testrunner.java @@ -1,8 +1,8 @@ -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 sourceFiles = new HashSet<>(); @@ -81,13 +81,13 @@ public class Testrunner } // call compilation and generate Results for failed compiles - Set compilationErrors = generateCompileResults(compile(sourceFiles, new File(classFolder))); + Set 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 generateCompileResults(List compilationErrors) + public static Set generateCompileResults(List 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 successes) + public static ResultSummary generateResultSummary(TestExecutionSummary summary, Set 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() diff --git a/src/main/java/de/hftstuttgart/modocot/model/ModocotResult.java b/src/main/java/de/hftstuttgart/dtt/model/Result.java similarity index 77% rename from src/main/java/de/hftstuttgart/modocot/model/ModocotResult.java rename to src/main/java/de/hftstuttgart/dtt/model/Result.java index 955ed6211ebaa43ec257855c57ca3ed1f1f6416f..b6338ca73f54cff9c6d857276bd6847f9616a306 100644 --- a/src/main/java/de/hftstuttgart/modocot/model/ModocotResult.java +++ b/src/main/java/de/hftstuttgart/dtt/model/Result.java @@ -1,6 +1,6 @@ -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, } } diff --git a/src/main/java/de/hftstuttgart/dtt/model/ResultSummary.java b/src/main/java/de/hftstuttgart/dtt/model/ResultSummary.java new file mode 100644 index 0000000000000000000000000000000000000000..6aa66545941c71308fcf62184c278b2f487457d5 --- /dev/null +++ b/src/main/java/de/hftstuttgart/dtt/model/ResultSummary.java @@ -0,0 +1,11 @@ +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 results = new HashSet<>(); +} diff --git a/src/main/java/de/hftstuttgart/modocot/util/ModocotSummaryGeneratingListener.java b/src/main/java/de/hftstuttgart/dtt/util/MySummaryGeneratingListener.java similarity index 85% rename from src/main/java/de/hftstuttgart/modocot/util/ModocotSummaryGeneratingListener.java rename to src/main/java/de/hftstuttgart/dtt/util/MySummaryGeneratingListener.java index d566510ebe4ef246b280e6495a7b2144fdad2d23..e91a0e211405b15a5d2e30df8e349faff16a8a60 100644 --- a/src/main/java/de/hftstuttgart/modocot/util/ModocotSummaryGeneratingListener.java +++ b/src/main/java/de/hftstuttgart/dtt/util/MySummaryGeneratingListener.java @@ -1,4 +1,4 @@ -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 successful = new HashSet<>(); diff --git a/src/main/java/de/hftstuttgart/modocot/util/logging/CustomFormatter.java b/src/main/java/de/hftstuttgart/dtt/util/logging/CustomFormatter.java similarity index 91% rename from src/main/java/de/hftstuttgart/modocot/util/logging/CustomFormatter.java rename to src/main/java/de/hftstuttgart/dtt/util/logging/CustomFormatter.java index 197c6d1a57b7cec4813b3a66cecbf3726a6ff77e..2deee43c01dca0e5906df89b1910695b0c882dcf 100644 --- a/src/main/java/de/hftstuttgart/modocot/util/logging/CustomFormatter.java +++ b/src/main/java/de/hftstuttgart/dtt/util/logging/CustomFormatter.java @@ -1,4 +1,4 @@ -package de.hftstuttgart.modocot.util.logging; +package de.hftstuttgart.dtt.util.logging; import java.util.Date; import java.util.logging.LogRecord; diff --git a/src/main/java/de/hftstuttgart/modocot/model/ModocotResultSummary.java b/src/main/java/de/hftstuttgart/modocot/model/ModocotResultSummary.java deleted file mode 100644 index a9e563cbcdeea45ce9de8a5cd3a36bac793a62a1..0000000000000000000000000000000000000000 --- a/src/main/java/de/hftstuttgart/modocot/model/ModocotResultSummary.java +++ /dev/null @@ -1,16 +0,0 @@ -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 successes; - public Set failures; - public Set compilationErrors; -} diff --git a/src/main/resources/logging.properties b/src/main/resources/logging.properties index 175a2e3cbcf0c35a32ee1e8964be6220d8a98dac..ba6bc52110e639f0e9f46c6eb08e2e91a7e7eac2 100644 --- a/src/main/resources/logging.properties +++ b/src/main/resources/logging.properties @@ -1,4 +1,4 @@ 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