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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/download/OMADownloadHandlerTest.java

Issue 2851023003: Moved OMA downloads out of DownloadManagerService (Closed)
Patch Set: Fix test Created 3 years, 7 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
« no previous file with comments | « chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadManagerServiceTest.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/javatests/src/org/chromium/chrome/browser/download/OMADownloadHandlerTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/OMADownloadHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/OMADownloadHandlerTest.java
index 8a4a1e73c5412280b954d52dcad099a73a1021eb..fbf7536659211c017e20baad585754810fc5cfba 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/OMADownloadHandlerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/OMADownloadHandlerTest.java
@@ -4,29 +4,140 @@
package org.chromium.chrome.browser.download;
+import android.app.DownloadManager;
+import android.content.Context;
+import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
import android.test.MoreAsserts;
import org.junit.Assert;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.chromium.base.ContextUtils;
+import org.chromium.base.test.util.AdvancedMockContext;
import org.chromium.base.test.util.Feature;
+import org.chromium.base.test.util.RetryOnFailure;
+import org.chromium.base.test.util.UrlUtils;
+import org.chromium.chrome.browser.download.DownloadManagerDelegate.DownloadQueryCallback;
+import org.chromium.chrome.browser.download.DownloadManagerDelegate.DownloadQueryResult;
+import org.chromium.chrome.browser.download.OMADownloadHandler.OMAInfo;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.content.browser.test.NativeLibraryTestRule;
+import org.chromium.content.browser.test.util.Criteria;
+import org.chromium.content.browser.test.util.CriteriaHelper;
+import org.chromium.net.test.EmbeddedTestServer;
import java.io.ByteArrayInputStream;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* Tests for OMADownloadHandler class.
*/
@RunWith(ChromeJUnit4ClassRunner.class)
public class OMADownloadHandlerTest {
+ @Rule
+ public NativeLibraryTestRule mActivityTestRule = new NativeLibraryTestRule();
+
+ private static final String PENDING_OMA_DOWNLOADS = "PendingOMADownloads";
+ private static final String INSTALL_NOTIFY_URI = "http://test/test";
+
+ private Context getTestContext() {
+ return new AdvancedMockContext(
+ InstrumentationRegistry.getInstrumentation().getTargetContext());
+ }
+
+ /**
+ * Mock implementation of the DownloadSnackbarController.
+ */
+ static class MockDownloadSnackbarController extends DownloadSnackbarController {
+ public boolean mSucceeded;
+ public boolean mFailed;
+
+ public MockDownloadSnackbarController() {
+ super(null);
+ }
+
+ public void waitForSnackbarControllerToFinish(final boolean success) {
+ CriteriaHelper.pollInstrumentationThread(
+ new Criteria("Failed while waiting for all calls to complete.") {
+ @Override
+ public boolean isSatisfied() {
+ return success ? mSucceeded : mFailed;
+ }
+ });
+ }
+
+ @Override
+ public void onDownloadSucceeded(DownloadInfo downloadInfo, int notificationId,
+ long downloadId, boolean canBeResolved, boolean usesAndroidDownloadManager) {
+ mSucceeded = true;
+ }
+
+ @Override
+ public void onDownloadFailed(String errorMessage, boolean showAllDownloads) {
+ mFailed = true;
+ }
+ }
+
+ private static class OMADownloadHandlerForTest extends OMADownloadHandler {
+ public String mNofityURI;
+ public long mDownloadId;
+
+ public OMADownloadHandlerForTest(Context context, DownloadManagerDelegate delegate,
+ DownloadSnackbarController downloadSnackbarController) {
+ super(context, delegate, downloadSnackbarController);
+ }
+
+ @Override
+ protected boolean sendNotification(
+ OMAInfo omaInfo, DownloadInfo downloadInfo, long downloadId, String statusMessage) {
+ mNofityURI = omaInfo.getValue(OMA_INSTALL_NOTIFY_URI);
+ return true;
+ }
+
+ @Override
+ public void onDownloadEnqueued(
+ boolean result, int failureReason, DownloadItem downloadItem, long downloadId) {
+ super.onDownloadEnqueued(result, failureReason, downloadItem, downloadId);
+ mDownloadId = downloadId;
+ }
+ }
+
+ /** Helper class to verify the result of {@DownloadManagerDelegate.queryDownloadResult}. */
+ private static class DownloadQueryResultVerifier implements DownloadQueryCallback {
+ private int mExpectedDownloadStatus;
+
+ public boolean mQueryCompleted;
+
+ public DownloadQueryResultVerifier(int expectedDownloadStatus) {
+ mExpectedDownloadStatus = expectedDownloadStatus;
+ }
+
+ @Override
+ public void onQueryCompleted(DownloadQueryResult result, boolean showNotifications) {
+ mQueryCompleted = true;
+ Assert.assertEquals(mExpectedDownloadStatus, result.downloadStatus);
+ }
+ }
+
+ private void waitForQueryCompletion(final DownloadQueryResultVerifier verifier) {
+ CriteriaHelper.pollUiThread(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return verifier.mQueryCompleted;
+ }
+ });
+ }
+
/**
- * Test to make sure {@link OMADownloadHandler#getSize} returns the
- * right size for OMAInfo.
+ * Test to make sure {@link OMADownloadHandler#getSize} returns the right size for OMAInfo.
*/
@Test
@SmallTest
@@ -46,8 +157,7 @@ public class OMADownloadHandlerTest {
}
/**
- * Test to make sure {@link OMADownloadHandler.OMAInfo#getDrmType} returns the
- * right DRM type.
+ * Test to make sure {@link OMADownloadHandler.OMAInfo#getDrmType} returns the right DRM type.
*/
@Test
@SmallTest
@@ -68,8 +178,7 @@ public class OMADownloadHandlerTest {
}
/**
- * Test to make sure {@link OMADownloadHandler#getOpennableType} returns the
- * right MIME type.
+ * Test to make sure {@link OMADownloadHandler#getOpennableType} returns the right MIME type.
*/
@Test
@SmallTest
@@ -132,8 +241,8 @@ public class OMADownloadHandlerTest {
}
/**
- * Test that {@link OMADownloadHandler#parseDownloadDescriptor} returns empty
- * result on invalid input.
+ * Test that {@link OMADownloadHandler#parseDownloadDescriptor} returns empty result on invalid
+ * input.
*/
@Test
@SmallTest
@@ -167,4 +276,145 @@ public class OMADownloadHandlerTest {
new ByteArrayInputStream(downloadDescriptor.getBytes()));
Assert.assertNull(info);
}
+
+ /**
+ * Test to make sure {@link DownloadManagerDelegate#queryDownloadResult} will report correctly
+ * about the status of completed downloads and removed downloads.
+ */
+ @Test
+ @MediumTest
+ @Feature({"Download"})
+ public void testQueryDownloadResult() {
+ Context context = getTestContext();
+ DownloadManager manager =
+ (DownloadManager) getTestContext().getSystemService(Context.DOWNLOAD_SERVICE);
+ long downloadId1 = manager.addCompletedDownload("test", "test", false, "text/html",
+ UrlUtils.getIsolatedTestFilePath("chrome/test/data/android/download/download.txt"),
+ 4, true);
+
+ DownloadItem downloadItem = new DownloadItem(true, new DownloadInfo.Builder().build());
+ downloadItem.setSystemDownloadId(downloadId1);
+
+ DownloadManagerDelegate downloadManagerDelegate = new DownloadManagerDelegate(context);
+ DownloadQueryResultVerifier verifier =
+ new DownloadQueryResultVerifier(DownloadManagerService.DOWNLOAD_STATUS_COMPLETE);
+ downloadManagerDelegate.queryDownloadResult(downloadItem, false, verifier);
+ waitForQueryCompletion(verifier);
+
+ manager.remove(downloadId1);
+ downloadItem.setSystemDownloadId(downloadId1);
+ verifier =
+ new DownloadQueryResultVerifier(DownloadManagerService.DOWNLOAD_STATUS_CANCELLED);
+ downloadManagerDelegate.queryDownloadResult(downloadItem, false, verifier);
+ waitForQueryCompletion(verifier);
+ }
+
+ /**
+ * Test to make sure {@link OMADownloadHandler#clearPendingOMADownloads} will clear the OMA
+ * notifications and pass the notification URI to {@link OMADownloadHandler}.
+ */
+ @Test
+ @MediumTest
+ @RetryOnFailure
+ @Feature({"Download"})
+ public void testClearPendingOMADownloads() {
+ Context context = getTestContext();
+ DownloadManager manager =
+ (DownloadManager) getTestContext().getSystemService(Context.DOWNLOAD_SERVICE);
+ long downloadId1 = manager.addCompletedDownload("test", "test", false, "text/html",
+ UrlUtils.getIsolatedTestFilePath("chrome/test/data/android/download/download.txt"),
+ 4, true);
+
+ DownloadManagerDelegate downloadManagerDelegate = new DownloadManagerDelegate(context);
+ final MockDownloadSnackbarController snackbarController =
+ new MockDownloadSnackbarController();
+ final OMADownloadHandlerForTest omaHandler =
+ new OMADownloadHandlerForTest(context, downloadManagerDelegate, snackbarController);
+
+ // Write a few pending downloads into shared preferences.
+ Set<String> pendingOmaDownloads = new HashSet<>();
+ pendingOmaDownloads.add(String.valueOf(downloadId1) + "," + INSTALL_NOTIFY_URI);
+ DownloadManagerService.storeDownloadInfo(
+ ContextUtils.getAppSharedPreferences(), PENDING_OMA_DOWNLOADS, pendingOmaDownloads);
+
+ pendingOmaDownloads = DownloadManagerService.getStoredDownloadInfo(
+ ContextUtils.getAppSharedPreferences(), PENDING_OMA_DOWNLOADS);
+ Assert.assertEquals(1, pendingOmaDownloads.size());
+
+ omaHandler.clearPendingOMADownloads();
+
+ // Wait for OMADownloadHandler to clear the pending downloads.
+ CriteriaHelper.pollUiThread(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return snackbarController.mSucceeded;
+ }
+ });
+
+ // The pending downloads set in the shared prefs should be empty now.
+ pendingOmaDownloads = DownloadManagerService.getStoredDownloadInfo(
+ ContextUtils.getAppSharedPreferences(), PENDING_OMA_DOWNLOADS);
+ Assert.assertEquals(0, pendingOmaDownloads.size());
+ Assert.assertEquals(omaHandler.mNofityURI, INSTALL_NOTIFY_URI);
+
+ manager.remove(downloadId1);
+ }
+
+ /**
+ * Test that calling {@link OMADownloadHandler#enqueueDownloadManagerRequest} for an
+ * OMA download will enqueue a new DownloadManager request and insert an entry into the
+ * SharedPrefs.
+ */
+ @Test
+ @MediumTest
+ @Feature({"Download"})
+ public void testEnqueueOMADownloads() throws InterruptedException {
+ EmbeddedTestServer testServer = EmbeddedTestServer.createAndStartServer(
+ InstrumentationRegistry.getInstrumentation().getContext());
+ Context context = getTestContext();
+ mActivityTestRule.loadNativeLibraryAndInitBrowserProcess();
+
+ OMADownloadHandler.OMAInfo omaInfo = new OMAInfo();
+ omaInfo.addAttributeValue(OMADownloadHandler.OMA_NAME, "test.gzip");
+ omaInfo.addAttributeValue(OMADownloadHandler.OMA_OBJECT_URI,
+ testServer.getURL("/chrome/test/data/android/download/test.gzip"));
+ omaInfo.addAttributeValue(OMADownloadHandler.OMA_INSTALL_NOTIFY_URI, INSTALL_NOTIFY_URI);
+
+ try {
+ DownloadInfo info = new DownloadInfo.Builder().build();
+ final DownloadManagerDelegate downloadManagerDelegate =
+ new DownloadManagerDelegate(context);
+ final MockDownloadSnackbarController snackbarController =
+ new MockDownloadSnackbarController();
+ final OMADownloadHandlerForTest omaHandler = new OMADownloadHandlerForTest(
+ context, downloadManagerDelegate, snackbarController) {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // Ignore all the broadcasts.
+ }
+ };
+
+ omaHandler.clearPendingOMADownloads();
+ omaHandler.downloadOMAContent(0, info, omaInfo);
+ CriteriaHelper.pollUiThread(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return omaHandler.mDownloadId != 0;
+ }
+ });
+
+ Set<String> downloads = DownloadManagerService.getStoredDownloadInfo(
+ ContextUtils.getAppSharedPreferences(), PENDING_OMA_DOWNLOADS);
+ Assert.assertEquals(1, downloads.size());
+ OMADownloadHandler.OMAEntry entry =
+ OMADownloadHandler.OMAEntry.parseOMAEntry((String) (downloads.toArray()[0]));
+ Assert.assertEquals(entry.mDownloadId, omaHandler.mDownloadId);
+ Assert.assertEquals(entry.mInstallNotifyURI, INSTALL_NOTIFY_URI);
+ DownloadManager manager =
+ (DownloadManager) getTestContext().getSystemService(Context.DOWNLOAD_SERVICE);
+ manager.remove(omaHandler.mDownloadId);
+ } finally {
+ testServer.stopAndDestroyServer();
+ }
+ }
}
« no previous file with comments | « chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadManagerServiceTest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698