Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1794)

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/crash/MinidumpUploaderTest.java

Issue 2838383002: Move Minidump Uploading IO operations off the UI thread. (Closed)
Patch Set: Don't fail test if uploadFinished called - we don't guarantee ng. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/javatests/src/org/chromium/android_webview/test/crash/MinidumpUploaderTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/crash/MinidumpUploaderTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/crash/MinidumpUploaderTest.java
index af3c11530082d70651f99e2af974954338da5b78..9afa69e7a540c44e713bae9f11295136272c0f97 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/crash/MinidumpUploaderTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/crash/MinidumpUploaderTest.java
@@ -140,20 +140,9 @@ public class MinidumpUploaderTest extends CrashTestCase {
}
});
- File firstFile = createMinidumpFileInCrashDir("1_abc.dmp0");
- File secondFile = createMinidumpFileInCrashDir("12_abcd.dmp0");
- File expectedFirstUploadFile =
- new File(mCrashDir, firstFile.getName().replace(".dmp", ".up"));
- File expectedSecondUploadFile =
- new File(mCrashDir, secondFile.getName().replace(".dmp", ".up"));
-
+ // Ensure that we don't crash when trying to upload minidumps without a crash directory.
MinidumpUploadTestUtility.uploadMinidumpsSync(
minidumpUploader, false /* expectReschedule */);
-
- assertFalse(firstFile.exists());
- assertTrue(expectedFirstUploadFile.exists());
- assertFalse(secondFile.exists());
- assertTrue(expectedSecondUploadFile.exists());
}
private interface MinidumpUploadCallableCreator {
@@ -258,6 +247,31 @@ public class MinidumpUploaderTest extends CrashTestCase {
}
}
+ /**
+ * Minidump uploader implementation that stalls minidump-uploading until a given CountDownLatch
+ * counts down.
+ */
+ private static class StallingMinidumpUploaderImpl extends TestMinidumpUploaderImpl {
+ CountDownLatch mStopStallingLatch;
+ boolean mSuccessfulUpload;
+
+ public StallingMinidumpUploaderImpl(File cacheDir,
+ CrashReportingPermissionManager permissionManager, CountDownLatch stopStallingLatch,
+ boolean successfulUpload) {
+ super(cacheDir, permissionManager);
+ mStopStallingLatch = stopStallingLatch;
+ mSuccessfulUpload = successfulUpload;
+ }
+
+ @Override
+ public MinidumpUploadCallable createMinidumpUploadCallable(
+ File minidumpFile, File logfile) {
+ return new MinidumpUploadCallable(minidumpFile, logfile,
+ new StallingHttpUrlConnectionFactory(mStopStallingLatch, mSuccessfulUpload),
+ mDelegate.createCrashReportingPermissionManager());
+ }
+ }
+
private static class FailingHttpUrlConnectionFactory implements HttpURLConnectionFactory {
public HttpURLConnection createHttpURLConnection(String url) {
return null;
@@ -286,16 +300,8 @@ public class MinidumpUploaderTest extends CrashTestCase {
{ mIsEnabledForTests = true; }
};
final CountDownLatch stopStallingLatch = new CountDownLatch(1);
- MinidumpUploaderImpl minidumpUploader = new TestMinidumpUploaderImpl(
- getExistingCacheDir(), permManager) {
- @Override
- public MinidumpUploadCallable createMinidumpUploadCallable(
- File minidumpFile, File logfile) {
- return new MinidumpUploadCallable(minidumpFile, logfile,
- new StallingHttpUrlConnectionFactory(stopStallingLatch, successfulUpload),
- permManager);
- }
- };
+ MinidumpUploaderImpl minidumpUploader = new StallingMinidumpUploaderImpl(
+ getExistingCacheDir(), permManager, stopStallingLatch, successfulUpload);
File firstFile = createMinidumpFileInCrashDir("123_abc.dmp0");
File expectedFirstUploadFile =
@@ -340,6 +346,40 @@ public class MinidumpUploaderTest extends CrashTestCase {
}
/**
+ * Ensure that canceling an upload that fails causes a reschedule.
+ */
+ @MediumTest
+ public void testCancelFailedUploadCausesReschedule() throws IOException {
+ final CrashReportingPermissionManager permManager =
+ new MockCrashReportingPermissionManager() {
+ { mIsEnabledForTests = true; }
+ };
+ final CountDownLatch stopStallingLatch = new CountDownLatch(1);
+ MinidumpUploaderImpl minidumpUploader =
+ new StallingMinidumpUploaderImpl(getExistingCacheDir(), permManager,
+ stopStallingLatch, false /* successfulUpload */);
+
+ createMinidumpFileInCrashDir("123_abc.dmp0");
+
+ MinidumpUploader.UploadsFinishedCallback crashingCallback =
+ new MinidumpUploader.UploadsFinishedCallback() {
+ @Override
+ public void uploadsFinished(boolean reschedule) {
+ // We don't guarantee whether uploadsFinished is called after a job has been
+ // cancelled, but if it is, it should indicate that we want to reschedule
+ // the job.
+ assertTrue(reschedule);
+ }
+ };
+
+ // This is run on the UI thread to avoid failing any assertOnUiThread assertions.
+ MinidumpUploadTestUtility.uploadAllMinidumpsOnUiThread(minidumpUploader, crashingCallback);
+ // Ensure we tell JobScheduler to reschedule the job.
+ assertTrue(minidumpUploader.cancelUploads());
+ stopStallingLatch.countDown();
+ }
+
+ /**
* Ensures that the minidump copying works together with the minidump uploading.
*/
@MediumTest

Powered by Google App Engine
This is Rietveld 408576698