diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 00000000..027ed97c --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,26 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 8 + uses: actions/setup-java@v4 + with: + java-version: '8' + distribution: 'temurin' + cache: maven + - name: Build and verify with Maven + run: mvn verify package diff --git a/CHANGES.txt b/CHANGES.txt index e7bd1b3f..12d7a733 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,6 +5,54 @@ RandomizedTesting, Change Log For an up-to-date CHANGES file see https://github.com/randomizedtesting/randomizedtesting/blob/master/CHANGES +======================= randomizedtesting 2.8.3 ==================== + +Other: + + * GH-316: Update asm, proguard, guava to more modern versions. + +Bug Fixes: + + * GH-314: Hidden failed tests due to OOM (event bus exceptions + should propagate to the top-level task and fail). (Miklós Karakó) + +======================= randomizedtesting 2.8.2 ==================== + +Bug Fixes: + + * GH-311: Race condition calling RandomizedTest.isNightly + (Luca Cavanna) + +======================= randomizedtesting 2.8.1 ==================== + +Bug Fixes: + + * GH-307: Use monotonic clock instead of wall clock for detecting + deadlines as VMs and operating systems may shift wall clock resulting + in unpredictable behavior. + +======================= randomizedtesting 2.8.0 ==================== + +Other: + + * GH-303: Messages from ThreadLeakControl.checkThreadLeaks can + be inconsistent due to mismatched use of thread data. + + * GH-304: Replace master/slave with main/forkedjvm terminology. This change + may result in backward incompatibilities if you used low-level event bus + subscription methods or JSON reports. Grep and replace 'slave' with 'forkedJvm' + and 'master' with 'main' seed. + +======================= randomizedtesting 2.7.9 ==================== + +Other: + + * Update ASM to 9.2 to support JDK 17 + + * Update JUnit dependency to 4.13.1. + + * Update Ant dependency to 1.9.15. + ======================= randomizedtesting 2.7.8 ==================== Improvements @@ -355,7 +403,7 @@ Changes in Backwards Compatibility New Features - * GH-191: "Tests with failures" should repeat the master seed at the end + * GH-191: "Tests with failures" should repeat the main seed at the end of the report. (Dawid Weiss) Bug Fixes diff --git a/README.txt b/README.txt index 03be9fe4..82b8f7bc 100644 --- a/README.txt +++ b/README.txt @@ -8,7 +8,6 @@ with pseudo-randomness. See the following for more information: Docs: https://github.com/randomizedtesting/randomizedtesting/wiki Bugs: https://github.com/randomizedtesting/randomizedtesting/issues - CI: http://builds.carrot2.org/browse/RNDTEST See LICENSE.txt to make your company's lawyer happy. diff --git a/examples/ant/build.xml b/examples/ant/build.xml index 93a12a9b..47e55ffc 100644 --- a/examples/ant/build.xml +++ b/examples/ant/build.xml @@ -60,7 +60,7 @@ - + diff --git a/examples/ant/pom.xml b/examples/ant/pom.xml index 89c569ce..45322381 100644 --- a/examples/ant/pom.xml +++ b/examples/ant/pom.xml @@ -5,7 +5,7 @@ com.carrotsearch.randomizedtesting randomizedtesting-parent - 2.7.8 + 2.8.4-SNAPSHOT ../../pom.xml @@ -71,6 +71,39 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + default-jar + none + + + + + + org.apache.maven.plugins + maven-gpg-plugin + + + default + none + + + + + + org.apache.maven.plugins + maven-install-plugin + + + default-install + none + + + + org.apache.maven.plugins maven-dependency-plugin diff --git a/examples/maven/pom.xml b/examples/maven/pom.xml index d9cd2dbd..bd8f4a4d 100644 --- a/examples/maven/pom.xml +++ b/examples/maven/pom.xml @@ -5,7 +5,7 @@ com.carrotsearch.randomizedtesting randomizedtesting-parent - 2.7.8 + 2.8.4-SNAPSHOT ../../pom.xml diff --git a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test004MoreRandomness.java b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test004MoreRandomness.java index ee4a4b60..8e35bb8f 100644 --- a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test004MoreRandomness.java +++ b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test004MoreRandomness.java @@ -27,7 +27,7 @@ * under a single suite class for simplicity). Every execution of class * {@link Test004MoreRandomness.OrderRandomized} will be different, shuffling * test methods around (and the random numbers written to the output). - * We can "pin" the execution order by forcing the master random + * We can "pin" the execution order by forcing the main random * seed using {@link Seed} annotation on the class (or a system property * {@link SysGlobals#SYSPROP_RANDOM_SEED}). Doing so also fixes all derivative random * generators in all tests - this is shown in diff --git a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test005RecoveringRandomSeed.java b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test005RecoveringRandomSeed.java index f28a2b1b..a67a7fe3 100644 --- a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test005RecoveringRandomSeed.java +++ b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test005RecoveringRandomSeed.java @@ -11,20 +11,20 @@ /** * {@link RandomizedRunner} uses several "contexts", each of which is assigned a * predictable {@link Random} and is modeled using a {@link Randomness} - * instance. The "suite" or "master" context is available from + * instance. The "suite" or "main" context is available from * {@link BeforeClass} or {@link AfterClass} hooks, for example. Each test - * method has a nested context with a random seed derived from the master. This + * method has a nested context with a random seed derived from the main seed. This * way even though the order of tests is shuffled and each test can make a * random number of calls to its own context's {@link Random} instance, the - * global execution paths can always be repeated from the same master seed. The - * question is: how do we know what master seed was used? There are at least two + * global execution paths can always be repeated from the same main seed. The + * question is: how do we know what main seed was used? There are at least two * ways to find out. * - *

The master seed is always available from + *

