summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Marie Henaff <jmhenaff@google.com>2014-12-09 11:22:33 +0100
committerJean-Marie Henaff <jmhenaff@google.com>2014-12-18 10:01:06 +0100
commit8d7f773412f2e7b32edf5a3e4436a82123692be5 (patch)
treed6399218494afa2be1f889545512e5211a03e7c5
parent1efb68145bbf5be96583693d958590ecdcdf98d8 (diff)
downloadtoolchain_jack-8d7f773412f2e7b32edf5a3e4436a82123692be5.zip
toolchain_jack-8d7f773412f2e7b32edf5a3e4436a82123692be5.tar.gz
toolchain_jack-8d7f773412f2e7b32edf5a3e4436a82123692be5.tar.bz2
Split test command line on device runner
Command line size on device is limited, and RegressionTests requires a lot of test case to be listed. Change-Id: I7ec8a363c434761bd3ea33784723730ac4ce9055
-rw-r--r--jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java3
-rw-r--r--jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java9
-rw-r--r--jack-tests/src/com/android/jack/test/runner/AbstractRuntimeRunner.java4
-rw-r--r--jack-tests/src/com/android/jack/test/runner/ArtRunnerDevice.java7
-rw-r--r--jack-tests/src/com/android/jack/test/runner/ArtRunnerHost.java16
-rw-r--r--jack-tests/src/com/android/jack/test/runner/DalvikRunnerDevice.java8
-rw-r--r--jack-tests/src/com/android/jack/test/runner/DalvikRunnerHost.java16
-rw-r--r--jack-tests/src/com/android/jack/test/runner/DeviceRunner.java122
-rw-r--r--jack-tests/src/com/android/jack/test/runner/RuntimeRunner.java5
9 files changed, 118 insertions, 72 deletions
diff --git a/jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java b/jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java
index 4278414..89ccffb 100644
--- a/jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java
+++ b/jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java
@@ -193,7 +193,8 @@ public class IncrementalTestHelper {
(DalvikRunnerHost) RuntimeRunnerFactory.create("dalvik-fast-host");
ByteArrayOutputStream out = new ByteArrayOutputStream();
runner.setOutputStream(out);
- Assert.assertEquals(0, runner.run(new String [0], new String[] {mainClass}, dexFile));
+ Assert.assertEquals(0, runner.runJUnit(new String[0], AbstractTestTools.JUNIT_RUNNER_NAME,
+ new String[] {mainClass}, dexFile));
return out.toString();
}
diff --git a/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java b/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java
index 2091292..6bef3c2 100644
--- a/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java
+++ b/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java
@@ -285,12 +285,11 @@ public class RuntimeTestHelper {
private static void runOnRuntimeEnvironments(@Nonnull List<String> jUnitClasses,
@Nonnull Properties testProperties, @Nonnull File... classpathFiles) throws Exception {
List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(testProperties);
- String[] names = Lists.add(jUnitClasses, 0, AbstractTestTools.JUNIT_RUNNER_NAME).toArray(
- new String[jUnitClasses.size()]);
+ String[] names = jUnitClasses.toArray(new String[jUnitClasses.size()]);
for (RuntimeRunner runner : runnerList) {
- Assert.assertEquals(0, runner.run(
- getRuntimeArgs(runner.getClass().getSimpleName(), testProperties), names,
- classpathFiles));
+ Assert.assertEquals(0, runner.runJUnit(
+ getRuntimeArgs(runner.getClass().getSimpleName(), testProperties),
+ AbstractTestTools.JUNIT_RUNNER_NAME, names, classpathFiles));
}
}
diff --git a/jack-tests/src/com/android/jack/test/runner/AbstractRuntimeRunner.java b/jack-tests/src/com/android/jack/test/runner/AbstractRuntimeRunner.java
index 4530dbf..2ec3d48 100644
--- a/jack-tests/src/com/android/jack/test/runner/AbstractRuntimeRunner.java
+++ b/jack-tests/src/com/android/jack/test/runner/AbstractRuntimeRunner.java
@@ -37,10 +37,6 @@ public abstract class AbstractRuntimeRunner extends RuntimeRunner {
super(rtEnvRootDir);
}
- @Override
- public abstract int run(@Nonnull String[] options, @Nonnull String[] mainClasses,
- @Nonnull File... classpathFiles) throws RuntimeRunnerException;
-
@Nonnull
public final AbstractRuntimeRunner setOutputStream(@Nonnull OutputStream outputStream) {
outRedirectStream = outputStream;
diff --git a/jack-tests/src/com/android/jack/test/runner/ArtRunnerDevice.java b/jack-tests/src/com/android/jack/test/runner/ArtRunnerDevice.java
index e93e20b..1e5c3f4 100644
--- a/jack-tests/src/com/android/jack/test/runner/ArtRunnerDevice.java
+++ b/jack-tests/src/com/android/jack/test/runner/ArtRunnerDevice.java
@@ -28,9 +28,10 @@ import javax.annotation.Nonnull;
public class ArtRunnerDevice extends DeviceRunner {
@Override
- public int run(@Nonnull String[] options, @Nonnull String[] mainClasses,
- @Nonnull File... classpathFiles) throws RuntimeRunnerException {
- return runOnDevice(options, mainClasses, classpathFiles);
+ public int runJUnit(@Nonnull String[] options, @Nonnull String jUnitRunnerName,
+ @Nonnull String[] jUnitTestClasses, @Nonnull File... classpathFiles)
+ throws RuntimeRunnerException {
+ return runJunitOnDevice(options, jUnitRunnerName, jUnitTestClasses, classpathFiles);
}
@Override
diff --git a/jack-tests/src/com/android/jack/test/runner/ArtRunnerHost.java b/jack-tests/src/com/android/jack/test/runner/ArtRunnerHost.java
index c9a46fb..6c6cc87 100644
--- a/jack-tests/src/com/android/jack/test/runner/ArtRunnerHost.java
+++ b/jack-tests/src/com/android/jack/test/runner/ArtRunnerHost.java
@@ -32,14 +32,16 @@ public class ArtRunnerHost extends HostRunner {
}
@Override
- public int run(@Nonnull String[] options, @Nonnull String[] mainClasses,
- @Nonnull File... classpathFiles) throws RuntimeRunnerException {
- return runOnHost(buildCommandLine(options, mainClasses, classpathFiles), "ANDROID_HOST_OUT");
+ public int runJUnit(@Nonnull String[] options, @Nonnull String jUnitRunnerName,
+ @Nonnull String[] jUnitTestClasses, @Nonnull File... classpathFiles)
+ throws RuntimeRunnerException {
+ return runOnHost(buildCommandLine(options, jUnitRunnerName, jUnitTestClasses, classpathFiles),
+ "ANDROID_HOST_OUT");
}
@Nonnull
- private List<String> buildCommandLine(@Nonnull String[] options, @Nonnull String[] mainClasses,
- @Nonnull File... classpathFiles) {
+ private List<String> buildCommandLine(@Nonnull String[] options, @Nonnull String jUnitRunnerName,
+ @Nonnull String[] jUnitTestClasses, @Nonnull File... classpathFiles) {
List<String> args = new ArrayList<String>();
args.add(rtEnvironmentRootDir.getAbsolutePath() + "/bin/art");
@@ -58,7 +60,9 @@ public class ArtRunnerHost extends HostRunner {
}
args.add(sb.toString());
- for (String className : mainClasses) {
+ args.add(jUnitRunnerName);
+
+ for (String className : jUnitTestClasses) {
args.add(className);
}
return args;
diff --git a/jack-tests/src/com/android/jack/test/runner/DalvikRunnerDevice.java b/jack-tests/src/com/android/jack/test/runner/DalvikRunnerDevice.java
index c849189..4bd93ff 100644
--- a/jack-tests/src/com/android/jack/test/runner/DalvikRunnerDevice.java
+++ b/jack-tests/src/com/android/jack/test/runner/DalvikRunnerDevice.java
@@ -31,9 +31,11 @@ public class DalvikRunnerDevice extends DeviceRunner implements DalvikRunner {
private DalvikMode mode = DalvikMode.FAST;
@Override
- public int run(@Nonnull String[] options, @Nonnull String[] mainClasses,
- @Nonnull File... classpathFiles) throws RuntimeRunnerException {
- return runOnDevice(options, mainClasses, classpathFiles);
+ public int runJUnit(@Nonnull String[] options, @Nonnull String jUnitRunnerName,
+ @Nonnull String[] jUnitTestClasses, @Nonnull File... classpathFiles)
+ throws RuntimeRunnerException {
+ return runJunitOnDevice(options, jUnitRunnerName, jUnitTestClasses,
+ classpathFiles);
}
@Override
diff --git a/jack-tests/src/com/android/jack/test/runner/DalvikRunnerHost.java b/jack-tests/src/com/android/jack/test/runner/DalvikRunnerHost.java
index 7ada39c..1ebd284 100644
--- a/jack-tests/src/com/android/jack/test/runner/DalvikRunnerHost.java
+++ b/jack-tests/src/com/android/jack/test/runner/DalvikRunnerHost.java
@@ -35,14 +35,16 @@ public class DalvikRunnerHost extends HostRunner implements DalvikRunner {
}
@Override
- public int run(@Nonnull String[] options, @Nonnull String[] mainClasses,
- @Nonnull File... classpathFiles) throws RuntimeRunnerException {
- return runOnHost(buildCommandLine(options, mainClasses, classpathFiles), "ANDROID_ROOT");
+ public int runJUnit(@Nonnull String[] options, @Nonnull String jUnitRunnerName,
+ @Nonnull String[] jUnitTestClasses, @Nonnull File... classpathFiles)
+ throws RuntimeRunnerException {
+ return runOnHost(buildCommandLine(options, jUnitRunnerName, jUnitTestClasses, classpathFiles),
+ "ANDROID_ROOT");
}
@Nonnull
- private List<String> buildCommandLine(@Nonnull String[] options, @Nonnull String[] mainClasses,
- @Nonnull File... classpathFiles) {
+ private List<String> buildCommandLine(@Nonnull String[] options, @Nonnull String jUnitRunnerName,
+ @Nonnull String[] jUnitTestClasses, @Nonnull File... classpathFiles) {
List<String> args = new ArrayList<String>();
args.add(rtEnvironmentRootDir.getAbsolutePath() + "/bin/dalvik");
@@ -63,7 +65,9 @@ public class DalvikRunnerHost extends HostRunner implements DalvikRunner {
}
args.add(sb.toString());
- for (String className : mainClasses) {
+ args.add(jUnitRunnerName);
+
+ for (String className : jUnitTestClasses) {
args.add(className);
}
return args;
diff --git a/jack-tests/src/com/android/jack/test/runner/DeviceRunner.java b/jack-tests/src/com/android/jack/test/runner/DeviceRunner.java
index 3f20db5..43dfd59 100644
--- a/jack-tests/src/com/android/jack/test/runner/DeviceRunner.java
+++ b/jack-tests/src/com/android/jack/test/runner/DeviceRunner.java
@@ -35,9 +35,11 @@ import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
/**
@@ -50,17 +52,22 @@ public abstract class DeviceRunner extends AbstractRuntimeRunner {
@Nonnull
public static final File ANDROID_DATA_DIR = new File("/data");
- @Nonnull
+ @Nonnegative
private static final long ADB_CONNECTION_TIMEOUT = 5000;
- @Nonnull
+ @Nonnegative
private static final long ADB_WAIT_STEP = ADB_CONNECTION_TIMEOUT / 10;
+ @Nonnegative
+ private static final int MAX_NB_CLASSES = 10;
+
@Nonnull
private static final String TEST_SCRIPT_NAME = "test-exit-status.sh";
@Nonnull
private static final File TEST_SCRIPT_FILE =
new File(AbstractTestTools.getJackRootDir(), "etc/" + TEST_SCRIPT_NAME);
+
+
@Nonnull
private PrintStream out = new PrintStream(outRedirectStream);
@Nonnull
@@ -120,8 +127,8 @@ public abstract class DeviceRunner extends AbstractRuntimeRunner {
}
}
- protected int runOnDevice(@Nonnull String[] options, @Nonnull String[] mainClasses,
- @Nonnull File... classpathFiles)
+ protected int runJunitOnDevice(@Nonnull String[] options, @Nonnull String jUnitRunnerName,
+ @Nonnull String[] jUnitTestClasses, @Nonnull File... classpathFiles)
throws RuntimeRunnerException {
// Assumes adb is in PATH
@@ -216,7 +223,26 @@ public abstract class DeviceRunner extends AbstractRuntimeRunner {
throw new RuntimeRunnerException(e);
}
- String args = Joiner.on(' ').join(buildCommandLine(options, mainClasses, desFilePaths));
+ // Split command line to have at most MAX_NB_CLASSES jUnit classes per invocation
+ List<List<String>> splittedMainClasses = new ArrayList<List<String>>();
+ int currentChunk = 0;
+ for (String mainClass : jUnitTestClasses) {
+ if (splittedMainClasses.size() == currentChunk) {
+ splittedMainClasses.add(new ArrayList<String>(MAX_NB_CLASSES));
+ splittedMainClasses.get(currentChunk).add(jUnitRunnerName);
+ }
+
+ splittedMainClasses.get(currentChunk).add(mainClass);
+
+ if (splittedMainClasses.get(currentChunk).size() == MAX_NB_CLASSES) {
+ currentChunk++;
+ }
+ }
+ List<String> cmdLines = new ArrayList<String>(splittedMainClasses.size());
+ for (List<String> classList : splittedMainClasses) {
+ cmdLines.add(Joiner.on(' ').join(buildCommandLine(options,
+ classList.toArray(new String[classList.size()]), desFilePaths)));
+ }
try {
// Bug : exit code return by adb shell is wrong (always 0)
@@ -224,50 +250,44 @@ public abstract class DeviceRunner extends AbstractRuntimeRunner {
// Use go team hack to work this around
// https://code.google.com/p/go/source/browse/misc/arm/a
- if (isVerbose) {
- out.println("adb -s " + device.getSerialNumber() + " shell "
- + testsRootDir.getAbsolutePath() + '/' + TEST_SCRIPT_NAME + ' ' + args);
- }
- device.executeShellCommand(
- testsRootDir.getAbsolutePath() + '/' + TEST_SCRIPT_NAME + ' ' + args,
- shellOutput);
-
- File exitStatusFile = AbstractTestTools.createTempFile("exitStatus", "");
- if (isVerbose) {
- out.println("adb -s " + device.getSerialNumber() + " pull "
- + testsRootDir.getAbsolutePath() + "/exitStatus " + exitStatusFile.getAbsolutePath());
- }
- device.pullFile(testsRootDir.getAbsolutePath() + "/exitStatus",
- exitStatusFile.getAbsolutePath());
-
- BufferedReader br = new BufferedReader(new FileReader(exitStatusFile));
- try {
- String readLine = br.readLine();
- if (readLine == null) {
- throw new RuntimeRunnerException("Exit status not found");
+ for (String args : cmdLines) {
+ if (isVerbose) {
+ out.println("adb -s " + device.getSerialNumber() + " shell "
+ + testsRootDir.getAbsolutePath() + '/' + TEST_SCRIPT_NAME + ' ' + args);
}
- exitStatus = Integer.parseInt(readLine);
- } finally {
- br.close();
- }
+ device.executeShellCommand(
+ testsRootDir.getAbsolutePath() + '/' + TEST_SCRIPT_NAME + ' ' + args,
+ shellOutput);
- if (isVerbose) {
- out.println("Exit status: " + exitStatus);
- }
+ File exitStatusFile = AbstractTestTools.createTempFile("exitStatus", "");
+ if (isVerbose) {
+ out.println("adb -s " + device.getSerialNumber() + " pull "
+ + testsRootDir.getAbsolutePath() + "/exitStatus "
+ + exitStatusFile.getAbsolutePath());
+ }
+ device.pullFile(testsRootDir.getAbsolutePath() + "/exitStatus",
+ exitStatusFile.getAbsolutePath());
+
+ BufferedReader br = new BufferedReader(new FileReader(exitStatusFile));
+ try {
+ String readLine = br.readLine();
+ if (readLine == null) {
+ throw new RuntimeRunnerException("Exit status not found");
+ }
+ exitStatus = Integer.parseInt(readLine);
+ } finally {
+ br.close();
+ }
- for (File pushedFile : desFilePaths) {
if (isVerbose) {
- out.println(
- "adb -s " + device.getSerialNumber() + "rm " + pushedFile.getAbsolutePath());
+ out.println("Exit status: " + exitStatus);
}
- device.executeShellCommand("rm " + pushedFile.getAbsolutePath(), shellOutput);
- }
- if (exitStatus != 0) {
- err.println("Execution failed on device '" + device.getName() + "'");
- break;
+ if (exitStatus != 0) {
+ err.println("Execution failed on device '" + device.getName() + "'");
+ break;
+ }
}
-
} catch (TimeoutException e) {
throw new RuntimeRunnerException(e);
} catch (AdbCommandRejectedException e) {
@@ -278,6 +298,24 @@ public abstract class DeviceRunner extends AbstractRuntimeRunner {
throw new RuntimeRunnerException(e);
} catch (SyncException e) {
throw new RuntimeRunnerException(e);
+ } finally {
+ try {
+ for (File pushedFile : desFilePaths) {
+ if (isVerbose) {
+ out.println(
+ "adb -s " + device.getSerialNumber() + " rm " + pushedFile.getAbsolutePath());
+ }
+ device.executeShellCommand("rm " + pushedFile.getAbsolutePath(), shellOutput);
+ }
+ } catch (IOException e) {
+ throw new RuntimeRunnerException(e);
+ } catch (TimeoutException e) {
+ throw new RuntimeRunnerException(e);
+ } catch (AdbCommandRejectedException e) {
+ throw new RuntimeRunnerException(e);
+ } catch (ShellCommandUnresponsiveException e) {
+ throw new RuntimeRunnerException(e);
+ }
}
}
diff --git a/jack-tests/src/com/android/jack/test/runner/RuntimeRunner.java b/jack-tests/src/com/android/jack/test/runner/RuntimeRunner.java
index 9d8ee5f..4270f92 100644
--- a/jack-tests/src/com/android/jack/test/runner/RuntimeRunner.java
+++ b/jack-tests/src/com/android/jack/test/runner/RuntimeRunner.java
@@ -34,8 +34,9 @@ public abstract class RuntimeRunner {
this.rtEnvironmentRootDir = rtEnvironmentRootDir;
}
- public abstract int run(@Nonnull String[] options, @Nonnull String[] className,
- @Nonnull File... classpathFiles) throws RuntimeRunnerException;
+ public abstract int runJUnit(@Nonnull String[] options, @Nonnull String jUnitRunnerName,
+ @Nonnull String[] jUnitTestClasses, @Nonnull File... classpathFiles)
+ throws RuntimeRunnerException;
@Nonnull
public RuntimeRunner setVerbose(boolean isVerbose) {