Index: components/minidump_uploader/android/javatests/src/org/chromium/components/minidump_uploader/MinidumpUploadTestUtility.java |
diff --git a/components/minidump_uploader/android/javatests/src/org/chromium/components/minidump_uploader/MinidumpUploadTestUtility.java b/components/minidump_uploader/android/javatests/src/org/chromium/components/minidump_uploader/MinidumpUploadTestUtility.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4e44806bc719e591d7bce277e0c24308589d5193 |
--- /dev/null |
+++ b/components/minidump_uploader/android/javatests/src/org/chromium/components/minidump_uploader/MinidumpUploadTestUtility.java |
@@ -0,0 +1,87 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.components.minidump_uploader; |
+ |
+import static org.junit.Assert.assertEquals; |
+import static org.junit.Assert.assertTrue; |
+ |
+import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; |
+ |
+import org.chromium.base.ThreadUtils; |
+ |
+import java.util.concurrent.CountDownLatch; |
+import java.util.concurrent.TimeUnit; |
+ |
+/** |
+ * Utility class for testing the minidump-uploading mechanism. |
+ */ |
+public class MinidumpUploadTestUtility { |
+ private static final long TIME_OUT_MILLIS = 3000; |
+ |
+ /** |
+ * Utility method for running {@param minidumpUploader}.uploadAllMinidumps on the UI thread to |
+ * avoid breaking any assertions about running on the UI thread. |
+ */ |
+ public static void uploadAllMinidumpsOnUiThread(final MinidumpUploader minidumpUploader, |
+ final MinidumpUploader.UploadsFinishedCallback uploadsFinishedCallback) { |
+ uploadAllMinidumpsOnUiThread( |
+ minidumpUploader, uploadsFinishedCallback, false /* blockUntilJobPosted */); |
+ } |
+ |
+ /** |
+ * Utility method for running {@param minidumpUploader}.uploadAllMinidumps on the UI thread to |
+ * avoid breaking any assertions about running on the UI thread. |
+ * @param blockUntilJobPosted whether to block the current thread until the minidump-uploading |
+ * job has been posted to the UI thread. This can be used to avoid |
+ * some race-conditions (e.g. when waiting for variables that are |
+ * initialized in the uploadAllMinidumps call). |
+ */ |
+ public static void uploadAllMinidumpsOnUiThread(final MinidumpUploader minidumpUploader, |
+ final MinidumpUploader.UploadsFinishedCallback uploadsFinishedCallback, |
+ boolean blockUntilJobPosted) { |
+ final CountDownLatch jobPostedLatch = new CountDownLatch(1); |
+ ThreadUtils.runOnUiThread(new Runnable() { |
+ @Override |
+ public void run() { |
+ minidumpUploader.uploadAllMinidumps(uploadsFinishedCallback); |
+ jobPostedLatch.countDown(); |
+ } |
+ }); |
+ if (blockUntilJobPosted) { |
+ try { |
+ assertTrue( |
+ jobPostedLatch.await(scaleTimeout(TIME_OUT_MILLIS), TimeUnit.MILLISECONDS)); |
+ } catch (InterruptedException e) { |
+ throw new RuntimeException(e); |
+ } |
+ } |
+ } |
+ |
+ /** |
+ * Utility method for uploading minidumps, and waiting for the uploads to finish. |
+ * @param minidumpUploader the implementation to use to upload minidumps. |
+ * @param expectReschedule value used to assert whether the uploads should be rescheduled, |
+ * e.g. when uploading succeeds we should normally not expect to |
+ * reschedule. |
+ */ |
+ public static void uploadMinidumpsSync( |
+ MinidumpUploader minidumpUploader, final boolean expectReschedule) { |
+ final CountDownLatch uploadsFinishedLatch = new CountDownLatch(1); |
+ uploadAllMinidumpsOnUiThread( |
+ minidumpUploader, new MinidumpUploader.UploadsFinishedCallback() { |
+ @Override |
+ public void uploadsFinished(boolean reschedule) { |
+ assertEquals(expectReschedule, reschedule); |
+ uploadsFinishedLatch.countDown(); |
+ } |
+ }); |
+ try { |
+ assertTrue(uploadsFinishedLatch.await( |
+ scaleTimeout(TIME_OUT_MILLIS), TimeUnit.MILLISECONDS)); |
+ } catch (InterruptedException e) { |
+ throw new RuntimeException(e); |
+ } |
+ } |
+} |