The main seed is always available from * {@link RandomizedContext#getRunnerSeedAsString()} so one can simply print it to the * console. The current context's {@link Randomness} itself can be printed to the - * console. In two methods in this class {@link #printMasterContext()} and {@link #printContext()} - * we print the master seed and current context's {@link Randomness}, note how the static + * console. In two methods in this class {@link #printMainContext()} and {@link #printContext()} + * we print the main seed and current context's {@link Randomness}, note how the static * context's {@link Randomness} is identical with the runner's but the test context * is a derived value. *

@@ -51,9 +51,9 @@
  * 
* * The first line of the stack trace is a synthetic (non-existing) class with "source file" - * entry containing all contexts' seeds on the stack (from master to the current test method). - * In this case, you can see the master context first (AF567B2B9F8A8F1C), followed - * by the test's context (44E2D1A039274F2A). The entire class has a fixed master seed + * entry containing all contexts' seeds on the stack (from main to the current test method). + * In this case, you can see the main context first (AF567B2B9F8A8F1C), followed + * by the test's context (44E2D1A039274F2A). The entire class has a fixed main seed * so that the result will always be the same here: *
  * {@literal @}{@link Seed}("AF567B2B9F8A8F1C")
@@ -63,7 +63,7 @@
 @Seed("AF567B2B9F8A8F1C")
 public class Test005RecoveringRandomSeed extends RandomizedTest {
   @BeforeClass
-  public static void printMasterContext() {
+  public static void printMainContext() {
     System.out.println("# Static context (@BeforeClass)");
     System.out.println(getContext().getRunnerSeedAsString());
     System.out.println(RandomizedContext.current().getRandomness());
diff --git a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test006RepeatingTests.java b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test006RepeatingTests.java
index dc93be2a..f86e78cb 100644
--- a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test006RepeatingTests.java
+++ b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test006RepeatingTests.java
@@ -10,7 +10,7 @@
 
 /**
  * In example {@link Test005RecoveringRandomSeed} we presented
- * {@link Randomness} contexts and how they are derived from a master seed. Once
+ * {@link Randomness} contexts and how they are derived from a main seed. Once
  * you know a certain test case fails it is usually beneficial to immediately
  * check if it always fails on a given seed (which means there is a
  * deterministic failure scenario). A simple way to do so would be to re-run a
@@ -25,10 +25,10 @@
  * public void repeatFailure() { //...
  * 
* Note how the seed is fixed using {@link Seed} annotation (on the - * method) rather than on the master. This ensures the method's context is - * pinned to that value, but the master is still random. If you have + * method) rather than on the class. This ensures the method's context is + * pinned to that value, but the main seed is still random. If you have * {@link BeforeClass} hooks that depend on randomness you should use - * suite-level {@link Seed} annotation and pin the master seed instead. + * suite-level {@link Seed} annotation and pin the main seed instead. * *

You can also set {@link Repeat#useConstantSeed()} to false and * then every iteration of the test method will have a pseudo-random context derived diff --git a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test010Lingering.java b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test010Lingering.java index eb9a80dd..16e71489 100644 --- a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test010Lingering.java +++ b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test010Lingering.java @@ -30,7 +30,7 @@ * *

The same annotation can be used to wait for background threads * which we don't have any control on, but we know they will eventually terminate. - * For example, a terminated {@link Executor} does not wait (join) with its slave + * For example, a terminated {@link Executor} does not wait (join) with its forked * threads so lingering here is required. This is shown in method {@link #executorLeak()}. This * method will fail (from time to time, it isn't guaranteed) if no lingering time is given. * diff --git a/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test019ParameterizedRandomSelection.java b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test019ParameterizedRandomSelection.java new file mode 100644 index 00000000..b1d96747 --- /dev/null +++ b/examples/maven/src/main/java/com/carrotsearch/examples/randomizedrunner/Test019ParameterizedRandomSelection.java @@ -0,0 +1,103 @@ +package com.carrotsearch.examples.randomizedrunner; + +import com.carrotsearch.randomizedtesting.RandomizedContext; +import com.carrotsearch.randomizedtesting.RandomizedTest; +import com.carrotsearch.randomizedtesting.annotations.Name; +import com.carrotsearch.randomizedtesting.annotations.ParametersFactory; +import com.carrotsearch.randomizedtesting.rules.TestRuleAdapter; +import org.junit.Assume; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * This shows how to implement test factory together with a randomized execution of a subset of + * tests. + * + * @see "https://github.com/randomizedtesting/randomizedtesting/issues/308" + */ +public class Test019ParameterizedRandomSelection extends RandomizedTest { + private AtomicBoolean shouldRun; + private String testcase; + + public Test019ParameterizedRandomSelection( + @Name("testcase") String testcase, AtomicBoolean shouldRun) { + this.testcase = testcase; + this.shouldRun = shouldRun; + } + + @Before + void shouldRun() { + Assume.assumeTrue("This test is ignored for this seed.", shouldRun.get()); + } + + @Test + public void runTest() { + System.out.println("Testing: " + testcase); + } + + /** A rule that helps in dynamic test selection. */ + public static class DynamicTestSubsetRule extends TestRuleAdapter implements Iterable { + private final LinkedHashMap parameters = new LinkedHashMap<>(); + + public DynamicTestSubsetRule(Iterable parameters) { + for (Object[] params : parameters) { + Object[] paramsAndShouldRun = Arrays.copyOf(params, params.length + 1); + AtomicBoolean shouldRun = new AtomicBoolean(); + paramsAndShouldRun[params.length] = shouldRun; + this.parameters.put(paramsAndShouldRun, shouldRun); + } + } + + @Override + public Iterator iterator() { + return parameters.keySet().iterator(); + } + + @Override + protected void before() throws Throwable { + super.before(); + + // We now have access to the randomized context so we can pick the tests that should + // run. The selection can be done in many ways; here we pick 10 random tests from the pool. + int maxTests = 10; + List subset = new ArrayList<>(parameters.values()); + if (subset.size() > maxTests) { + Collections.shuffle(subset, RandomizedContext.current().getRandom()); + subset = subset.subList(0, maxTests); + } + + for (AtomicBoolean shouldRun : subset) { + shouldRun.set(true); + } + } + } + + @ClassRule public static DynamicTestSubsetRule selectTests; + + /** + * Test parameters factory does not have access to any {@link + * com.carrotsearch.randomizedtesting.RandomizedContext} because it runs prior to anything else. + * We collect all tests and save a map of them to the class so that {@link #selectTests} can pick + * a random subset prior to running anything and so that all tests (even those not selected for + * execution) are shown and reported. + */ + @ParametersFactory(argumentFormatting = "testCase: %s") + public static Iterable generateTestCases() { + ArrayList testCases = new ArrayList<>(); + for (int i = 0; i < 50; i++) { + testCases.add(new Object[] {"#" + (i + i)}); + } + + selectTests = new DynamicTestSubsetRule(testCases); + return selectTests; + } +} diff --git a/examples/security-manager/pom.xml b/examples/security-manager/pom.xml index e278e7ba..9463e9a6 100644 --- a/examples/security-manager/pom.xml +++ b/examples/security-manager/pom.xml @@ -5,7 +5,7 @@ com.carrotsearch.randomizedtesting randomizedtesting-parent - 2.7.8 + 2.8.4-SNAPSHOT ../../pom.xml @@ -44,6 +44,39 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + default-jar + none + + + + + + org.apache.maven.plugins + maven-gpg-plugin + + + default + none + + + + + + org.apache.maven.plugins + maven-install-plugin + + + default-install + none + + + + org.apache.maven.plugins maven-surefire-plugin diff --git a/junit4-ant/lib/proguard.jar b/junit4-ant/lib/proguard.jar index ceedb309..6a4c0dbc 100644 Binary files a/junit4-ant/lib/proguard.jar and b/junit4-ant/lib/proguard.jar differ diff --git a/junit4-ant/pom.xml b/junit4-ant/pom.xml index b4cb98eb..288c58cf 100644 --- a/junit4-ant/pom.xml +++ b/junit4-ant/pom.xml @@ -5,7 +5,7 @@ com.carrotsearch.randomizedtesting randomizedtesting-parent - 2.7.8 + 2.8.4-SNAPSHOT ../pom.xml @@ -93,6 +93,7 @@ test + ${skipTests} **/it/Test*.java @@ -158,8 +159,8 @@ com.carrotsearch.ant.tasks.junit4.events* -

${project.name} v${project.version}
API Documentation]]>
- com.carrotsearch.ant.tasks.junit4.slave +
${project.name} v${project.version}
API Documentation]]>
+ com.carrotsearch.ant.tasks.junit4.forked
@@ -216,6 +217,10 @@ guava !com/google/common/eventbus/SynchronizedEventHandler.class + + com.google.guava + failureaccess + org.ow2.asm asm @@ -249,7 +254,7 @@ net.sf.proguard proguard - 4.6-customized + 0.0-custom-renamer system ${project.basedir}/lib/proguard.jar diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/DiagnosticsListener.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/DiagnosticsListener.java index 37cda0ee..ad86391d 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/DiagnosticsListener.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/DiagnosticsListener.java @@ -9,19 +9,19 @@ import com.google.common.eventbus.Subscribe; public class DiagnosticsListener { - private final ForkedJvmInfo slave; + private final ForkedJvmInfo forkedJvmInfo; private boolean quitReceived; private Task task; - public DiagnosticsListener(ForkedJvmInfo slave, JUnit4 task) { + public DiagnosticsListener(ForkedJvmInfo forkedJvmInfo, JUnit4 task) { this.task = task; - this.slave = slave; + this.forkedJvmInfo = forkedJvmInfo; } @Subscribe public void receiveAll(IEvent e) { - task.log("Packet received, slave#" + slave.id + ">" + e.getType(), Project.MSG_DEBUG); + task.log("Packet received, forkedJvm#" + forkedJvmInfo.id + ">" + e.getType(), Project.MSG_DEBUG); } @Subscribe diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/SlaveIdle.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/ForkedJvmIdle.java similarity index 76% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/SlaveIdle.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/ForkedJvmIdle.java index 9fa61bca..33040d2d 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/SlaveIdle.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/ForkedJvmIdle.java @@ -4,16 +4,16 @@ import java.io.OutputStreamWriter; /** - * An event published when a slave is idle and waits for new suite classes. + * An event published when a forked JVM is idle and waits for new suite classes. */ -class SlaveIdle { +class ForkedJvmIdle { private OutputStreamWriter stdin; /** For delegation. */ - SlaveIdle() { + ForkedJvmIdle() { } - public SlaveIdle(OutputStreamWriter stdin) { + public ForkedJvmIdle(OutputStreamWriter stdin) { this.stdin = stdin; } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/ForkedJvmInfo.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/ForkedJvmInfo.java index 09156616..770f9389 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/ForkedJvmInfo.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/ForkedJvmInfo.java @@ -15,18 +15,18 @@ import com.carrotsearch.randomizedtesting.WriterOutputStream; /** - * Static slave information. + * Static forked JVM information. */ public final class ForkedJvmInfo { /** - * Unique sequential slave identifier. + * Unique sequential identifier. */ public final int id; /** - * The number of executed slaves, total. + * The number of executed forked JVMs, total. */ - public final int slaves; + public final int forkedJvmCount; /** * Bootstrap event. @@ -39,28 +39,28 @@ public final class ForkedJvmInfo { long start, end; /** - * Execute these test suites on this slave. + * Execute these test suites on this forked JVM. */ ArrayList testSuites; /** - * Complete slave command line invocation string. + * Complete command line invocation string. */ - String slaveCommandLine; + String forkedCommandLine; /** - * Execution error if anything bad happened on the slave. + * Execution error if anything bad happened. */ Throwable executionError; /* */ - public ForkedJvmInfo(int id, int slaves) { + public ForkedJvmInfo(int id, int forkedJvmCount) { this.id = id; - this.slaves = slaves; + this.forkedJvmCount = forkedJvmCount; } /** - * Return the {@link Charset} used to encode stream bytes from the slave. + * Return the {@link Charset} used to encode stream bytes from the forked JVM. */ public Charset getCharset() { if (bootstrapEvent != null) { @@ -71,7 +71,7 @@ public Charset getCharset() { } /** - * System properties on the slave. + * System properties on the forked JVM. */ public Map getSystemProperties() { if (bootstrapEvent == null) { @@ -95,14 +95,14 @@ public String getPidString() { } /** - * Command line string used to invoke the slave. + * Command line string used to invoke the forked JVM */ public String getCommandLine() { - return slaveCommandLine; + return forkedCommandLine; } /** - * JVM name (slave). + * JVM name. */ public String getJvmName() { return getSystemProperties().get("java.vm.name") + ", " + @@ -110,14 +110,14 @@ public String getJvmName() { } /** - * Slave execution time. + * Forked JVM execution time. */ long getExecutionTime() { return end - start; } /** - * Set the bootstrap event associated with this slave. + * Set the bootstrap event associated with this forked JVM. */ void setBootstrapEvent(BootstrapEvent e) { this.bootstrapEvent = e; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/JUnit4.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/JUnit4.java index f4b3e833..0b704ba7 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/JUnit4.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/JUnit4.java @@ -43,6 +43,8 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import com.carrotsearch.ant.tasks.junit4.forked.ForkedMain; +import com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe; import com.carrotsearch.ant.tasks.junit4.runlisteners.RunListenerClass; import org.apache.tools.ant.AntClassLoader; import org.apache.tools.ant.BuildException; @@ -79,8 +81,6 @@ import com.carrotsearch.ant.tasks.junit4.events.aggregated.ChildBootstrap; import com.carrotsearch.ant.tasks.junit4.events.aggregated.JvmOutputEvent; import com.carrotsearch.ant.tasks.junit4.listeners.AggregatedEventListener; -import com.carrotsearch.ant.tasks.junit4.slave.SlaveMain; -import com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe; import com.carrotsearch.randomizedtesting.ClassGlobFilter; import com.carrotsearch.randomizedtesting.FilterExpressionParser; import com.carrotsearch.randomizedtesting.FilterExpressionParser.Node; @@ -105,7 +105,7 @@ /** * An ANT task to run JUnit4 tests. Differences (benefits?) compared to ANT's default JUnit task: *
    - *
  • Built-in parallel test execution support (spawns multiple JVMs to avoid + *
  • Built-in parallel test execution support (spawns multiple JVMs to avoid * test interactions).
  • *
  • Randomization of the order of test suites within a single JVM.
  • *
  • Aggregates and synchronizes test events from executors. All reports run on @@ -114,7 +114,7 @@ * Report listeners use Google Guava's {@link EventBus} and receive full information * about tests' execution (including skipped, assumption-skipped tests, streamlined * output and error stream chunks, etc.).
  • - *
  • JUnit 4.10+ is required both for the task and for the tests classpath. + *
  • JUnit 4.10+ is required both for the task and for the tests classpath. * Older versions will cause build failure.
  • *
  • Integration with {@link RandomizedRunner} (randomization seed is passed to * children JVMs).
  • @@ -157,8 +157,8 @@ public class JUnit4 extends Task { /** @see #setParallelism(String) */ public static final String PARALLELISM_MAX = "max"; - /** Default value of {@link #setShuffleOnSlave}. */ - public static final boolean DEFAULT_SHUFFLE_ON_SLAVE = true; + /** Default value of {@link #setShuffleOnForkedJvm(boolean)}. */ + public static final boolean DEFAULT_SHUFFLE_ON_FORKED_JVM = true; /** Default value of {@link #setParallelism}. */ public static final String DEFAULT_PARALLELISM = "1"; @@ -168,7 +168,7 @@ public class JUnit4 extends Task { /** Default value of {@link #setHaltOnFailure}. */ public static final boolean DEFAULT_HALT_ON_FAILURE = true; - + /** Default value of {@link #setIsolateWorkingDirectories(boolean)}. */ public static final boolean DEFAULT_ISOLATE_WORKING_DIRECTORIES = true; @@ -180,7 +180,7 @@ public class JUnit4 extends Task { /** Default value of {@link #setSysouts}. */ public static final boolean DEFAULT_SYSOUTS = false; - + /** Default value of {@link #setDebugStream}. */ public static final boolean DEFAULT_DEBUGSTREAM = false; @@ -222,17 +222,17 @@ public static enum NoTestsAction { /** * @see #setSysouts */ - private boolean sysouts = DEFAULT_SYSOUTS; + private boolean sysouts = DEFAULT_SYSOUTS; /** * @see #setDebugStream */ - private boolean debugStream = DEFAULT_DEBUGSTREAM; + private boolean debugStream = DEFAULT_DEBUGSTREAM; /** - * Slave VM command line. + * Forked JVM command line. */ - private CommandlineJava slaveCommand = new CommandlineJava(); + private CommandlineJava forkedJvmCommandLine = new CommandlineJava(); /** * Set new environment for the forked process? @@ -243,12 +243,12 @@ public static enum NoTestsAction { * @see #setUniqueSuiteNames */ private boolean uniqueSuiteNames = DEFAULT_UNIQUE_SUITE_NAME; - + /** * Environment variables to use in the forked JVM. */ private Environment env = new Environment(); - + /** * Directory to invoke forked VMs in. */ @@ -273,9 +273,9 @@ public static enum NoTestsAction { * Property to set if there were test failures or errors. */ private String failureProperty; - + /** - * A folder to store temporary files in. Defaults to {@link #dir} or + * A folder to store temporary files in. Defaults to {@link #dir} or * the project's basedir. */ private Path tempDir; @@ -297,7 +297,7 @@ public static enum NoTestsAction { /** * Class loader used to resolve annotations and classes referenced from annotations - * when {@link Description}s containing them are passed from slaves. + * when {@link Description}s containing them are passed from forked JVMs. */ private AntClassLoader testsClassLoader; @@ -344,44 +344,44 @@ public static enum NoTestsAction { private float dynamicAssignmentRatio = DEFAULT_DYNAMIC_ASSIGNMENT_RATIO; /** - * @see #setShuffleOnSlave(boolean) + * @see #setShuffleOnForkedJvm(boolean) */ - private boolean shuffleOnSlave = DEFAULT_SHUFFLE_ON_SLAVE; + private boolean shuffleOnForkedJvm = DEFAULT_SHUFFLE_ON_FORKED_JVM; /** * @see #setHeartbeat */ - private long heartbeat; - + private long heartbeat; + /** * @see #setIfNoTests */ private NoTestsAction ifNoTests = NoTestsAction.IGNORE; - + /** * @see #setStatsPropertyPrefix */ private String statsPropertyPrefix; - + /** - * + * */ public JUnit4() { resources = new Resources(); } /** - * What should be done on unexpected JVM output? JVM may write directly to the + * What should be done on unexpected JVM output? JVM may write directly to the * original descriptors, bypassing redirections of System.out and System.err. Typically, * these messages will be important and should fail the build (permgen space exceeded, * compiler errors, crash dumps). However, certain legitimate logs (gc activity, class loading * logs) are also printed to these streams so sometimes the output can be ignored. - * - *

    Allowed values (any comma-delimited combination of): {@link JvmOutputAction} + * + *

    Allowed values (any comma-delimited combination of): {@link JvmOutputAction} * constants. */ public void setJvmOutputAction(String jvmOutputActions) { - EnumSet actions = EnumSet.noneOf(JvmOutputAction.class); + EnumSet actions = EnumSet.noneOf(JvmOutputAction.class); for (String s : jvmOutputActions.split("[\\,\\ ]+")) { s = s.trim().toUpperCase(Locale.ROOT); actions.add(JvmOutputAction.valueOf(s)); @@ -393,13 +393,13 @@ public void setJvmOutputAction(String jvmOutputActions) { * If set to true, any sysout and syserr calls will be written to original * output and error streams (and in effect will appear as "jvm output". By default * sysout and syserrs are captured and proxied to the event stream to be synchronized - * with other test events but occasionally one may want to synchronize them with direct - * JVM output (to synchronize with compiler output or GC output for example). + * with other test events but occasionally one may want to synchronize them with direct + * JVM output (to synchronize with compiler output or GC output for example). */ public void setSysouts(boolean sysouts) { this.sysouts = sysouts; } - + /** * Enables a debug stream from each forked JVM. This will create an additional file * next to each events file. For debugging the framework only, not a general-purpose setting. @@ -407,7 +407,7 @@ public void setSysouts(boolean sysouts) { public void setDebugStream(boolean debugStream) { this.debugStream = debugStream; } - + /** * Allow or disallow duplicate suite names in resource collections. By default this option * is true because certain ANT-compatible report types (like XML reports) @@ -416,7 +416,7 @@ public void setDebugStream(boolean debugStream) { public void setUniqueSuiteNames(boolean uniqueSuiteNames) { this.uniqueSuiteNames = uniqueSuiteNames; } - + /** * @see #setUniqueSuiteNames(boolean) */ @@ -426,17 +426,17 @@ public boolean isUniqueSuiteNames() { /** * Specifies the ratio of suites moved to dynamic assignment list. A dynamic - * assignment list dispatches suites to the first idle slave JVM. Theoretically + * assignment list dispatches suites to the first idle forked JVM. Theoretically * this is an optimal strategy, but it is usually better to have some static assignments * to avoid communication costs. - * + * *

    A ratio of 0 means only static assignments are used. A ratio of 1 means * only dynamic assignments are used. - * + * *

    The list of dynamic assignments is sorted by decreasing cost (always) and * is inherently prone to race conditions in distributing suites. Should there * be an error based on suite-dependency it will not be directly repeatable. In such - * case use the per-slave-jvm list of suites file dumped to disk for each slave JVM. + * case use the per-forked-jvm list of suites file dumped to disk for each forked JVM. * (see {@link #setLeaveTemporary(boolean)}). */ public void setDynamicAssignmentRatio(float ratio) { @@ -448,13 +448,13 @@ public void setDynamicAssignmentRatio(float ratio) { } /** - * The number of parallel slaves. Can be set to a constant "max" for the - * number of cores returned from {@link Runtime#availableProcessors()} or + * The number of parallel forked JVMs. Can be set to a constant "max" for the + * number of cores returned from {@link Runtime#availableProcessors()} or * "auto" for sensible defaults depending on the number of cores. * The default is a single subprocess. - * - *

    Note that this setting forks physical JVM processes so it multiplies the - * requirements for heap memory, IO, etc. + * + *

    Note that this setting forks physical JVM processes so it multiplies the + * requirements for heap memory, IO, etc. */ public void setParallelism(String parallelism) { this.parallelism = parallelism; @@ -466,18 +466,18 @@ public void setParallelism(String parallelism) { public void setFailureProperty(String failureProperty) { this.failureProperty = failureProperty; } - + /** * Do not propagate the old environment when new environment variables are specified. */ public void setNewEnvironment(boolean v) { this.newEnvironment = v; } - + /** * Initial random seed used for shuffling test suites and other sources - * of pseudo-randomness. If not set, any random value is set. - * + * of pseudo-randomness. If not set, any random value is set. + * *

    The seed's format is compatible with {@link RandomizedRunner} so that * seed can be fixed for suites and methods alike. */ @@ -505,23 +505,35 @@ public void setPrefix(String prefix) { } /** - * @see #setSeed(String) + * @see #setSeed(String) */ public String getSeed() { return random; - } + } /** * Predictably shuffle tests order after balancing. This will help in spreading - * lighter and heavier tests over a single slave's execution timeline while - * still keeping the same tests order depending on the seed. - */ + * lighter and heavier tests over a single forked JVM execution timeline while + * still keeping the same tests order depending on the seed. + * + * @deprecated Use {@link #setShuffleOnForkedJvm(boolean)} + */ + @Deprecated() public void setShuffleOnSlave(boolean shuffle) { - this.shuffleOnSlave = shuffle; + setShuffleOnForkedJvm(shuffle); + } + + /** + * Predictably shuffle tests order after balancing. This will help in spreading + * lighter and heavier tests over a single forked JVM execution timeline while + * still keeping the same tests order depending on the seed. + */ + public void setShuffleOnForkedJvm(boolean shuffle) { + this.shuffleOnForkedJvm = shuffle; } /* - * + * */ @Override public void setProject(Project project) { @@ -531,9 +543,9 @@ public void setProject(Project project) { this.classpath = new org.apache.tools.ant.types.Path(getProject()); this.bootclasspath = new org.apache.tools.ant.types.Path(getProject()); } - + /** - * Prints the summary of all executed, ignored etc. tests at the end. + * Prints the summary of all executed, ignored etc. tests at the end. */ public void setPrintSummary(boolean printSummary) { this.printSummary = printSummary; @@ -548,7 +560,7 @@ public void setHaltOnFailure(boolean haltOnFailure) { /** * Set the maximum memory to be used by all forked JVMs. - * + * * @param max * the value as defined by -mx or -Xmx in the java * command line options. @@ -565,7 +577,7 @@ public void setMaxmemory(String max) { public void setLeaveTemporary(boolean leaveTemporary) { this.leaveTemporary = leaveTemporary; } - + /** * Add an additional argument to any forked JVM. */ @@ -602,7 +614,7 @@ public void setIfNoTests(String value) { /** * A {@link org.apache.tools.ant.types.Environment.Variable} with an additional - * attribute specifying whether or not empty values should be propagated or ignored. + * attribute specifying whether or not empty values should be propagated or ignored. */ public static class ExtendedVariable extends Environment.Variable { private boolean ignoreEmptyValue = false; @@ -620,7 +632,7 @@ public String toString() { return getContent() + " (ignoreEmpty=" + ignoreEmptyValue + ")"; } } - + /** * Adds a system property to any forked JVM. */ @@ -629,7 +641,7 @@ public void addConfiguredSysproperty(ExtendedVariable sysp) { getCommandline().addSysproperty(sysp); } } - + /** * A {@link PropertySet} with an additional * attribute specifying whether or not empty values should be propagated or ignored. @@ -660,13 +672,13 @@ public Properties getProperties() { /** * Adds a set of properties that will be used as system properties that tests * can access. - * + * * This might be useful to transfer Ant properties to the testcases. */ public void addConfiguredSyspropertyset(ExtendedPropertySet sysp) { getCommandline().addSyspropertyset(sysp); } - + /** * The command used to invoke the Java Virtual Machine, default is 'java'. The * command is resolved by java.lang.Runtime.exec(). @@ -678,9 +690,9 @@ public void setJvm(String jvm) { } /** - * If set to true each slave JVM gets a separate working directory - * under whatever is set in {@link #setDir(File)}. The directory naming for each slave - * follows: "Snum", where num is slave's number. Directories are created + * If set to true each forked JVM gets a separate working directory + * under whatever is set in {@link #setDir(File)}. The directory naming for each forked JVM + * follows: "Snum", where num is forked JVM number. Directories are created * automatically and removed unless {@link #setLeaveTemporary(boolean)} is set to * true. */ @@ -724,7 +736,7 @@ public void addFileSet(FileSet fs) { */ public void add(ResourceCollection rc) { resources.add(rc); - } + } /** * Creates a new list of listeners. @@ -759,7 +771,7 @@ public BalancersList createBalancers() { /** * Adds path to classpath used for tests. - * + * * @return reference to the classpath in the embedded java command line */ public org.apache.tools.ant.types.Path createClasspath() { @@ -768,13 +780,13 @@ public org.apache.tools.ant.types.Path createClasspath() { /** * Adds a path to the bootclasspath. - * + * * @return reference to the bootclasspath in the embedded java command line */ public org.apache.tools.ant.types.Path createBootclasspath() { return bootclasspath.createPath(); } - + /* ANT-junit compat only. */ public void setFork(boolean fork) { warnUnsupported("fork"); @@ -783,7 +795,7 @@ public void setFork(boolean fork) { public void setForkmode(String forkMode) { warnUnsupported("forkmode"); } - + public void setHaltOnError(boolean haltOnError) { warnUnsupported("haltonerror"); } @@ -812,7 +824,7 @@ public void setOutputtoformatters(String v) { public void setReloading(String v) { warnUnsupported("reloading"); } - + public void setClonevm(String v) { warnUnsupported("clonevm"); } @@ -824,7 +836,7 @@ public void setErrorproperty(String v) { public void setLogfailedtests(String v) { warnUnsupported("logfailedtests"); } - + public void setEnableTestListenerEvents(String v) { warnUnsupported("enableTestListenerEvents"); } @@ -853,7 +865,7 @@ private void warnUnsupported(String attName) { * number of seconds. The heartbeat detects * no-event intervals and will report them to listeners. Notably, text report report will * emit heartbeat information (to a file or console). - * + * *

    Setting the heartbeat to zero means no detection. */ public void setHeartbeat(long heartbeat) { @@ -866,7 +878,7 @@ public void setHeartbeat(long heartbeat) { public void setStatsPropertyPrefix(String statsPropertyPrefix) { this.statsPropertyPrefix = statsPropertyPrefix; } - + @Override public void execute() throws BuildException { validateJUnit4(); @@ -874,16 +886,16 @@ public void execute() throws BuildException { // Initialize random if not already provided. if (random == null) { - this.random = MoreObjects.firstNonNull( + this.random = MoreObjects.firstNonNull( Strings.emptyToNull(getProject().getProperty(SYSPROP_RANDOM_SEED())), SeedUtils.formatSeed(new Random().nextLong())); } - masterSeed(); + mainSeed(); // Say hello and continue. log(" says " + - RandomPicks.randomFrom(new Random(masterSeed()), WELCOME_MESSAGES) + - " Master seed: " + getSeed(), Project.MSG_INFO); + RandomPicks.randomFrom(new Random(mainSeed()), WELCOME_MESSAGES) + + " Main seed: " + getSeed(), Project.MSG_INFO); // Pass the random seed property. createJvmarg().setValue("-D" + SYSPROP_PREFIX() + "=" + CURRENT_PREFIX()); @@ -917,13 +929,12 @@ public void execute() throws BuildException { } // Process test classes and resources. - long start = System.currentTimeMillis(); final TestsCollection testCollection = processTestResources(); final EventBus aggregatedBus = new EventBus("aggregated"); final TestsSummaryEventListener summaryListener = new TestsSummaryEventListener(); aggregatedBus.register(summaryListener); - + for (Object o : listeners) { if (o instanceof ProjectComponent) { ((ProjectComponent) o).setProject(getProject()); @@ -937,7 +948,7 @@ public void execute() throws BuildException { if (testCollection.testClasses.isEmpty()) { aggregatedBus.post(new AggregatedQuitEvent()); } else { - start = System.currentTimeMillis(); + long start = System.currentTimeMillis(); // Check if we allow duplicate suite names. Some reports (ANT compatible XML // reports) will have a problem with duplicate suite names, for example. @@ -946,30 +957,30 @@ public void execute() throws BuildException { } final int jvmCount = determineForkedJvmCount(testCollection); - final List slaveInfos = new ArrayList<>(); + final List forkedJvmInfos = new ArrayList<>(); for (int jvmid = 0; jvmid < jvmCount; jvmid++) { - final ForkedJvmInfo slaveInfo = new ForkedJvmInfo(jvmid, jvmCount); - slaveInfos.add(slaveInfo); + final ForkedJvmInfo forkedJvmInfo = new ForkedJvmInfo(jvmid, jvmCount); + forkedJvmInfos.add(forkedJvmInfo); } - + if (jvmCount > 1 && uniqueSuiteNames && testCollection.hasReplicatedSuites()) { throw new BuildException(String.format(Locale.ROOT, "There are test suites that request JVM replication and the number of forked JVMs %d is larger than 1. Run on a single JVM.", jvmCount)); } - // Prepare a pool of suites dynamically dispatched to slaves as they become idle. - final Deque stealingQueue = - new ArrayDeque(loadBalanceSuites(slaveInfos, testCollection, balancers)); + // Prepare a pool of suites dynamically dispatched to forked JVMs as they become idle. + final Deque stealingQueue = + new ArrayDeque(loadBalanceSuites(forkedJvmInfos, testCollection, balancers)); aggregatedBus.register(new Object() { @Subscribe - public void onSlaveIdle(SlaveIdle slave) { + public void onForkedJvmIdle(ForkedJvmIdle forkedJvmIdle) { if (stealingQueue.isEmpty()) { - slave.finished(); + forkedJvmIdle.finished(); } else { String suiteName = stealingQueue.pop(); - slave.newSuite(suiteName); + forkedJvmIdle.newSuite(suiteName); } } }); @@ -988,68 +999,68 @@ public void onSlaveIdle(SlaveIdle slave) { } // Create callables for the executor. - final List> slaves = new ArrayList<>(); - for (int slave = 0; slave < jvmCount; slave++) { - final ForkedJvmInfo slaveInfo = slaveInfos.get(slave); - slaves.add(new Callable() { + final List> forkedJvms = new ArrayList<>(); + for (int forked = 0; forked < jvmCount; forked++) { + final ForkedJvmInfo forkedJvmInfo = forkedJvmInfos.get(forked); + forkedJvms.add(new Callable() { @Override public Void call() throws Exception { - executeSlave(slaveInfo, aggregatedBus); + forkJvm(forkedJvmInfo, aggregatedBus); return null; } }); } ExecutorService executor = Executors.newCachedThreadPool(); - aggregatedBus.post(new AggregatedStartEvent(slaves.size(), + aggregatedBus.post(new AggregatedStartEvent(forkedJvms.size(), // TODO: this doesn't account for replicated suites. testCollection.testClasses.size())); try { - List> all = executor.invokeAll(slaves); + List> all = executor.invokeAll(forkedJvms); executor.shutdown(); - for (int i = 0; i < slaves.size(); i++) { + for (int i = 0; i < forkedJvms.size(); i++) { Future f = all.get(i); try { f.get(); } catch (ExecutionException e) { - slaveInfos.get(i).executionError = e.getCause(); + forkedJvmInfos.get(i).executionError = e.getCause(); } } } catch (InterruptedException e) { - log("Master interrupted? Weird.", Project.MSG_ERR); + log("Main JVM interrupted? Weird.", Project.MSG_ERR); } aggregatedBus.post(new AggregatedQuitEvent()); - for (ForkedJvmInfo si : slaveInfos) { + for (ForkedJvmInfo si : forkedJvmInfos) { if (si.start > 0 && si.end > 0) { log(String.format(Locale.ROOT, "JVM J%d: %8.2f .. %8.2f = %8.2fs", si.id, (si.start - start) / 1000.0f, (si.end - start) / 1000.0f, - (si.getExecutionTime() / 1000.0f)), + (si.getExecutionTime() / 1000.0f)), Project.MSG_INFO); } } log("Execution time total: " + Duration.toHumanDuration( (System.currentTimeMillis() - start))); - ForkedJvmInfo slaveInError = null; - for (ForkedJvmInfo i : slaveInfos) { + ForkedJvmInfo jvmInError = null; + for (ForkedJvmInfo i : forkedJvmInfos) { if (i.executionError != null) { log("ERROR: JVM J" + i.id + " ended with an exception, command line: " + i.getCommandLine()); - log("ERROR: JVM J" + i.id + " ended with an exception: " + + log("ERROR: JVM J" + i.id + " ended with an exception: " + Throwables.getStackTraceAsString(i.executionError), Project.MSG_ERR); - if (slaveInError == null) { - slaveInError = i; + if (jvmInError == null) { + jvmInError = i; } } } - if (slaveInError != null) { - throw new BuildException("At least one slave process threw an exception, first: " - + slaveInError.executionError.getMessage(), slaveInError.executionError); + if (jvmInError != null) { + throw new BuildException("At least one forked process threw an exception, first: " + + jvmInError.executionError.getMessage(), jvmInError.executionError); } } @@ -1060,7 +1071,7 @@ public Void call() throws Exception { if (!testsSummary.isSuccessful()) { if (!Strings.isNullOrEmpty(failureProperty)) { - getProject().setNewProperty(failureProperty, "true"); + getProject().setNewProperty(failureProperty, "true"); } if (haltOnFailure) { throw new BuildException(String.format(Locale.ROOT, @@ -1137,7 +1148,7 @@ private void validateArguments() throws BuildException { if (tempDir == null) { throw new BuildException("Temporary directory cannot be null."); } - + if (Files.exists(tempDir)) { if (!Files.isDirectory(tempDir)) { throw new BuildException("Temporary directory is not a folder: " + tempDir.toAbsolutePath()); @@ -1167,12 +1178,12 @@ private void validateJUnit4() throws BuildException { /** * Perform load balancing of the set of suites. Sets {@link ForkedJvmInfo#testSuites} - * to suites preassigned to a given slave and returns a pool of suites + * to suites preassigned to a given forked JVM and returns a pool of suites * that should be load-balanced dynamically based on job stealing. */ private List loadBalanceSuites(List jvmInfo, TestsCollection testsCollection, List balancers) { - + // Order test suites identically for balancers. // and split into replicated and non-replicated suites. Map> partitioned = sortAndSplitReplicated(testsCollection.testClasses); @@ -1196,7 +1207,7 @@ private List loadBalanceSuites(List jvmInfo, balancer.setOwner(this); final List assignments = balancer.assign( - Collections.unmodifiableCollection(remaining), jvmCount, masterSeed()); + Collections.unmodifiableCollection(remaining), jvmCount, mainSeed()); for (Assignment e : assignments) { if (e == null) { @@ -1208,12 +1219,12 @@ private List loadBalanceSuites(List jvmInfo, log(String.format(Locale.ROOT, "Assignment hint: J%-2d (cost %5d) %s (by %s)", - e.slaveId, + e.forkedJvmId, e.estimatedCost, e.suiteName, balancer.getClass().getSimpleName()), Project.MSG_VERBOSE); - perJvmAssignments.get(e.slaveId).add(e); + perJvmAssignments.get(e.forkedJvmId).add(e); } } @@ -1221,16 +1232,16 @@ private List loadBalanceSuites(List jvmInfo, throw new RuntimeException("Not all suites assigned?: " + remaining); } - if (shuffleOnSlave) { - // Shuffle suites on slaves so that the result is always the same wrt master seed + if (shuffleOnForkedJvm) { + // Shuffle suites on forked JVMs so that the result is always the same wrt main seed // (sort first, then shuffle with a constant seed). for (List assignments : perJvmAssignments.values()) { Collections.sort(assignments); - Collections.shuffle(assignments, new Random(this.masterSeed())); + Collections.shuffle(assignments, new Random(this.mainSeed())); } } - // Take a fraction of suites scheduled as last on each slave and move them to a common + // Take a fraction of suites scheduled as last on each forked JVM and move them to a common // job-stealing queue. List stealingQueueWithHints = new ArrayList<>(); for (ForkedJvmInfo si : jvmInfo) { @@ -1238,7 +1249,7 @@ private List loadBalanceSuites(List jvmInfo, int moveToCommon = (int) (assignments.size() * dynamicAssignmentRatio); if (moveToCommon > 0) { - final List movedToCommon = + final List movedToCommon = assignments.subList(assignments.size() - moveToCommon, assignments.size()); for (Assignment a : movedToCommon) { stealingQueueWithHints.add(new SuiteHint(a.suiteName, a.estimatedCost)); @@ -1246,9 +1257,9 @@ private List loadBalanceSuites(List jvmInfo, movedToCommon.clear(); } - final ArrayList slaveSuites = (si.testSuites = new ArrayList<>()); + final ArrayList forkedJvmSuites = (si.testSuites = new ArrayList<>()); for (Assignment a : assignments) { - slaveSuites.add(a.suiteName); + forkedJvmSuites.add(a.suiteName); } } @@ -1262,10 +1273,10 @@ private List loadBalanceSuites(List jvmInfo, for (String suite : replicated) { si.testSuites.add(suite); } - if (shuffleOnSlave) { - // Shuffle suites on slaves so that the result is always the same wrt master seed + if (shuffleOnForkedJvm) { + // Shuffle suites on forked JVMs so that the result is always the same wrt main seed // (sort first, then shuffle with a constant seed). - Collections.shuffle(si.testSuites, new Random(this.masterSeed())); + Collections.shuffle(si.testSuites, new Random(this.mainSeed())); } } } @@ -1318,9 +1329,9 @@ public int compare(TestClass t1, TestClass t2) { } /** - * Return the master seed of {@link #getSeed()}. + * Return the main seed of {@link #getSeed()}. */ - private long masterSeed() { + private long mainSeed() { long[] seeds = SeedUtils.parseSeedChain(getSeed()); if (seeds.length < 1) { throw new BuildException("Random seed is required."); @@ -1378,51 +1389,51 @@ private int determineForkedJvmCount(TestsCollection testCollection) { } /** - * Attach listeners and execute a slave process. + * Attach listeners and execute a forked JVM subprocess. */ - private void executeSlave(final ForkedJvmInfo slave, final EventBus aggregatedBus) + private void forkJvm(final ForkedJvmInfo forkedJvmInfo, final EventBus aggregatedBus) throws Exception { final String uniqueSeed = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS", Locale.ROOT).format(new Date()); - final Path classNamesFile = tempFile(uniqueSeed, "junit4-J" + slave.id, ".suites", getTempDir()); + final Path classNamesFile = tempFile(uniqueSeed, "junit4-J" + forkedJvmInfo.id, ".suites", getTempDir()); temporaryFiles.add(classNamesFile); - final Path classNamesDynamic = tempFile(uniqueSeed, "junit4-J" + slave.id, ".dynamic-suites", getTempDir()); - final Path streamsBufferFile = tempFile(uniqueSeed, "junit4-J" + slave.id, ".spill", getTempDir()); + final Path classNamesDynamic = tempFile(uniqueSeed, "junit4-J" + forkedJvmInfo.id, ".dynamic-suites", getTempDir()); + final Path streamsBufferFile = tempFile(uniqueSeed, "junit4-J" + forkedJvmInfo.id, ".spill", getTempDir()); // Dump all test class names to a temporary file. - String testClassPerLine = Joiner.on("\n").join(slave.testSuites); + String testClassPerLine = Joiner.on("\n").join(forkedJvmInfo.testSuites); log("Test class names:\n" + testClassPerLine, Project.MSG_VERBOSE); Files.write(classNamesFile, testClassPerLine.getBytes(StandardCharsets.UTF_8)); // Prepare command line for java execution. CommandlineJava commandline; commandline = (CommandlineJava) getCommandline().clone(); - commandline.createClasspath(getProject()).add(addSlaveClasspath()); - commandline.setClassname(SlaveMainSafe.class.getName()); - if (slave.slaves == 1) { - commandline.createArgument().setValue(SlaveMain.OPTION_FREQUENT_FLUSH); + commandline.createClasspath(getProject()).add(addForkedJvmClasspath()); + commandline.setClassname(ForkedMainSafe.class.getName()); + if (forkedJvmInfo.forkedJvmCount == 1) { + commandline.createArgument().setValue(ForkedMain.OPTION_FREQUENT_FLUSH); } // Set up full output files. Path sysoutFile = tempFile(uniqueSeed, - "junit4-J" + slave.id, ".sysout", getTempDir()); + "junit4-J" + forkedJvmInfo.id, ".sysout", getTempDir()); Path syserrFile = tempFile(uniqueSeed, - "junit4-J" + slave.id, ".syserr", getTempDir()); + "junit4-J" + forkedJvmInfo.id, ".syserr", getTempDir()); // Set up communication channel. - Path eventFile = tempFile(uniqueSeed, "junit4-J" + slave.id, ".events", getTempDir()); + Path eventFile = tempFile(uniqueSeed, "junit4-J" + forkedJvmInfo.id, ".events", getTempDir()); temporaryFiles.add(eventFile); - commandline.createArgument().setValue(SlaveMain.OPTION_EVENTSFILE); + commandline.createArgument().setValue(ForkedMain.OPTION_EVENTSFILE); commandline.createArgument().setFile(eventFile.toFile()); - + if (sysouts) { - commandline.createArgument().setValue(SlaveMain.OPTION_SYSOUTS); + commandline.createArgument().setValue(ForkedMain.OPTION_SYSOUTS); } - + if (debugStream) { - commandline.createArgument().setValue(SlaveMain.OPTION_DEBUGSTREAM); + commandline.createArgument().setValue(ForkedMain.OPTION_DEBUGSTREAM); } TailInputStream eventStream = new TailInputStream(eventFile); @@ -1431,7 +1442,7 @@ private void executeSlave(final ForkedJvmInfo slave, final EventBus aggregatedBu if (!runListeners.isEmpty()) { String classNames = runListeners.stream().map(x -> x.getClassName()).collect(Collectors.joining(",")); - commandline.createArgument().setValue(SlaveMain.OPTION_RUN_LISTENERS); + commandline.createArgument().setValue(ForkedMain.OPTION_RUN_LISTENERS); commandline.createArgument().setValue(classNames); } @@ -1441,39 +1452,39 @@ private void executeSlave(final ForkedJvmInfo slave, final EventBus aggregatedBu // May or may not use dynamic load balancing, but if == 0 then we're for sure // not using it. if (dynamicAssignmentRatio > 0) { - commandline.createArgument().setValue(SlaveMain.OPTION_STDIN); + commandline.createArgument().setValue(ForkedMain.OPTION_STDIN); } - final EventBus eventBus = new EventBus("slave-" + slave.id); - final DiagnosticsListener diagnosticsListener = new DiagnosticsListener(slave, this); + final EventBus eventBus = new EventBus("forked-" + forkedJvmInfo.id); + final DiagnosticsListener diagnosticsListener = new DiagnosticsListener(forkedJvmInfo, this); eventBus.register(diagnosticsListener); - eventBus.register(new AggregatingListener(aggregatedBus, slave)); + eventBus.register(new AggregatingListener(aggregatedBus, forkedJvmInfo)); final AtomicReference clientCharset = new AtomicReference(); - final AtomicBoolean clientWithLimitedCharset = new AtomicBoolean(); + final AtomicBoolean clientWithLimitedCharset = new AtomicBoolean(); final PrintWriter w = new PrintWriter(Files.newBufferedWriter(classNamesDynamic, StandardCharsets.UTF_8)); eventBus.register(new Object() { @Subscribe - public void onIdleSlave(final SlaveIdle idleSlave) { - aggregatedBus.post(new SlaveIdle() { + public void onIdleForkedJvm(final ForkedJvmIdle idleForkedJvm) { + aggregatedBus.post(new ForkedJvmIdle() { @Override public void finished() { - idleSlave.finished(); + idleForkedJvm.finished(); } @Override public void newSuite(String suiteName) { if (!clientCharset.get().newEncoder().canEncode(suiteName)) { clientWithLimitedCharset.set(true); - log("Forked JVM J" + slave.id + " skipped suite (cannot encode suite name in charset " + + log("Forked JVM J" + forkedJvmInfo.id + " skipped suite (cannot encode suite name in charset " + clientCharset.get() + "): " + suiteName, Project.MSG_WARN); return; } - log("Forked JVM J" + slave.id + " stole suite: " + suiteName, Project.MSG_VERBOSE); + log("Forked JVM J" + forkedJvmInfo.id + " stole suite: " + suiteName, Project.MSG_VERBOSE); w.println(suiteName); w.flush(); - idleSlave.newSuite(suiteName); + idleForkedJvm.newSuite(suiteName); } }); } @@ -1483,15 +1494,15 @@ public void onBootstrap(final BootstrapEvent e) { Charset cs = Charset.forName(((BootstrapEvent) e).getDefaultCharsetName()); clientCharset.set(cs); - slave.start = System.currentTimeMillis(); - slave.setBootstrapEvent(e); - aggregatedBus.post(new ChildBootstrap(slave)); + forkedJvmInfo.start = System.currentTimeMillis(); + forkedJvmInfo.setBootstrapEvent(e); + aggregatedBus.post(new ChildBootstrap(forkedJvmInfo)); } @Subscribe public void receiveQuit(QuitEvent e) { - slave.end = System.currentTimeMillis(); - } + forkedJvmInfo.end = System.currentTimeMillis(); + } }); Closer closer = Closer.create(); @@ -1502,29 +1513,29 @@ public void receiveQuit(QuitEvent e) { OutputStream syserr = closer.register(new BufferedOutputStream(Files.newOutputStream(syserrFile))); RandomAccessFile streamsBuffer = closer.register(new RandomAccessFile(streamsBufferFile.toFile(), "rw")); - Execute execute = forkProcess(slave, eventBus, commandline, eventStream, sysout, syserr, streamsBuffer); - log("Forked JVM J" + slave.id + " finished with exit code: " + execute.getExitValue(), Project.MSG_DEBUG); + Execute execute = forkProcess(forkedJvmInfo, eventBus, commandline, eventStream, sysout, syserr, streamsBuffer); + log("Forked JVM J" + forkedJvmInfo.id + " finished with exit code: " + execute.getExitValue(), Project.MSG_DEBUG); if (execute.isFailure()) { final int exitStatus = execute.getExitValue(); switch (exitStatus) { - case SlaveMain.ERR_NO_JUNIT: + case ForkedMain.ERR_NO_JUNIT: throw new BuildException("Forked JVM's classpath must include a junit4 JAR."); - case SlaveMain.ERR_OLD_JUNIT: + case ForkedMain.ERR_OLD_JUNIT: throw new BuildException("Forked JVM's classpath must use JUnit 4.10 or newer."); default: Closeables.close(sysout, false); Closeables.close(syserr, false); StringBuilder message = new StringBuilder(); - if (exitStatus == SlaveMain.ERR_OOM) { + if (exitStatus == ForkedMain.ERR_OOM) { message.append("Forked JVM ran out of memory."); } else { message.append("Forked process returned with error code: ").append(exitStatus).append("."); } if (Files.size(sysoutFile) > 0 || Files.size(syserrFile) > 0) { - if (exitStatus != SlaveMain.ERR_OOM) { + if (exitStatus != ForkedMain.ERR_OOM) { message.append(" Very likely a JVM crash. "); } @@ -1554,8 +1565,8 @@ public void receiveQuit(QuitEvent e) { Files.delete(streamsBufferFile); // Check sysout/syserr lengths. - checkJvmOutput(aggregatedBus, sysoutFile, slave, "stdout"); - checkJvmOutput(aggregatedBus, syserrFile, slave, "stderr"); + checkJvmOutput(aggregatedBus, sysoutFile, forkedJvmInfo, "stdout"); + checkJvmOutput(aggregatedBus, syserrFile, forkedJvmInfo, "stderr"); } } @@ -1564,7 +1575,7 @@ public void receiveQuit(QuitEvent e) { } if (clientWithLimitedCharset.get() && dynamicAssignmentRatio > 0) { - throw new BuildException("Forked JVM J" + slave.id + " was not be able to decode class names when using" + + throw new BuildException("Forked JVM J" + forkedJvmInfo.id + " was not be able to decode class names when using" + " charset: " + clientCharset + ". Do not use " + "dynamic suite balancing to work around this problem (-DdynamicAssignmentRatio=0)."); } @@ -1633,11 +1644,11 @@ private String escapeAndJoin(String[] commandline) { } /** - * Execute a slave process. Pump events to the given event bus. + * Execute a forked JVM subprocess. Pump events to the given event bus. */ @SuppressForbidden("legitimate sysstreams.") - private Execute forkProcess(ForkedJvmInfo slaveInfo, EventBus eventBus, - CommandlineJava commandline, + private Execute forkProcess(ForkedJvmInfo forkedJvmInfo, EventBus eventBus, + CommandlineJava commandline, TailInputStream eventStream, OutputStream sysout, OutputStream syserr, RandomAccessFile streamsBuffer) { try { String tempDir = commandline.getSystemProperties().getVariablesVector().stream() @@ -1646,14 +1657,16 @@ private Execute forkProcess(ForkedJvmInfo slaveInfo, EventBus eventBus, .findAny() .orElse(null); - final LocalSlaveStreamHandler streamHandler = - new LocalSlaveStreamHandler( - eventBus, testsClassLoader, System.err, eventStream, + final AtomicBoolean fatalError = new AtomicBoolean(false); + final LocalForkedJvmStreamHandler streamHandler = + new LocalForkedJvmStreamHandler( + fatalError, + eventBus, testsClassLoader, System.err, eventStream, sysout, syserr, heartbeat, streamsBuffer); // Add certain properties to allow identification of the forked JVM from within // the subprocess. This can be used for policy files etc. - final Path cwd = getWorkingDirectory(slaveInfo, tempDir); + final Path cwd = getWorkingDirectory(forkedJvmInfo, tempDir); Variable v = new Variable(); v.setKey(CHILDVM_SYSPROP_CWD); @@ -1667,19 +1680,19 @@ private Execute forkProcess(ForkedJvmInfo slaveInfo, EventBus eventBus, v = new Variable(); v.setKey(SysGlobals.CHILDVM_SYSPROP_JVM_ID); - v.setValue(Integer.toString(slaveInfo.id)); + v.setValue(Integer.toString(forkedJvmInfo.id)); commandline.addSysproperty(v); v = new Variable(); v.setKey(SysGlobals.CHILDVM_SYSPROP_JVM_COUNT); - v.setValue(Integer.toString(slaveInfo.slaves)); + v.setValue(Integer.toString(forkedJvmInfo.forkedJvmCount)); commandline.addSysproperty(v); // Emit command line before -stdin to avoid confusion. - slaveInfo.slaveCommandLine = escapeAndJoin(commandline.getCommandline()); - log("Forked child JVM at '" + cwd.toAbsolutePath().normalize() + - "', command (may need escape sequences for your shell):\n" + - slaveInfo.slaveCommandLine, Project.MSG_VERBOSE); + forkedJvmInfo.forkedCommandLine = escapeAndJoin(commandline.getCommandline()); + log("Forked child JVM at '" + cwd.toAbsolutePath().normalize() + + "', command (may need escape sequences for your shell):\n" + + forkedJvmInfo.forkedCommandLine, Project.MSG_VERBOSE); final Execute execute = new Execute(); execute.setCommandline(commandline.getCommandline()); @@ -1689,8 +1702,12 @@ private Execute forkProcess(ForkedJvmInfo slaveInfo, EventBus eventBus, execute.setNewenvironment(newEnvironment); if (env.getVariables() != null) execute.setEnvironment(env.getVariables()); - log("Starting JVM J" + slaveInfo.id, Project.MSG_DEBUG); + log("Starting JVM J" + forkedJvmInfo.id, Project.MSG_DEBUG); execute.execute(); + if (fatalError.get()) { + throw new BuildException("A fatal error occurred somewhere in the even bus " + + "propagation infrastructure. Take a look at syserr log for more information."); + } return execute; } catch (IOException e) { throw new BuildException("Could not start the child process. Run ant with -verbose to get" + @@ -1709,12 +1726,12 @@ private Path getWorkingDirectory(ForkedJvmInfo jvmInfo, String tempDir) throws I if (!existingFiles.isEmpty()) { switch (nonEmptyWorkDirAction) { case IGNORE: - log("Cwd of a forked JVM already exists and is not empty: " + log("Cwd of a forked JVM already exists and is not empty: " + existingFiles + " (ignoring).", Project.MSG_DEBUG); break; - + case WIPE: - log("Cwd of a forked JVM already exists and is not empty, trying to wipe: " + log("Cwd of a forked JVM already exists and is not empty, trying to wipe: " + existingFiles, Project.MSG_DEBUG); try { Path tempPath = tempDir == null ? null : forkedDir.resolve(tempDir); @@ -1784,7 +1801,7 @@ private Path getTempDir() { /** * Process test resources. If there are any test resources that are _not_ class files, - * this will cause a build error. + * this will cause a build error. */ private TestsCollection processTestResources() { TestsCollection collection = new TestsCollection(); @@ -1794,7 +1811,7 @@ private TestsCollection processTestResources() { boolean javaSourceWarn = false; while (iter.hasNext()) { final Resource r = iter.next(); - if (!r.isExists()) + if (!r.isExists()) throw new BuildException("Test class resource does not exist?: " + r.getName()); try { @@ -1806,7 +1823,7 @@ private TestsCollection processTestResources() { .replace('/', '.') .replace('\\', '.'); collection.add(new TestClass(className)); - + if (!javaSourceWarn) { log("Source (.java) files used for naming source suites. This is discouraged, " + "use a resource collection pointing to .class files instead.", Project.MSG_INFO); @@ -1816,9 +1833,9 @@ private TestsCollection processTestResources() { // Assume .class file. InputStream is = r.getInputStream(); if (!is.markSupported()) { - is = new BufferedInputStream(is); + is = new BufferedInputStream(is); } - + try { is.mark(4); if (is.read() != 0xca || @@ -1835,7 +1852,7 @@ private TestsCollection processTestResources() { final TestClass testClass = new TestClass(); ClassReader reader = new ClassReader(is); @SuppressWarnings("deprecation") - ClassVisitor annotationVisitor = new ClassVisitor(Opcodes.ASM8) { + ClassVisitor annotationVisitor = new ClassVisitor(Opcodes.ASM9) { @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { String className = Type.getType(desc).getClassName(); @@ -1849,7 +1866,7 @@ public AnnotationVisitor visitAnnotation(String desc, boolean visible) { reader.accept(annotationVisitor, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); testClass.className = reader.getClassName().replace('/', '.'); log("Test class parsed: " + r.getName() + " as " + testClass.className, Project.MSG_DEBUG); - + collection.add(testClass); } finally { is.close(); @@ -1875,30 +1892,30 @@ public AnnotationVisitor visitAnnotation(String desc, boolean visible) { } /** - * Returns the slave VM command line. + * Returns the forked JVM command line. */ private CommandlineJava getCommandline() { - return slaveCommand; + return forkedJvmCommandLine; } /** * Adds a classpath source which contains the given resource. - * + * * TODO: [GH-213] this is extremely ugly; separate the code required to run on the * forked JVM into an isolated bundle and either create it on-demand (in temp. * files location?) or locate it in classpath somehow (in a portable way). */ - private org.apache.tools.ant.types.Path addSlaveClasspath() { + private org.apache.tools.ant.types.Path addForkedJvmClasspath() { org.apache.tools.ant.types.Path path = new org.apache.tools.ant.types.Path(getProject()); - String [] REQUIRED_SLAVE_CLASSES = { - SlaveMain.class.getName(), + String [] REQUIRED_FORKED_JVM_CLASSES = { + ForkedMain.class.getName(), Strings.class.getName(), MethodGlobFilter.class.getName(), TeeOutputStream.class.getName() }; - for (String clazz : Arrays.asList(REQUIRED_SLAVE_CLASSES)) { + for (String clazz : Arrays.asList(REQUIRED_FORKED_JVM_CLASSES)) { String resource = clazz.replace(".", "/") + ".class"; File f = LoaderUtils.getResourceSource(getClass().getClassLoader(), resource); if (f != null) { diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/LocalSlaveStreamHandler.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/LocalForkedJvmStreamHandler.java similarity index 93% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/LocalSlaveStreamHandler.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/LocalForkedJvmStreamHandler.java index 4dd74da3..8de0060b 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/LocalSlaveStreamHandler.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/LocalForkedJvmStreamHandler.java @@ -11,9 +11,9 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.tools.ant.taskdefs.ExecuteStreamHandler; -import org.apache.tools.ant.taskdefs.StreamPumper; import com.carrotsearch.ant.tasks.junit4.events.BootstrapEvent; import com.carrotsearch.ant.tasks.junit4.events.Deserializer; @@ -26,7 +26,7 @@ /** * Establish event passing with a subprocess and pump events to the bus. */ -public class LocalSlaveStreamHandler implements ExecuteStreamHandler { +public class LocalForkedJvmStreamHandler implements ExecuteStreamHandler { private final EventBus eventBus; private final ClassLoader refLoader; @@ -41,7 +41,7 @@ public class LocalSlaveStreamHandler implements ExecuteStreamHandler { private final PrintStream warnStream; private final TailInputStream eventStream; - + private volatile boolean stopping; private List pumpers = new ArrayList<>(); @@ -51,11 +51,14 @@ public class LocalSlaveStreamHandler implements ExecuteStreamHandler { private final long heartbeat; private final RandomAccessFile streamsBuffer; private final OutputStream streamsBufferWrapper; + private final AtomicBoolean fatalError; - public LocalSlaveStreamHandler( + public LocalForkedJvmStreamHandler( + AtomicBoolean fatalError, EventBus eventBus, ClassLoader classLoader, PrintStream warnStream, TailInputStream eventStream, OutputStream sysout, OutputStream syserr, long heartbeat, final RandomAccessFile streamsBuffer) { this.eventBus = eventBus; + this.fatalError = fatalError; this.warnStream = warnStream; this.refLoader = classLoader; this.eventStream = eventStream; @@ -85,7 +88,7 @@ public void write(byte[] b, int off, int len) throws IOException { public void setProcessErrorStream(InputStream is) throws IOException { this.stderr = is; } - + @Override public void setProcessOutputStream(InputStream is) throws IOException { this.stdout = is; @@ -100,12 +103,12 @@ public void setProcessInputStream(OutputStream os) throws IOException { * A timestamp of last received event (GH-106). */ private volatile Long lastActivity; - + /** * Watchdog thread if heartbeat is to be measured. */ private Thread watchdog; - + /** * Client charset extracted from {@link BootstrapEvent}. */ @@ -131,15 +134,15 @@ public void run() { final long HEARTBEAT_EVENT_THRESHOLD = heartbeatMillis; try { long lastObservedUpdate = lastActivity; - long reportDeadline = lastObservedUpdate + HEARTBEAT_EVENT_THRESHOLD; + long reportDeadline = lastObservedUpdate + HEARTBEAT_EVENT_THRESHOLD; while (true) { Thread.sleep(HEARTBEAT); - + Long last = lastActivity; if (last == null) { break; // terminated. } - + if (last != lastObservedUpdate) { lastObservedUpdate = last; reportDeadline = last + HEARTBEAT_EVENT_THRESHOLD; @@ -161,6 +164,7 @@ public void run() { // Start all pumper threads. UncaughtExceptionHandler handler = new UncaughtExceptionHandler() { public void uncaughtException(Thread t, Throwable e) { + fatalError.set(true); warnStream.println("Unhandled exception in thread: " + t); e.printStackTrace(warnStream); } @@ -235,7 +239,7 @@ void pumpEvents(InputStream eventStream) { return; case IDLE: - eventBus.post(new SlaveIdle(stdinWriter)); + eventBus.post(new ForkedJvmIdle(stdinWriter)); break; case BOOTSTRAP: @@ -255,24 +259,26 @@ void pumpEvents(InputStream eventStream) { event = new OnDiskStreamEvent(event.getType(), streamsBuffer, bufferStart, bufferEnd); eventBus.post(event); break; - + default: eventBus.post(event); } } catch (Throwable t) { - warnStream.println("Event bus dispatch error: " + t.toString()); + fatalError.set(true); + warnStream.println("Event bus dispatch error: " + t); t.printStackTrace(warnStream); } } lastActivity = null; } catch (Throwable e) { if (!stopping) { - warnStream.println("Event stream error: " + e.toString()); + fatalError.set(true); + warnStream.println("Event stream error: " + e); e.printStackTrace(warnStream); } } } - + @Override public void stop() { lastActivity = null; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/PickSeedTask.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/PickSeedTask.java index 1e74ed9e..fd01dee5 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/PickSeedTask.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/PickSeedTask.java @@ -37,7 +37,7 @@ public void execute() throws BuildException { String seedValue = Strings.emptyToNull(getProject().getProperty(propertyName)); if (seedValue == null) { seedValue = SeedUtils.formatSeed(new Random().nextLong()); - log("Picking master seed for property '" + propertyName + "': " + log("Picking main seed for property '" + propertyName + "': " + seedValue, Project.MSG_VERBOSE); getProject().setProperty(propertyName, seedValue); } else { diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/SuiteBalancer.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/SuiteBalancer.java index 3ff7b227..0735947a 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/SuiteBalancer.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/SuiteBalancer.java @@ -14,9 +14,9 @@ public final static class Assignment implements Comparable { public final String suiteName; /** - * Slave assignment. + * forked JVM assignment. */ - public final int slaveId; + public final int forkedJvmId; /** * Estimated cost; informational only (depends on the balancer). May be zero @@ -24,9 +24,9 @@ public final static class Assignment implements Comparable { */ public final int estimatedCost; - public Assignment(String suiteName, int slaveId, int estimatedCost) { + public Assignment(String suiteName, int forkedJvmId, int estimatedCost) { this.suiteName = suiteName; - this.slaveId = slaveId; + this.forkedJvmId = forkedJvmId; this.estimatedCost = estimatedCost; } @@ -34,7 +34,7 @@ public Assignment(String suiteName, int slaveId, int estimatedCost) { public int compareTo(Assignment other) { int v = this.suiteName.compareTo(other.suiteName); if (v == 0) { - v = this.slaveId - other.slaveId; + v = this.forkedJvmId - other.forkedJvmId; } return v; } @@ -46,11 +46,11 @@ public int compareTo(Assignment other) { void setOwner(JUnit4 owner); /** - * Provide assignments for suite names and a given number of slaves. + * Provide assignments for suite names and a given number of forked JVMs. * * @return Returns an ordered list with assignments. Any suite name not present * in the keys of the returned map will be assigned by following * balancers (or randomly). */ - List assign(Collection suiteNames, int slaves, long seed); + List assign(Collection suiteNames, int forkedJvmCount, long seed); } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/balancers/ExecutionTimeBalancer.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/balancers/ExecutionTimeBalancer.java index 4ece79bb..5866851b 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/balancers/ExecutionTimeBalancer.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/balancers/ExecutionTimeBalancer.java @@ -15,10 +15,10 @@ * {@link ExecutionTimesReport}. */ public class ExecutionTimeBalancer extends ProjectComponent implements SuiteBalancer { - private static class SlaveLoad { - public static final Comparator ASCENDING_BY_ESTIMATED_FINISH = new Comparator() { + private static class ForkedJvmLoad { + public static final Comparator ASCENDING_BY_ESTIMATED_FINISH = new Comparator() { @Override - public int compare(SlaveLoad o1, SlaveLoad o2) { + public int compare(ForkedJvmLoad o1, ForkedJvmLoad o2) { if (o1.estimatedFinish < o2.estimatedFinish) { return -1; } else if (o1.estimatedFinish == o2.estimatedFinish) { @@ -32,7 +32,7 @@ public int compare(SlaveLoad o1, SlaveLoad o2) { public final int id; public long estimatedFinish; - public SlaveLoad(int id) { + public ForkedJvmLoad(int id) { this.id = id; } } @@ -69,12 +69,12 @@ public void add(ResourceCollection rc) { /** * Assign based on execution time history. The algorithm is a greedy heuristic - * assigning the longest remaining test to the slave with the + * assigning the longest remaining test to the forked JVM with the * shortest-completion time so far. This is not optimal but fast and provides * a decent average assignment. */ @Override - public List assign(Collection suiteNames, int slaves, long seed) { + public List assign(Collection suiteNames, int forkedJvmCount, long seed) { // Read hints first. final Map> hints = ExecutionTimesReport.mergeHints(resources, suiteNames); @@ -94,37 +94,37 @@ public List assign(Collection suiteNames, int slaves, long s Collections.sort(costs, SuiteHint.DESCENDING_BY_WEIGHT); // Apply the assignment heuristic. - final PriorityQueue pq = new PriorityQueue( - slaves, SlaveLoad.ASCENDING_BY_ESTIMATED_FINISH); - for (int i = 0; i < slaves; i++) { - pq.add(new SlaveLoad(i)); + final PriorityQueue pq = new PriorityQueue( + forkedJvmCount, ForkedJvmLoad.ASCENDING_BY_ESTIMATED_FINISH); + for (int i = 0; i < forkedJvmCount; i++) { + pq.add(new ForkedJvmLoad(i)); } final List assignments = new ArrayList<>(); for (SuiteHint hint : costs) { - SlaveLoad slave = pq.remove(); - slave.estimatedFinish += hint.cost; - pq.add(slave); + ForkedJvmLoad forkedJvm = pq.remove(); + forkedJvm.estimatedFinish += hint.cost; + pq.add(forkedJvm); owner.log("Expected execution time for " + hint.suiteName + ": " + Duration.toHumanDuration(hint.cost), Project.MSG_DEBUG); - assignments.add(new Assignment(hint.suiteName, slave.id, (int) hint.cost)); + assignments.add(new Assignment(hint.suiteName, forkedJvm.id, (int) hint.cost)); } // Dump estimated execution times. - TreeMap ordered = new TreeMap(); + TreeMap ordered = new TreeMap(); while (!pq.isEmpty()) { - SlaveLoad slave = pq.remove(); - ordered.put(slave.id, slave); + ForkedJvmLoad forkedJvmLoad = pq.remove(); + ordered.put(forkedJvmLoad.id, forkedJvmLoad); } for (Integer id : ordered.keySet()) { - final SlaveLoad slave = ordered.get(id); + final ForkedJvmLoad forkedJvmLoad = ordered.get(id); owner.log(String.format(Locale.ROOT, "Expected execution time on JVM J%d: %8.2fs", - slave.id, - slave.estimatedFinish / 1000.0f), + forkedJvmLoad.id, + forkedJvmLoad.estimatedFinish / 1000.0f), verbose ? Project.MSG_INFO : Project.MSG_DEBUG); } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/balancers/RoundRobinBalancer.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/balancers/RoundRobinBalancer.java index c00a3ff5..ea8d1254 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/balancers/RoundRobinBalancer.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/balancers/RoundRobinBalancer.java @@ -13,12 +13,12 @@ public class RoundRobinBalancer implements SuiteBalancer { @Override - public List assign(Collection suiteNames, int slaves, long seed) { + public List assign(Collection suiteNames, int forkedJvmCount, long seed) { List result = new ArrayList<>(); int i = 0; for (String suite : suiteNames) { result.add(new Assignment(suite, i++, 0)); - if (i >= slaves) i = 0; + if (i >= forkedJvmCount) i = 0; } return result; } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/BootstrapEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/BootstrapEvent.java index 564de8b4..68bf18a3 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/BootstrapEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/BootstrapEvent.java @@ -16,7 +16,7 @@ import com.carrotsearch.ant.tasks.junit4.gson.stream.JsonWriter; /** - * Initial message sent from the slave to the master (if forked locally). + * Initial message sent from the forked JVM to the main JVM (if forked locally). */ public class BootstrapEvent extends AbstractEvent { private static final List GUARANTEED_PROPERTIES = Arrays.asList( @@ -103,14 +103,14 @@ private Map collectSystemProperties() { } /** - * Default charset on the slave. + * Default charset on the forked JVM. */ public String getDefaultCharsetName() { return defaultCharset; } /** - * System properties on the slave. + * System properties on the forked JVM. */ public Map getSystemProperties() { return systemProperties; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/EventType.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/EventType.java index d362d4fc..d0a764d9 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/EventType.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/EventType.java @@ -5,7 +5,7 @@ import com.carrotsearch.ant.tasks.junit4.gson.stream.JsonReader; /** - * Events (messages) passed between the slave and the master. + * Events (messages) passed between the forked JVM and the main JVM. */ public enum EventType { BOOTSTRAP(BootstrapEvent.class), diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/IEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/IEvent.java index 0119d289..b026e311 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/IEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/IEvent.java @@ -1,7 +1,7 @@ package com.carrotsearch.ant.tasks.junit4.events; /** - * An event/ message passed between the forked JVM and the master. + * An event/ message passed between the forked JVM and the main JVM. */ public interface IEvent { EventType getType(); diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/IdleEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/IdleEvent.java index a89dd422..2b4abd87 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/IdleEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/IdleEvent.java @@ -6,7 +6,7 @@ import com.carrotsearch.ant.tasks.junit4.gson.stream.JsonWriter; /** - * Marker that the slave is idle and awaiting more suite names. + * Marker that the forked JVM is idle and awaiting more suite names. */ public class IdleEvent extends AbstractEvent { public IdleEvent() { diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/QuitEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/QuitEvent.java index 6e9f58df..d85728e9 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/QuitEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/QuitEvent.java @@ -6,7 +6,7 @@ import com.carrotsearch.ant.tasks.junit4.gson.stream.JsonWriter; /** - * Final message sent from the slave. Also signals orderly shutdown. + * Final message sent from the forked JVM. Also signals orderly shutdown. */ public class QuitEvent extends AbstractEvent { public QuitEvent() { diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/Serializer.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/Serializer.java index 506fe40a..6f7c719f 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/Serializer.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/Serializer.java @@ -11,7 +11,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import com.carrotsearch.ant.tasks.junit4.gson.stream.JsonWriter; -import com.carrotsearch.ant.tasks.junit4.slave.SlaveMain; +import com.carrotsearch.ant.tasks.junit4.forked.ForkedMain; import com.google.common.base.Charsets; /** @@ -55,14 +55,14 @@ public void run() { Throwable reason = doForcedShutdown; if (reason != null) { try { - SlaveMain.warn("Unhandled exception in event serialization.", reason); + ForkedMain.warn("Unhandled exception in event serialization.", reason); } finally { Runtime.getRuntime().halt(0); } } } } catch (Throwable t) { - SlaveMain.warn("Unreachable code. Complete panic.", t); + ForkedMain.warn("Unreachable code. Complete panic.", t); } } @@ -71,7 +71,7 @@ public UncaughtExceptionHandler getUncaughtExceptionHandler() { return new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { - SlaveMain.warn("Unreachable code. Complete panic.", e); + ForkedMain.warn("Unreachable code. Complete panic.", e); } }; } @@ -91,7 +91,7 @@ public Serializer serialize(RemoteEvent event) throws IOException { // we enqueue the event and continue, serializing them in order. events.addLast(event); if (events.size() > 1) { - // SlaveMain.warn("Serializing " + event.getType() + " (postponed, " + events.size() + " in queue)", null); + // ForkedMain.warn("Serializing " + event.getType() + " (postponed, " + events.size() + " in queue)", null); return this; } @@ -107,11 +107,11 @@ private void flushQueue() throws IOException { if (isFlushing.getAndSet(true)) { // We're already flushing, return. - // SlaveMain.warn("Flush queue already flushing", null); + // ForkedMain.warn("Flush queue already flushing", null); return; } - // SlaveMain.warn("Flush queue start", null); + // ForkedMain.warn("Flush queue start", null); try { while (!events.isEmpty()) { if (writer == null) { @@ -120,7 +120,7 @@ private void flushQueue() throws IOException { final RemoteEvent event = events.removeFirst(); try { - // SlaveMain.warn("Serializing " + event.getType(), null); + // ForkedMain.warn("Serializing " + event.getType(), null); AccessController.doPrivileged(new PrivilegedExceptionAction() { @Override public Void run() throws Exception { @@ -140,7 +140,7 @@ public Void run() throws Exception { } finally { isFlushing.set(false); } - // SlaveMain.warn("Flush queue end", null); + // ForkedMain.warn("Flush queue end", null); if (doForcedShutdown != null) { // We can't do a stack bang here so any call is a risk of hitting SOE again. @@ -157,11 +157,11 @@ public Void run() throws Exception { public Serializer flush() throws IOException { synchronized (lock) { if (writer != null) { - // SlaveMain.warn("flushing...", null); + // ForkedMain.warn("flushing...", null); flushQueue(); writer.flush(); } else { - // SlaveMain.warn("flushing failed (serializer closed)", null); + // ForkedMain.warn("flushing failed (serializer closed)", null); } return this; } @@ -169,7 +169,7 @@ public Serializer flush() throws IOException { public void close() throws IOException { synchronized (lock) { - // SlaveMain.warn("closing...", null); + // ForkedMain.warn("closing...", null); if (writer != null) { serialize(new QuitEvent()); flushQueue(); diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedQuitEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedQuitEvent.java index 7060becf..0d10c830 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedQuitEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedQuitEvent.java @@ -2,7 +2,7 @@ /** - * An event dispatched after all slaves have completed their jobs. + * An event dispatched after all forked JVMs have completed their jobs. */ public class AggregatedQuitEvent { } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedResultEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedResultEvent.java index b0524458..9d373b47 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedResultEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedResultEvent.java @@ -13,7 +13,7 @@ */ public interface AggregatedResultEvent { public Description getDescription(); - public ForkedJvmInfo getSlave(); + public ForkedJvmInfo getForkedJvmInfo(); public boolean isSuccessful(); public List getFailures(); List getEventStream(); diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedStartEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedStartEvent.java index 7bcce329..f847c5c5 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedStartEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedStartEvent.java @@ -2,22 +2,22 @@ /** - * An event dispatched before any slave starts. + * An event dispatched before any forked JVM starts. */ public class AggregatedStartEvent { - private int slaves; + private int forkedJvmCount; private int suiteCount; - public AggregatedStartEvent(int slaves, int suiteCount) { - this.slaves = slaves; + public AggregatedStartEvent(int forkedJvmCount, int suiteCount) { + this.forkedJvmCount = forkedJvmCount; this.suiteCount = suiteCount; } /** - * Number of slave processes. + * Number of forked JVM processes. */ - public int getSlaveCount() { - return slaves; + public int getForkedJvmCount() { + return forkedJvmCount; } /** diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedSuiteResultEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedSuiteResultEvent.java index 74c1ed16..b031544a 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedSuiteResultEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedSuiteResultEvent.java @@ -25,7 +25,7 @@ import com.carrotsearch.randomizedtesting.WriterOutputStream; public class AggregatedSuiteResultEvent implements AggregatedResultEvent { - private transient final ForkedJvmInfo slave; + private transient final ForkedJvmInfo forkedJvm; private final long executionTime; private final long startTimestamp; @@ -47,7 +47,7 @@ public AggregatedSuiteResultEvent( long startTimestamp, long executionTime) { this.startEvent = startEvent; - this.slave = id; + this.forkedJvm = id; this.tests = tests; this.suiteFailures = suiteFailures; this.description = description; @@ -89,8 +89,8 @@ public List getEventStream() { } @Override - public ForkedJvmInfo getSlave() { - return slave; + public ForkedJvmInfo getForkedJvmInfo() { + return forkedJvm; } @Override @@ -106,7 +106,7 @@ public long getExecutionTime() { } /** - * Execution start timestamp (on the slave). + * Execution start timestamp (on the forked JVM). */ public long getStartTimestamp() { return startTimestamp; @@ -164,7 +164,7 @@ public int getIgnoredCount() { public void serialize(JsonWriter w, boolean outputStreams) throws IOException { w.beginObject(); - w.name("slave").value(getSlave().id); + w.name("forkedJvm").value(getForkedJvmInfo().id); w.name("startTimestamp").value(getStartTimestamp()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ROOT); @@ -198,7 +198,7 @@ public void serialize(JsonWriter w, boolean outputStreams) throws IOException { private void serialize(JsonWriter w, SimpleDateFormat sdf, AggregatedTestResultEvent e) throws IOException { w.beginObject(); - w.name("slave").value(e.getSlave().id); + w.name("forkedJvm").value(e.getForkedJvmInfo().id); w.name("startTimestamp").value(e.getStartTimestamp()); w.name("startTimestampDate").value(sdf.format(new Date(e.getStartTimestamp()))); w.name("executionTime").value(e.getExecutionTime()); @@ -237,7 +237,7 @@ private void serialize(JsonWriter w, FailureMirror e) throws IOException { } private void serializeEvents(JsonWriter w, boolean outputStreams) throws IOException { - final Charset charset = getSlave().getCharset(); + final Charset charset = getForkedJvmInfo().getCharset(); int lineBuffer = 160; final StringWriter out = new StringWriter(); final StringWriter err = new StringWriter(); diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedSuiteStartedEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedSuiteStartedEvent.java index e58e930d..982231d3 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedSuiteStartedEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedSuiteStartedEvent.java @@ -4,11 +4,11 @@ import com.carrotsearch.ant.tasks.junit4.events.SuiteStartedEvent; public class AggregatedSuiteStartedEvent { - private transient final ForkedJvmInfo slave; + private transient final ForkedJvmInfo forkedJvmInfo; private SuiteStartedEvent suiteStartedEvent; public AggregatedSuiteStartedEvent(ForkedJvmInfo id, SuiteStartedEvent e) { - this.slave = id; + this.forkedJvmInfo = id; this.suiteStartedEvent = e; } @@ -16,7 +16,7 @@ public SuiteStartedEvent getSuiteStartedEvent() { return suiteStartedEvent; } - public ForkedJvmInfo getSlave() { - return slave; + public ForkedJvmInfo getForkedJvmInfo() { + return forkedJvmInfo; } } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedTestResultEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedTestResultEvent.java index 5025e8a4..7642dda1 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedTestResultEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatedTestResultEvent.java @@ -17,7 +17,7 @@ public class AggregatedTestResultEvent implements AggregatedResultEvent { private final Description suite; private final Description description; - private final ForkedJvmInfo slave; + private final ForkedJvmInfo forkedJvmInfo; private TestStatus status = TestStatus.OK; private List failures = new ArrayList<>(); @@ -34,10 +34,10 @@ public class AggregatedTestResultEvent implements AggregatedResultEvent { /** Associated {@link TestFinishedEvent}. */ private TestFinishedEvent testFinishedEvent; - public AggregatedTestResultEvent(ForkedJvmInfo slave, Description suiteDescription, Description description) { + public AggregatedTestResultEvent(ForkedJvmInfo forkedJvmInfo, Description suiteDescription, Description description) { this.description = description; this.suite = suiteDescription; - this.slave = slave; + this.forkedJvmInfo = forkedJvmInfo; } @Override @@ -57,8 +57,8 @@ public Description getSuiteDescription() { } @Override - public ForkedJvmInfo getSlave() { - return slave; + public ForkedJvmInfo getForkedJvmInfo() { + return forkedJvmInfo; } @Override @@ -74,7 +74,7 @@ public long getExecutionTime() { } /** - * Execution start timestamp (on the slave). + * Execution start timestamp (on the forked JVM). */ public long getStartTimestamp() { return testFinishedEvent.getStartTimestamp(); diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatingListener.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatingListener.java index cb4e1ba8..2c1c71e1 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatingListener.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/AggregatingListener.java @@ -21,7 +21,7 @@ */ public class AggregatingListener { private EventBus target; - private ForkedJvmInfo slave; + private ForkedJvmInfo forkedJvmInfo; private AggregatedSuiteStartedEvent startEvent; private Description lastSuite; @@ -34,9 +34,9 @@ public class AggregatingListener { /** * @param target Which event bus to repost aggregated events to? */ - public AggregatingListener(EventBus target, ForkedJvmInfo slave) { + public AggregatingListener(EventBus target, ForkedJvmInfo forkedJvmInfo) { this.target = target; - this.slave = slave; + this.forkedJvmInfo = forkedJvmInfo; } @Subscribe @@ -45,7 +45,7 @@ public void appendToEventStream(IEvent e) { switch (e.getType()) { case APPEND_STDOUT: case APPEND_STDERR: - target.post(new PartialOutputEvent(slave, e)); + target.post(new PartialOutputEvent(forkedJvmInfo, e)); // fall through. case TEST_STARTED: case TEST_FINISHED: @@ -74,7 +74,7 @@ public void slowHeartBeat(LowLevelHeartBeatEvent e) { } target.post(new HeartBeatEvent( - slave, + forkedJvmInfo, current, e.lastActivity, e.currentTime @@ -90,14 +90,14 @@ public void receiveSuiteStart(SuiteStartedEvent e) { suiteFailures = new ArrayList<>(); eventStream = new ArrayList<>(); lastSuite = e.getDescription(); - startEvent = new AggregatedSuiteStartedEvent(slave, e); + startEvent = new AggregatedSuiteStartedEvent(forkedJvmInfo, e); target.post(startEvent); } @Subscribe public void receiveTestStart(TestStartedEvent e) { - tests.push(new AggregatedTestResultEvent(slave, lastSuite, e.getDescription())); + tests.push(new AggregatedTestResultEvent(forkedJvmInfo, lastSuite, e.getDescription())); testStartStreamMarker = eventStream.size(); } @@ -157,7 +157,7 @@ public void receiveTestEnd(TestFinishedEvent e) { public void receiveSuiteEnd(SuiteCompletedEvent e) { target.post(new AggregatedSuiteResultEvent( startEvent, - slave, + forkedJvmInfo, e.getDescription(), suiteFailures, Lists.newArrayList(tests.descendingIterator()), diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/ChildBootstrap.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/ChildBootstrap.java index 1a7a20c6..071a07ec 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/ChildBootstrap.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/ChildBootstrap.java @@ -9,7 +9,7 @@ public ChildBootstrap(ForkedJvmInfo childInfo) { this.childInfo = childInfo; } - public ForkedJvmInfo getSlave() { + public ForkedJvmInfo getForkedJvmInfo() { return childInfo; } } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/HeartBeatEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/HeartBeatEvent.java index d37c3c46..4a341832 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/HeartBeatEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/HeartBeatEvent.java @@ -11,13 +11,13 @@ * not guaranteed (and may be null). */ public final class HeartBeatEvent { - private final ForkedJvmInfo slave; + private final ForkedJvmInfo forkedJvmInfo; private final Description description; private final long lastActivity; private final long currentTime; - public HeartBeatEvent(ForkedJvmInfo slave, Description description, long lastActivity, long currentTime) { - this.slave = slave; + public HeartBeatEvent(ForkedJvmInfo forkedJvmInfo, Description description, long lastActivity, long currentTime) { + this.forkedJvmInfo = forkedJvmInfo; this.description = description; this.lastActivity = lastActivity; this.currentTime = currentTime; @@ -39,7 +39,7 @@ public long getNoEventDuration() { return getCurrentTime() - getLastActivity(); } - public ForkedJvmInfo getSlave() { - return slave; + public ForkedJvmInfo getForkedJvmInfo() { + return forkedJvmInfo; } } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/JvmOutputEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/JvmOutputEvent.java index 6ca98b36..ccfb80cf 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/JvmOutputEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/JvmOutputEvent.java @@ -18,7 +18,7 @@ public JvmOutputEvent(ForkedJvmInfo childInfo, File jvmOutput) { this.jvmOutput = jvmOutput; } - public ForkedJvmInfo getSlave() { + public ForkedJvmInfo getForkedJvmInfo() { return childInfo; } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/PartialOutputEvent.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/PartialOutputEvent.java index 6b778ca3..d7ecd773 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/PartialOutputEvent.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/events/aggregated/PartialOutputEvent.java @@ -5,20 +5,20 @@ import com.carrotsearch.ant.tasks.junit4.events.IStreamEvent; /** - * Partial output emitted from a given slave. + * Partial output emitted from the forked JVM. */ public class PartialOutputEvent { - private ForkedJvmInfo slave; + private ForkedJvmInfo forkedJvmInfo; private IEvent event; - public PartialOutputEvent(ForkedJvmInfo slave, IEvent e) { + public PartialOutputEvent(ForkedJvmInfo forkedJvmInfo, IEvent e) { assert e instanceof IStreamEvent; - this.slave = slave; + this.forkedJvmInfo = forkedJvmInfo; this.event = e; } - public ForkedJvmInfo getSlave() { - return slave; + public ForkedJvmInfo getForkedJvmInfo() { + return forkedJvmInfo; } public IEvent getEvent() { diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/BeforeAfterRunListenerDecorator.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/BeforeAfterRunListenerDecorator.java similarity index 97% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/BeforeAfterRunListenerDecorator.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/BeforeAfterRunListenerDecorator.java index 86ffd69b..a724fdaa 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/BeforeAfterRunListenerDecorator.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/BeforeAfterRunListenerDecorator.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.lang.reflect.Proxy; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/EventsOutputStream.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/EventsOutputStream.java similarity index 93% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/EventsOutputStream.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/EventsOutputStream.java index b4805c7b..bdef33e0 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/EventsOutputStream.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/EventsOutputStream.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.io.*; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/SlaveMain.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/ForkedMain.java similarity index 96% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/SlaveMain.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/ForkedMain.java index c17c274d..0600f836 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/SlaveMain.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/ForkedMain.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.io.BufferedOutputStream; import java.io.BufferedReader; @@ -12,9 +12,6 @@ import java.io.PrintStream; import java.io.RandomAccessFile; import java.io.Writer; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayDeque; @@ -23,8 +20,8 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.concurrent.TimeUnit; -import com.carrotsearch.randomizedtesting.RandomizedRunner; import org.junit.runner.Description; import org.junit.runner.Request; import org.junit.runner.Result; @@ -47,9 +44,9 @@ import com.google.common.collect.Iterators; /** - * A slave process running the actual tests on the target JVM. + * A forked JVM process running the actual tests on the target JVM. */ -public class SlaveMain { +public class ForkedMain { /** Runtime exception. */ public static final int ERR_EXCEPTION = 240; @@ -116,7 +113,7 @@ public class SlaveMain { * are propagated properly. Not really useful in practice... */ public static final String SYSPROP_FIRERUNNERFAILURE = - SlaveMain.class.getName() + ".fireRunnerFailure"; + ForkedMain.class.getName() + ".fireRunnerFailure"; /** * Delay the initial bootstrap event from the forked JVM @@ -163,9 +160,9 @@ public void close() throws IOException { } /** - * Creates a slave emitting events to the given serializer. + * Creates a forked JVM emitting events to the given serializer. */ - public SlaveMain(Serializer serializer) { + public ForkedMain(Serializer serializer) { this.serializer = serializer; } @@ -308,7 +305,7 @@ private Class instantiate(String className) { if (flushFrequently) serializer.flush(); } catch (Exception e) { - warn("Could not report failure back to master.", t); + warn("Could not report failure back to main JVM.", t); } return null; } @@ -379,7 +376,7 @@ public static void main(String[] allArgs) { // Redirect original streams and start running tests. redirectStreams(serializer, flushFrequently); - final SlaveMain main = new SlaveMain(serializer); + final ForkedMain main = new ForkedMain(serializer); main.flushFrequently = flushFrequently; main.debugMessagesFile = debugStream ? new File(eventsFile.getAbsolutePath() + ".debug"): null; main.runListeners = runListeners; @@ -430,8 +427,9 @@ public static void main(String[] allArgs) { private static void tryWaitingForGC() { // We could try to preallocate memory mx bean and count collections... // there is no guarantee it doesn't allocate stuff too though. - final long timeout = System.currentTimeMillis() + 2000; - while (System.currentTimeMillis() < timeout) { + final long duration = TimeUnit.SECONDS.toNanos(2); + final long startTime = System.nanoTime(); + while (System.nanoTime() - startTime < duration) { System.gc(); try { Thread.sleep(250); diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/SlaveMainSafe.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/ForkedMainSafe.java similarity index 74% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/SlaveMainSafe.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/ForkedMainSafe.java index f2e9f9d6..110a5d27 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/SlaveMainSafe.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/ForkedMainSafe.java @@ -1,16 +1,16 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.io.Serializable; import com.carrotsearch.randomizedtesting.annotations.SuppressForbidden; @SuppressForbidden("legitimate sysstreams.") -public class SlaveMainSafe { +public class ForkedMainSafe { public static void main(String[] args) { verifyJUnit4Present(); try { - SlaveMain.main(args); + ForkedMain.main(args); } catch (Throwable e) { try { System.err.println(e.toString()); @@ -18,7 +18,7 @@ public static void main(String[] args) { System.out.close(); System.err.close(); } finally { - JvmExit.halt(SlaveMain.ERR_EXCEPTION); + JvmExit.halt(ForkedMain.ERR_EXCEPTION); } } } @@ -30,10 +30,10 @@ private static void verifyJUnit4Present() { try { Class clazz = Class.forName("org.junit.runner.Description"); if (!Serializable.class.isAssignableFrom(clazz)) { - JvmExit.halt(SlaveMain.ERR_OLD_JUNIT); + JvmExit.halt(ForkedMain.ERR_OLD_JUNIT); } } catch (ClassNotFoundException e) { - JvmExit.halt(SlaveMain.ERR_NO_JUNIT); + JvmExit.halt(ForkedMain.ERR_NO_JUNIT); } } } diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/JvmExit.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/JvmExit.java similarity index 64% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/JvmExit.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/JvmExit.java index 3e17891b..743fa9e0 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/JvmExit.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/JvmExit.java @@ -1,4 +1,6 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; + +import java.util.concurrent.TimeUnit; final class JvmExit { final static void halt(final int code) { @@ -11,11 +13,12 @@ public void run() { } }; - long deadline = System.currentTimeMillis() + 5 * 1000; + final long duration = TimeUnit.SECONDS.toNanos(5); + final long startTime = System.nanoTime(); exiter.start(); try { - while (System.currentTimeMillis() < deadline) { + while (System.nanoTime() - startTime < duration) { Thread.sleep(500); } } catch (Throwable t) {} diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/NoExceptionRunListenerDecorator.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/NoExceptionRunListenerDecorator.java similarity index 97% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/NoExceptionRunListenerDecorator.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/NoExceptionRunListenerDecorator.java index 04f53e04..154ed6e2 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/NoExceptionRunListenerDecorator.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/NoExceptionRunListenerDecorator.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.lang.reflect.Proxy; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/NullWriter.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/NullWriter.java similarity index 81% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/NullWriter.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/NullWriter.java index 4a544440..95d3329d 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/NullWriter.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/NullWriter.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.io.IOException; import java.io.Writer; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/OrderedRunNotifier.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/OrderedRunNotifier.java similarity index 99% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/OrderedRunNotifier.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/OrderedRunNotifier.java index 55f48718..024963a9 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/OrderedRunNotifier.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/OrderedRunNotifier.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.util.*; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/RunListenerEmitter.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/RunListenerEmitter.java similarity index 98% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/RunListenerEmitter.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/RunListenerEmitter.java index 2314cae7..93add3bc 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/RunListenerEmitter.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/RunListenerEmitter.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.io.IOException; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/StdInLineIterator.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/StdInLineIterator.java similarity index 94% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/StdInLineIterator.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/StdInLineIterator.java index 01501362..891ec7e0 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/StdInLineIterator.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/StdInLineIterator.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import java.io.*; import java.nio.charset.Charset; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/StreamFlusherDecorator.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/StreamFlusherDecorator.java similarity index 91% rename from junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/StreamFlusherDecorator.java rename to junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/StreamFlusherDecorator.java index 2559b613..dfd79e1d 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/slave/StreamFlusherDecorator.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/forked/StreamFlusherDecorator.java @@ -1,4 +1,4 @@ -package com.carrotsearch.ant.tasks.junit4.slave; +package com.carrotsearch.ant.tasks.junit4.forked; import org.junit.runner.notification.RunListener; diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/StackTraceFilter.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/StackTraceFilter.java index c3f02a5f..12042da5 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/StackTraceFilter.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/StackTraceFilter.java @@ -26,7 +26,7 @@ public class StackTraceFilter { Pattern.compile("^(\\s+at )(sun\\.reflect\\.)"), Pattern.compile("^(\\s+at )(java\\.lang\\.reflect\\.Method\\.invoke\\()"), // randomizedtesting's own launcher. - Pattern.compile("^(\\s+at )(com\\.carrotsearch\\.ant\\.tasks\\.junit4\\.slave\\.SlaveMain)")); + Pattern.compile("^(\\s+at )(com\\.carrotsearch\\.ant\\.tasks\\.junit4\\.forked\\.ForkedMain)")); /** * Whether or not to use the default filters. diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/TextReport.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/TextReport.java index 4f591c2a..f3bfb9d4 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/TextReport.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/TextReport.java @@ -367,9 +367,9 @@ public void onStart(AggregatedStartEvent e) throws IOException { logShort("Executing " + totalSuites + Pluralize.pluralize(totalSuites, " suite") + " with " + - e.getSlaveCount() + Pluralize.pluralize(e.getSlaveCount(), " JVM") + ".\n", false); + e.getForkedJvmCount() + Pluralize.pluralize(e.getForkedJvmCount(), " JVM") + ".\n", false); - forkedJvmCount = e.getSlaveCount(); + forkedJvmCount = e.getForkedJvmCount(); jvmIdFormat = " J%-" + (1 + (int) Math.floor(Math.log10(forkedJvmCount))) + "d"; outWriter = new PrefixedWriter(stdoutIndent, output, DEFAULT_MAX_LINE_WIDTH); @@ -378,12 +378,12 @@ public void onStart(AggregatedStartEvent e) throws IOException { @Subscribe public void onChildBootstrap(ChildBootstrap e) throws IOException { - logShort("Started J" + e.getSlave().id + " PID(" + e.getSlave().getPidString() + ")."); + logShort("Started J" + e.getForkedJvmInfo().id + " PID(" + e.getForkedJvmInfo().getPidString() + ")."); } @Subscribe public void onHeartbeat(HeartBeatEvent e) throws IOException { - logShort("HEARTBEAT J" + e.getSlave().id + " PID(" + e.getSlave().getPidString() + "): " + + logShort("HEARTBEAT J" + e.getForkedJvmInfo().id + " PID(" + e.getForkedJvmInfo().getPidString() + "): " + formatTime(e.getCurrentTime()) + ", stalled for " + formatDurationInSeconds(e.getNoEventDuration()) + " at: " + (e.getDescription() == null ? "" : formatDescription(e.getDescription()))); @@ -414,7 +414,7 @@ public void onQuit(AggregatedQuitEvent e) throws IOException { @Subscribe public void onSuiteStart(AggregatedSuiteStartedEvent e) throws IOException { - final Charset charset = e.getSlave().getCharset(); + final Charset charset = e.getForkedJvmInfo().getCharset(); outStream = new WriterOutputStream(outWriter, charset, DEFAULT_MAX_LINE_WIDTH, true); errStream = new WriterOutputStream(errWriter, charset, DEFAULT_MAX_LINE_WIDTH, true); @@ -443,11 +443,11 @@ public void onOutput(PartialOutputEvent e) throws IOException { @Subscribe public void onJvmOutput(JvmOutputEvent e) throws IOException { - final String id = Integer.toString(e.getSlave().id); + final String id = Integer.toString(e.getForkedJvmInfo().id); output.append(">>> JVM J").append(id) .append(" emitted unexpected output (verbatim) ----\n"); - try (Reader r = Files.newReader(e.getJvmOutputFile(), e.getSlave().getCharset())) { + try (Reader r = Files.newReader(e.getJvmOutputFile(), e.getForkedJvmInfo().getCharset())) { CharStreams.copy(r, output); } output.append("<<< JVM J" + id + ": EOF ----\n"); @@ -575,7 +575,7 @@ private void emitSuiteEnd(AggregatedSuiteResultEvent e, int suitesCompleted) thr suitesCompleted, totalSuites, totalErrors == 0 ? "" : " (" + totalErrors + "!)", - e.getSlave().slaves > 1 ? " on J" + e.getSlave().id : "", + e.getForkedJvmInfo().forkedJvmCount > 1 ? " on J" + e.getForkedJvmInfo().id : "", e.getExecutionTime() / 1000.0d)); b.append(e.getTests().size()).append(Pluralize.pluralize(e.getTests().size(), " test")); @@ -612,7 +612,7 @@ private void emitStatusLine(AggregatedResultEvent result, TestStatus status, lon line.append(Strings.padEnd(statusNames.get(status), 8, ' ')); line.append(formatDurationInSeconds(timeMillis)); if (forkedJvmCount > 1) { - line.append(String.format(Locale.ROOT, jvmIdFormat, result.getSlave().id)); + line.append(String.format(Locale.ROOT, jvmIdFormat, result.getForkedJvmInfo().id)); } line.append(" | "); diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/antxml/AntXmlReport.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/antxml/AntXmlReport.java index 7f074dca..ac41a8fd 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/antxml/AntXmlReport.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/antxml/AntXmlReport.java @@ -195,7 +195,7 @@ private TestSuiteModel buildModel(AggregatedSuiteResultEvent e) throws IOExcepti suite.hostname = "nohost.nodomain"; suite.name = e.getDescription().getDisplayName(); - suite.properties = buildModel(e.getSlave().getSystemProperties()); + suite.properties = buildModel(e.getForkedJvmInfo().getSystemProperties()); suite.time = e.getExecutionTime() / 1000.0; suite.timestamp = df.format(new Date(e.getStartTimestamp())); @@ -233,7 +233,7 @@ private TestSuiteModel buildModel(AggregatedSuiteResultEvent e) throws IOExcepti StringWriter sysout = new StringWriter(); StringWriter syserr = new StringWriter(); if (outputStreams) { - e.getSlave().decodeStreams(e.getEventStream(), sysout, syserr); + e.getForkedJvmInfo().decodeStreams(e.getEventStream(), sysout, syserr); } suite.sysout = sysout.toString(); suite.syserr = syserr.toString(); diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/antxml/TestSuiteModel.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/antxml/TestSuiteModel.java index e088f54d..06fed446 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/antxml/TestSuiteModel.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/antxml/TestSuiteModel.java @@ -48,8 +48,8 @@ public class TestSuiteModel public List testcases = new ArrayList<>(); @Element(name = "system-out", data = true, required = true) - public String sysout = ""; + public Object sysout = ""; @Element(name = "system-err", data = true, required = true) - public String syserr = ""; + public Object syserr = ""; } \ No newline at end of file diff --git a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/json/JsonReport.java b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/json/JsonReport.java index 1c51003e..555e9b4f 100644 --- a/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/json/JsonReport.java +++ b/junit4-ant/src/main/java/com/carrotsearch/ant/tasks/junit4/listeners/json/JsonReport.java @@ -40,7 +40,7 @@ public class JsonReport implements AggregatedEventListener { private String projectName; - private Map slaves = new TreeMap<>(); + private Map forkedJvms = new TreeMap<>(); private OutputStreamWriter writer; private static enum OutputMethod { @@ -202,7 +202,7 @@ public void onSuiteResult(AggregatedSuiteResultEvent e) { if (jsonWriter == null) return; - slaves.put(e.getSlave().id, e.getSlave()); + forkedJvms.put(e.getForkedJvmInfo().id, e.getForkedJvmInfo()); e.serialize(jsonWriter, outputStreams); } catch (Exception ex) { ex.printStackTrace(); @@ -231,9 +231,9 @@ public void onQuit(AggregatedQuitEvent e) { try { jsonWriter.endArray(); - jsonWriter.name("slaves"); + jsonWriter.name("forkedJvms"); jsonWriter.beginObject(); - for (Map.Entry entry : slaves.entrySet()) { + for (Map.Entry entry : forkedJvms.entrySet()) { jsonWriter.name(Integer.toString(entry.getKey())); entry.getValue().serialize(jsonWriter); } diff --git a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/css/style.css b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/css/style.css index 6275c13c..0f95bc93 100644 --- a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/css/style.css +++ b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/css/style.css @@ -443,7 +443,7 @@ th.result > span { font-size: 13px; color: #000; } -th.slave { +th.forkedJvm { width: 3.8em; } th.timestamp { diff --git a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/ideas.txt b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/ideas.txt index 62e39bab..9b4639b2 100644 --- a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/ideas.txt +++ b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/ideas.txt @@ -7,7 +7,7 @@ TODO, must have: * Console output generated by package, class and method * Unified (linear) console log view across all tests (alternative to package/class/method view) -* Showing information about slaves +* Showing information about forked JVMs * Showing RR-specific annotations * Indication next to package/class/method that there was console output * Display of global overrides @@ -19,8 +19,7 @@ TODO, must have: * repetitions * timeout * expected exceptions - * slave - * staus: ok, ignored by assumption, ignored by annotation, failed, error + * status: ok, ignored by assumption, ignored by annotation, failed, error * execution time * stack trace * console output @@ -51,7 +50,7 @@ To decide: * Generation of markup in JS makes things easy, but is terrible for indexing in search engines. Maybe there should be some pre-rendered version as well? -* Showing aggregations by the slave they ran on (like by package/method)? +* Showing aggregations by the forked they ran on (like by package/method)? * Mobile version? @@ -70,7 +69,7 @@ Testing: DONE: -* Showing test in the execution order (only in method view), per slave order +* Showing test in the execution order (only in method view), per forked jvm order * Showing failing tests first (if any test failed/errored) * General indication of ok / failure in document title * A "bulb" indication of general ok / failure (green/red, like in Bamboo) diff --git a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/js/script.js b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/js/script.js index d5216e82..52d00905 100644 --- a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/js/script.js +++ b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/js/script.js @@ -138,7 +138,7 @@ if (suite.suiteFailures.length > 0) { $.each(suite.suiteFailures, function(i, failure) { suite.tests.push({ - slave: suite.slave, + forkedJvm: suite.forkedJvm, startTimestamp: suite.startTimestamp, executionTime: 1, description: { @@ -349,7 +349,7 @@ }, type: "result" }, - numericColumn("slave", "JVM"), + numericColumn("forkedJvm", "JVM"), { id: "timestamp", label: "Start", @@ -388,7 +388,7 @@ signature: test.description.packageClassMethodName, result: test.status, time: test.executionTime, - slave: test.slave, + forkedJvm: test.forkedJvm, timestamp: test.startTimestamp, test: test }) @@ -761,7 +761,7 @@ // Refreshes the summary box based on the current parameters function refreshSummary() { var counts = aggregate(data, testCount, { "global":global, "byStatus":byStatus }, currentFilter); - var times = aggregate(data, totalTime, { "global":global, "bySlave":bySlave }, currentFilter); + var times = aggregate(data, totalTime, { "global":global, "byForkedJvm":byForkedJvm }, currentFilter); var $summary = $("#summary").html("").attr("class", ""); if ((counts.global || 0) == 0) { @@ -771,10 +771,10 @@ $("

    ").html(tmpl("\ #{tests} executed in\ #{time} ms on\ - #{slaves}.", { + #{forkedJvms}.", { tests: countText(counts.global || 0, "test"), time: times.global, - slaves: countText(keys(times.bySlave).length, "slave") + forkedJvms: countText(keys(times.byForkedJvm).length, "forked JVM") })).appendTo($summary); var html = ""; @@ -1093,8 +1093,8 @@ return test.status; } - function bySlave(test) { - return test.slave; + function byForkedJvm(test) { + return test.forkedJvm; } function byPackage(test) { diff --git a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/report.json b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/report.json new file mode 100644 index 00000000..c88210d3 --- /dev/null +++ b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/report.json @@ -0,0 +1,643 @@ +{ + "junit4": { + "tests.seed": "84784D1BB9382FB8", + "project.name": "junit4" + }, + "suites": [ + { + "forkedJvm": 0, + "startTimestamp": 1656407943240, + "startTimestampDate": "2022-06-28T11:19:03.240", + "executionTime": 11, + "description": { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [ + { + "id": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "failure", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + }, + { + "id": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "ok", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + }, + { + "id": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "error", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + }, + { + "id": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "ignored_a", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + }, + { + "id": "ID#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "ignored", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + } + ] + }, + "tests": [ + { + "forkedJvm": 0, + "startTimestamp": 1656407943243, + "startTimestampDate": "2022-06-28T11:19:03.243", + "executionTime": 4, + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "FAILURE", + "testFailures": [ + { + "throwableClass": "java.lang.AssertionError", + "throwableString": "java.lang.AssertionError", + "stackTrace": "java.lang.AssertionError\r\n\tat org.junit.Assert.fail(Assert.java:87)\r\n\tat org.junit.Assert.assertTrue(Assert.java:42)\r\n\tat org.junit.Assert.assertTrue(Assert.java:53)\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.failure(TestStatuses.java:24)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "assertion" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943247, + "startTimestampDate": "2022-06-28T11:19:03.247", + "executionTime": 0, + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "OK", + "testFailures": [] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943247, + "startTimestampDate": "2022-06-28T11:19:03.247", + "executionTime": 1, + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "ERROR", + "testFailures": [ + { + "throwableClass": "java.lang.RuntimeException", + "throwableString": "java.lang.RuntimeException", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.error(TestStatuses.java:29)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "error" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943248, + "startTimestampDate": "2022-06-28T11:19:03.248", + "executionTime": 3, + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "IGNORED_ASSUMPTION", + "testFailures": [ + { + "throwableClass": "org.junit.AssumptionViolatedException", + "throwableString": "org.junit.AssumptionViolatedException: got: , expected: is ", + "stackTrace": "org.junit.AssumptionViolatedException: got: , expected: is \r\n\tat org.junit.Assume.assumeThat(Assume.java:106)\r\n\tat org.junit.Assume.assumeTrue(Assume.java:50)\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.ignored_a(TestStatuses.java:19)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "assumption" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943251, + "startTimestampDate": "2022-06-28T11:19:03.251", + "executionTime": 0, + "description": "ID#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "IGNORED", + "testFailures": [] + } + ], + "suiteFailures": [], + "executionEvents": [ + { + "event": "TEST_STARTED", + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_FAILURE", + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "failure": { + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "message": null, + "trace": "java.lang.AssertionError\r\n\tat org.junit.Assert.fail(Assert.java:87)\r\n\tat org.junit.Assert.assertTrue(Assert.java:42)\r\n\tat org.junit.Assert.assertTrue(Assert.java:53)\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.failure(TestStatuses.java:24)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.AssertionError", + "throwableClass": "java.lang.AssertionError", + "assertionViolation": true, + "assumptionViolation": false + } + }, + { + "event": "TEST_FINISHED", + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_STARTED", + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_FINISHED", + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_STARTED", + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_FAILURE", + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "failure": { + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.error(TestStatuses.java:29)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.RuntimeException", + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false + } + }, + { + "event": "TEST_FINISHED", + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_STARTED", + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_IGNORED_ASSUMPTION", + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "failure": { + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "message": "got: , expected: is ", + "trace": "org.junit.AssumptionViolatedException: got: , expected: is \r\n\tat org.junit.Assume.assumeThat(Assume.java:106)\r\n\tat org.junit.Assume.assumeTrue(Assume.java:50)\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.ignored_a(TestStatuses.java:19)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "org.junit.AssumptionViolatedException: got: , expected: is ", + "throwableClass": "org.junit.AssumptionViolatedException", + "assertionViolation": false, + "assumptionViolation": true + } + }, + { + "event": "TEST_FINISHED", + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_IGNORED", + "description": "ID#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943253, + "startTimestampDate": "2022-06-28T11:19:03.253", + "executionTime": 1, + "description": { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", + "children": [ + { + "id": "ID#method(com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError)", + "displayName": "method(com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError)", + "methodName": "method", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", + "children": [] + } + ] + }, + "tests": [], + "suiteFailures": [ + { + "throwableClass": "java.lang.RuntimeException", + "throwableString": "java.lang.RuntimeException", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError.beforeClass(TestBeforeClassError.java:9)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\r\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "error" + } + ], + "executionEvents": [ + { + "event": "SUITE_FAILURE", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", + "failure": { + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError.beforeClass(TestBeforeClassError.java:9)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\r\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.RuntimeException", + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false + } + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943254, + "startTimestampDate": "2022-06-28T11:19:03.254", + "executionTime": 1, + "description": { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", + "children": [ + { + "id": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", + "displayName": "ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", + "methodName": "ok", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", + "children": [] + }, + { + "id": "ID#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", + "displayName": "ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", + "methodName": "ok_sysout_syserr", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", + "children": [] + } + ] + }, + "tests": [ + { + "forkedJvm": 0, + "startTimestamp": 1656407943255, + "startTimestampDate": "2022-06-28T11:19:03.255", + "executionTime": 0, + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", + "status": "OK", + "testFailures": [] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943255, + "startTimestampDate": "2022-06-28T11:19:03.255", + "executionTime": 0, + "description": "ID#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", + "status": "OK", + "testFailures": [] + } + ], + "suiteFailures": [], + "executionEvents": [ + { + "event": "TEST_STARTED", + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)" + }, + { + "event": "TEST_FINISHED", + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)" + }, + { + "event": "TEST_STARTED", + "description": "ID#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)" + }, + { + "event": "APPEND_STDOUT", + "content": "sysout" + }, + { + "event": "APPEND_STDERR", + "content": "syserr" + }, + { + "event": "APPEND_STDOUT", + "content": "-sysout-contd." + }, + { + "event": "APPEND_STDERR", + "content": "-syserr-contd." + }, + { + "event": "TEST_FINISHED", + "description": "ID#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943256, + "startTimestampDate": "2022-06-28T11:19:03.256", + "executionTime": 0, + "description": { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences", + "children": [ + { + "id": "ID#emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)", + "displayName": "emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)", + "methodName": "emitEscape", + "className": "com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences", + "children": [] + } + ] + }, + "tests": [ + { + "forkedJvm": 0, + "startTimestamp": 1656407943256, + "startTimestampDate": "2022-06-28T11:19:03.256", + "executionTime": 0, + "description": "ID#emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)", + "status": "OK", + "testFailures": [] + } + ], + "suiteFailures": [], + "executionEvents": [ + { + "event": "TEST_STARTED", + "description": "ID#emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)" + }, + { + "event": "APPEND_STDOUT", + "content": "stdout: foo & bar" + }, + { + "event": "TEST_FINISHED", + "description": "ID#emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943261, + "startTimestampDate": "2022-06-28T11:19:03.261", + "executionTime": 3, + "description": { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", + "children": [ + { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", + "children": [ + { + "id": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1)", + "displayName": "method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1)", + "methodName": "method1", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", + "children": [] + } + ] + }, + { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", + "children": [ + { + "id": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)", + "displayName": "method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)", + "methodName": "method1", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", + "children": [] + } + ] + }, + { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3", + "children": [ + { + "id": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", + "displayName": "method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", + "methodName": "method1", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3", + "children": [] + } + ] + } + ] + }, + "tests": [ + { + "forkedJvm": 0, + "startTimestamp": 1656407943262, + "startTimestampDate": "2022-06-28T11:19:03.262", + "executionTime": 0, + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)", + "status": "OK", + "testFailures": [] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943263, + "startTimestampDate": "2022-06-28T11:19:03.263", + "executionTime": 1, + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", + "status": "ERROR", + "testFailures": [ + { + "throwableClass": "java.lang.RuntimeException", + "throwableString": "java.lang.RuntimeException", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3.method1(TestHierarchicalSuiteDescription.java:40)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "error" + } + ] + } + ], + "suiteFailures": [ + { + "throwableClass": "java.lang.RuntimeException", + "throwableString": "java.lang.RuntimeException", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1.beforeClass(TestHierarchicalSuiteDescription.java:23)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\r\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "error" + }, + { + "throwableClass": "java.lang.RuntimeException", + "throwableString": "java.lang.RuntimeException", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2.afterClass(TestHierarchicalSuiteDescription.java:33)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "error" + }, + { + "throwableClass": "java.lang.RuntimeException", + "throwableString": "java.lang.RuntimeException", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription.afterClass(TestHierarchicalSuiteDescription.java:46)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "error" + } + ], + "executionEvents": [ + { + "event": "TEST_FAILURE", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", + "failure": { + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1.beforeClass(TestHierarchicalSuiteDescription.java:23)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\r\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.RuntimeException", + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false + } + }, + { + "event": "TEST_STARTED", + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)" + }, + { + "event": "TEST_FINISHED", + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)" + }, + { + "event": "TEST_FAILURE", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", + "failure": { + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2.afterClass(TestHierarchicalSuiteDescription.java:33)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.RuntimeException", + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false + } + }, + { + "event": "TEST_STARTED", + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)" + }, + { + "event": "TEST_FAILURE", + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", + "failure": { + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3.method1(TestHierarchicalSuiteDescription.java:40)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.RuntimeException", + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false + } + }, + { + "event": "TEST_FINISHED", + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)" + }, + { + "event": "SUITE_FAILURE", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", + "failure": { + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription.afterClass(TestHierarchicalSuiteDescription.java:46)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.RuntimeException", + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false + } + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943341, + "startTimestampDate": "2022-06-28T11:19:03.341", + "executionTime": 0, + "description": { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite", + "children": [] + }, + "tests": [], + "suiteFailures": [], + "executionEvents": [] + } + ], + "forkedJvms": { + "0": { + "id": 0, + "jvmName": "OpenJDK 64-Bit Server VM, 25.252-b09", + "charset": "windows-1252", + "commandLine": "c:\\tools\\java\\jdk1.8\\jre\\bin\\java.exe -Dtests.prefix=tests -Dtests.seed=84784D1BB9382FB8 -Djunit4.childvm.cwd=C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\J0 -Djunit4.tempDir=C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes -Djunit4.childvm.id=0 -Djunit4.childvm.count=1 -classpath C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\dependency\\hamcrest-core-1.3.jar;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\dependency\\junit-4.13.1.jar;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\junit4-ant-2.7.10-SNAPSHOT.jar com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe -flush -eventsfile C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\junit4-J0-20220628_111903_0362909695309408241081.events @C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\junit4-J0-20220628_111903_0364223048590498217992.suites -stdin", + "systemProperties": { + "awt.toolkit": "sun.awt.windows.WToolkit", + "file.encoding": "Cp1252", + "file.encoding.pkg": "sun.io", + "file.separator": "\\", + "java.awt.graphicsenv": "sun.awt.Win32GraphicsEnvironment", + "java.awt.printerjob": "sun.awt.windows.WPrinterJob", + "java.class.path": "C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\dependency\\hamcrest-core-1.3.jar;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\dependency\\junit-4.13.1.jar;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\junit4-ant-2.7.10-SNAPSHOT.jar", + "java.class.version": "52.0", + "java.endorsed.dirs": "c:\\tools\\java\\jdk1.8\\jre\\lib\\endorsed", + "java.ext.dirs": "c:\\tools\\java\\jdk1.8\\jre\\lib\\ext;C:\\Windows\\Sun\\Java\\lib\\ext", + "java.home": "c:\\tools\\java\\jdk1.8\\jre", + "java.io.tmpdir": "C:\\Users\\dweiss\\AppData\\Local\\Temp\\", + "java.library.path": "c:\\tools\\java\\jdk1.8\\jre\\bin;C:\\Windows\\Sun\\Java\\bin;C:\\Windows\\system32;C:\\Windows;c:\\tools\\java\\jdk1.8\\bin;c:\\tools\\java\\jdk11\\bin;C:\\Python310\\Scripts\\;C:\\Python310\\;C:\\Python39\\Scripts\\;C:\\Python39\\;C:\\Tools\\Python3\\;C:\\Tools\\Python3\\Scripts\\;C:\\Tools\\Python2\\;C:\\Tools\\Python2\\Scripts;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files\\NVIDIA Corporation\\NVIDIA NvDLISR;C:\\Program Files\\Git\\cmd;C:\\ProgramData\\chocolatey\\bin;c:\\Tools\\java\\jdk\\bin;C:\\Strawberry\\c\\bin;C:\\Strawberry\\perl\\site\\bin;C:\\Strawberry\\perl\\bin;C:\\Program Files\\dotnet\\;C:\\Program Files (x86)\\dotnet\\;C:\\Program Files (x86)\\ZeroTier\\One\\;C:\\Program Files (x86)\\Gpg4win\\..\\GnuPG\\bin;C:\\Program Files\\nodejs\\;C:\\Program Files (x86)\\sbt\\bin;C:\\Users\\dweiss\\AppData\\Local\\Microsoft\\WindowsApps;c:\\Tools\\;c:\\Tools\\java\\ant\\bin\\;c:\\Tools\\java\\maven\\bin\\;C:\\Program Files\\Oracle\\VirtualBox;C:\\Users\\dweiss\\AppData\\Roaming\\npm;C:\\Users\\dweiss\\AppData\\Local\\Google\\Cloud SDK\\google-cloud-sdk\\bin;;.", + "java.runtime.name": "OpenJDK Runtime Environment", + "java.runtime.version": "1.8.0_252-b09", + "java.specification.name": "Java Platform API Specification", + "java.specification.vendor": "Oracle Corporation", + "java.specification.version": "1.8", + "java.vendor": "AdoptOpenJDK", + "java.vendor.url": "http://java.oracle.com/", + "java.vendor.url.bug": "http://bugreport.sun.com/bugreport/", + "java.version": "1.8.0_252", + "java.vm.info": "mixed mode", + "java.vm.name": "OpenJDK 64-Bit Server VM", + "java.vm.specification.name": "Java Virtual Machine Specification", + "java.vm.specification.vendor": "Oracle Corporation", + "java.vm.specification.version": "1.8", + "java.vm.vendor": "AdoptOpenJDK", + "java.vm.version": "25.252-b09", + "junit4.childvm.count": "1", + "junit4.childvm.cwd": "C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\J0", + "junit4.childvm.id": "0", + "junit4.memory.total": "2058354688", + "junit4.pidString": "1268@DWEISS-BEAST", + "junit4.processors": "64", + "junit4.tempDir": "C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes", + "line.separator": "\r\n", + "os.arch": "amd64", + "os.name": "Windows 10", + "os.version": "10.0", + "path.separator": ";", + "sun.arch.data.model": "64", + "sun.boot.class.path": "c:\\tools\\java\\jdk1.8\\jre\\lib\\resources.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\rt.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\sunrsasign.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\jsse.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\jce.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\charsets.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\jfr.jar;c:\\tools\\java\\jdk1.8\\jre\\classes", + "sun.boot.library.path": "c:\\tools\\java\\jdk1.8\\jre\\bin", + "sun.cpu.endian": "little", + "sun.cpu.isalist": "amd64", + "sun.desktop": "windows", + "sun.io.unicode.encoding": "UnicodeLittle", + "sun.java.command": "com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe -flush -eventsfile C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\junit4-J0-20220628_111903_0362909695309408241081.events @C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\junit4-J0-20220628_111903_0364223048590498217992.suites -stdin", + "sun.java.launcher": "SUN_STANDARD", + "sun.jnu.encoding": "Cp1252", + "sun.management.compiler": "HotSpot 64-Bit Tiered Compilers", + "sun.os.patch.level": "", + "tests.prefix": "tests", + "tests.seed": "84784D1BB9382FB8", + "user.country": "US", + "user.dir": "C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\J0", + "user.home": "C:\\Users\\dweiss", + "user.language": "en", + "user.name": "dweiss", + "user.script": "", + "user.timezone": "", + "user.variant": "" + } + } + } +} \ No newline at end of file diff --git a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/tests-output.jsonp b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/tests-output.jsonp index 146e2f80..16ce01c9 100644 --- a/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/tests-output.jsonp +++ b/junit4-ant/src/main/resources/com/carrotsearch/ant/tasks/junit4/templates/json/tests-output.jsonp @@ -1,33 +1,220 @@ testData({ "junit4": { - "tests.seed": "B19FBD1BB1231191", + "tests.seed": "84784D1BB9382FB8", "project.name": "Nice project" }, "suites": [ { - "slave": 0, - "startTimestamp": 1331889914622, - "startTimestampDate": "2012-03-16T10:25:14.622", - "executionTime": 109, + "forkedJvm": 0, + "startTimestamp": 1656407943240, + "startTimestampDate": "2022-06-28T11:19:03.240", + "executionTime": 11, "description": { - "id": "id#com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError[0]", + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [ + { + "id": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "failure", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + }, + { + "id": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "ok", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + }, + { + "id": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "error", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + }, + { + "id": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "ignored_a", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + }, + { + "id": "ID#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "displayName": "ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "methodName": "ignored", + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", + "children": [] + } + ] + }, + "tests": [ + { + "forkedJvm": 0, + "startTimestamp": 1656407943243, + "startTimestampDate": "2022-06-28T11:19:03.243", + "executionTime": 4, + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "FAILURE", + "testFailures": [ + { + "throwableClass": "java.lang.AssertionError", + "throwableString": "java.lang.AssertionError", + "stackTrace": "java.lang.AssertionError\r\n\tat org.junit.Assert.fail(Assert.java:87)\r\n\tat org.junit.Assert.assertTrue(Assert.java:42)\r\n\tat org.junit.Assert.assertTrue(Assert.java:53)\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.failure(TestStatuses.java:24)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "assertion" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943247, + "startTimestampDate": "2022-06-28T11:19:03.247", + "executionTime": 0, + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "OK", + "testFailures": [] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943247, + "startTimestampDate": "2022-06-28T11:19:03.247", + "executionTime": 1, + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "ERROR", + "testFailures": [ + { + "throwableClass": "java.lang.RuntimeException", + "throwableString": "java.lang.RuntimeException", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.error(TestStatuses.java:29)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "error" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943248, + "startTimestampDate": "2022-06-28T11:19:03.248", + "executionTime": 3, + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "IGNORED_ASSUMPTION", + "testFailures": [ + { + "throwableClass": "org.junit.AssumptionViolatedException", + "throwableString": "org.junit.AssumptionViolatedException: got: , expected: is ", + "stackTrace": "org.junit.AssumptionViolatedException: got: , expected: is \r\n\tat org.junit.Assume.assumeThat(Assume.java:106)\r\n\tat org.junit.Assume.assumeTrue(Assume.java:50)\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.ignored_a(TestStatuses.java:19)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "kind": "assumption" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943251, + "startTimestampDate": "2022-06-28T11:19:03.251", + "executionTime": 0, + "description": "ID#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "status": "IGNORED", + "testFailures": [] + } + ], + "suiteFailures": [], + "executionEvents": [ + { + "event": "TEST_STARTED", + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_FAILURE", + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "failure": { + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "message": null, + "trace": "java.lang.AssertionError\r\n\tat org.junit.Assert.fail(Assert.java:87)\r\n\tat org.junit.Assert.assertTrue(Assert.java:42)\r\n\tat org.junit.Assert.assertTrue(Assert.java:53)\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.failure(TestStatuses.java:24)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.AssertionError", + "throwableClass": "java.lang.AssertionError", + "assertionViolation": true, + "assumptionViolation": false + } + }, + { + "event": "TEST_FINISHED", + "description": "ID#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_STARTED", + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_FINISHED", + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_STARTED", + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_FAILURE", + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "failure": { + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.error(TestStatuses.java:29)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "java.lang.RuntimeException", + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false + } + }, + { + "event": "TEST_FINISHED", + "description": "ID#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_STARTED", + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_IGNORED_ASSUMPTION", + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "failure": { + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", + "message": "got: , expected: is ", + "trace": "org.junit.AssumptionViolatedException: got: , expected: is \r\n\tat org.junit.Assume.assumeThat(Assume.java:106)\r\n\tat org.junit.Assume.assumeTrue(Assume.java:50)\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.ignored_a(TestStatuses.java:19)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", + "throwableString": "org.junit.AssumptionViolatedException: got: , expected: is ", + "throwableClass": "org.junit.AssumptionViolatedException", + "assertionViolation": false, + "assumptionViolation": true + } + }, + { + "event": "TEST_FINISHED", + "description": "ID#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + }, + { + "event": "TEST_IGNORED", + "description": "ID#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)" + } + ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943253, + "startTimestampDate": "2022-06-28T11:19:03.253", + "executionTime": 1, + "description": { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", + "methodName": null, "className": "com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", - "annotations": [], "children": [ { - "id": "id#method(com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError)[1]", + "id": "ID#method(com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError)", "displayName": "method(com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError)", "methodName": "method", "className": "com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], "children": [] } ] @@ -37,104 +224,69 @@ testData({ { "throwableClass": "java.lang.RuntimeException", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError.beforeClass(TestBeforeClassError.java:9)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError.beforeClass(TestBeforeClassError.java:9)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\r\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "kind": "error" } ], "executionEvents": [ { "event": "SUITE_FAILURE", - "description": "id#com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError[0]", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", "failure": { - "throwableClass": "java.lang.RuntimeException", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError.beforeClass(TestBeforeClassError.java:9)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\r\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestBeforeClassError.beforeClass(TestBeforeClassError.java:9)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "error" + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false } } ] }, { - "slave": 0, - "startTimestamp": 1331889914744, - "startTimestampDate": "2012-03-16T10:25:14.744", - "executionTime": 2, - "description": { - "id": "id#com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite[1]", - "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite", - "className": "com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite", - "annotations": [ - { - "org.junit.Ignore": { - "value": "" - } - } - ], - "children": [] - }, - "tests": [], - "suiteFailures": [], - "executionEvents": [] - }, - { - "slave": 0, - "startTimestamp": 1331889914756, - "startTimestampDate": "2012-03-16T10:25:14.756", - "executionTime": 18, + "forkedJvm": 0, + "startTimestamp": 1656407943254, + "startTimestampDate": "2022-06-28T11:19:03.254", + "executionTime": 1, "description": { - "id": "id#com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams[0]", + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", + "methodName": null, "className": "com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", - "annotations": [], "children": [ { - "id": "id#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)[1]", + "id": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", "displayName": "ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", "methodName": "ok", "className": "com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], "children": [] }, { - "id": "id#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)[1]", + "id": "ID#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", "displayName": "ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", "methodName": "ok_sysout_syserr", "className": "com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], "children": [] } ] }, "tests": [ { - "slave": 0, - "startTimestamp": 1331889914769, - "startTimestampDate": "2012-03-16T10:25:14.769", - "executionTime": 1, - "description": "id#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)[1]", + "forkedJvm": 0, + "startTimestamp": 1656407943255, + "startTimestampDate": "2022-06-28T11:19:03.255", + "executionTime": 0, + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", "status": "OK", "testFailures": [] }, { - "slave": 0, - "startTimestamp": 1331889914771, - "startTimestampDate": "2012-03-16T10:25:14.771", - "executionTime": 2, - "description": "id#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)[1]", + "forkedJvm": 0, + "startTimestamp": 1656407943255, + "startTimestampDate": "2022-06-28T11:19:03.255", + "executionTime": 0, + "description": "ID#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)", "status": "OK", "testFailures": [] } @@ -143,15 +295,15 @@ testData({ "executionEvents": [ { "event": "TEST_STARTED", - "description": "id#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)[1]" + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)" }, { "event": "TEST_FINISHED", - "description": "id#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)[1]" + "description": "ID#ok(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)" }, { "event": "TEST_STARTED", - "description": "id#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)[1]" + "description": "ID#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)" }, { "event": "APPEND_STDOUT", @@ -171,332 +323,109 @@ testData({ }, { "event": "TEST_FINISHED", - "description": "id#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)[1]" + "description": "ID#ok_sysout_syserr(com.carrotsearch.ant.tasks.junit4.tests.TestSysstreams)" } ] }, { - "slave": 0, - "startTimestamp": 1331889914800, - "startTimestampDate": "2012-03-16T10:25:14.800", - "executionTime": 93, + "forkedJvm": 0, + "startTimestamp": 1656407943256, + "startTimestampDate": "2022-06-28T11:19:03.256", + "executionTime": 0, "description": { - "id": "id#com.carrotsearch.ant.tasks.junit4.tests.TestStatuses[0]", - "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", - "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", - "annotations": [], + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences", "children": [ { - "id": "id#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "displayName": "failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", - "methodName": "failure", - "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], - "children": [] - }, - { - "id": "id#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "displayName": "error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", - "methodName": "error", - "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], - "children": [] - }, - { - "id": "id#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[2]", - "displayName": "ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", - "methodName": "ignored", - "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - }, - { - "org.junit.Ignore": { - "value": "" - } - } - ], - "children": [] - }, - { - "id": "id#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "displayName": "ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", - "methodName": "ok", - "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], - "children": [] - }, - { - "id": "id#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "displayName": "ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)", - "methodName": "ignored_a", - "className": "com.carrotsearch.ant.tasks.junit4.tests.TestStatuses", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], + "id": "ID#emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)", + "displayName": "emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)", + "methodName": "emitEscape", + "className": "com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences", "children": [] } ] }, "tests": [ { - "slave": 0, - "startTimestamp": 1331889914811, - "startTimestampDate": "2012-03-16T10:25:14.811", - "executionTime": 15, - "description": "id#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "status": "FAILURE", - "testFailures": [ - { - "throwableClass": "java.lang.AssertionError", - "throwableString": "java.lang.AssertionError", - "stackTrace": "java.lang.AssertionError\n\tat org.junit.Assert.fail(Assert.java:92)\n\tat org.junit.Assert.assertTrue(Assert.java:43)\n\tat org.junit.Assert.assertTrue(Assert.java:54)\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.failure(TestStatuses.java:24)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "assertion" - } - ] - }, - { - "slave": 0, - "startTimestamp": 1331889914829, - "startTimestampDate": "2012-03-16T10:25:14.829", - "executionTime": 14, - "description": "id#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "status": "ERROR", - "testFailures": [ - { - "throwableClass": "java.lang.RuntimeException", - "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.error(TestStatuses.java:29)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "error" - } - ] - }, - { - "slave": 0, - "startTimestamp": 1331889914845, - "startTimestampDate": "2012-03-16T10:25:14.845", + "forkedJvm": 0, + "startTimestamp": 1656407943256, + "startTimestampDate": "2022-06-28T11:19:03.256", "executionTime": 0, - "description": "id#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[2]", - "status": "IGNORED", - "testFailures": [] - }, - { - "slave": 0, - "startTimestamp": 1331889914846, - "startTimestampDate": "2012-03-16T10:25:14.846", - "executionTime": 0, - "description": "id#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", + "description": "ID#emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)", "status": "OK", "testFailures": [] - }, - { - "slave": 0, - "startTimestamp": 1331889914847, - "startTimestampDate": "2012-03-16T10:25:14.847", - "executionTime": 45, - "description": "id#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "status": "IGNORED_ASSUMPTION", - "testFailures": [ - { - "throwableClass": "org.junit.internal.AssumptionViolatedException", - "throwableString": "org.junit.internal.AssumptionViolatedException: got: \u003cfalse\u003e, expected: is \u003ctrue\u003e", - "stackTrace": "org.junit.internal.AssumptionViolatedException: got: \u003cfalse\u003e, expected: is \u003ctrue\u003e\n\tat org.junit.Assume.assumeThat(Assume.java:70)\n\tat org.junit.Assume.assumeTrue(Assume.java:39)\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.ignored_a(TestStatuses.java:19)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "assumption" - } - ] } ], "suiteFailures": [], "executionEvents": [ { "event": "TEST_STARTED", - "description": "id#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]" - }, - { - "event": "TEST_FAILURE", - "description": "id#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "failure": { - "throwableClass": "java.lang.AssertionError", - "throwableString": "java.lang.AssertionError", - "stackTrace": "java.lang.AssertionError\n\tat org.junit.Assert.fail(Assert.java:92)\n\tat org.junit.Assert.assertTrue(Assert.java:43)\n\tat org.junit.Assert.assertTrue(Assert.java:54)\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.failure(TestStatuses.java:24)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "assertion" - } - }, - { - "event": "TEST_FINISHED", - "description": "id#failure(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]" - }, - { - "event": "TEST_STARTED", - "description": "id#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]" - }, - { - "event": "TEST_FAILURE", - "description": "id#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "failure": { - "throwableClass": "java.lang.RuntimeException", - "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.error(TestStatuses.java:29)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "error" - } - }, - { - "event": "TEST_FINISHED", - "description": "id#error(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]" - }, - { - "event": "TEST_IGNORED", - "description": "id#ignored(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[2]" - }, - { - "event": "TEST_STARTED", - "description": "id#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]" + "description": "ID#emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)" }, { - "event": "TEST_FINISHED", - "description": "id#ok(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]" - }, - { - "event": "TEST_STARTED", - "description": "id#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]" - }, - { - "event": "TEST_IGNORED_ASSUMPTION", - "description": "id#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]", - "failure": { - "throwableClass": "org.junit.internal.AssumptionViolatedException", - "throwableString": "org.junit.internal.AssumptionViolatedException: got: \u003cfalse\u003e, expected: is \u003ctrue\u003e", - "stackTrace": "org.junit.internal.AssumptionViolatedException: got: \u003cfalse\u003e, expected: is \u003ctrue\u003e\n\tat org.junit.Assume.assumeThat(Assume.java:70)\n\tat org.junit.Assume.assumeTrue(Assume.java:39)\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestStatuses.ignored_a(TestStatuses.java:19)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "assumption" - } + "event": "APPEND_STDOUT", + "content": "stdout: foo & bar" }, { "event": "TEST_FINISHED", - "description": "id#ignored_a(com.carrotsearch.ant.tasks.junit4.tests.TestStatuses)[1]" + "description": "ID#emitEscape(com.carrotsearch.ant.tasks.junit4.tests.EscapeSequences)" } ] }, { - "slave": 0, - "startTimestamp": 1331889915015, - "startTimestampDate": "2012-03-16T10:25:15.015", - "executionTime": 90, + "forkedJvm": 0, + "startTimestamp": 1656407943261, + "startTimestampDate": "2022-06-28T11:19:03.261", + "executionTime": 3, "description": { - "id": "id#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription[2]", + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", + "methodName": null, "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", - "annotations": [ - { - "org.junit.runner.RunWith": { - "value": "org.junit.runners.Suite" - } - }, - { - "org.junit.runners.Suite$SuiteClasses": { - "value": [ - "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", - "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", - "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3" - ] - } - } - ], "children": [ { - "id": "id#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1[0]", + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", + "methodName": null, "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", - "annotations": [], "children": [ { - "id": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1)[1]", + "id": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1)", "displayName": "method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1)", "methodName": "method1", "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], "children": [] } ] }, { - "id": "id#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2[0]", + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", + "methodName": null, "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", - "annotations": [], "children": [ { - "id": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)[1]", + "id": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)", "displayName": "method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)", "methodName": "method1", "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], "children": [] } ] }, { - "id": "id#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3[0]", + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3", "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3", + "methodName": null, "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3", - "annotations": [], "children": [ { - "id": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)[1]", + "id": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", "displayName": "method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", "methodName": "method1", "className": "com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3", - "annotations": [ - { - "org.junit.Test": { - "timeout": 0, - "expected": "org.junit.Test$None" - } - } - ], "children": [] } ] @@ -505,26 +434,26 @@ testData({ }, "tests": [ { - "slave": 0, - "startTimestamp": 1331889915049, - "startTimestampDate": "2012-03-16T10:25:15.049", + "forkedJvm": 0, + "startTimestamp": 1656407943262, + "startTimestampDate": "2022-06-28T11:19:03.262", "executionTime": 0, - "description": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)[1]", + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)", "status": "OK", "testFailures": [] }, { - "slave": 0, - "startTimestamp": 1331889915086, - "startTimestampDate": "2012-03-16T10:25:15.086", - "executionTime": 4, - "description": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)[1]", + "forkedJvm": 0, + "startTimestamp": 1656407943263, + "startTimestampDate": "2022-06-28T11:19:03.263", + "executionTime": 1, + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", "status": "ERROR", "testFailures": [ { "throwableClass": "java.lang.RuntimeException", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3.method1(TestHierarchicalSuiteDescription.java:40)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\n\tat org.junit.runners.Suite.runChild(Suite.java:24)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3.method1(TestHierarchicalSuiteDescription.java:40)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "kind": "error" } ] @@ -534,143 +463,180 @@ testData({ { "throwableClass": "java.lang.RuntimeException", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1.beforeClass(TestHierarchicalSuiteDescription.java:23)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\n\tat org.junit.runners.Suite.runChild(Suite.java:24)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1.beforeClass(TestHierarchicalSuiteDescription.java:23)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\r\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "kind": "error" }, { "throwableClass": "java.lang.RuntimeException", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2.afterClass(TestHierarchicalSuiteDescription.java:33)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:36)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\n\tat org.junit.runners.Suite.runChild(Suite.java:24)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2.afterClass(TestHierarchicalSuiteDescription.java:33)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "kind": "error" }, { "throwableClass": "java.lang.RuntimeException", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription.afterClass(TestHierarchicalSuiteDescription.java:46)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:36)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", + "stackTrace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription.afterClass(TestHierarchicalSuiteDescription.java:46)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "kind": "error" } ], "executionEvents": [ { "event": "TEST_FAILURE", - "description": "id#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1[0]", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", "failure": { - "throwableClass": "java.lang.RuntimeException", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1.beforeClass(TestHierarchicalSuiteDescription.java:23)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)\r\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub1.beforeClass(TestHierarchicalSuiteDescription.java:23)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\n\tat org.junit.runners.Suite.runChild(Suite.java:24)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "error" + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false } }, { "event": "TEST_STARTED", - "description": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)[1]" + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)" }, { "event": "TEST_FINISHED", - "description": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)[1]" + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2)" }, { "event": "TEST_FAILURE", - "description": "id#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2[0]", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", "failure": { - "throwableClass": "java.lang.RuntimeException", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2.afterClass(TestHierarchicalSuiteDescription.java:33)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub2.afterClass(TestHierarchicalSuiteDescription.java:33)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:36)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\n\tat org.junit.runners.Suite.runChild(Suite.java:24)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "error" + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false } }, { "event": "TEST_STARTED", - "description": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)[1]" + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)" }, { "event": "TEST_FAILURE", - "description": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)[1]", + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", "failure": { - "throwableClass": "java.lang.RuntimeException", + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3.method1(TestHierarchicalSuiteDescription.java:40)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)\r\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)\r\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\r\n\tat org.junit.runners.Suite.runChild(Suite.java:27)\r\n\tat org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\r\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\r\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\r\n\tat org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\r\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3.method1(TestHierarchicalSuiteDescription.java:40)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)\n\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)\n\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runners.Suite.runChild(Suite.java:128)\n\tat org.junit.runners.Suite.runChild(Suite.java:24)\n\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)\n\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)\n\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)\n\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)\n\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "error" + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false } }, { "event": "TEST_FINISHED", - "description": "id#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)[1]" + "description": "ID#method1(com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription$Sub3)" }, { "event": "SUITE_FAILURE", - "description": "id#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription[2]", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", "failure": { - "throwableClass": "java.lang.RuntimeException", + "description": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription", + "message": null, + "trace": "java.lang.RuntimeException\r\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription.afterClass(TestHierarchicalSuiteDescription.java:46)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)\r\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\r\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)\r\n\tat org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)\r\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)\r\n\tat org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\r\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:413)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.execute(ForkedMain.java:265)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMain.main(ForkedMain.java:390)\r\n\tat com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe.main(ForkedMainSafe.java:13)\r\n", "throwableString": "java.lang.RuntimeException", - "stackTrace": "java.lang.RuntimeException\n\tat com.carrotsearch.ant.tasks.junit4.tests.TestHierarchicalSuiteDescription.afterClass(TestHierarchicalSuiteDescription.java:46)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n\tat java.lang.reflect.Method.invoke(Method.java:597)\n\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)\n\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)\n\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)\n\tat org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:36)\n\tat org.junit.runners.ParentRunner.run(ParentRunner.java:300)\n\tat org.junit.runner.JUnitCore.run(JUnitCore.java:157)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.execute(SlaveMain.java:129)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:202)\n\tat com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12)\n", - "kind": "error" + "throwableClass": "java.lang.RuntimeException", + "assertionViolation": false, + "assumptionViolation": false } } ] + }, + { + "forkedJvm": 0, + "startTimestamp": 1656407943341, + "startTimestampDate": "2022-06-28T11:19:03.341", + "executionTime": 0, + "description": { + "id": "ID#com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite", + "displayName": "com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite", + "methodName": null, + "className": "com.carrotsearch.ant.tasks.junit4.tests.TestIgnoredSuite", + "children": [] + }, + "tests": [], + "suiteFailures": [], + "executionEvents": [] } ], - "slaves": { + "forkedJvms": { "0": { "id": 0, - "jvmName": "Java HotSpot(TM) 64-Bit Server VM, 16.3-b01", - "charset": "UTF-8", - "commandLine": "/home/dweiss/Applications/java/jdk1.6.0_20/jre/bin/java -Drt.prefix\u003drt -Drt.seed\u003dB19FBD1BB1231191 -classpath /home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/integration-ant/ant-junit4/target/test-classes:/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/integration-ant/ant-junit4/target/dependency/junit-4.10.jar:/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/integration-ant/ant-junit4/target/classes:/home/dweiss/.m2/repository/com/google/guava/guava/10.0.1/guava-10.0.1.jar:/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/runner/target/classes:/home/dweiss/.m2/repository/com/google/code/gson/gson/2.0/gson-2.0.jar:/home/dweiss/.m2/repository/commons-io/commons-io/2.1/commons-io-2.1.jar com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe -flush @/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/integration-ant/ant-junit4/target/test-classes/junit4-slave-04421343907870964512.suites", + "jvmName": "OpenJDK 64-Bit Server VM, 25.252-b09", + "charset": "windows-1252", + "commandLine": "c:\\tools\\java\\jdk1.8\\jre\\bin\\java.exe -Dtests.prefix=tests -Dtests.seed=84784D1BB9382FB8 -Djunit4.childvm.cwd=C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\J0 -Djunit4.tempDir=C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes -Djunit4.childvm.id=0 -Djunit4.childvm.count=1 -classpath C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\dependency\\hamcrest-core-1.3.jar;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\dependency\\junit-4.13.1.jar;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\junit4-ant-2.7.10-SNAPSHOT.jar com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe -flush -eventsfile C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\junit4-J0-20220628_111903_0362909695309408241081.events @C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\junit4-J0-20220628_111903_0364223048590498217992.suites -stdin", "systemProperties": { - "file.encoding": "UTF-8", + "awt.toolkit": "sun.awt.windows.WToolkit", + "file.encoding": "Cp1252", "file.encoding.pkg": "sun.io", - "file.separator": "/", - "java.awt.graphicsenv": "sun.awt.X11GraphicsEnvironment", - "java.awt.printerjob": "sun.print.PSPrinterJob", - "java.class.path": "/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/integration-ant/ant-junit4/target/test-classes:/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/integration-ant/ant-junit4/target/dependency/junit-4.10.jar:/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/integration-ant/ant-junit4/target/classes:/home/dweiss/.m2/repository/com/google/guava/guava/10.0.1/guava-10.0.1.jar:/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/runner/target/classes:/home/dweiss/.m2/repository/com/google/code/gson/gson/2.0/gson-2.0.jar:/home/dweiss/.m2/repository/commons-io/commons-io/2.1/commons-io-2.1.jar", - "java.class.version": "50.0", - "java.endorsed.dirs": "/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/endorsed", - "java.ext.dirs": "/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/ext:/usr/java/packages/lib/ext", - "java.home": "/home/dweiss/Applications/java/jdk1.6.0_20/jre", - "java.io.tmpdir": "/tmp", - "java.library.path": "/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/amd64/server:/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/amd64:/home/dweiss/Applications/java/jdk1.6.0_20/jre/../lib/amd64:/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-6-openjdk/jre/lib/amd64:/usr/lib/jvm/java-6-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib", - "java.runtime.name": "Java(TM) SE Runtime Environment", - "java.runtime.version": "1.6.0_20-b02", + "file.separator": "\\", + "java.awt.graphicsenv": "sun.awt.Win32GraphicsEnvironment", + "java.awt.printerjob": "sun.awt.windows.WPrinterJob", + "java.class.path": "C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\dependency\\hamcrest-core-1.3.jar;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\dependency\\junit-4.13.1.jar;C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\junit4-ant-2.7.10-SNAPSHOT.jar", + "java.class.version": "52.0", + "java.endorsed.dirs": "c:\\tools\\java\\jdk1.8\\jre\\lib\\endorsed", + "java.ext.dirs": "c:\\tools\\java\\jdk1.8\\jre\\lib\\ext;C:\\Windows\\Sun\\Java\\lib\\ext", + "java.home": "c:\\tools\\java\\jdk1.8\\jre", + "java.io.tmpdir": "C:\\Users\\dweiss\\AppData\\Local\\Temp\\", + "java.library.path": "c:\\tools\\java\\jdk1.8\\jre\\bin;C:\\Windows\\Sun\\Java\\bin;C:\\Windows\\system32;C:\\Windows;c:\\tools\\java\\jdk1.8\\bin;c:\\tools\\java\\jdk11\\bin;C:\\Python310\\Scripts\\;C:\\Python310\\;C:\\Python39\\Scripts\\;C:\\Python39\\;C:\\Tools\\Python3\\;C:\\Tools\\Python3\\Scripts\\;C:\\Tools\\Python2\\;C:\\Tools\\Python2\\Scripts;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files\\NVIDIA Corporation\\NVIDIA NvDLISR;C:\\Program Files\\Git\\cmd;C:\\ProgramData\\chocolatey\\bin;c:\\Tools\\java\\jdk\\bin;C:\\Strawberry\\c\\bin;C:\\Strawberry\\perl\\site\\bin;C:\\Strawberry\\perl\\bin;C:\\Program Files\\dotnet\\;C:\\Program Files (x86)\\dotnet\\;C:\\Program Files (x86)\\ZeroTier\\One\\;C:\\Program Files (x86)\\Gpg4win\\..\\GnuPG\\bin;C:\\Program Files\\nodejs\\;C:\\Program Files (x86)\\sbt\\bin;C:\\Users\\dweiss\\AppData\\Local\\Microsoft\\WindowsApps;c:\\Tools\\;c:\\Tools\\java\\ant\\bin\\;c:\\Tools\\java\\maven\\bin\\;C:\\Program Files\\Oracle\\VirtualBox;C:\\Users\\dweiss\\AppData\\Roaming\\npm;C:\\Users\\dweiss\\AppData\\Local\\Google\\Cloud SDK\\google-cloud-sdk\\bin;;.", + "java.runtime.name": "OpenJDK Runtime Environment", + "java.runtime.version": "1.8.0_252-b09", "java.specification.name": "Java Platform API Specification", - "java.specification.vendor": "Sun Microsystems Inc.", - "java.specification.version": "1.6", - "java.vendor": "Sun Microsystems Inc.", - "java.vendor.url": "http://java.sun.com/", - "java.vendor.url.bug": "http://java.sun.com/cgi-bin/bugreport.cgi", - "java.version": "1.6.0_20", + "java.specification.vendor": "Oracle Corporation", + "java.specification.version": "1.8", + "java.vendor": "AdoptOpenJDK", + "java.vendor.url": "http://java.oracle.com/", + "java.vendor.url.bug": "http://bugreport.sun.com/bugreport/", + "java.version": "1.8.0_252", "java.vm.info": "mixed mode", - "java.vm.name": "Java HotSpot(TM) 64-Bit Server VM", + "java.vm.name": "OpenJDK 64-Bit Server VM", "java.vm.specification.name": "Java Virtual Machine Specification", - "java.vm.specification.vendor": "Sun Microsystems Inc.", - "java.vm.specification.version": "1.0", - "java.vm.vendor": "Sun Microsystems Inc.", - "java.vm.version": "16.3-b01", - "junit4.memory.total": "62259200", - "junit4.processors": "2", - "line.separator": "\n", + "java.vm.specification.vendor": "Oracle Corporation", + "java.vm.specification.version": "1.8", + "java.vm.vendor": "AdoptOpenJDK", + "java.vm.version": "25.252-b09", + "junit4.childvm.count": "1", + "junit4.childvm.cwd": "C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\J0", + "junit4.childvm.id": "0", + "junit4.memory.total": "2058354688", + "junit4.pidString": "1268@DWEISS-BEAST", + "junit4.processors": "64", + "junit4.tempDir": "C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes", + "line.separator": "\r\n", "os.arch": "amd64", - "os.name": "Linux", - "os.version": "3.0.0-16-generic", - "path.separator": ":", - "rt.prefix": "rt", - "rt.seed": "B19FBD1BB1231191", + "os.name": "Windows 10", + "os.version": "10.0", + "path.separator": ";", "sun.arch.data.model": "64", - "sun.boot.class.path": "/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/resources.jar:/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/rt.jar:/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/sunrsasign.jar:/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/jsse.jar:/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/jce.jar:/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/charsets.jar:/home/dweiss/Applications/java/jdk1.6.0_20/jre/classes", - "sun.boot.library.path": "/home/dweiss/Applications/java/jdk1.6.0_20/jre/lib/amd64", + "sun.boot.class.path": "c:\\tools\\java\\jdk1.8\\jre\\lib\\resources.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\rt.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\sunrsasign.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\jsse.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\jce.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\charsets.jar;c:\\tools\\java\\jdk1.8\\jre\\lib\\jfr.jar;c:\\tools\\java\\jdk1.8\\jre\\classes", + "sun.boot.library.path": "c:\\tools\\java\\jdk1.8\\jre\\bin", "sun.cpu.endian": "little", - "sun.cpu.isalist": "", - "sun.desktop": "gnome", + "sun.cpu.isalist": "amd64", + "sun.desktop": "windows", "sun.io.unicode.encoding": "UnicodeLittle", + "sun.java.command": "com.carrotsearch.ant.tasks.junit4.forked.ForkedMainSafe -flush -eventsfile C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\junit4-J0-20220628_111903_0362909695309408241081.events @C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\junit4-J0-20220628_111903_0364223048590498217992.suites -stdin", "sun.java.launcher": "SUN_STANDARD", - "sun.jnu.encoding": "UTF-8", - "sun.management.compiler": "HotSpot 64-Bit Server Compiler", - "sun.os.patch.level": "unknown", + "sun.jnu.encoding": "Cp1252", + "sun.management.compiler": "HotSpot 64-Bit Tiered Compilers", + "sun.os.patch.level": "", + "tests.prefix": "tests", + "tests.seed": "84784D1BB9382FB8", "user.country": "US", - "user.dir": "/home/dweiss/carrot2/carrotsearch.labs/randomizedtesting/integration-ant/ant-junit4/target/test-classes/S0", - "user.home": "/home/dweiss", + "user.dir": "C:\\Work\\randomizedtesting\\master\\junit4-ant\\target\\test-classes\\J0", + "user.home": "C:\\Users\\dweiss", "user.language": "en", "user.name": "dweiss", - "user.timezone": "" + "user.script": "", + "user.timezone": "", + "user.variant": "" } } } diff --git a/junit4-ant/src/tasks/Tasks/junit4.html b/junit4-ant/src/tasks/Tasks/junit4.html index 4790031f..c5468d7f 100644 --- a/junit4-ant/src/tasks/Tasks/junit4.html +++ b/junit4-ant/src/tasks/Tasks/junit4.html @@ -196,7 +196,7 @@

    Parameters

    tempdir Specify where to store temporary files. These temporary files include a list of suites passed - to each slave JVM so it is usually wise to just leave this attribute unset - the default is to take the value of the + to each forked JVM so it is usually wise to just leave this attribute unset - the default is to take the value of the dir attribute or the project's basedir. No @@ -230,7 +230,7 @@

    Parameters

    parallelism - The number of parallel slaves. Can be set to a constant max for the + The number of parallel forked JVMs. Can be set to a constant max for the maximum number of cores returned from Runtime.availableProcessors or auto for sensible defaults depending on the number of cores. @@ -245,7 +245,7 @@

    Parameters

    dynamicAssignmentRatio Specifies the ratio of suites moved to dynamic assignment list (job-stealing). A dynamic - assignment list dispatches suites to the first idle slave JVM. Theoretically + assignment list dispatches suites to the first idle forked JVM. Theoretically this is an optimal strategy, but it is usually better to have some static assignments to avoid communication costs. @@ -255,7 +255,7 @@

    Parameters

    The list of dynamic assignments is sorted by decreasing cost (always) and is inherently prone to race conditions in distributing suites. Should there be an error based on suite-dependency it will not be directly repeatable. In such - case use the per-slave-jvm list of suites file dumped to disk for each slave JVM. + case use the per-forked-jvm list of suites file dumped to disk for each forked JVM. See leaveTemporary attribute. No; default is '0.25' (25% of all suites are assigned dynamically). @@ -267,7 +267,7 @@

    Parameters

    Specify random seed for anything that is randomized in junit4. The order of suites execution and suite-JVM assignments are a result of this seed for example. -

    The master seed is also passed to slave JVMs as a system property (to bootstrap randomized runner).

    +

    The main seed is also passed to forked JVMs as a system property (to bootstrap randomized runner).

    No; default is a randomly generated seed. @@ -282,10 +282,10 @@

    Parameters

    - shuffleOnSlave + shuffleOnForkedJvm Predictably shuffle tests order after balancing. This will help in spreading - lighter and heavier tests over a single slave's execution timeline while + lighter and heavier tests over a single forked JVM execution timeline while still keeping the same tests order depending on the seed. See nested elements for configuring load balancers. @@ -658,7 +658,7 @@

    Load balancing of test suites

    Capturing original JVM output

    -

    JUnit4 has been designed to run reports and aggregation of test events on the master +

    JUnit4 has been designed to run reports and aggregation of test events on the main JVM, not on the forked JVMs. This slightly complicates things when diagnostic JVM messages are used because these messages are printed directly to original stream descriptors by the JVM, bypassing System.out or System.err substitutions.

    diff --git a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/TestEventBusSanityCheck.java b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/TestEventBusSanityCheck.java index d943e725..05759671 100644 --- a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/TestEventBusSanityCheck.java +++ b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/TestEventBusSanityCheck.java @@ -25,7 +25,7 @@ @ThreadLeakScope(Scope.SUITE) @ThreadLeakLingering(linger = 1000) public class TestEventBusSanityCheck extends RandomizedTest { - static class SlaveIdle { + static class ForkedJvmIdle { public void finished() { sleep(randomIntBetween(1, 50)); } @@ -53,7 +53,7 @@ public void testArrayQueueReentrance() throws Exception { volatile Thread foo; @Subscribe - public void onSlaveIdle(SlaveIdle slave) { + public void onForkedJvmIdle(ForkedJvmIdle forkedJvmIdle) { final Thread other = foo; if (other != null) { hadErrors.set(true); @@ -63,10 +63,10 @@ public void onSlaveIdle(SlaveIdle slave) { foo = Thread.currentThread(); if (stealingQueue.isEmpty()) { - slave.finished(); + forkedJvmIdle.finished(); } else { String suiteName = stealingQueue.pop(); - slave.newSuite(suiteName); + forkedJvmIdle.newSuite(suiteName); } foo = null; @@ -75,17 +75,17 @@ public void onSlaveIdle(SlaveIdle slave) { // stress. ExecutorService executor = Executors.newCachedThreadPool(); - final List> slaves = new ArrayList<>(); + final List> forkedJvms = new ArrayList<>(); for (int i = 0; i < randomIntBetween(1, 10); i++) { - slaves.add(new Callable() { + forkedJvms.add(new Callable() { @Override public Void call() throws Exception { - aggregatedBus.post(new SlaveIdle()); + aggregatedBus.post(new ForkedJvmIdle()); return null; } }); } - for (Future f : executor.invokeAll(slaves)) { + for (Future f : executor.invokeAll(forkedJvms)) { f.get(); } executor.shutdown(); diff --git a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestCrashesAndExceptions.java b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestCrashesAndExceptions.java index 3fa34d43..f894968b 100644 --- a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestCrashesAndExceptions.java +++ b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestCrashesAndExceptions.java @@ -3,20 +3,36 @@ import java.io.File; +import org.apache.tools.ant.BuildException; +import org.junit.Assert; +import org.junit.Assume; import org.junit.Test; +import static org.hamcrest.CoreMatchers.containsString; + public class TestCrashesAndExceptions extends JUnit4XmlTestBase { @Test - public void slavehanging() { - executeTarget("slavehanging"); + public void forkedjvmhanging() { + executeTarget("forkedjvmhanging"); assertLogContains("Caused by: java.lang.ArithmeticException"); } @Test public void jvmcrash() { - expectBuildExceptionContaining("jvmcrash", "was not empty, see:"); + try { + executeTarget("jvmcrash"); + Assert.fail("Expected a build failure."); + } catch (BuildException e) { + String log = getLog(); + if (log.contains("java.lang.UnsatisfiedLinkError: Could not link with crashlib")) { + // ignore + Assume.assumeTrue(false); + } + Assert.assertThat(e.getMessage(), containsString("was not empty, see:")); + } + File cwd = getProject().getBaseDir(); for (File crashDump : cwd.listFiles()) { if (crashDump.isFile() && diff --git a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestShutdownHookDeadlock.java b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestShutdownHookDeadlock.java index d1cecd1e..73f48c31 100644 --- a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestShutdownHookDeadlock.java +++ b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestShutdownHookDeadlock.java @@ -3,16 +3,18 @@ import org.junit.Assert; import org.junit.Test; +import java.util.concurrent.TimeUnit; + public class TestShutdownHookDeadlock extends JUnit4XmlTestBase { @Test - public void slavehanging() { - long start = System.currentTimeMillis(); + public void forkedjvmhanging() { + long start = System.nanoTime(); executeForkedTarget("shutdownhook", 120 * 1000L); - long end = System.currentTimeMillis(); + long end = System.nanoTime(); // This isn't a strong assertion but it'll do here. If the execution time > 60 seconds // something is stinky. - Assert.assertTrue(end - start < 60 * 1000); + Assert.assertTrue(TimeUnit.NANOSECONDS.toMillis(end - start) < 60 * 1000); } } diff --git a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestTextReport.java b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestTextReport.java index 435c5ff4..fa578362 100644 --- a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestTextReport.java +++ b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestTextReport.java @@ -98,7 +98,7 @@ public void filtertrace_default() { assertLogDoesNotContain("at sun.reflect."); assertLogDoesNotContain("at java.lang.reflect.Method"); assertLogDoesNotContain("at org.junit.runners."); - assertLogDoesNotContain("at com.carrotsearch.ant.tasks.junit4.slave.SlaveMain"); + assertLogDoesNotContain("at com.carrotsearch.ant.tasks.junit4.forked.ForkedMain"); } @Test @@ -107,7 +107,7 @@ public void filtertrace_custom() { assertLogContains("java.lang.reflect.Method"); assertLogDoesNotContain("at org.junit."); - assertLogDoesNotContain(".SlaveMain."); + assertLogDoesNotContain(".ForkedMain."); } @Test diff --git a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestUnhandledSlaveFailure.java b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestUnhandledForkedJvmFailure.java similarity index 54% rename from junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestUnhandledSlaveFailure.java rename to junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestUnhandledForkedJvmFailure.java index 5f73cac8..aee945db 100644 --- a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestUnhandledSlaveFailure.java +++ b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/it/TestUnhandledForkedJvmFailure.java @@ -6,10 +6,10 @@ import com.carrotsearch.ant.tasks.junit4.tests.FireUnhandledRunnerException; -public class TestUnhandledSlaveFailure extends JUnit4XmlTestBase { +public class TestUnhandledForkedJvmFailure extends JUnit4XmlTestBase { @Test - public void checkSlaveMainFailure() throws IOException { - super.expectBuildExceptionContaining("slavemainfailure", "process threw an exception"); + public void checkForkedMainFailure() throws IOException { + super.expectBuildExceptionContaining("forkedmainfailure", "process threw an exception"); assertLogContains(FireUnhandledRunnerException.EXCEPTION_MESSAGE); } } diff --git a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/FireUnhandledRunnerException.java b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/FireUnhandledRunnerException.java index 11856df3..e93fc731 100644 --- a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/FireUnhandledRunnerException.java +++ b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/FireUnhandledRunnerException.java @@ -2,13 +2,13 @@ import org.junit.Test; -import com.carrotsearch.ant.tasks.junit4.slave.SlaveMain; +import com.carrotsearch.ant.tasks.junit4.forked.ForkedMain; public class FireUnhandledRunnerException { public static final String EXCEPTION_MESSAGE = "BAMBOOOOOCHA!"; @Test public void polluteRunner() { - System.setProperty(SlaveMain.SYSPROP_FIRERUNNERFAILURE, EXCEPTION_MESSAGE); + System.setProperty(ForkedMain.SYSPROP_FIRERUNNERFAILURE, EXCEPTION_MESSAGE); } } diff --git a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/SlaveHangingBackgroundThreads.java b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/ForkedJvmHangingBackgroundThreads.java similarity index 93% rename from junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/SlaveHangingBackgroundThreads.java rename to junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/ForkedJvmHangingBackgroundThreads.java index 053476e1..1a502062 100644 --- a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/SlaveHangingBackgroundThreads.java +++ b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/ForkedJvmHangingBackgroundThreads.java @@ -5,7 +5,7 @@ import org.junit.Test; -public class SlaveHangingBackgroundThreads { +public class ForkedJvmHangingBackgroundThreads { static { final CountDownLatch latch = new CountDownLatch(1); new Thread("background-non-daemon") { diff --git a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/ShutdownHook.java b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/ShutdownHook.java index 8e1dd9de..86ca5dfe 100644 --- a/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/ShutdownHook.java +++ b/junit4-ant/src/test/java/com/carrotsearch/ant/tasks/junit4/tests/ShutdownHook.java @@ -2,14 +2,17 @@ import org.junit.Test; +import java.util.concurrent.TimeUnit; + public class ShutdownHook { @Test public void testShutdownHook() { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { // Delay by about a minute. - long deadline = System.currentTimeMillis() + 60 * 1000; - while (System.currentTimeMillis() < deadline) { + final long duration = TimeUnit.SECONDS.toNanos(60); + final long startTime = System.nanoTime(); + while (System.nanoTime() - startTime < duration) { try { Thread.sleep(1000); } catch (Exception e) {} diff --git a/junit4-ant/src/test/resources/junit4.xml b/junit4-ant/src/test/resources/junit4.xml index a8472ab7..d8e3a8ac 100644 --- a/junit4-ant/src/test/resources/junit4.xml +++ b/junit4-ant/src/test/resources/junit4.xml @@ -24,7 +24,7 @@ - + @@ -637,10 +637,10 @@ - + - + @@ -931,7 +931,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1096,7 +1096,7 @@ - + @@ -1111,7 +1111,7 @@ - + @@ -1245,10 +1245,7 @@ - + @@ -1266,7 +1263,7 @@ - + diff --git a/junit4-maven-plugin-tests/pom.xml b/junit4-maven-plugin-tests/pom.xml index 6c3cbf1d..b6158e9c 100644 --- a/junit4-maven-plugin-tests/pom.xml +++ b/junit4-maven-plugin-tests/pom.xml @@ -5,7 +5,7 @@ com.carrotsearch.randomizedtesting randomizedtesting-parent - 2.7.8 + 2.8.4-SNAPSHOT ../pom.xml @@ -38,6 +38,39 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + default-jar + none + + + + + + org.apache.maven.plugins + maven-gpg-plugin + + + default + none + + + + + + org.apache.maven.plugins + maven-install-plugin + + + default-install + none + + + + maven-invoker-plugin diff --git a/junit4-maven-plugin/pom.xml b/junit4-maven-plugin/pom.xml index 5d7bf4e5..90810985 100644 --- a/junit4-maven-plugin/pom.xml +++ b/junit4-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.carrotsearch.randomizedtesting randomizedtesting-parent - 2.7.8 + 2.8.4-SNAPSHOT ../pom.xml diff --git a/junit4-maven-plugin/src/main/java/com/carrotsearch/maven/plugins/junit4/JUnit4Mojo.java b/junit4-maven-plugin/src/main/java/com/carrotsearch/maven/plugins/junit4/JUnit4Mojo.java index 05c8c803..45fcfb7d 100644 --- a/junit4-maven-plugin/src/main/java/com/carrotsearch/maven/plugins/junit4/JUnit4Mojo.java +++ b/junit4-maven-plugin/src/main/java/com/carrotsearch/maven/plugins/junit4/JUnit4Mojo.java @@ -86,7 +86,7 @@ public class JUnit4Mojo extends AbstractMojo { private MavenProject project; /** - * Base directory to invoke slave VMs in. Also note isolateWorkingDirectories + * Base directory to invoke forked VMs in. Also note isolateWorkingDirectories * parameter. */ @Parameter( @@ -135,12 +135,23 @@ public class JUnit4Mojo extends AbstractMojo { /** * Predictably shuffle tests order after balancing. This will help in spreading - * lighter and heavier tests over a single slave's execution timeline while + * lighter and heavier tests over a single forked JVM execution timeline while * still keeping the same tests order depending on the seed. + * + * @deprecated Use {@link #shuffleOnForkedJvm} */ @Parameter(defaultValue = "true") - private boolean shuffleOnSlave = JUnit4.DEFAULT_SHUFFLE_ON_SLAVE; - + @Deprecated + private boolean shuffleOnSlave = JUnit4.DEFAULT_SHUFFLE_ON_FORKED_JVM; + + /** + * Predictably shuffle tests order after balancing. This will help in spreading + * lighter and heavier tests over a single forked JVM execution timeline while + * still keeping the same tests order depending on the seed. + */ + @Parameter(defaultValue = "true") + private boolean shuffleOnForkedJvm = JUnit4.DEFAULT_SHUFFLE_ON_FORKED_JVM; + /** * Prints the summary of all executed, ignored etc. tests at the end. */ @@ -182,7 +193,7 @@ public class JUnit4Mojo extends AbstractMojo { /** * Specifies the ratio of suites moved to dynamic assignment list. A dynamic - * assignment list dispatches suites to the first idle slave JVM. Theoretically + * assignment list dispatches suites to the first idle forked JVM. Theoretically * this is an optimal strategy, but it is usually better to have some static assignments * to avoid communication costs. * @@ -192,7 +203,7 @@ public class JUnit4Mojo extends AbstractMojo { *

    The list of dynamic assignments is sorted by decreasing cost (always) and * is inherently prone to race conditions in distributing suites. Should there * be an error based on suite-dependency it will not be directly repeatable. In such - * case use the per-slave-jvm list of suites file dumped to disk for each slave JVM. + * case use the per-forked-jvm list of suites file dumped to disk for each forked JVM. * (see leaveTemporary parameter). */ @Parameter(defaultValue = "0.25") @@ -608,7 +619,7 @@ private void populateJUnitElement(Element junit4) { if (statsPropertyPrefix != null) junit4.addAttribute("statsPropertyPrefix", statsPropertyPrefix); if (onNonEmptyWorkDirectory != null) junit4.addAttribute("onNonEmptyWorkDirectory", onNonEmptyWorkDirectory); - junit4.addAttribute("shuffleOnSlave", Boolean.toString(shuffleOnSlave)); + junit4.addAttribute("shuffleOnForkedJvm", Boolean.toString(shuffleOnSlave && shuffleOnForkedJvm)); junit4.addAttribute("printSummary", Boolean.toString(printSummary)); junit4.addAttribute("isolateWorkingDirectories", Boolean.toString(isolateWorkingDirectories)); junit4.addAttribute("haltOnFailure", Boolean.toString(haltOnFailure)); diff --git a/pom.xml b/pom.xml index 9fc2854a..46340437 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.carrotsearch.randomizedtesting randomizedtesting-parent - 2.7.8 + 2.8.4-SNAPSHOT pom RandomizedTesting Parent POM @@ -21,7 +21,7 @@ Carrot Search s.c. - http://carrotsearch.com + https://carrotsearch.com @@ -29,14 +29,14 @@ Carrot Search s.c. info@carrotsearch.com Carrot Search s.c. - http://www.carrotsearch.com + https://www.carrotsearch.com The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt + https://www.apache.org/licenses/LICENSE-2.0.txt repo @@ -65,9 +65,10 @@ - 4.12 - 1.9.11 + 4.13.1 + 1.10.15 2.2.0 + 9.7.1 1.8 3.0.0-M1 @@ -110,7 +111,7 @@ com.google.guava guava - 25.0-jre + 33.4.0-jre jsr305 @@ -134,7 +135,7 @@ org.ow2.asm asm - 8.0.1 + ${version.asm} @@ -550,7 +551,7 @@ sonatype-nexus-staging Sonatype Nexus Releases - https://oss.sonatype.org/service/local/staging/deploy/maven2/ + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2 diff --git a/randomized-runner/pom.xml b/randomized-runner/pom.xml index 186e2ebb..1fb34b4f 100644 --- a/randomized-runner/pom.xml +++ b/randomized-runner/pom.xml @@ -5,7 +5,7 @@ com.carrotsearch.randomizedtesting randomizedtesting-parent - 2.7.8 + 2.8.4-SNAPSHOT ../pom.xml diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/DeadlineClock.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/DeadlineClock.java new file mode 100644 index 00000000..23cd5161 --- /dev/null +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/DeadlineClock.java @@ -0,0 +1,30 @@ +package com.carrotsearch.randomizedtesting; + +import java.util.concurrent.TimeUnit; + +public final class DeadlineClock { + private final long startTime; + private final long durationNanos; + + public DeadlineClock(TimeUnit unit, long duration) { + startTime = System.nanoTime(); + durationNanos = unit.toNanos(duration); + } + + public boolean isBeforeDeadline() { + return !isAfterDeadline(); + } + + public boolean isAfterDeadline() { + return System.nanoTime() - startTime >= durationNanos; + } + + public long timeUntilDeadline(TimeUnit unit) { + long elapsedNanos = System.nanoTime() - startTime; + if (elapsedNanos >= durationNanos) { + return 0; + } else { + return unit.convert(durationNanos - elapsedNanos, TimeUnit.NANOSECONDS); + } + } +} diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/GroupEvaluator.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/GroupEvaluator.java index c7c0dc64..619fabfd 100644 --- a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/GroupEvaluator.java +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/GroupEvaluator.java @@ -7,6 +7,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import com.carrotsearch.randomizedtesting.FilterExpressionParser.IContext; import com.carrotsearch.randomizedtesting.FilterExpressionParser.Node; @@ -39,12 +40,12 @@ private static class TestGroupInfo { } } - private final HashMap, TestGroupInfo> testGroups; + private final Map, TestGroupInfo> testGroups; private final Node filter; private String filterExpression; GroupEvaluator(List testCandidates) { - testGroups = collectGroups(testCandidates); + testGroups = new ConcurrentHashMap<>(collectGroups(testCandidates)); filterExpression = System.getProperty(SysGlobals.SYSPROP_TESTFILTER()); if (filterExpression != null && filterExpression.trim().isEmpty()) { @@ -108,10 +109,8 @@ public String getIgnoreReason(AnnotatedElement... elements) { for (Annotation ann : element.getAnnotations()) { Class annType = ann.annotationType(); if (annType.isAnnotationPresent(TestGroup.class)) { - if (!testGroups.containsKey(annType)) { - testGroups.put(annType, new TestGroupInfo(annType)); - } - annotations.put(testGroups.get(annType).name, ann); + TestGroupInfo testGroupInfo = testGroups.computeIfAbsent(annType, k -> new TestGroupInfo(annType)); + annotations.put(testGroupInfo.name, ann); } } } @@ -158,21 +157,21 @@ private String toString(Annotation ann) { } /** - * @return Returns the current state of the an annotation marked with + * @return Returns the current state of an annotation marked with * {@link TestGroup}. Note that tests may be enabled or disabled using filtering - * expressions so an enabled group does not necessarily mean a test marked with + * expressions so an "enabled" group does not necessarily mean a test marked with * this group will be executed. */ public boolean isGroupEnabled(Class testGroupAnnotation) { - if (!testGroups.containsKey(testGroupAnnotation)) { + TestGroupInfo testGroupInfo = testGroups.computeIfAbsent(testGroupAnnotation, k -> { if (!testGroupAnnotation.isAnnotationPresent(TestGroup.class)) { throw new IllegalArgumentException("This annotation is not marked with @" - + TestGroup.class.getName() + ": " + testGroupAnnotation.getName()); + + TestGroup.class.getName() + ": " + testGroupAnnotation.getName()); } - testGroups.put(testGroupAnnotation, new TestGroupInfo(testGroupAnnotation)); - } + return new TestGroupInfo(testGroupAnnotation); + }); - return testGroups.get(testGroupAnnotation).enabled; + return testGroupInfo.enabled; } } diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/MixWithSuiteName.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/MixWithSuiteName.java index 8ee997c1..085303de 100644 --- a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/MixWithSuiteName.java +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/MixWithSuiteName.java @@ -4,7 +4,7 @@ /** * A {@link SeedDecorator} to be used with {@link SeedDecorators} annotation - * to modify the master {@link Randomness} with a hash off the suite's class name. + * to modify the main {@link Randomness} with a hash off the suite's class name. */ public class MixWithSuiteName implements SeedDecorator { private long xorHash; diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedContext.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedContext.java index c29a16d0..2395df17 100644 --- a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedContext.java +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedContext.java @@ -80,7 +80,7 @@ long getRunnerSeed() { } /** - * Returns the runner's master seed, formatted. + * Returns the runner's main seed, formatted. */ public String getRunnerSeedAsString() { checkDisposed(); diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedRunner.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedRunner.java index a11d5891..d2c8a3d1 100644 --- a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedRunner.java +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedRunner.java @@ -104,7 +104,7 @@ * methods declared in superclasses are called after methods declared in subclasses, *

  • {@link BeforeClass}, {@link Before}, {@link AfterClass}, {@link After} * methods declared within the same class are called in randomized order - * derived from the master seed (repeatable with the same seed),
  • + * derived from the main seed (repeatable with the same seed), *
* *

Deviations from "standard" JUnit: @@ -223,11 +223,11 @@ public Class getTestClass() { /** The class with test methods (suite). */ private final Class suiteClass; - /** The runner's seed (master). */ + /** The runner's seed (main seed). */ final Randomness runnerRandomness; /** - * If {@link SysGlobals#SYSPROP_RANDOM_SEED} property is used with two arguments (master:method) + * If {@link SysGlobals#SYSPROP_RANDOM_SEED} property is used with two arguments (main:method) * then this field contains method-level override. */ private Randomness testCaseRandomnessOverride; @@ -324,7 +324,7 @@ public RandomizedRunner(Class testClass) throws InitializationError { // behavior slightly. this.containerRunner = detectContainer(); - // Initialize the runner's master seed/ randomness source. + // Initialize the runner's main seed/ randomness source. { List decorators = new ArrayList(); for (SeedDecorators decAnn : getAnnotationsFromClassHierarchy(testClass, SeedDecorators.class)) { @@ -929,7 +929,7 @@ private Statement withClassRules(Statement s) { } /** - * Runs a single test in the "master" test thread. + * Runs a single test in the "main" test thread. */ void runSingleTest(final RunNotifier notifier, final TestCandidate c, @@ -1061,7 +1061,12 @@ public void evaluate() throws Throwable { */ @SuppressWarnings("deprecation") private Statement wrapMethodRules(Statement s, TestCandidate c, Object instance) { - FrameworkMethod fm = new FrameworkMethod(c.method); + FrameworkMethod fm = AccessController.doPrivileged(new PrivilegedAction() { + @Override + public FrameworkMethod run() { + return new FrameworkMethod(c.method); + } + }); // Old-style MethodRules first. List methodRules = diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedTest.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedTest.java index cdd1bede..fd9d02ab 100644 --- a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedTest.java +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/RandomizedTest.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.net.ServerSocket; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.text.SimpleDateFormat; @@ -48,10 +49,10 @@ public class RandomizedTest { /* Commonly used charsets (these must be supported by every JVM). */ - protected static final Charset UTF8 = Charset.forName("UTF-8"); - protected static final Charset UTF16 = Charset.forName("UTF-16"); - protected static final Charset ISO8859_1 = Charset.forName("ISO-8859-1"); - protected static final Charset US_ASCII = Charset.forName("US-ASCII"); + protected static final Charset UTF8 = StandardCharsets.UTF_8; + protected static final Charset UTF16 = StandardCharsets.UTF_16; + protected static final Charset ISO8859_1 = StandardCharsets.ISO_8859_1; + protected static final Charset US_ASCII = StandardCharsets.US_ASCII; /* This charset does not need to be supported, but I don't know any JVM under which it wouldn't be. */ diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/ThreadLeakControl.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/ThreadLeakControl.java index 9a724c15..fce0a927 100644 --- a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/ThreadLeakControl.java +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/ThreadLeakControl.java @@ -1,14 +1,27 @@ package com.carrotsearch.randomizedtesting; -import static com.carrotsearch.randomizedtesting.RandomizedRunner.DEFAULT_KILLATTEMPTS; -import static com.carrotsearch.randomizedtesting.RandomizedRunner.DEFAULT_KILLWAIT; -import static com.carrotsearch.randomizedtesting.RandomizedRunner.DEFAULT_TIMEOUT; -import static com.carrotsearch.randomizedtesting.RandomizedRunner.DEFAULT_TIMEOUT_SUITE; -import static com.carrotsearch.randomizedtesting.RandomizedTest.systemPropertyAsInt; -import static com.carrotsearch.randomizedtesting.SysGlobals.SYSPROP_KILLATTEMPTS; -import static com.carrotsearch.randomizedtesting.SysGlobals.SYSPROP_KILLWAIT; -import static com.carrotsearch.randomizedtesting.SysGlobals.SYSPROP_TIMEOUT; -import static com.carrotsearch.randomizedtesting.SysGlobals.SYSPROP_TIMEOUT_SUITE; +import com.carrotsearch.randomizedtesting.RandomizedRunner.*; +import com.carrotsearch.randomizedtesting.annotations.SuppressForbidden; +import com.carrotsearch.randomizedtesting.annotations.ThreadLeakAction; +import com.carrotsearch.randomizedtesting.annotations.ThreadLeakAction.Action; +import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters; +import com.carrotsearch.randomizedtesting.annotations.ThreadLeakGroup; +import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering; +import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope; +import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope.Scope; +import com.carrotsearch.randomizedtesting.annotations.ThreadLeakZombies; +import com.carrotsearch.randomizedtesting.annotations.Timeout; +import com.carrotsearch.randomizedtesting.annotations.TimeoutSuite; +import org.junit.AssumptionViolatedException; +import org.junit.Test; +import org.junit.runner.Description; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; +import org.junit.runner.notification.RunListener; +import org.junit.runner.notification.RunNotifier; +import org.junit.runner.notification.StoppedByUserException; +import org.junit.runners.model.MultipleFailureException; +import org.junit.runners.model.Statement; import java.lang.annotation.Annotation; import java.lang.management.ManagementFactory; @@ -34,30 +47,9 @@ import java.util.concurrent.locks.LockSupport; import java.util.logging.Logger; -import org.junit.Test; -import org.junit.AssumptionViolatedException; -import org.junit.runner.Description; -import org.junit.runner.Result; -import org.junit.runner.notification.Failure; -import org.junit.runner.notification.RunListener; -import org.junit.runner.notification.RunNotifier; -import org.junit.runner.notification.StoppedByUserException; -import org.junit.runners.model.MultipleFailureException; -import org.junit.runners.model.Statement; - -import com.carrotsearch.randomizedtesting.RandomizedRunner.TestCandidate; -import com.carrotsearch.randomizedtesting.RandomizedRunner.UncaughtException; -import com.carrotsearch.randomizedtesting.annotations.SuppressForbidden; -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakAction; -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakAction.Action; -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters; -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakGroup; -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering; -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope; -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope.Scope; -import com.carrotsearch.randomizedtesting.annotations.ThreadLeakZombies; -import com.carrotsearch.randomizedtesting.annotations.Timeout; -import com.carrotsearch.randomizedtesting.annotations.TimeoutSuite; +import static com.carrotsearch.randomizedtesting.RandomizedRunner.*; +import static com.carrotsearch.randomizedtesting.RandomizedTest.systemPropertyAsInt; +import static com.carrotsearch.randomizedtesting.SysGlobals.*; /** * Everything corresponding to thread leak control. This is very, very fragile to changes @@ -65,14 +57,17 @@ */ @SuppressWarnings("resource") class ThreadLeakControl { - /** A dummy class serving as the source of defaults for annotations. */ + /** + * A dummy class serving as the source of defaults for annotations. + */ @ThreadLeakScope @ThreadLeakAction @ThreadLeakLingering @ThreadLeakZombies @ThreadLeakFilters @ThreadLeakGroup - private static class DefaultAnnotationValues {} + private static class DefaultAnnotationValues { + } /** * Shared LOGGER. @@ -152,15 +147,29 @@ private class SubNotifier extends RunNotifier { Description testInProgress; @Override - public void addListener(RunListener listener) { throw new UnsupportedOperationException(); } + public void addListener(RunListener listener) { + throw new UnsupportedOperationException(); + } + @Override - public void addFirstListener(RunListener listener) { throw new UnsupportedOperationException(); } + public void addFirstListener(RunListener listener) { + throw new UnsupportedOperationException(); + } + @Override - public void removeListener(RunListener listener) { throw new UnsupportedOperationException(); } + public void removeListener(RunListener listener) { + throw new UnsupportedOperationException(); + } + @Override - public void fireTestRunFinished(Result result) { throw new UnsupportedOperationException(); } + public void fireTestRunFinished(Result result) { + throw new UnsupportedOperationException(); + } + @Override - public void fireTestRunStarted(Description description) { throw new UnsupportedOperationException(); } + public void fireTestRunStarted(Description description) { + throw new UnsupportedOperationException(); + } @Override public void fireTestStarted(Description description) throws StoppedByUserException { @@ -248,7 +257,9 @@ int getTimeout(Integer value) { } } - /** */ + /** + * + */ private static class ThisThreadFilter implements ThreadFilter { private final Thread t; @@ -277,7 +288,9 @@ public boolean reject(Thread t) { }; } - /** */ + /** + * + */ private static class KnownSystemThread implements ThreadFilter { @Override public boolean reject(Thread t) { @@ -335,7 +348,9 @@ public boolean reject(Thread t) { } } - /** */ + /** + * + */ ThreadLeakControl(RunNotifier notifier, RandomizedRunner runner) { this.targetNotifier = notifier; this.subNotifier = new SubNotifier(); @@ -441,7 +456,7 @@ public void evaluate() throws Throwable { emptyStack(new Exception("Suite timeout exceeded (>= " + timeout + " msec).")))); } - final AnnotatedElement [] chain = { suiteClass, DefaultAnnotationValues.class }; + final AnnotatedElement[] chain = {suiteClass, DefaultAnnotationValues.class}; List threadLeakErrors = timedOut ? new ArrayList() : errors; checkThreadLeaks( refilter(expectedSuiteState, suiteFilters), threadLeakErrors, LifecycleScope.SUITE, suiteDescription, chain); @@ -487,8 +502,8 @@ public void evaluate() throws Throwable { emptyStack(new Exception("Test timeout exceeded (>= " + timeout + " msec).")))); } - final AnnotatedElement [] chain = - { c.method, c.getTestClass(), DefaultAnnotationValues.class }; + final AnnotatedElement[] chain = + {c.method, c.getTestClass(), DefaultAnnotationValues.class}; List threadLeakErrors = timedOut ? new ArrayList() : errors; checkThreadLeaks(beforeTestState, threadLeakErrors, LifecycleScope.TEST, c.description, chain); processUncaught(errors, runner.handler.getUncaughtAndClear()); @@ -503,7 +518,7 @@ public void evaluate() throws Throwable { */ protected Set refilter(Set in, ThreadFilter f) { HashSet t = new HashSet(in); - for (Iterator i = t.iterator(); i.hasNext();) { + for (Iterator i = t.iterator(); i.hasNext(); ) { if (f.reject(i.next())) { i.remove(); } @@ -538,7 +553,7 @@ private ThreadFilter instantiateFilters(List errors, Class suiteCl * Clears a {@link Throwable}'s stack. */ private static T emptyStack(T t) { - t.setStackTrace(new StackTraceElement [0]); + t.setStackTrace(new StackTraceElement[0]); return t; } @@ -560,8 +575,7 @@ protected void checkThreadLeaks( Set expectedState, List errors, LifecycleScope scope, Description description, - AnnotatedElement... annotationChain) - { + AnnotatedElement... annotationChain) { final ThreadLeakScope annScope = firstAnnotated(ThreadLeakScope.class, annotationChain); // Return immediately if no checking. @@ -574,49 +588,51 @@ protected void checkThreadLeaks( } // Check for the set of live threads, with optional lingering. - int lingerTime = firstAnnotated(ThreadLeakLingering.class, annotationChain).linger(); - HashSet threads = getThreads(suiteFilters); - threads.removeAll(expectedState); + { + int lingerTime = firstAnnotated(ThreadLeakLingering.class, annotationChain).linger(); + HashSet threads = getThreads(suiteFilters); + threads.removeAll(expectedState); - if (lingerTime > 0 && !threads.isEmpty()) { - final long deadline = System.currentTimeMillis() + lingerTime; - try { - LOGGER.warning("Will linger awaiting termination of " + threads.size() + " leaked thread(s)."); - do { - // Check every few hundred milliseconds until deadline occurs. We want to break out - // sooner than the maximum lingerTime but there is no explicit even that - // would wake us up, so poll periodically. - Thread.sleep(100); - - threads = getThreads(suiteFilters); - threads.removeAll(expectedState); - if (threads.isEmpty() || System.currentTimeMillis() > deadline) - break; - } while (true); - } catch (InterruptedException e) { - LOGGER.warning("Lingering interrupted."); + if (lingerTime > 0 && !threads.isEmpty()) { + final DeadlineClock deadlineClock = new DeadlineClock(TimeUnit.MILLISECONDS, lingerTime); + try { + LOGGER.warning("Will linger awaiting termination of " + threads.size() + " leaked thread(s)."); + do { + // Check every few hundred milliseconds until deadline occurs. We want to break out + // sooner than the maximum lingerTime but there is no explicit even that + // would wake us up, so poll periodically. + Thread.sleep(100); + + threads = getThreads(suiteFilters); + threads.removeAll(expectedState); + if (threads.isEmpty() || deadlineClock.isAfterDeadline()) + break; + } while (true); + } catch (InterruptedException e) { + LOGGER.warning("Lingering interrupted."); + } } - } - if (threads.isEmpty()) { - return; + if (threads.isEmpty()) { + return; + } } // Take one more snapshot, this time including stack traces (costly). - HashMap withTraces = getThreadsWithTraces(suiteFilters); + HashMap withTraces = getThreadsWithTraces(suiteFilters); withTraces.keySet().removeAll(expectedState); if (withTraces.isEmpty()) { return; } // Build up failure message (include stack traces of leaked threads). - StringBuilder message = new StringBuilder(threads.size() + " thread" + - (threads.size() == 1 ? "" : "s") + + StringBuilder message = new StringBuilder(withTraces.size() + " thread" + + (withTraces.size() == 1 ? "" : "s") + " leaked from " + scope + " scope at " + description + ": "); message.append(formatThreadStacks(withTraces)); - // The first exception is leaked threads error. + // The first exception is the "leaked threads" error. errors.add(RandomizedRunner.augmentStackTrace( emptyStack(new ThreadLeakError(message.toString())))); @@ -652,11 +668,11 @@ protected void checkThreadLeaks( /** * Dump threads and their current stack trace. */ - private String formatThreadStacks(Map threads) { + private String formatThreadStacks(Map threads) { StringBuilder message = new StringBuilder(); int cnt = 1; final Formatter f = new Formatter(message, Locale.ROOT); - for (Map.Entry e : threads.entrySet()) { + for (Map.Entry e : threads.entrySet()) { f.format(Locale.ROOT, "\n %2d) %s", cnt++, Threads.threadName(e.getKey())).flush(); if (e.getValue().length == 0) { message.append("\n at (empty stack)"); @@ -669,7 +685,9 @@ private String formatThreadStacks(Map threads) { return message.toString(); } - /** Collect thread names. */ + /** + * Collect thread names. + */ private String threadNames(Collection threads) { StringBuilder b = new StringBuilder(); final Formatter f = new Formatter(b, Locale.ROOT); @@ -680,7 +698,9 @@ private String threadNames(Collection threads) { return b.toString(); } - /** Dump thread state. */ + /** + * Dump thread state. + */ private String formatThreadStacksFull() { try { StringBuilder b = new StringBuilder(); @@ -709,9 +729,9 @@ public StackTraceElement[] run() { * Returns all {@link ThreadLeakGroup} applicable threads, with stack * traces, for analysis. */ - private HashMap getThreadsWithTraces(ThreadFilter... filters) { + private HashMap getThreadsWithTraces(ThreadFilter... filters) { final Set threads = getThreads(filters); - final HashMap r = new HashMap(); + final HashMap r = new HashMap(); for (Thread t : threads) { r.put(t, getStackTrace(t)); } @@ -738,7 +758,7 @@ private HashSet getThreads(ThreadFilter... filters) { } final ThreadFilter filter = or(filters); - for (Iterator i = threads.iterator(); i.hasNext();) { + for (Iterator i = threads.iterator(); i.hasNext(); ) { Thread t = i.next(); if (!t.isAlive() || filter.reject(t)) { i.remove(); @@ -775,12 +795,12 @@ private Set tryToInterruptAll(List errors, Set thread // Maximum wait time. Progress through the threads, trying to join but // decrease the join time each time. - long waitDeadline = System.currentTimeMillis() + interruptWait; - for (Iterator i = ordered.iterator(); i.hasNext();) { + DeadlineClock waitDeadlineClock = new DeadlineClock(TimeUnit.MILLISECONDS, interruptWait); + for (Iterator i = ordered.iterator(); i.hasNext(); ) { final Thread t = i.next(); if (t.isAlive()) { allDead = false; - join(t, Math.max(1, waitDeadline - System.currentTimeMillis()), Thread::sleep); + join(t, Math.max(1, waitDeadlineClock.timeUntilDeadline(TimeUnit.MILLISECONDS)), Thread::sleep); } else { i.remove(); } @@ -792,7 +812,7 @@ private Set tryToInterruptAll(List errors, Set thread Thread.currentThread().setPriority(restorePriority); // Check after the last join. - HashMap zombies = new HashMap(); + HashMap zombies = new HashMap(); for (Thread t : ordered) { if (t.isAlive()) { zombies.put(t, getStackTrace(t)); @@ -818,8 +838,7 @@ private Set tryToInterruptAll(List errors, Set thread * Fork or not depending on the timeout value. */ boolean forkTimeoutingTask(StatementRunner r, int timeout, List errors) - throws InterruptedException - { + throws InterruptedException { if (timeout == 0) { r.run(); } else { @@ -859,14 +878,14 @@ static void join(Thread t, long millis, AwaitCond cond) throws InterruptedExcept throw new IllegalArgumentException("Timeout must be positive: " + millis); } - long deadline = System.currentTimeMillis() + millis; + DeadlineClock deadlineClock = new DeadlineClock(TimeUnit.MILLISECONDS, millis); while (t.isAlive()) { - long delay = deadline - System.currentTimeMillis(); - if (delay > 0) { + long untilDeadline = deadlineClock.timeUntilDeadline(TimeUnit.MILLISECONDS); + if (untilDeadline > 0) { // Don't wait longer than a few millis, then recheck condition. // We use sleep because Thread.join() is synchronized and this thread may // get stuck on getting the monitor for an indefinite amount of time. - cond.await(Math.min(250, delay)); + cond.await(Math.min(250, untilDeadline)); } else { break; } @@ -890,18 +909,18 @@ RunNotifier notifier() { * Determine timeout for a suite. * * @return Returns timeout in milliseconds or 0 if the test should run until - * finished (possibly blocking forever). + * finished (possibly blocking forever). */ private int determineTimeout(Class suiteClass) { TimeoutSuite timeoutAnn = suiteClass.getAnnotation(TimeoutSuite.class); - return suiteTimeout.getTimeout(timeoutAnn == null ? null : timeoutAnn.millis()); + return suiteTimeout.getTimeout(timeoutAnn == null ? null : timeoutAnn.millis()); } /** * Determine timeout for a single test method (candidate). * * @return Returns timeout in milliseconds or 0 if the test should run until - * finished (possibly blocking forever). + * finished (possibly blocking forever). */ private int determineTimeout(TestCandidate c) { Integer timeout = null; diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/annotations/SeedDecorators.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/annotations/SeedDecorators.java index 45926fec..2cebfce4 100644 --- a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/annotations/SeedDecorators.java +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/annotations/SeedDecorators.java @@ -5,12 +5,12 @@ import com.carrotsearch.randomizedtesting.SeedDecorator; /** - * Allows modifying the master seed (before the suite is started). + * Allows modifying the main seed (before the suite is started). * - *

Use this annotation when you want to perturb or modify the master seed. This may be + *

Use this annotation when you want to perturb or modify the main seed. This may be * useful if there are decisions taken in static contexts of multiple suites. In such a case * these decisions would always be identical (because at static context level the seed is - * always derived from the same master). With a {@link SeedDecorator} one can perturb + * always derived from the same main seed). With a {@link SeedDecorator} one can perturb * the seed for every suite. * *

    diff --git a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/rules/SystemPropertiesRestoreRule.java b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/rules/SystemPropertiesRestoreRule.java index 8a1cbb4a..43e85c1d 100644 --- a/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/rules/SystemPropertiesRestoreRule.java +++ b/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/rules/SystemPropertiesRestoreRule.java @@ -24,13 +24,31 @@ public class SystemPropertiesRestoreRule implements TestRule { /** * Ignored property keys. */ - private final HashSet ignoredProperties; + private final Set ignoredProperties; + + /** properties we set up front for the duration of the test */ + private final Map setProperties; /** * Restores all properties. */ public SystemPropertiesRestoreRule() { - this(Collections.emptySet()); + this.ignoredProperties = Collections.emptySet(); + this.setProperties = Collections.emptyMap(); + } + + /** Equivalent to calling {@link System#setProperty(String, String)} when the test starts. */ + public SystemPropertiesRestoreRule(String key, String value) { + this(Collections.singletonMap(key, value)); + } + + /** + * Equivalent to calling {@link System#setProperty(String, String)} on each of the provided + * properties when the test starts. + */ + public SystemPropertiesRestoreRule(Map setProperties) { + this.setProperties = new HashMap<>(setProperties);//defensive clone + this.ignoredProperties = Collections.emptySet(); } /** @@ -38,6 +56,7 @@ public SystemPropertiesRestoreRule() { */ public SystemPropertiesRestoreRule(Set ignoredProperties) { this.ignoredProperties = new HashSet(ignoredProperties); + this.setProperties = Collections.emptyMap(); } /** @@ -45,6 +64,7 @@ public SystemPropertiesRestoreRule(Set ignoredProperties) { */ public SystemPropertiesRestoreRule(String... ignoredProperties) { this.ignoredProperties = new HashSet(Arrays.asList(ignoredProperties)); + this.setProperties = Collections.emptyMap(); } @Override @@ -54,6 +74,9 @@ public Statement apply(final Statement s, Description d) { public void evaluate() throws Throwable { TreeMap before = systemPropertiesAsMap(); try { + for (Map.Entry entry : setProperties.entrySet()) { + System.setProperty(entry.getKey(), entry.getValue()); + } s.evaluate(); } finally { TreeMap after = systemPropertiesAsMap(); diff --git a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/TestContextRandom.java b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/TestContextRandom.java index a96bcb40..932efe60 100644 --- a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/TestContextRandom.java +++ b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/TestContextRandom.java @@ -58,7 +58,7 @@ public void run() { * annotation on a method. */ @Test - @Ignore("Forked threads get the master seed (by-design).") + @Ignore("Forked threads get the main seed (by-design).") public void testFixedSeedSubthreads() { runTests(Nested3.class); List run1 = new ArrayList(numbers); diff --git a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/TestSeedDecorator.java b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/TestSeedDecorator.java index 89872ae4..bbc9760e 100644 --- a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/TestSeedDecorator.java +++ b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/TestSeedDecorator.java @@ -50,11 +50,11 @@ public void cleanup() { } @Test - public void testDecoratedMaster() { - String masterSeed = SeedUtils.formatSeed(new Random().nextLong()); - System.setProperty(SysGlobals.SYSPROP_RANDOM_SEED(), masterSeed); + public void testDecoratedMainSeed() { + String mainSeed = SeedUtils.formatSeed(new Random().nextLong()); + System.setProperty(SysGlobals.SYSPROP_RANDOM_SEED(), mainSeed); - // These classes should get a different master seed (perturbed by decorator). + // These classes should get a different main seed (perturbed by decorator). runTests(Nested1.class, Nested2.class, Nested3.class, Nested4.class); // All four classes get the same initial "runner" seed. @@ -62,7 +62,7 @@ public void testDecoratedMaster() { Assert.assertEquals(1, new HashSet(runnerSeeds).toArray().length); // @BeforeClass scope strings for Nested1 and Nested2 should be the same - // because these classes share identical master seed. + // because these classes share identical main seed. Assertions.assertThat(strings.get(1)).isEqualTo(strings.get(0)); // but Nested3 and Nested4 have a seed decorator so strings there // should be different. diff --git a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/WithNestedTestClass.java b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/WithNestedTestClass.java index 86ace102..8d053454 100644 --- a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/WithNestedTestClass.java +++ b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/WithNestedTestClass.java @@ -140,12 +140,12 @@ protected void afterAlways(java.util.List errors) throws Throwable { private static StringWriter loggingMessages; /** - * Master logger. + * Main logger. */ private static Logger logger; /** - * Previous handlers attached to the master. + * Previous handlers.. */ private static Handler[] handlers; diff --git a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/generators/TestRealisticUnicodeGenerator.java b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/generators/TestRealisticUnicodeGenerator.java index 2c6b6430..493af8df 100644 --- a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/generators/TestRealisticUnicodeGenerator.java +++ b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/generators/TestRealisticUnicodeGenerator.java @@ -2,6 +2,6 @@ public class TestRealisticUnicodeGenerator extends StringGeneratorTestBase { public TestRealisticUnicodeGenerator() { - super(new UnicodeGenerator()); + super(new RealisticUnicodeGenerator()); } } diff --git a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test012RunawayThreadsKilledAtOnce.java b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test012RunawayThreadsKilledAtOnce.java index bf37d0e7..12663d6f 100644 --- a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test012RunawayThreadsKilledAtOnce.java +++ b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test012RunawayThreadsKilledAtOnce.java @@ -1,6 +1,7 @@ package com.carrotsearch.randomizedtesting.timeouts; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Test; @@ -42,11 +43,12 @@ public void run() { @Test public void testLotsOfStubbornThreads() { - long start = System.currentTimeMillis(); + long start = System.nanoTime(); FullResult result = runTests(NestedClass.class); - long end = System.currentTimeMillis(); + long end = System.nanoTime(); Assert.assertEquals(1, result.getFailureCount()); - Assert.assertTrue((end - start) + " msec?", (end - start) < 1000 * 10); + long msec = TimeUnit.NANOSECONDS.toMillis(end - start); + Assert.assertTrue(msec + " msec?", msec < 1000 * 10); } } diff --git a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test015TimeoutOverride.java b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test015TimeoutOverride.java index 52f9d042..b4d61018 100644 --- a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test015TimeoutOverride.java +++ b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test015TimeoutOverride.java @@ -9,6 +9,8 @@ import com.carrotsearch.randomizedtesting.WithNestedTestClass; import com.carrotsearch.randomizedtesting.annotations.Timeout; +import java.util.concurrent.TimeUnit; + /** * Test global timeout override (-Dtests.timeout=1000!). @@ -35,22 +37,22 @@ public void testMethod1() { @Test public void testTimeoutOverride() { System.setProperty(SysGlobals.SYSPROP_TIMEOUT(), "200!"); - long start = System.currentTimeMillis(); + long start = System.nanoTime(); FullResult result = runTests(Nested.class); - long end = System.currentTimeMillis(); + long end = System.nanoTime(); Assert.assertEquals(1, result.getFailureCount()); - Assert.assertTrue(end - start < 3000); + Assert.assertTrue(TimeUnit.NANOSECONDS.toMillis(end - start) < 3000); } @Test public void testDisableTimeout() { System.setProperty(SysGlobals.SYSPROP_TIMEOUT(), "0!"); - long start = System.currentTimeMillis(); + long start = System.nanoTime(); FullResult result = runTests(Nested2.class); - long end = System.currentTimeMillis(); + long end = System.nanoTime(); Assert.assertEquals(0, result.getFailureCount()); - Assert.assertTrue(end - start > 900); + Assert.assertTrue(TimeUnit.NANOSECONDS.toMillis(end - start) > 900); } @After diff --git a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test021SuiteTimeoutHanging.java b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test021SuiteTimeoutHanging.java index 7398e058..a7aabfc4 100644 --- a/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test021SuiteTimeoutHanging.java +++ b/randomized-runner/src/test/java/com/carrotsearch/randomizedtesting/timeouts/Test021SuiteTimeoutHanging.java @@ -1,5 +1,6 @@ package com.carrotsearch.randomizedtesting.timeouts; +import com.carrotsearch.randomizedtesting.DeadlineClock; import com.carrotsearch.randomizedtesting.RandomizedTest; import com.carrotsearch.randomizedtesting.SysGlobals; import com.carrotsearch.randomizedtesting.WithNestedTestClass; @@ -12,6 +13,7 @@ import java.util.ArrayList; import java.util.Locale; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -69,8 +71,8 @@ public void testThreadLeakInterruptsIsNotHangingOnJoin() throws Throwable { }); tester.start(); - long deadline = System.currentTimeMillis() + 10000; - while (System.currentTimeMillis() < deadline && tester.isAlive()) { + DeadlineClock deadlineClock = new DeadlineClock(TimeUnit.SECONDS, 10); + while (deadlineClock.isBeforeDeadline() && tester.isAlive()) { Thread.sleep(250); }