| 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
|
|
|