Commit ff433dd4 authored by Andrew Grieve's avatar Andrew Grieve Committed by Commit Bot

Fix Android instrumentation tests not reporting exceptions when test listing fails

Before:
E  153.473s Main  Unrecognized error occurred.
Traceback (most recent call last):
  File "bin/../../../build/android/test_runner.py", line 952, in main
    return RunTestsCommand(args)
...
  File "/usr/local/google/code/clankium1/src/build/android/pylib/instrumentation/instrumentation_test_instance.py", line 262, in FilterTests
    raise MissingSizeAnnotationError(GetTestName(t))
MissingSizeAnnotationError: org.chromium.net.smoke.MissingNativeLibraryTest#initializationError: Test method is missing required size annotation. Add one of: @LargeTest, @Manual, @FlakyTest, @DisabledTest, @MediumTest, @SmallTest, @IntegrationTest, @EnormousTest

E    4.321s list_tests(86TX00E9L)  Unexpected output while listing tests:
E    4.322s list_tests(86TX00E9L)    Fatal exception when running tests
E    4.322s list_tests(86TX00E9L)    java.lang.RuntimeException: Failed on initializationError(org.chromium.net.smoke.MissingNativeLibraryTest)
E    4.322s list_tests(86TX00E9L)       at org.chromium.base.test.BaseChromiumAndroidJUnitRunner.listTests(BaseChromiumAndroidJUnitRunner.java:208)
E    4.322s list_tests(86TX00E9L)       at org.chromium.base.test.BaseChromiumAndroidJUnitRunner.onStart(BaseChromiumAndroidJUnitRunner.java:150)
E    4.322s list_tests(86TX00E9L)       at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2189)
E    4.322s list_tests(86TX00E9L)    Caused by: java.lang.Exception: Custom runner class AndroidJUnit4ClassRunner should have a public constructor with signature AndroidJUnit4ClassRunner(Class testClass)
E    4.322s list_tests(86TX00E9L)       at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:111)
...

After: 
Change-Id: Ib6b304fbf675c205ca2d0e23bace17b81f2e18a9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1691081Reviewed-by: default avatarJohn Budorick <jbudorick@chromium.org>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#676055}
parent 31b2111c
......@@ -9,10 +9,10 @@ import android.support.test.internal.runner.listener.InstrumentationRunListener;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.runner.Description;
import org.junit.runner.notification.Failure;
import org.chromium.base.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
......@@ -38,6 +38,14 @@ public class TestListInstrumentationRunListener extends InstrumentationRunListen
Arrays.asList(new String[] {"toString", "hashCode", "annotationType", "equals"}));
private final Map<Class<?>, JSONObject> mTestClassJsonMap = new HashMap<>();
private Failure mFirstFailure;
@Override
public void testFailure(Failure failure) {
if (mFirstFailure == null) {
mFirstFailure = failure;
}
}
/**
* Store the test method description to a Map at the beginning of a test run.
......@@ -62,23 +70,17 @@ public class TestListInstrumentationRunListener extends InstrumentationRunListen
* Create a JSONArray with all the test class JSONObjects and save it to listed output path.
*/
public void saveTestsToJson(String outputPath) throws IOException {
Writer writer = null;
File file = new File(outputPath);
try {
writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
if (mFirstFailure != null) {
throw new RuntimeException(
"Failed on " + mFirstFailure.getDescription(), mFirstFailure.getException());
}
try (Writer writer = new OutputStreamWriter(new FileOutputStream(outputPath), "UTF-8")) {
JSONArray allTestClassesJSON = new JSONArray(mTestClassJsonMap.values());
writer.write(allTestClassesJSON.toString());
} catch (IOException e) {
Log.e(TAG, "failed to write json to file", e);
throw e;
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
// Intentionally ignore IOException when closing writer
}
}
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment