From caece1045223e1d089110c60a1d4cf86d42e704a Mon Sep 17 00:00:00 2001 From: Justin King Date: Mon, 20 Dec 2021 12:34:10 -0800 Subject: [PATCH] Make runtime-testsuite tests run in parallel --- .circleci/config.yml | 6 +++-- runtime-testsuite/pom.xml | 3 +++ .../test/runtime/csharp/BaseCSharpTest.java | 25 +++++++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2ff1fefb662..8e08ac8ff1e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,8 @@ version: 2.1 jobs: test_tool_and_runtime_java: docker: - - image: cimg/openjdk:8.0 + - image: cimg/openjdk:11.0.13 + resource_class: large steps: - checkout - run: @@ -32,7 +33,8 @@ jobs: type: string default: java docker: - - image: cimg/openjdk:8.0 + - image: cimg/openjdk:11.0.13 + resource_class: large environment: TARGET: << parameters.target >> GROUP: << parameters.test-group >> diff --git a/runtime-testsuite/pom.xml b/runtime-testsuite/pom.xml index 9c63282cd8c..0dd59ffb6d3 100644 --- a/runtime-testsuite/pom.xml +++ b/runtime-testsuite/pom.xml @@ -106,6 +106,9 @@ **/dart/Test*.java ${antlr.tests.swift} + all + true + 0 diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseCSharpTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseCSharpTest.java index 918ed0e405a..53eb0274abe 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseCSharpTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/csharp/BaseCSharpTest.java @@ -209,7 +209,7 @@ public boolean buildProject() { return true; } - private synchronized boolean initializeRuntime() { + private static synchronized boolean initializeRuntime() { // Compile runtime project once per tests session if (isRuntimeInitialized) return true; @@ -247,7 +247,7 @@ private synchronized boolean initializeRuntime() { } cSharpTestProjectContent = out.toString().replace(cSharpAntlrRuntimeDllName, Paths.get(cSharpCachingDirectory, cSharpAntlrRuntimeDllName).toString()); - success = runProcess(args, cSharpCachingDirectory); + success = initializeRuntimeAt(args, cSharpCachingDirectory); } catch (Exception e) { e.printStackTrace(System.err); return false; @@ -261,6 +261,27 @@ private static String getConfig() { return isDebug ? "Debug" : "Release"; } + private static boolean initializeRuntimeAt(String[] args, String path) throws Exception { + ProcessBuilder pb = new ProcessBuilder(args); + pb.directory(new File(path)); + Process process = pb.start(); + StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); + StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); + stdoutVacuum.start(); + stderrVacuum.start(); + process.waitFor(); + stdoutVacuum.join(); + stderrVacuum.join(); + int exitValue = process.exitValue(); + boolean success = (exitValue == 0); + if (!success) { + System.err.println("runProcess command: " + Utils.join(args, " ")); + System.err.println("runProcess exitValue: " + exitValue); + System.err.println("runProcess stdoutVacuum: " + stdoutVacuum.toString()); + } + return success; + } + private boolean runProcess(String[] args, String path) throws Exception { return runProcess(args, path, 0); }