From 4609007cba98c4d02738170401c55900b001c97f Mon Sep 17 00:00:00 2001 From: Rodrigo Garcia Date: Tue, 23 Nov 2021 16:10:51 -0600 Subject: [PATCH] Generate json test reports for mx native-unittest command --- substratevm/ci_includes/gate.hocon | 15 ++++-- .../com/oracle/svm/junit/SVMJUnitRunner.java | 50 +++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/substratevm/ci_includes/gate.hocon b/substratevm/ci_includes/gate.hocon index 4635d21048e2..aba5f15fa7e4 100644 --- a/substratevm/ci_includes/gate.hocon +++ b/substratevm/ci_includes/gate.hocon @@ -17,6 +17,13 @@ gate-svm-js: { ] } +svmUnittest : { + environment: { + "MX_TEST_RESULTS_PATTERN": "es-XXX.json", + "MX_TEST_RESULT_TAGS": "native-image" + } +} + builds += [ ${labsjdk-ce-17} ${svm-common-linux-gate} ${gate-svm-js} ${svm-capabilities-base} { name: "gate-svm-js" @@ -25,7 +32,7 @@ builds += [ ${labsjdk-ce-17} ${svm-common-darwin-gate} ${gate-svm-js} { name: "gate-svm-darwin-js" } - ${labsjdk-ce-11} ${svm-common-linux-gate} ${linux-deploy} { + ${labsjdk-ce-11} ${svm-common-linux-gate} ${linux-deploy} ${svmUnittest} { name: "gate-svm-build-ce-11" downloads: { "MUSL_TOOLCHAIN": { @@ -44,13 +51,13 @@ builds += [ ${svm-cmd-gate} ["build,helloworld,test,nativeimagehelp,muslcbuild"] ] } - ${labsjdk-ce-11} ${svm-common-linux-gate} ${linux-deploy} { + ${labsjdk-ce-11} ${svm-common-linux-gate} ${linux-deploy} ${svmUnittest} { name: "gate-svm-modules-basic" run: [ ${svm-cmd-gate} ["build,hellomodule,test"] ] } - ${labsjdk-ce-17} ${svm-common-linux-gate} ${eclipse} ${jdt} ${linux-deploy} { + ${labsjdk-ce-17} ${svm-common-linux-gate} ${eclipse} ${jdt} ${linux-deploy} ${svmUnittest} { name: "gate-svm-style-fullbuild" timelimit: "45:00" environment : { @@ -60,7 +67,7 @@ builds += [ ${svm-cmd-gate} ["style,fullbuild,helloworld,test,svmjunit"] ] } - ${labsjdk-ce-17} ${svm-common-gate} ${svm-common-windows-jdk17} { + ${labsjdk-ce-17} ${svm-common-gate} ${svm-common-windows-jdk17} ${svmUnittest} { name: "gate-svm-windows-basics" run: [ ${svm-cmd-gate} ["build,helloworld,test,svmjunit"] diff --git a/substratevm/src/com.oracle.svm.junit/src/com/oracle/svm/junit/SVMJUnitRunner.java b/substratevm/src/com.oracle.svm.junit/src/com/oracle/svm/junit/SVMJUnitRunner.java index c0c71eb3ebbd..d2aca9a16b2c 100644 --- a/substratevm/src/com.oracle.svm.junit/src/com/oracle/svm/junit/SVMJUnitRunner.java +++ b/substratevm/src/com.oracle.svm.junit/src/com/oracle/svm/junit/SVMJUnitRunner.java @@ -27,6 +27,9 @@ import java.io.BufferedReader; import java.io.FileReader; import java.util.List; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Random; import org.graalvm.compiler.options.Option; import org.graalvm.nativeimage.ImageSingletons; @@ -115,6 +118,38 @@ private String getMissingClasses() { return null; } + private static String formatJsonTestResultsPattern(JUnitSystem system, String testResultsPattern) { + if (!testResultsPattern.contains("XXX")) { + system.out().println("MX_TEST_RESULTS_PATTERN doesn't contain `XXX`. " + + "Results will probably be overwritten if used multiple times."); + return testResultsPattern; + } + + String timeStamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date()); + // Generate a random int of 8 digits + String randNum = "00000000" + Math.abs(new Random().nextInt()); + randNum = randNum.substring(randNum.length() - 8); + String identifier = "unittest-" + timeStamp + "-" + randNum; + + return testResultsPattern.replaceFirst("XXXX*", identifier); + } + + /* Get current os name in a standarized form. */ + private static String getOS() { + String os = System.getProperty("os.name").toLowerCase(); + + if (os.contains("windows")) { + return "windows"; + } + if (os.contains("linux")) { + return "linux"; + } + if (os.contains("mac") || os.contains("darwin")) { + return "darwin"; + } + return os; + } + private void run(String[] args) { JUnitSystem system = new RealSystem(); JUnitCore junitCore = new JUnitCore(); @@ -123,6 +158,21 @@ private void run(String[] args) { MxJUnitConfig config = new MxJUnitConfig(); + // Add flags for json test reports accordingly + String testResultsPattern = System.getenv("MX_TEST_RESULTS_PATTERN"); + String jsonResultTags = System.getenv("MX_TEST_RESULT_TAGS"); + if (testResultsPattern != null && !testResultsPattern.isEmpty()) { + config.jsonResults = formatJsonTestResultsPattern(system, testResultsPattern); + } + if (jsonResultTags != null && !jsonResultTags.isEmpty()) { + config.jsonResultTags = jsonResultTags; + } + config.jsonResultTags += "," + getOS(); + config.jsonResultTags += "," + System.getProperty("os.arch"); + if (!config.jsonResultTags.contains("native-image")) { + config.jsonResultTags += "," + "native-image"; + } + int i = 0; while (i < args.length) { String arg = args[i++];