summaryrefslogtreecommitdiffstats
path: root/tests/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com')
-rw-r--r--tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java43
-rw-r--r--tests/src/com/android/providers/downloads/AbstractPublicApiTest.java8
-rw-r--r--tests/src/com/android/providers/downloads/DownloadProviderFunctionalTest.java2
-rw-r--r--tests/src/com/android/providers/downloads/FakeInputStream.java5
-rw-r--r--tests/src/com/android/providers/downloads/FakeSystemFacade.java10
-rw-r--r--tests/src/com/android/providers/downloads/HelpersTest.java32
-rw-r--r--tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java18
7 files changed, 110 insertions, 8 deletions
diff --git a/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java b/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
index 13d2c36e..6acdfed5 100644
--- a/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
@@ -24,15 +24,23 @@ import android.app.NotificationManager;
import android.app.job.JobParameters;
import android.app.job.JobScheduler;
import android.content.ContentResolver;
+import android.content.ContentValues;
import android.content.Context;
import android.content.pm.ProviderInfo;
import android.database.ContentObserver;
import android.database.Cursor;
+import android.database.DatabaseUtils;
+import android.database.MatrixCursor;
import android.net.Uri;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.IBinder;
import android.provider.Downloads;
+import android.provider.MediaStore;
import android.test.MoreAsserts;
import android.test.RenamingDelegatingContext;
import android.test.ServiceTestCase;
+import android.test.mock.MockContentProvider;
import android.test.mock.MockContentResolver;
import android.util.Log;
@@ -92,6 +100,40 @@ public abstract class AbstractDownloadProviderFunctionalTest extends
}
}
+ static class MockMediaProvider extends MockContentProvider {
+ private static final Uri TEST_URI = Uri.parse("content://media/external/11111111");
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {
+ return 0;
+ }
+
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {
+ return TEST_URI;
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+ String sortOrder) {
+ return new MatrixCursor(new String[0], 0);
+ }
+
+ @Override
+ public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ return 1;
+ }
+
+ @Override
+ public Bundle call(String method, String request, Bundle args) {
+ return new Bundle();
+ }
+
+ @Override
+ public IBinder getIContentProviderBinder() {
+ return new Binder();
+ }
+ }
+
/**
* Context passed to the provider and the service. Allows most methods to pass through to the
* real Context (this is a LargeTest), with a few exceptions, including renaming file operations
@@ -165,6 +207,7 @@ public abstract class AbstractDownloadProviderFunctionalTest extends
provider.attachInfo(mTestContext, info);
mResolver.addProvider(PROVIDER_AUTHORITY, provider);
+ mResolver.addProvider(MediaStore.AUTHORITY, new MockMediaProvider());
setContext(mTestContext);
setupService();
diff --git a/tests/src/com/android/providers/downloads/AbstractPublicApiTest.java b/tests/src/com/android/providers/downloads/AbstractPublicApiTest.java
index 3a585b47..bb89b6f6 100644
--- a/tests/src/com/android/providers/downloads/AbstractPublicApiTest.java
+++ b/tests/src/com/android/providers/downloads/AbstractPublicApiTest.java
@@ -26,6 +26,7 @@ import android.content.ContentResolver;
import android.content.ContextWrapper;
import android.database.Cursor;
import android.net.Uri;
+import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.os.SystemClock;
import android.util.Log;
@@ -238,6 +239,13 @@ public abstract class AbstractPublicApiTest extends AbstractDownloadProviderFunc
return getRequest(getServerUri(REQUEST_PATH));
}
+ protected DownloadManager.Request getRequestWithDestinationDownloadsDir()
+ throws MalformedURLException, UnknownHostException {
+ final DownloadManager.Request request = getRequest();
+ request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "testfile.txt");
+ return request;
+ }
+
protected DownloadManager.Request getRequest(String path) {
return new DownloadManager.Request(Uri.parse(path));
}
diff --git a/tests/src/com/android/providers/downloads/DownloadProviderFunctionalTest.java b/tests/src/com/android/providers/downloads/DownloadProviderFunctionalTest.java
index 9a4e6444..07d18a1a 100644
--- a/tests/src/com/android/providers/downloads/DownloadProviderFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/DownloadProviderFunctionalTest.java
@@ -76,7 +76,7 @@ public class DownloadProviderFunctionalTest extends AbstractDownloadProviderFunc
Integer.toString(Downloads.Impl.DESTINATION_CACHE_PARTITION));
runUntilStatus(downloadUri, Downloads.Impl.STATUS_SUCCESS);
assertEquals(FILE_CONTENT, getDownloadContents(downloadUri));
- assertStartsWith(getContext().getCacheDir().getAbsolutePath(),
+ assertStartsWith(getContext().getCacheDir().getCanonicalPath(),
getDownloadFilename(downloadUri));
}
diff --git a/tests/src/com/android/providers/downloads/FakeInputStream.java b/tests/src/com/android/providers/downloads/FakeInputStream.java
index 179ae6e9..3f68e310 100644
--- a/tests/src/com/android/providers/downloads/FakeInputStream.java
+++ b/tests/src/com/android/providers/downloads/FakeInputStream.java
@@ -16,8 +16,9 @@
package com.android.providers.downloads;
+import libcore.util.ArrayUtils;
+
import java.io.InputStream;
-import java.util.Arrays;
/**
* Provides fake data for large transfers.
@@ -42,7 +43,7 @@ public class FakeInputStream extends InputStream {
@Override
public int read(byte[] buffer, int offset, int length) {
- Arrays.checkOffsetAndCount(buffer.length, offset, length);
+ ArrayUtils.throwsIfOutOfBounds(buffer.length, offset, length);
if (length > mRemaining) {
length = (int) mRemaining;
diff --git a/tests/src/com/android/providers/downloads/FakeSystemFacade.java b/tests/src/com/android/providers/downloads/FakeSystemFacade.java
index f381bd8a..d11e0ac4 100644
--- a/tests/src/com/android/providers/downloads/FakeSystemFacade.java
+++ b/tests/src/com/android/providers/downloads/FakeSystemFacade.java
@@ -16,6 +16,7 @@ import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
+import android.os.Bundle;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -37,6 +38,7 @@ public class FakeSystemFacade implements SystemFacade {
long mMaxBytesOverMobile = Long.MAX_VALUE;
long mRecommendedMaxBytesOverMobile = Long.MAX_VALUE;
List<Intent> mBroadcastsSent = new ArrayList<Intent>();
+ Bundle mLastBroadcastOptions;
boolean mCleartextTrafficPermitted = true;
private boolean mReturnActualTime = false;
private SSLContext mSSLContext = null;
@@ -49,6 +51,7 @@ public class FakeSystemFacade implements SystemFacade {
mMaxBytesOverMobile = Long.MAX_VALUE;
mRecommendedMaxBytesOverMobile = Long.MAX_VALUE;
mBroadcastsSent.clear();
+ mLastBroadcastOptions = null;
mReturnActualTime = false;
try {
mSSLContext = SSLContext.getDefault();
@@ -125,6 +128,13 @@ public class FakeSystemFacade implements SystemFacade {
@Override
public void sendBroadcast(Intent intent) {
mBroadcastsSent.add(intent);
+ mLastBroadcastOptions = null;
+ }
+
+ @Override
+ public void sendBroadcast(Intent intent, String receiverPermission, Bundle options) {
+ mBroadcastsSent.add(intent);
+ mLastBroadcastOptions = options;
}
@Override
diff --git a/tests/src/com/android/providers/downloads/HelpersTest.java b/tests/src/com/android/providers/downloads/HelpersTest.java
index 121b7cda..65c5d368 100644
--- a/tests/src/com/android/providers/downloads/HelpersTest.java
+++ b/tests/src/com/android/providers/downloads/HelpersTest.java
@@ -85,4 +85,36 @@ public class HelpersTest extends AndroidTestCase {
null, "video/mp4", Downloads.Impl.DESTINATION_CACHE_PARTITION);
assertEquals(expected.getAbsolutePath(), actual);
}
+
+ public void testIsFileInExternalAndroidDirs() throws Exception {
+ assertTrue(Helpers.isFileInExternalAndroidDirs(
+ "/storage/emulated/0/Android/data/com.example"));
+ assertTrue(Helpers.isFileInExternalAndroidDirs(
+ "/storage/emulated/0/Android/data/com.example/colors.txt"));
+ assertTrue(Helpers.isFileInExternalAndroidDirs(
+ "/storage/emulated/0/Android/media/com.example/file.mp4"));
+ assertTrue(Helpers.isFileInExternalAndroidDirs(
+ "/storage/AAAA-FFFF/Android/media/com.example/file.mp4"));
+ assertFalse(Helpers.isFileInExternalAndroidDirs(
+ "/storage/emulated/0/Download/foo.pdf"));
+ assertFalse(Helpers.isFileInExternalAndroidDirs(
+ "/storage/emulated/0/Download/dir/bar.html"));
+ assertFalse(Helpers.isFileInExternalAndroidDirs(
+ "/storage/AAAA-FFFF/Download/dir/bar.html"));
+ }
+
+ public void testIsFilenameValidinKnownPublicDir() throws Exception {
+ assertTrue(Helpers.isFilenameValidInKnownPublicDir(
+ "/storage/emulated/0/Download/dir/file.txt"));
+ assertTrue(Helpers.isFilenameValidInKnownPublicDir(
+ "/storage/emulated/0/Music/foo.mp4"));
+ assertTrue(Helpers.isFilenameValidInKnownPublicDir(
+ "/storage/emulated/0/DCIM/vacation/bar.jpg"));
+ assertFalse(Helpers.isFilenameValidInKnownPublicDir(
+ "/storage/emulated/0/Testing/foo.mp4"));
+ assertFalse(Helpers.isFilenameValidInKnownPublicDir(
+ "/storage/emulated/0/Misc/Download/bar.jpg"));
+ assertFalse(Helpers.isFilenameValidInKnownPublicDir(
+ "/storage/emulated/0/Android/data/com.example/bar.jpg"));
+ }
}
diff --git a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
index 97bc4a22..0652f245 100644
--- a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
@@ -36,6 +36,7 @@ import static java.net.HttpURLConnection.HTTP_PARTIAL;
import static java.net.HttpURLConnection.HTTP_PRECON_FAILED;
import static java.net.HttpURLConnection.HTTP_UNAVAILABLE;
+import android.app.BroadcastOptions;
import android.app.DownloadManager;
import android.app.Notification;
import android.app.NotificationManager;
@@ -43,6 +44,7 @@ import android.content.Intent;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.Uri;
+import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.provider.Downloads;
@@ -85,8 +87,9 @@ public class PublicApiFunctionalTest extends AbstractPublicApiTest {
mNotifManager = getContext().getSystemService(NotificationManager.class);
mDownloadManager = getContext().getSystemService(DownloadManager.class);
- mTestDirectory = new File(Environment.getExternalStorageDirectory() + File.separator
- + "download_manager_functional_test");
+ mTestDirectory = new File(Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_DOWNLOADS)
+ + File.separator + "download_manager_functional_test");
if (mTestDirectory.exists()) {
IoUtils.deleteContents(mTestDirectory);
} else {
@@ -249,15 +252,15 @@ public class PublicApiFunctionalTest extends AbstractPublicApiTest {
enqueueResponse(buildEmptyResponse(HTTP_OK));
enqueueResponse(buildEmptyResponse(HTTP_NOT_FOUND));
- Download download1 = enqueueRequest(getRequest());
+ Download download1 = enqueueRequest(getRequestWithDestinationDownloadsDir());
download1.runUntilStatus(DownloadManager.STATUS_SUCCESSFUL);
mSystemFacade.incrementTimeMillis(1); // ensure downloads are correctly ordered by time
- Download download2 = enqueueRequest(getRequest());
+ Download download2 = enqueueRequest(getRequestWithDestinationDownloadsDir());
download2.runUntilStatus(DownloadManager.STATUS_FAILED);
mSystemFacade.incrementTimeMillis(1);
- Download download3 = enqueueRequest(getRequest());
+ Download download3 = enqueueRequest(getRequestWithDestinationDownloadsDir());
Cursor cursor = mManager.query(new DownloadManager.Query());
checkAndCloseCursor(cursor, download3, download2, download1);
@@ -554,6 +557,11 @@ public class PublicApiFunctionalTest extends AbstractPublicApiTest {
Intent broadcast = mSystemFacade.mBroadcastsSent.get(0);
assertEquals(DownloadManager.ACTION_NOTIFICATION_CLICKED, broadcast.getAction());
assertEquals(PACKAGE_NAME, broadcast.getPackage());
+
+ Bundle bOptions = mSystemFacade.mLastBroadcastOptions;
+ assertNotNull(bOptions);
+ BroadcastOptions brOptions = new BroadcastOptions(bOptions);
+ assertTrue(brOptions.allowsBackgroundActivityStarts());
}
public void testNotificationCancelDownloadClicked() throws Exception {