diff options
Diffstat (limited to 'src/java_tools/junitrunner/java/com/google/testing')
-rw-r--r-- | src/java_tools/junitrunner/java/com/google/testing/junit/runner/BUILD | 1 | ||||
-rw-r--r-- | src/java_tools/junitrunner/java/com/google/testing/junit/runner/BazelTestRunner.java | 123 |
2 files changed, 10 insertions, 114 deletions
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/BUILD b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/BUILD index 71a715a85a..1699cb882b 100644 --- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/BUILD +++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/BUILD @@ -17,7 +17,6 @@ java_library( "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/model", "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/sharding", "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/util", - "//src/main/protobuf:worker_protocol_java_proto", "//third_party:junit4", ], ) diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/BazelTestRunner.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/BazelTestRunner.java index 3f4c966d94..74a6826f88 100644 --- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/BazelTestRunner.java +++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/BazelTestRunner.java @@ -14,20 +14,13 @@ package com.google.testing.junit.runner; -import com.google.devtools.build.lib.worker.WorkerProtocol.WorkRequest; -import com.google.devtools.build.lib.worker.WorkerProtocol.WorkResponse; import com.google.testing.junit.runner.internal.StackTraces; import com.google.testing.junit.runner.junit4.JUnit4InstanceModules.Config; import com.google.testing.junit.runner.junit4.JUnit4InstanceModules.SuiteClass; import com.google.testing.junit.runner.junit4.JUnit4Runner; import com.google.testing.junit.runner.model.AntXmlResultWriter; import com.google.testing.junit.runner.model.XmlResultWriter; -import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.io.PrintStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; @@ -55,9 +48,6 @@ public class BazelTestRunner { */ static final String TEST_SUITE_PROPERTY_NAME = "bazel.test_suite"; - private static URL[] classpaths = null; - private static URLClassLoader targetClassLoader; - private BazelTestRunner() { // utility class; should not be instantiated } @@ -82,8 +72,9 @@ public class BazelTestRunner { String suiteClassName = System.getProperty(TEST_SUITE_PROPERTY_NAME); - if ("true".equals(System.getenv("PERSISTENT_TEST_RUNNER"))) { - System.exit(runPersistentTestRunner(suiteClassName)); + if (args.length >= 1 && args[args.length - 1].equals("--persistent_test_runner")) { + System.err.println("Requested test strategy is currently unsupported."); + System.exit(1); } if (!checkTestSuiteProperty(suiteClassName)) { @@ -135,7 +126,7 @@ public class BazelTestRunner { } private static int runTestsInSuite(String suiteClassName, String[] args) { - Class<?> suite = getTargetSuiteClass(suiteClassName); + Class<?> suite = getTestClass(suiteClassName); if (suite == null) { // No class found corresponding to the system property passed in from Bazel @@ -145,123 +136,29 @@ public class BazelTestRunner { } } + // TODO(kush): Use a new classloader for the following instantiation. JUnit4Runner runner = JUnit4Bazel.builder() .suiteClass(new SuiteClass(suite)) .config(new Config(args)) .build() .runner(); - - // Some frameworks such as Mockito use the Thread's context classloader. - Thread.currentThread().setContextClassLoader(targetClassLoader); - - int result = 1; - try { - result = runner.run().wasSuccessful() ? 0 : 1; - } catch (RuntimeException e) { - System.err.println("Test run failed with exception"); - e.printStackTrace(); - } - return result; + return runner.run().wasSuccessful() ? 0 : 1; } - /** - * Run in a loop awaiting instructions for the next test run. - * - * @param suiteClassName name of the class which is passed on to JUnit to determine the test suite - * @return 0 when we encounter an EOF from input, or non-zero values if we encounter an - * unrecoverable error. - */ - private static int runPersistentTestRunner(String suiteClassName) { - PrintStream originalStdOut = System.out; - PrintStream originalStdErr = System.err; - - while (true) { - try { - WorkRequest request = WorkRequest.parseDelimitedFrom(System.in); - - if (request == null) { - break; - } - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - PrintStream printStream = new PrintStream(outputStream, true); - System.setOut(printStream); - System.setErr(printStream); - String[] arguments = request.getArgumentsList().toArray(new String[0]); - int exitCode = -1; - try { - exitCode = runTestsInSuite(suiteClassName, arguments); - } finally { - System.setOut(originalStdOut); - System.setErr(originalStdErr); - } - - WorkResponse response = - WorkResponse - .newBuilder() - .setOutput(outputStream.toString()) - .setExitCode(exitCode) - .build(); - response.writeDelimitedTo(System.out); - System.out.flush(); - - } catch (IOException e) { - e.printStackTrace(); - return 1; - } - } - return 0; - } - - /** - * Get the actual Test Suite class corresponding to the given name. - */ - private static Class<?> getTargetSuiteClass(String suiteClassName) { - if (suiteClassName == null) { + private static Class<?> getTestClass(String name) { + if (name == null) { return null; } try { - targetClassLoader = new URLClassLoader(getClasspaths()); - Class<?> targetSuiteClass = targetClassLoader.loadClass(suiteClassName); - System.out.printf( - "Running test suites for class: %s, created by classLoader: %s%n", - targetSuiteClass, targetSuiteClass.getClassLoader()); - return targetSuiteClass; - } catch (ClassNotFoundException | MalformedURLException e) { - System.err.println("Exception in loading class:" + e.getMessage()); + return Class.forName(name); + } catch (ClassNotFoundException e) { return null; } } /** - * Used to get the classpaths which should be used to load the classes of the test target. - * - * @throws MalformedURLException when we are unable to create a given classpath. - * @return array of URLs containing the classpaths or null if classpaths could not be located. - */ - private static URL[] getClasspaths() throws MalformedURLException { - // TODO(kush): WARNING THIS DOES NOT RELOAD CLASSPATHS FOR EVERY TEST RUN. b/34712039 - if (classpaths != null) { - return classpaths; - } - String testTargetsClaspaths = System.getenv("TEST_TARGET_CLASSPATH"); - if (testTargetsClaspaths == null || testTargetsClaspaths.isEmpty()) { - throw new IllegalStateException( - "Target's classpath not present in TEST_TARGET_CLASSPATH environment variable"); - } - - String[] targetClassPaths = testTargetsClaspaths.split(":"); - - classpaths = new URL[targetClassPaths.length]; - String workingDir = System.getProperty("user.dir"); - for (int index = 0; index < targetClassPaths.length; index++) { - classpaths[index] = new URL("file://" + workingDir + "/" + targetClassPaths[index]); - } - return classpaths; - } - - /** * Prints out stack traces if the JVM does not exit quickly. This can help detect shutdown hooks * that are preventing the JVM from exiting quickly. * |