summaryrefslogtreecommitdiffstats
path: root/core/tests/hosttests/src/android
diff options
context:
space:
mode:
authorTsu Chiang Chuang <tsu@google.com>2012-06-13 14:26:53 -0700
committerTsu Chiang Chuang <tsu@google.com>2012-06-13 14:26:53 -0700
commit723118c9e1467ae006f3c33d4f8efbac94d524e3 (patch)
treece21243f8c9c199cc29d8a356ac5e60993a5757e /core/tests/hosttests/src/android
parent3400aa104cc52bd8dedf251dda9eb731a7f08612 (diff)
downloadframeworks_base-723118c9e1467ae006f3c33d4f8efbac94d524e3.zip
frameworks_base-723118c9e1467ae006f3c33d4f8efbac94d524e3.tar.gz
frameworks_base-723118c9e1467ae006f3c33d4f8efbac94d524e3.tar.bz2
Clean up host tests that have been moved to TF.
Change-Id: Iebadfc6aefeca18a944079a7e9115a3c53c211ce
Diffstat (limited to 'core/tests/hosttests/src/android')
-rw-r--r--core/tests/hosttests/src/android/content/pm/PackageManagerHostTestUtils.java891
-rw-r--r--core/tests/hosttests/src/android/content/pm/PackageManagerHostTests.java1224
-rw-r--r--core/tests/hosttests/src/android/content/pm/PackageManagerStressHostTests.java297
-rw-r--r--core/tests/hosttests/src/android/net/DownloadManagerHostTests.java210
4 files changed, 0 insertions, 2622 deletions
diff --git a/core/tests/hosttests/src/android/content/pm/PackageManagerHostTestUtils.java b/core/tests/hosttests/src/android/content/pm/PackageManagerHostTestUtils.java
deleted file mode 100644
index c698e99..0000000
--- a/core/tests/hosttests/src/android/content/pm/PackageManagerHostTestUtils.java
+++ /dev/null
@@ -1,891 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.content.pm;
-
-import com.android.ddmlib.AdbCommandRejectedException;
-import com.android.ddmlib.AndroidDebugBridge;
-import com.android.ddmlib.IDevice;
-import com.android.ddmlib.IShellOutputReceiver;
-import com.android.ddmlib.InstallException;
-import com.android.ddmlib.Log;
-import com.android.ddmlib.MultiLineReceiver;
-import com.android.ddmlib.ShellCommandUnresponsiveException;
-import com.android.ddmlib.SyncException;
-import com.android.ddmlib.TimeoutException;
-import com.android.ddmlib.SyncService.ISyncProgressMonitor;
-import com.android.ddmlib.testrunner.ITestRunListener;
-import com.android.ddmlib.testrunner.RemoteAndroidTestRunner;
-import com.android.ddmlib.testrunner.TestIdentifier;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.StringReader;
-import java.lang.Runtime;
-import java.lang.Process;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import junit.framework.Assert;
-
-/**
- * Set of tests that verify host side install cases
- */
-public class PackageManagerHostTestUtils extends Assert {
-
- private static final String LOG_TAG = "PackageManagerHostTests";
- private IDevice mDevice = null;
-
- // TODO: get this value from Android Environment instead of hardcoding
- private static final String APP_PRIVATE_PATH = "/data/app-private/";
- private static final String DEVICE_APP_PATH = "/data/app/";
- private static final String SDCARD_APP_PATH = "/mnt/secure/asec/";
-
- private static final int MAX_WAIT_FOR_DEVICE_TIME = 120 * 1000;
- private static final int WAIT_FOR_DEVICE_POLL_TIME = 10 * 1000;
- private static final int MAX_WAIT_FOR_APP_LAUNCH_TIME = 60 * 1000;
- private static final int WAIT_FOR_APP_LAUNCH_POLL_TIME = 5 * 1000;
-
- // Install preference on the device-side
- public static enum InstallLocPreference {
- AUTO,
- INTERNAL,
- EXTERNAL
- }
-
- // Actual install location
- public static enum InstallLocation {
- DEVICE,
- SDCARD
- }
-
- /**
- * Constructor takes the device to use
- * @param the device to use when performing operations
- */
- public PackageManagerHostTestUtils(IDevice device)
- {
- mDevice = device;
- }
-
- /**
- * Disable default constructor
- */
- private PackageManagerHostTestUtils() {}
-
- /**
- * Returns the path on the device of forward-locked apps.
- *
- * @return path of forward-locked apps on the device
- */
- public static String getAppPrivatePath() {
- return APP_PRIVATE_PATH;
- }
-
- /**
- * Returns the path on the device of normal apps.
- *
- * @return path of forward-locked apps on the device
- */
- public static String getDeviceAppPath() {
- return DEVICE_APP_PATH;
- }
-
- /**
- * Returns the path of apps installed on the SD card.
- *
- * @return path of forward-locked apps on the device
- */
- public static String getSDCardAppPath() {
- return SDCARD_APP_PATH;
- }
-
- /**
- * Helper method to run tests and return the listener that collected the results.
- *
- * For the optional params, pass null to use the default values.
-
- * @param pkgName Android application package for tests
- * @param className (optional) The class containing the method to test
- * @param methodName (optional) The method in the class of which to test
- * @param runnerName (optional) The name of the TestRunner of the test on the device to be run
- * @param params (optional) Any additional parameters to pass into the Test Runner
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @return the {@link CollectingTestRunListener}
- */
- private CollectingTestRunListener doRunTests(String pkgName, String className,
- String methodName, String runnerName, Map<String, String> params) throws IOException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- RemoteAndroidTestRunner testRunner = new RemoteAndroidTestRunner(pkgName, runnerName,
- mDevice);
-
- if (className != null && methodName != null) {
- testRunner.setMethodName(className, methodName);
- }
-
- // Add in any additional args to pass into the test
- if (params != null) {
- for (Entry<String, String> argPair : params.entrySet()) {
- testRunner.addInstrumentationArg(argPair.getKey(), argPair.getValue());
- }
- }
-
- CollectingTestRunListener listener = new CollectingTestRunListener();
- try {
- testRunner.run(listener);
- } catch (IOException ioe) {
- Log.w(LOG_TAG, "encountered IOException " + ioe);
- }
- return listener;
- }
-
- /**
- * Runs the specified packages tests, and returns whether all tests passed or not.
- *
- * @param pkgName Android application package for tests
- * @param className The class containing the method to test
- * @param methodName The method in the class of which to test
- * @param runnerName The name of the TestRunner of the test on the device to be run
- * @param params Any additional parameters to pass into the Test Runner
- * @return true if test passed, false otherwise.
- */
- public boolean runDeviceTestsDidAllTestsPass(String pkgName, String className,
- String methodName, String runnerName, Map<String, String> params) throws IOException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- CollectingTestRunListener listener = doRunTests(pkgName, className, methodName,
- runnerName, params);
- return listener.didAllTestsPass();
- }
-
- /**
- * Runs the specified packages tests, and returns whether all tests passed or not.
- *
- * @param pkgName Android application package for tests
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @return true if every test passed, false otherwise.
- */
- public boolean runDeviceTestsDidAllTestsPass(String pkgName) throws IOException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- CollectingTestRunListener listener = doRunTests(pkgName, null, null, null, null);
- return listener.didAllTestsPass();
- }
-
- /**
- * Helper method to push a file to device
- * @param apkAppPrivatePath
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- */
- public void pushFile(final String localFilePath, final String destFilePath)
- throws IOException, SyncException, TimeoutException, AdbCommandRejectedException {
- mDevice.getSyncService().pushFile(localFilePath,
- destFilePath, new NullSyncProgressMonitor());
- }
-
- /**
- * Helper method to install a file
- * @param localFilePath the absolute file system path to file on local host to install
- * @param reinstall set to <code>true</code> if re-install of app should be performed
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed
- */
- public void installFile(final String localFilePath, final boolean replace) throws IOException,
- InstallException {
- String result = mDevice.installPackage(localFilePath, replace);
- assertEquals(null, result);
- }
-
- /**
- * Helper method to install a file that should not be install-able
- * @param localFilePath the absolute file system path to file on local host to install
- * @param reinstall set to <code>true</code> if re-install of app should be performed
- * @return the string output of the failed install attempt
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed
- */
- public String installFileFail(final String localFilePath, final boolean replace)
- throws IOException, InstallException {
- String result = mDevice.installPackage(localFilePath, replace);
- assertNotNull(result);
- return result;
- }
-
- /**
- * Helper method to install a file to device as forward locked
- * @param localFilePath the absolute file system path to file on local host to install
- * @param reinstall set to <code>true</code> if re-install of app should be performed
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public String installFileForwardLocked(final String localFilePath, final boolean replace)
- throws IOException, SyncException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException, InstallException {
- String remoteFilePath = mDevice.syncPackageToDevice(localFilePath);
- InstallReceiver receiver = new InstallReceiver();
- String cmd = String.format(replace ? "pm install -r -l \"%1$s\"" :
- "pm install -l \"%1$s\"", remoteFilePath);
- mDevice.executeShellCommand(cmd, receiver);
- mDevice.removeRemotePackage(remoteFilePath);
- return receiver.getErrorMessage();
- }
-
- /**
- * Helper method to determine if file on device exists.
- *
- * @param destPath the absolute path of file on device to check
- * @return <code>true</code> if file exists, <code>false</code> otherwise.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public boolean doesRemoteFileExist(String destPath) throws IOException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- String lsGrep = executeShellCommand(String.format("ls %s", destPath));
- return !lsGrep.contains("No such file or directory");
- }
-
- /**
- * Helper method to determine if file exists on the device containing a given string.
- *
- * @param destPath the absolute path of the file
- * @return <code>true</code> if file exists containing given string,
- * <code>false</code> otherwise.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public boolean doesRemoteFileExistContainingString(String destPath, String searchString)
- throws IOException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- String lsResult = executeShellCommand(String.format("ls %s", destPath));
- return lsResult.contains(searchString);
- }
-
- /**
- * Helper method to determine if package on device exists.
- *
- * @param packageName the Android manifest package to check.
- * @return <code>true</code> if package exists, <code>false</code> otherwise
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public boolean doesPackageExist(String packageName) throws IOException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- String pkgGrep = executeShellCommand(String.format("pm path %s", packageName));
- return pkgGrep.contains("package:");
- }
-
- /**
- * Determines if app was installed on device.
- *
- * @param packageName package name to check for
- * @return <code>true</code> if file exists, <code>false</code> otherwise.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public boolean doesAppExistOnDevice(String packageName) throws IOException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- return doesRemoteFileExistContainingString(DEVICE_APP_PATH, packageName);
- }
-
- /**
- * Determines if app was installed on SD card.
- *
- * @param packageName package name to check for
- * @return <code>true</code> if file exists, <code>false</code> otherwise.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public boolean doesAppExistOnSDCard(String packageName) throws IOException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- return doesRemoteFileExistContainingString(SDCARD_APP_PATH, packageName);
- }
-
- /**
- * Helper method to determine if app was installed on SD card.
- *
- * @param packageName package name to check for
- * @return <code>true</code> if file exists, <code>false</code> otherwise.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public boolean doesAppExistAsForwardLocked(String packageName) throws IOException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- return doesRemoteFileExistContainingString(APP_PRIVATE_PATH, packageName);
- }
-
- /**
- * Waits for device's package manager to respond.
- *
- * @throws InterruptedException
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public void waitForPackageManager() throws InterruptedException, IOException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "waiting for device");
- int currentWaitTime = 0;
- // poll the package manager until it returns something for android
- while (!doesPackageExist("android")) {
- Thread.sleep(WAIT_FOR_DEVICE_POLL_TIME);
- currentWaitTime += WAIT_FOR_DEVICE_POLL_TIME;
- if (currentWaitTime > MAX_WAIT_FOR_DEVICE_TIME) {
- Log.e(LOG_TAG, "time out waiting for device");
- throw new InterruptedException();
- }
- }
- }
-
- /**
- * Helper to determine if the device is currently online and visible via ADB.
- *
- * @return true iff the device is currently available to ADB and online, false otherwise.
- */
- private boolean deviceIsOnline() {
- AndroidDebugBridge bridge = AndroidDebugBridge.getBridge();
- IDevice[] devices = bridge.getDevices();
-
- for (IDevice device : devices) {
- // only online if the device appears in the devices list, and its state is online
- if ((mDevice != null) &&
- mDevice.getSerialNumber().equals(device.getSerialNumber()) &&
- device.isOnline()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Waits for device to be online (visible to ADB) before returning, or times out if we've
- * waited too long. Note that this only means the device is visible via ADB, not that
- * PackageManager is fully up and running yet.
- *
- * @throws InterruptedException
- * @throws IOException
- */
- public void waitForDeviceToComeOnline() throws InterruptedException, IOException {
- Log.i(LOG_TAG, "waiting for device to be online");
- int currentWaitTime = 0;
-
- // poll ADB until we see the device is online
- while (!deviceIsOnline()) {
- Thread.sleep(WAIT_FOR_DEVICE_POLL_TIME);
- currentWaitTime += WAIT_FOR_DEVICE_POLL_TIME;
- if (currentWaitTime > MAX_WAIT_FOR_DEVICE_TIME) {
- Log.e(LOG_TAG, "time out waiting for device");
- throw new InterruptedException();
- }
- }
- // Note: if we try to access the device too quickly after it is "officially" online,
- // there are sometimes strange issues where it's actually not quite ready yet,
- // so we pause for a bit once more before actually returning.
- Thread.sleep(WAIT_FOR_DEVICE_POLL_TIME);
- }
-
- /**
- * Queries package manager and waits until a package is launched (or times out)
- *
- * @param packageName The name of the package to wait to load
- * @throws InterruptedException
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public void waitForApp(String packageName) throws InterruptedException, IOException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "waiting for app to launch");
- int currentWaitTime = 0;
- // poll the package manager until it returns something for the package we're looking for
- while (!doesPackageExist(packageName)) {
- Thread.sleep(WAIT_FOR_APP_LAUNCH_POLL_TIME);
- currentWaitTime += WAIT_FOR_APP_LAUNCH_POLL_TIME;
- if (currentWaitTime > MAX_WAIT_FOR_APP_LAUNCH_TIME) {
- Log.e(LOG_TAG, "time out waiting for app to launch: " + packageName);
- throw new InterruptedException();
- }
- }
- }
-
- /**
- * Helper method which executes a adb shell command and returns output as a {@link String}
- * @return the output of the command
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public String executeShellCommand(String command) throws IOException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, String.format("adb shell %s", command));
- CollectingOutputReceiver receiver = new CollectingOutputReceiver();
- mDevice.executeShellCommand(command, receiver);
- String output = receiver.getOutput();
- Log.i(LOG_TAG, String.format("Result: %s", output));
- return output;
- }
-
- /**
- * Helper method ensures we are in root mode on the host side. It returns only after
- * PackageManager is actually up and running.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public void runAdbRoot() throws IOException, InterruptedException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "adb root");
- Runtime runtime = Runtime.getRuntime();
- Process process = runtime.exec("adb root"); // adb should be in the path
- BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
-
- String nextLine = null;
- while (null != (nextLine = output.readLine())) {
- Log.i(LOG_TAG, nextLine);
- }
- process.waitFor();
- waitForDeviceToComeOnline();
- waitForPackageManager(); // now wait for package manager to actually load
- }
-
- /**
- * Helper method which reboots the device and returns once the device is online again
- * and package manager is up and running (note this function is synchronous to callers).
- * @throws InterruptedException
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public void rebootDevice() throws IOException, InterruptedException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- String command = "reboot"; // no need for -s since mDevice is already tied to a device
- Log.i(LOG_TAG, command);
- CollectingOutputReceiver receiver = new CollectingOutputReceiver();
- mDevice.executeShellCommand(command, receiver);
- String output = receiver.getOutput();
- Log.i(LOG_TAG, String.format("Result: %s", output));
- waitForDeviceToComeOnline(); // wait for device to come online
- runAdbRoot();
- }
-
- /**
- * A {@link IShellOutputReceiver} which collects the whole shell output into one {@link String}
- */
- private class CollectingOutputReceiver extends MultiLineReceiver {
-
- private StringBuffer mOutputBuffer = new StringBuffer();
-
- public String getOutput() {
- return mOutputBuffer.toString();
- }
-
- @Override
- public void processNewLines(String[] lines) {
- for (String line: lines) {
- mOutputBuffer.append(line);
- mOutputBuffer.append("\n");
- }
- }
-
- public boolean isCancelled() {
- return false;
- }
- }
-
- private class NullSyncProgressMonitor implements ISyncProgressMonitor {
- public void advance(int work) {
- // ignore
- }
-
- public boolean isCanceled() {
- // ignore
- return false;
- }
-
- public void start(int totalWork) {
- // ignore
-
- }
-
- public void startSubTask(String name) {
- // ignore
- }
-
- public void stop() {
- // ignore
- }
- }
-
- // For collecting results from running device tests
- public static class CollectingTestRunListener implements ITestRunListener {
-
- private boolean mAllTestsPassed = true;
- private String mTestRunErrorMessage = null;
-
- public void testEnded(TestIdentifier test, Map<String, String> metrics) {
- // ignore
- }
-
- public void testFailed(TestFailure status, TestIdentifier test,
- String trace) {
- Log.w(LOG_TAG, String.format("%s#%s failed: %s", test.getClassName(),
- test.getTestName(), trace));
- mAllTestsPassed = false;
- }
-
- public void testRunEnded(long elapsedTime, Map<String, String> resultBundle) {
- // ignore
- }
-
- public void testRunFailed(String errorMessage) {
- Log.w(LOG_TAG, String.format("test run failed: %s", errorMessage));
- mAllTestsPassed = false;
- mTestRunErrorMessage = errorMessage;
- }
-
- public void testRunStarted(String runName, int testCount) {
- // ignore
- }
-
- public void testRunStopped(long elapsedTime) {
- // ignore
- }
-
- public void testStarted(TestIdentifier test) {
- // ignore
- }
-
- boolean didAllTestsPass() {
- return mAllTestsPassed;
- }
-
- /**
- * Get the test run failure error message.
- * @return the test run failure error message or <code>null</code> if test run completed.
- */
- String getTestRunErrorMessage() {
- return mTestRunErrorMessage;
- }
- }
-
- /**
- * Output receiver for "pm install package.apk" command line.
- *
- */
- private static final class InstallReceiver extends MultiLineReceiver {
-
- private static final String SUCCESS_OUTPUT = "Success"; //$NON-NLS-1$
- private static final Pattern FAILURE_PATTERN = Pattern.compile("Failure\\s+\\[(.*)\\]"); //$NON-NLS-1$
-
- private String mErrorMessage = null;
-
- public InstallReceiver() {
- }
-
- @Override
- public void processNewLines(String[] lines) {
- for (String line : lines) {
- if (line.length() > 0) {
- if (line.startsWith(SUCCESS_OUTPUT)) {
- mErrorMessage = null;
- } else {
- Matcher m = FAILURE_PATTERN.matcher(line);
- if (m.matches()) {
- mErrorMessage = m.group(1);
- }
- }
- }
- }
- }
-
- public boolean isCancelled() {
- return false;
- }
-
- public String getErrorMessage() {
- return mErrorMessage;
- }
- }
-
- /**
- * Helper method for installing an app to wherever is specified in its manifest, and
- * then verifying the app was installed onto SD Card.
- * <p/>
- * Assumes adb is running as root in device under test.
- *
- * @param the path of the apk to install
- * @param the name of the package
- * @param <code>true</code> if the app should be overwritten, <code>false</code> otherwise
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void installAppAndVerifyExistsOnSDCard(String apkPath, String pkgName, boolean overwrite)
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- // Start with a clean slate if we're not overwriting
- if (!overwrite) {
- // cleanup test app just in case it already exists
- mDevice.uninstallPackage(pkgName);
- // grep for package to make sure its not installed
- assertFalse(doesPackageExist(pkgName));
- }
-
- installFile(apkPath, overwrite);
- assertTrue(doesAppExistOnSDCard(pkgName));
- assertFalse(doesAppExistOnDevice(pkgName));
- waitForPackageManager();
-
- // grep for package to make sure it is installed
- assertTrue(doesPackageExist(pkgName));
- }
-
- /**
- * Helper method for installing an app to wherever is specified in its manifest, and
- * then verifying the app was installed onto device.
- * <p/>
- * Assumes adb is running as root in device under test.
- *
- * @param the path of the apk to install
- * @param the name of the package
- * @param <code>true</code> if the app should be overwritten, <code>false</code> otherwise
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void installAppAndVerifyExistsOnDevice(String apkPath, String pkgName, boolean overwrite)
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- // Start with a clean slate if we're not overwriting
- if (!overwrite) {
- // cleanup test app just in case it already exists
- mDevice.uninstallPackage(pkgName);
- // grep for package to make sure its not installed
- assertFalse(doesPackageExist(pkgName));
- }
-
- installFile(apkPath, overwrite);
- assertFalse(doesAppExistOnSDCard(pkgName));
- assertTrue(doesAppExistOnDevice(pkgName));
- waitForPackageManager();
-
- // grep for package to make sure it is installed
- assertTrue(doesPackageExist(pkgName));
- }
-
- /**
- * Helper method for installing an app as forward-locked, and
- * then verifying the app was installed in the proper forward-locked location.
- * <p/>
- * Assumes adb is running as root in device under test.
- *
- * @param the path of the apk to install
- * @param the name of the package
- * @param <code>true</code> if the app should be overwritten, <code>false</code> otherwise
- * @throws InterruptedException if the thread was interrupted
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- */
- public void installFwdLockedAppAndVerifyExists(String apkPath,
- String pkgName, boolean overwrite) throws IOException, InterruptedException,
- InstallException, SyncException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- // Start with a clean slate if we're not overwriting
- if (!overwrite) {
- // cleanup test app just in case it already exists
- mDevice.uninstallPackage(pkgName);
- // grep for package to make sure its not installed
- assertFalse(doesPackageExist(pkgName));
- }
-
- String result = installFileForwardLocked(apkPath, overwrite);
- assertEquals(null, result);
- assertTrue(doesAppExistAsForwardLocked(pkgName));
- assertFalse(doesAppExistOnSDCard(pkgName));
- waitForPackageManager();
-
- // grep for package to make sure it is installed
- assertTrue(doesPackageExist(pkgName));
- }
-
- /**
- * Helper method for uninstalling an app.
- * <p/>
- * Assumes adb is running as root in device under test.
- *
- * @param pkgName package name to uninstall
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the uninstall failed.
- */
- public void uninstallApp(String pkgName) throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- mDevice.uninstallPackage(pkgName);
- // make sure its not installed anymore
- assertFalse(doesPackageExist(pkgName));
- }
-
- /**
- * Helper method for clearing any installed non-system apps.
- * Useful ensuring no non-system apps are installed, and for cleaning up stale files that
- * may be lingering on the system for whatever reason.
- * <p/>
- * Assumes adb is running as root in device under test.
- *
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the uninstall failed.
- */
- public void wipeNonSystemApps() throws IOException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException, InstallException {
- String allInstalledPackages = executeShellCommand("pm list packages -f");
- BufferedReader outputReader = new BufferedReader(new StringReader(allInstalledPackages));
-
- // First use Package Manager to uninstall all non-system apps
- String currentLine = null;
- while ((currentLine = outputReader.readLine()) != null) {
- // Skip over any system apps...
- if (currentLine.contains("/system/")) {
- continue;
- }
- String packageName = currentLine.substring(currentLine.indexOf('=') + 1);
- mDevice.uninstallPackage(packageName);
- }
- // Make sure there are no stale app files under these directories
- executeShellCommand(String.format("rm %s*", SDCARD_APP_PATH, "*"));
- executeShellCommand(String.format("rm %s*", DEVICE_APP_PATH, "*"));
- executeShellCommand(String.format("rm %s*", APP_PRIVATE_PATH, "*"));
- }
-
- /**
- * Sets the device's install location preference.
- *
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public void setDevicePreferredInstallLocation(InstallLocPreference pref) throws IOException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- String command = "pm setInstallLocation %d";
- int locValue = 0;
- switch (pref) {
- case INTERNAL:
- locValue = 1;
- break;
- case EXTERNAL:
- locValue = 2;
- break;
- default: // AUTO
- locValue = 0;
- break;
- }
- executeShellCommand(String.format(command, locValue));
- }
-
- /**
- * Gets the device's install location preference.
- *
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- */
- public InstallLocPreference getDevicePreferredInstallLocation() throws IOException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- String result = executeShellCommand("pm getInstallLocation");
- if (result.indexOf('0') != -1) {
- return InstallLocPreference.AUTO;
- }
- else if (result.indexOf('1') != -1) {
- return InstallLocPreference.INTERNAL;
- }
- else {
- return InstallLocPreference.EXTERNAL;
- }
- }
-}
diff --git a/core/tests/hosttests/src/android/content/pm/PackageManagerHostTests.java b/core/tests/hosttests/src/android/content/pm/PackageManagerHostTests.java
deleted file mode 100644
index 22a2be6..0000000
--- a/core/tests/hosttests/src/android/content/pm/PackageManagerHostTests.java
+++ /dev/null
@@ -1,1224 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.content.pm;
-
-import com.android.ddmlib.AdbCommandRejectedException;
-import com.android.ddmlib.InstallException;
-import com.android.ddmlib.Log;
-import com.android.ddmlib.ShellCommandUnresponsiveException;
-import com.android.ddmlib.SyncException;
-import com.android.ddmlib.TimeoutException;
-import com.android.hosttest.DeviceTestCase;
-import com.android.hosttest.DeviceTestSuite;
-
-import java.io.File;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-/**
- * Set of tests that verify host side install cases
- */
-public class PackageManagerHostTests extends DeviceTestCase {
-
- private static final String LOG_TAG = "PackageManagerHostTests";
- private PackageManagerHostTestUtils mPMHostUtils = null;
-
- private String appPrivatePath = null;
- private String deviceAppPath = null;
- private String sdcardAppPath = null;
-
- // Various test files and their corresponding package names...
-
- // testPushAppPrivate constants
- // these constants must match values defined in test-apps/SimpleTestApp
- private static final String SIMPLE_APK = "SimpleTestApp.apk";
- private static final String SIMPLE_PKG = "com.android.framework.simpletestapp";
-
- // Apk with install location set to auto
- private static final String AUTO_LOC_APK = "AutoLocTestApp.apk";
- private static final String AUTO_LOC_PKG = "com.android.framework.autoloctestapp";
- // Apk with install location set to internalOnly
- private static final String INTERNAL_LOC_APK = "InternalLocTestApp.apk";
- private static final String INTERNAL_LOC_PKG = "com.android.framework.internalloctestapp";
- // Apk with install location set to preferExternal
- private static final String EXTERNAL_LOC_APK = "ExternalLocTestApp.apk";
- private static final String EXTERNAL_LOC_PKG = "com.android.framework.externalloctestapp";
- // Apk with install location set to auto (2 versions, for update testing)
- private static final String AUTO_LOC_VERSION_V1_APK = "AutoLocVersionedTestApp_v1.apk";
- private static final String AUTO_LOC_VERSION_V2_APK = "AutoLocVersionedTestApp_v2.apk";
- private static final String AUTO_LOC_VERSION_PKG =
- "com.android.framework.autolocversionedtestapp";
- // Apk with install location set to preferExternal (2 versions, for update testing)
- private static final String EXTERNAL_LOC_VERSION_V1_APK = "ExternalLocVersionedTestApp_v1.apk";
- private static final String EXTERNAL_LOC_VERSION_V2_APK = "ExternalLocVersionedTestApp_v2.apk";
- private static final String EXTERNAL_LOC_VERSION_PKG =
- "com.android.framework.externallocversionedtestapp";
- // Apk with install location set to auto (2 versions, for update testing)
- private static final String NO_LOC_VERSION_V1_APK = "NoLocVersionedTestApp_v1.apk";
- private static final String NO_LOC_VERSION_V2_APK = "NoLocVersionedTestApp_v2.apk";
- private static final String NO_LOC_VERSION_PKG =
- "com.android.framework.nolocversionedtestapp";
- // Apk with no install location set
- private static final String NO_LOC_APK = "NoLocTestApp.apk";
- private static final String NO_LOC_PKG = "com.android.framework.noloctestapp";
- // Apk with 2 different versions - v1 is set to external, v2 has no location setting
- private static final String UPDATE_EXTERNAL_LOC_V1_EXT_APK
- = "UpdateExternalLocTestApp_v1_ext.apk";
- private static final String UPDATE_EXTERNAL_LOC_V2_NONE_APK
- = "UpdateExternalLocTestApp_v2_none.apk";
- private static final String UPDATE_EXTERNAL_LOC_PKG
- = "com.android.framework.updateexternalloctestapp";
- // Apk with 2 different versions - v1 is set to external, v2 is set to internalOnly
- private static final String UPDATE_EXT_TO_INT_LOC_V1_EXT_APK
- = "UpdateExtToIntLocTestApp_v1_ext.apk";
- private static final String UPDATE_EXT_TO_INT_LOC_V2_INT_APK
- = "UpdateExtToIntLocTestApp_v2_int.apk";
- private static final String UPDATE_EXT_TO_INT_LOC_PKG
- = "com.android.framework.updateexttointloctestapp";
- // Apk set to preferExternal, with Access Fine Location permissions set in its manifest
- private static final String FL_PERMS_APK = "ExternalLocPermsFLTestApp.apk";
- private static final String FL_PERMS_PKG = "com.android.framework.externallocpermsfltestapp";
- // Apk set to preferExternal, with all permissions set in manifest
- private static final String ALL_PERMS_APK = "ExternalLocAllPermsTestApp.apk";
- private static final String ALL_PERMS_PKG = "com.android.framework.externallocallpermstestapp";
- // Apks with the same package name, but install location set to
- // one of: Internal, External, Auto, or None
- private static final String VERSATILE_LOC_PKG = "com.android.framework.versatiletestapp";
- private static final String VERSATILE_LOC_INTERNAL_APK = "VersatileTestApp_Internal.apk";
- private static final String VERSATILE_LOC_EXTERNAL_APK = "VersatileTestApp_External.apk";
- private static final String VERSATILE_LOC_AUTO_APK = "VersatileTestApp_Auto.apk";
- private static final String VERSATILE_LOC_NONE_APK = "VersatileTestApp_None.apk";
- // Apks with shared UserID
- private static final String SHARED_PERMS_APK = "ExternalSharedPermsTestApp.apk";
- private static final String SHARED_PERMS_PKG
- = "com.android.framework.externalsharedpermstestapp";
- private static final String SHARED_PERMS_FL_APK = "ExternalSharedPermsFLTestApp.apk";
- private static final String SHARED_PERMS_FL_PKG
- = "com.android.framework.externalsharedpermsfltestapp";
- private static final String SHARED_PERMS_BT_APK = "ExternalSharedPermsBTTestApp.apk";
- private static final String SHARED_PERMS_BT_PKG
- = "com.android.framework.externalsharedpermsbttestapp";
- // Apk with shared UserID, but signed with a different cert (the media cert)
- private static final String SHARED_PERMS_DIFF_KEY_APK = "ExternalSharedPermsDiffKeyTestApp.apk";
- private static final String SHARED_PERMS_DIFF_KEY_PKG
- = "com.android.framework.externalsharedpermsdiffkeytestapp";
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- // ensure apk path has been set before test is run
- assertNotNull(getTestAppPath());
-
- // setup the PackageManager host tests utilities class, and get various paths we'll need...
- mPMHostUtils = new PackageManagerHostTestUtils(getDevice());
- appPrivatePath = mPMHostUtils.getAppPrivatePath();
- deviceAppPath = mPMHostUtils.getDeviceAppPath();
- sdcardAppPath = mPMHostUtils.getSDCardAppPath();
-
- // Ensure the default is set to let the system decide where to install apps
- // (It's ok for individual tests to override and change this during their test, but should
- // reset it back when they're done)
- mPMHostUtils.setDevicePreferredInstallLocation(
- PackageManagerHostTestUtils.InstallLocPreference.AUTO);
- }
-
- /**
- * Get the absolute file system location of test app with given filename
- * @param fileName the file name of the test app apk
- * @return {@link String} of absolute file path
- */
- public String getTestAppFilePath(String fileName) {
- return String.format("%s%s%s", getTestAppPath(), File.separator, fileName);
- }
-
- public static Test suite() {
- return new DeviceTestSuite(PackageManagerHostTests.class);
- }
-
- /**
- * Regression test to verify that pushing an apk to the private app directory doesn't install
- * the app, and otherwise cause the system to blow up.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public void testPushAppPrivate() throws IOException, InterruptedException, InstallException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException,
- SyncException {
- Log.i(LOG_TAG, "testing pushing an apk to /data/app-private");
- final String apkAppPrivatePath = appPrivatePath + SIMPLE_APK;
-
- // cleanup test app just in case it was accidently installed
- getDevice().uninstallPackage(SIMPLE_PKG);
- mPMHostUtils.executeShellCommand("stop");
- mPMHostUtils.pushFile(getTestAppFilePath(SIMPLE_APK), apkAppPrivatePath);
-
- // sanity check to make sure file is there
- assertTrue(mPMHostUtils.doesRemoteFileExist(apkAppPrivatePath));
- mPMHostUtils.executeShellCommand("start");
-
- mPMHostUtils.waitForPackageManager();
-
- // grep for package to make sure its not installed
- assertFalse(mPMHostUtils.doesPackageExist(SIMPLE_PKG));
- // ensure it has been deleted from app-private
- assertFalse(mPMHostUtils.doesRemoteFileExist(apkAppPrivatePath));
- }
-
- /**
- * Helper to do a standard install of an apk and verify it installed to the correct location.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @param apkName the file name of the test app apk
- * @param pkgName the package name of the test app apk
- * @param expectedLocation the file name of the test app apk
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- private void doStandardInstall(String apkName, String pkgName,
- PackageManagerHostTestUtils.InstallLocation expectedLocation)
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
-
- if (expectedLocation == PackageManagerHostTestUtils.InstallLocation.DEVICE) {
- mPMHostUtils.installAppAndVerifyExistsOnDevice(
- getTestAppFilePath(apkName), pkgName, false);
- }
- else {
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(
- getTestAppFilePath(apkName), pkgName, false);
- }
- }
-
- /**
- * Installs the Auto app using the preferred device install location specified,
- * and verifies it was installed on the device.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @param preference the device's preferred location of where to install apps
- * @param expectedLocation the expected location of where the apk was installed
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void installAppAutoLoc(PackageManagerHostTestUtils.InstallLocPreference preference,
- PackageManagerHostTestUtils.InstallLocation expectedLocation)
- throws IOException, InterruptedException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException, InstallException {
-
- PackageManagerHostTestUtils.InstallLocPreference savedPref =
- PackageManagerHostTestUtils.InstallLocPreference.AUTO;
-
- try {
- savedPref = mPMHostUtils.getDevicePreferredInstallLocation();
- mPMHostUtils.setDevicePreferredInstallLocation(preference);
-
- doStandardInstall(AUTO_LOC_APK, AUTO_LOC_PKG, expectedLocation);
- }
- // cleanup test app
- finally {
- mPMHostUtils.setDevicePreferredInstallLocation(savedPref);
- mPMHostUtils.uninstallApp(AUTO_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=auto
- * will install the app to the device when device's preference is auto.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppAutoLocPrefIsAuto() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=auto, prefer=auto gets installed on device");
- installAppAutoLoc(PackageManagerHostTestUtils.InstallLocPreference.AUTO,
- PackageManagerHostTestUtils.InstallLocation.DEVICE);
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=auto
- * will install the app to the device when device's preference is internal.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppAutoLocPrefIsInternal() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=auto, prefer=internal gets installed on device");
- installAppAutoLoc(PackageManagerHostTestUtils.InstallLocPreference.INTERNAL,
- PackageManagerHostTestUtils.InstallLocation.DEVICE);
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=auto
- * will install the app to the SD card when device's preference is external.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppAutoLocPrefIsExternal() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=auto, prefer=external gets installed on device");
- installAppAutoLoc(PackageManagerHostTestUtils.InstallLocPreference.EXTERNAL,
- PackageManagerHostTestUtils.InstallLocation.DEVICE);
- }
-
- /**
- * Installs the Internal app using the preferred device install location specified,
- * and verifies it was installed to the location expected.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @param preference the device's preferred location of where to install apps
- * @param expectedLocation the expected location of where the apk was installed
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the (un)install failed.
- */
- public void installAppInternalLoc(PackageManagerHostTestUtils.InstallLocPreference preference,
- PackageManagerHostTestUtils.InstallLocation expectedLocation)
- throws IOException, InterruptedException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException, InstallException {
-
- PackageManagerHostTestUtils.InstallLocPreference savedPref =
- PackageManagerHostTestUtils.InstallLocPreference.AUTO;
-
- try {
- savedPref = mPMHostUtils.getDevicePreferredInstallLocation();
- mPMHostUtils.setDevicePreferredInstallLocation(preference);
-
- doStandardInstall(INTERNAL_LOC_APK, INTERNAL_LOC_PKG, expectedLocation);
- }
- // cleanup test app
- finally {
- mPMHostUtils.setDevicePreferredInstallLocation(savedPref);
- mPMHostUtils.uninstallApp(INTERNAL_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=internalOnly
- * will install the app to the device when device's preference is auto.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppInternalLocPrefIsAuto() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=internal, prefer=auto gets installed on device");
- installAppInternalLoc(PackageManagerHostTestUtils.InstallLocPreference.AUTO,
- PackageManagerHostTestUtils.InstallLocation.DEVICE);
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=internalOnly
- * will install the app to the device when device's preference is internal.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppInternalLocPrefIsInternal() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=internal, prefer=internal is installed on device");
- installAppInternalLoc(PackageManagerHostTestUtils.InstallLocPreference.INTERNAL,
- PackageManagerHostTestUtils.InstallLocation.DEVICE);
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=internalOnly
- * will install the app to the device when device's preference is external.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppInternalLocPrefIsExternal() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=internal, prefer=external is installed on device");
- installAppInternalLoc(PackageManagerHostTestUtils.InstallLocPreference.EXTERNAL,
- PackageManagerHostTestUtils.InstallLocation.DEVICE);
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=preferExternal
- * will install the app to the SD card.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @param preference the device's preferred location of where to install apps
- * @param expectedLocation the expected location of where the apk was installed
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void installAppExternalLoc(PackageManagerHostTestUtils.InstallLocPreference preference,
- PackageManagerHostTestUtils.InstallLocation expectedLocation)
- throws IOException, InterruptedException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException, InstallException {
-
- PackageManagerHostTestUtils.InstallLocPreference savedPref =
- PackageManagerHostTestUtils.InstallLocPreference.AUTO;
-
- try {
- savedPref = mPMHostUtils.getDevicePreferredInstallLocation();
- mPMHostUtils.setDevicePreferredInstallLocation(preference);
-
- doStandardInstall(EXTERNAL_LOC_APK, EXTERNAL_LOC_PKG, expectedLocation);
-
- }
- // cleanup test app
- finally {
- mPMHostUtils.setDevicePreferredInstallLocation(savedPref);
- mPMHostUtils.uninstallApp(EXTERNAL_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=preferExternal
- * will install the app to the device when device's preference is auto.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppExternalLocPrefIsAuto() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=external, pref=auto gets installed on SD Card");
- installAppExternalLoc(PackageManagerHostTestUtils.InstallLocPreference.AUTO,
- PackageManagerHostTestUtils.InstallLocation.SDCARD);
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=preferExternal
- * will install the app to the device when device's preference is internal.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppExternalLocPrefIsInternal() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=external, pref=internal gets installed on SD Card");
- installAppExternalLoc(PackageManagerHostTestUtils.InstallLocPreference.INTERNAL,
- PackageManagerHostTestUtils.InstallLocation.SDCARD);
- }
-
- /**
- * Regression test to verify that an app with its manifest set to installLocation=preferExternal
- * will install the app to the device when device's preference is external.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppExternalLocPrefIsExternal() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installLocation=external, pref=external gets installed on SD Card");
- installAppExternalLoc(PackageManagerHostTestUtils.InstallLocPreference.EXTERNAL,
- PackageManagerHostTestUtils.InstallLocation.SDCARD);
- }
-
- /**
- * Regression test to verify that an app without installLocation in its manifest
- * will install the app to the device by default when the system default pref is to let the
- * system decide.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppNoLocPrefIsAuto() throws IOException, InterruptedException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException,
- InstallException {
- Log.i(LOG_TAG, "Test an app with no installLocation gets installed on device");
-
- PackageManagerHostTestUtils.InstallLocPreference savedPref =
- PackageManagerHostTestUtils.InstallLocPreference.AUTO;
-
- try {
- savedPref = mPMHostUtils.getDevicePreferredInstallLocation();
- mPMHostUtils.setDevicePreferredInstallLocation(
- PackageManagerHostTestUtils.InstallLocPreference.AUTO);
- mPMHostUtils.installAppAndVerifyExistsOnDevice(
- getTestAppFilePath(NO_LOC_APK), NO_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.setDevicePreferredInstallLocation(savedPref);
- mPMHostUtils.uninstallApp(NO_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app without installLocation in its manifest
- * will install the app to the device by default when the system default pref is to install
- * external.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppNoLocPrefIsExternal() throws IOException, InterruptedException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException,
- InstallException {
- Log.i(LOG_TAG, "Test an app with no installLocation gets installed on SD card");
-
- PackageManagerHostTestUtils.InstallLocPreference savedPref =
- PackageManagerHostTestUtils.InstallLocPreference.AUTO;
-
- try {
- savedPref = mPMHostUtils.getDevicePreferredInstallLocation();
- mPMHostUtils.setDevicePreferredInstallLocation(
- PackageManagerHostTestUtils.InstallLocPreference.EXTERNAL);
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(
- getTestAppFilePath(NO_LOC_APK), NO_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.setDevicePreferredInstallLocation(savedPref);
- mPMHostUtils.uninstallApp(NO_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app without installLocation in its manifest
- * will install the app to the device by default when the system default pref is to install
- * internal.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAppNoLocPrefIsInternal() throws IOException, InterruptedException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException,
- InstallException {
- Log.i(LOG_TAG, "Test an app with no installLocation gets installed on device");
-
- PackageManagerHostTestUtils.InstallLocPreference savedPref =
- PackageManagerHostTestUtils.InstallLocPreference.AUTO;
-
- try {
- savedPref = mPMHostUtils.getDevicePreferredInstallLocation();
- mPMHostUtils.setDevicePreferredInstallLocation(
- PackageManagerHostTestUtils.InstallLocPreference.INTERNAL);
- mPMHostUtils.installAppAndVerifyExistsOnDevice(
- getTestAppFilePath(NO_LOC_APK), NO_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.setDevicePreferredInstallLocation(savedPref);
- mPMHostUtils.uninstallApp(NO_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with its installLocation set to internal that is
- * forward-locked will get installed to the correct location.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public void testInstallFwdLockedAppInternal() throws IOException, InterruptedException,
- InstallException, SyncException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test an app with installLoc set to Internal gets installed to app-private");
-
- try {
- mPMHostUtils.installFwdLockedAppAndVerifyExists(
- getTestAppFilePath(INTERNAL_LOC_APK), INTERNAL_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(INTERNAL_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with its installLocation set to external that is
- * forward-locked will get installed to the correct location.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public void testInstallFwdLockedAppExternal() throws IOException, InterruptedException,
- InstallException, SyncException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test an app with installLoc set to Internal gets installed to app-private");
-
- try {
- mPMHostUtils.installFwdLockedAppAndVerifyExists(
- getTestAppFilePath(INTERNAL_LOC_APK), INTERNAL_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(INTERNAL_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with its installLocation set to external that is
- * forward-locked will get installed to the correct location.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public void testInstallFwdLockedAppAuto() throws IOException, InterruptedException,
- InstallException, SyncException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test an app with installLoc set to Auto gets installed to app-private");
-
- try {
- mPMHostUtils.installFwdLockedAppAndVerifyExists(
- getTestAppFilePath(AUTO_LOC_APK), AUTO_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(AUTO_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with no installLocation set and is
- * forward-locked installed will get installed to the correct location.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public void testInstallFwdLockedAppNone() throws IOException, InterruptedException,
- InstallException, SyncException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test an app with no installLoc set gets installed to app-private");
-
- try {
- mPMHostUtils.installFwdLockedAppAndVerifyExists(
- getTestAppFilePath(NO_LOC_APK), NO_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(NO_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that we can install an app onto the device,
- * uninstall it, and reinstall it onto the SD card.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- // TODO: This currently relies on the app's manifest to switch from device to
- // SD card install locations. We might want to make Device's installPackage()
- // accept a installLocation flag so we can install a package to the
- // destination of our choosing.
- public void testReinstallInternalToExternal() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installing an app first to the device, then to the SD Card");
-
- try {
- mPMHostUtils.installAppAndVerifyExistsOnDevice(
- getTestAppFilePath(VERSATILE_LOC_INTERNAL_APK), VERSATILE_LOC_PKG, false);
- mPMHostUtils.uninstallApp(VERSATILE_LOC_PKG);
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(
- getTestAppFilePath(VERSATILE_LOC_EXTERNAL_APK), VERSATILE_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(VERSATILE_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that we can install an app onto the SD Card,
- * uninstall it, and reinstall it onto the device.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- // TODO: This currently relies on the app's manifest to switch from device to
- // SD card install locations. We might want to make Device's installPackage()
- // accept a installLocation flag so we can install a package to the
- // destination of our choosing.
- public void testReinstallExternalToInternal() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installing an app first to the SD Care, then to the device");
-
- try {
- // install the app externally
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(
- getTestAppFilePath(VERSATILE_LOC_EXTERNAL_APK), VERSATILE_LOC_PKG, false);
- mPMHostUtils.uninstallApp(VERSATILE_LOC_PKG);
- // then replace the app with one marked for internalOnly
- mPMHostUtils.installAppAndVerifyExistsOnDevice(
- getTestAppFilePath(VERSATILE_LOC_INTERNAL_APK), VERSATILE_LOC_PKG, false);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(VERSATILE_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that updating an app on the SD card will install
- * the update onto the SD card as well when location is set to external for both versions
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testUpdateBothExternal() throws IOException, InterruptedException, InstallException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test updating an app on the SD card stays on the SD card");
-
- try {
- // install the app externally
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- EXTERNAL_LOC_VERSION_V1_APK), EXTERNAL_LOC_VERSION_PKG, false);
- // now replace the app with one where the location is still set to preferExternal
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- EXTERNAL_LOC_VERSION_V2_APK), EXTERNAL_LOC_VERSION_PKG, true);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(EXTERNAL_LOC_VERSION_PKG);
- }
- }
-
- /**
- * Regression test to verify that updating an app on the SD card will install
- * the update onto the SD card as well when location is not explicitly set in the
- * updated apps' manifest file.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testUpdateToSDCard() throws IOException, InterruptedException, InstallException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test updating an app on the SD card stays on the SD card");
-
- try {
- // install the app externally
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- UPDATE_EXTERNAL_LOC_V1_EXT_APK), UPDATE_EXTERNAL_LOC_PKG, false);
- // now replace the app with one where the location is blank (app should stay external)
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- UPDATE_EXTERNAL_LOC_V2_NONE_APK), UPDATE_EXTERNAL_LOC_PKG, true);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(UPDATE_EXTERNAL_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that updating an app on the SD card will install
- * the update onto the device if the manifest has changed to installLocation=internalOnly
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testUpdateSDCardToDevice() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test updating an app on the SD card to the Device through manifest change");
-
- try {
- // install the app externally
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- UPDATE_EXT_TO_INT_LOC_V1_EXT_APK), UPDATE_EXT_TO_INT_LOC_PKG, false);
- // now replace the app with an update marked for internalOnly...(should move internal)
- mPMHostUtils.installAppAndVerifyExistsOnDevice(getTestAppFilePath(
- UPDATE_EXT_TO_INT_LOC_V2_INT_APK), UPDATE_EXT_TO_INT_LOC_PKG, true);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(UPDATE_EXT_TO_INT_LOC_PKG);
- }
- }
-
- /**
- * Regression test to verify that installing and updating a forward-locked app will install
- * the update onto the device's forward-locked location
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndUpdateExternalLocForwardLockedApp()
- throws IOException, InterruptedException, InstallException, SyncException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test updating a forward-locked app marked preferExternal");
-
- try {
- // first try to install the forward-locked app externally
- mPMHostUtils.installFwdLockedAppAndVerifyExists(getTestAppFilePath(
- EXTERNAL_LOC_VERSION_V1_APK), EXTERNAL_LOC_VERSION_PKG, false);
- // now replace the app with an update marked for internalOnly and as forward locked
- mPMHostUtils.installFwdLockedAppAndVerifyExists(getTestAppFilePath(
- EXTERNAL_LOC_VERSION_V2_APK), EXTERNAL_LOC_VERSION_PKG, true);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(EXTERNAL_LOC_VERSION_PKG);
- }
- }
-
- /**
- * Regression test to verify that updating a forward-locked app will install
- * the update onto the device's forward-locked location
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndUpdateNoLocForwardLockedApp()
- throws IOException, InterruptedException, InstallException, SyncException,
- TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test updating a forward-locked app with no installLocation pref set");
-
- try {
- // install the app
- mPMHostUtils.installFwdLockedAppAndVerifyExists(getTestAppFilePath(
- NO_LOC_VERSION_V1_APK), NO_LOC_VERSION_PKG, false);
- // now replace the app with an update marked for internalOnly...
- mPMHostUtils.installFwdLockedAppAndVerifyExists(getTestAppFilePath(
- NO_LOC_VERSION_V2_APK), NO_LOC_VERSION_PKG, true);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(NO_LOC_VERSION_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with all permissions set can be installed on SD card
- * and then launched without crashing.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws SyncException if the sync failed for another reason.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndLaunchAllPermsAppOnSD()
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test launching an app with all perms set, installed on SD card");
-
- try {
- // install the app
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- ALL_PERMS_APK), ALL_PERMS_PKG, false);
- boolean testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(ALL_PERMS_PKG);
- assert(testsPassed);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(ALL_PERMS_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with ACCESS_FINE_LOCATION (GPS) permissions can
- * run without permissions errors.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndLaunchFLPermsAppOnSD()
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test launching an app with location perms set, installed on SD card");
-
- try {
- // install the app and verify we can launch it without permissions errors
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_FL_APK), SHARED_PERMS_FL_PKG, false);
- boolean testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(SHARED_PERMS_FL_PKG);
- assert(testsPassed);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(SHARED_PERMS_FL_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with BLUE_TOOTH permissions can
- * run without permissions errors.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndLaunchBTPermsAppOnSD()
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test launching an app with bluetooth perms set, installed on SD card");
-
- try {
- // install the app and verify we can launch it without permissions errors
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_BT_APK), SHARED_PERMS_BT_PKG, false);
- boolean testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(SHARED_PERMS_BT_PKG);
- assert(testsPassed);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(SHARED_PERMS_BT_PKG);
- }
- }
-
- /**
- * Regression test to verify that a shared app with no explicit permissions throws a
- * SecurityException when launched if its other shared apps are not installed.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndLaunchSharedPermsAppOnSD_NoPerms()
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test launching an app with no explicit perms set, installed on SD card");
-
- try {
- // Make sure the 2 shared apps with needed permissions are not installed...
- mPMHostUtils.uninstallApp(SHARED_PERMS_FL_PKG);
- mPMHostUtils.uninstallApp(SHARED_PERMS_BT_PKG);
-
- // now install the app and see if when we launch it we get a permissions error
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_APK), SHARED_PERMS_PKG, false);
-
- boolean testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(SHARED_PERMS_PKG);
- assertEquals("Shared perms app should fail to run", false, testsPassed);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(SHARED_PERMS_PKG);
- }
- }
-
- /**
- * Regression test to verify that a shared app with no explicit permissions can run if its other
- * shared apps are installed.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndLaunchSharedPermsAppOnSD_GrantedPerms()
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test launching an app with no explicit perms set, installed on SD card");
-
- try {
- // install the 2 shared apps with needed permissions first
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_FL_APK), SHARED_PERMS_FL_PKG, false);
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_BT_APK), SHARED_PERMS_BT_PKG, false);
-
- // now install the test app and see if we can launch it without errors
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_APK), SHARED_PERMS_PKG, false);
- boolean testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(SHARED_PERMS_PKG);
- assert(testsPassed);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(SHARED_PERMS_PKG);
- mPMHostUtils.uninstallApp(SHARED_PERMS_BT_PKG);
- mPMHostUtils.uninstallApp(SHARED_PERMS_FL_PKG);
- }
- }
-
- /**
- * Regression test to verify that an app with ACCESS_FINE_LOCATION (GPS) permissions can
- * run without permissions errors even after a reboot
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndLaunchFLPermsAppOnSD_Reboot()
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test launching an app with location perms set, installed on SD card");
-
- try {
- // install the app and verify we can launch it without permissions errors
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_FL_APK), SHARED_PERMS_FL_PKG, false);
- boolean testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(SHARED_PERMS_FL_PKG);
- assert(testsPassed);
-
- mPMHostUtils.rebootDevice();
-
- testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(SHARED_PERMS_FL_PKG);
- assert(testsPassed);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(SHARED_PERMS_FL_PKG);
- }
- }
-
- /**
- * Regression test to verify that a shared app with no explicit permissions can run if its other
- * shared apps are installed, even after a reboot.
- * <p/>
- * Assumes adb is running as root in device under test.
- * @throws InterruptedException if the thread was interrupted
- * @throws TimeoutException in case of a timeout on the connection.
- * @throws AdbCommandRejectedException if adb rejects the command
- * @throws ShellCommandUnresponsiveException if the device did not output anything for
- * a period longer than the max time to output.
- * @throws IOException if connection to device was lost.
- * @throws InstallException if the install failed.
- */
- public void testInstallAndLaunchSharedPermsAppOnSD_Reboot()
- throws IOException, InterruptedException, InstallException, TimeoutException,
- AdbCommandRejectedException, ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test launching an app on SD, with no explicit perms set after reboot");
-
- try {
- // install the 2 shared apps with needed permissions first
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_FL_APK), SHARED_PERMS_FL_PKG, false);
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_BT_APK), SHARED_PERMS_BT_PKG, false);
-
- // now install the test app and see if we can launch it without errors
- mPMHostUtils.installAppAndVerifyExistsOnSDCard(getTestAppFilePath(
- SHARED_PERMS_APK), SHARED_PERMS_PKG, false);
- boolean testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(SHARED_PERMS_PKG);
- assert(testsPassed);
-
- // reboot
- mPMHostUtils.rebootDevice();
-
- // Verify we can still launch the app
- testsPassed = mPMHostUtils.runDeviceTestsDidAllTestsPass(SHARED_PERMS_PKG);
- assert(testsPassed);
- }
- // cleanup test app
- finally {
- mPMHostUtils.uninstallApp(SHARED_PERMS_PKG);
- mPMHostUtils.uninstallApp(SHARED_PERMS_BT_PKG);
- mPMHostUtils.uninstallApp(SHARED_PERMS_FL_PKG);
- }
- }
-}
diff --git a/core/tests/hosttests/src/android/content/pm/PackageManagerStressHostTests.java b/core/tests/hosttests/src/android/content/pm/PackageManagerStressHostTests.java
deleted file mode 100644
index a2a5dd3..0000000
--- a/core/tests/hosttests/src/android/content/pm/PackageManagerStressHostTests.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.content.pm;
-
-import com.android.ddmlib.AdbCommandRejectedException;
-import com.android.ddmlib.InstallException;
-import com.android.ddmlib.Log;
-import com.android.ddmlib.ShellCommandUnresponsiveException;
-import com.android.ddmlib.TimeoutException;
-import com.android.hosttest.DeviceTestCase;
-import com.android.hosttest.DeviceTestSuite;
-
-import java.io.File;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-/**
- * Set of tests that verify host side stress scenarios (large apps, multiple upgrades, etc.)
- */
-public class PackageManagerStressHostTests extends DeviceTestCase {
-
- private static final String LOG_TAG = "PackageManagerStressHostTests";
- private PackageManagerHostTestUtils mPMHostUtils = null;
-
- // Path to the app repository and various subdirectories of it
- // Note: These stress tests require large apks that cannot be checked into the tree.
- // These variables define static locations that point to existing APKs (not built from
- // the tree) which can be used by the the stress tests in this file.
- private static final String LARGE_APPS_DIRECTORY_NAME = "largeApps";
- private static final String MISC_APPS_DIRECTORY_NAME = "miscApps";
- private static final String VERSIONED_APPS_DIRECTORY_NAME = "versionedApps";
- private static final String MANY_APPS_DIRECTORY_NAME = "manyApps";
-
- // Note: An external environment variable "ANDROID_TEST_APP_REPOSITORY" must be set
- // which points to the root location of the app respository.
- private static String AppRepositoryPath = null;
-
- // Large apps (>1mb) - filenames and their corresponding package names:
- private static enum APK {
- FILENAME,
- PACKAGENAME;
- }
- private static final String[][] LARGE_APPS = {
- {"External1mb.apk", "com.appsonsd.mytests.External1mb"},
- {"External2mb.apk", "com.appsonsd.mytests.External2mb"},
- {"External3mb.apk", "com.appsonsd.mytests.External3mb"},
- {"External4mb.apk", "com.appsonsd.mytests.External4mb"},
- {"External5mb.apk", "com.appsonsd.mytests.External5mb"},
- {"External6mb.apk", "com.appsonsd.mytests.External6mb"},
- {"External7mb.apk", "com.appsonsd.mytests.External7mb"},
- {"External8mb.apk", "com.appsonsd.mytests.External8mb"},
- {"External9mb.apk", "com.appsonsd.mytests.External9mb"},
- {"External10mb.apk", "com.appsonsd.mytests.External10mb"},
- {"External16mb.apk", "com.appsonsd.mytests.External16mb"},
- {"External28mb.apk", "com.appsonsd.mytests.External28mb"},
- {"External34mb.apk", "com.appsonsd.mytests.External34mb"},
- {"External46mb.apk", "com.appsonsd.mytests.External46mb"},
- {"External58mb.apk", "com.appsonsd.mytests.External58mb"},
- {"External65mb.apk", "com.appsonsd.mytests.External65mb"},
- {"External72mb.apk", "com.appsonsd.mytests.External72mb"},
- {"External79mb.apk", "com.appsonsd.mytests.External79mb"},
- {"External86mb.apk", "com.appsonsd.mytests.External86mb"},
- {"External93mb.apk", "com.appsonsd.mytests.External93mb"}};
-
- // Various test files and their corresponding package names
- private static final String AUTO_LOC_APK = "Auto241kb.apk";
- private static final String AUTO_LOC_PKG = "com.appsonsd.mytests.Auto241kb";
- private static final String INTERNAL_LOC_APK = "Internal781kb.apk";
- private static final String INTERNAL_LOC_PKG = "com.appsonsd.mytests.Internal781kb";
- private static final String EXTERNAL_LOC_APK = "External931kb.apk";
- private static final String EXTERNAL_LOC_PKG = "com.appsonsd.mytests.External931kb";
- private static final String NO_LOC_APK = "Internal751kb_EclairSDK.apk";
- private static final String NO_LOC_PKG = "com.appsonsd.mytests.Internal751kb_EclairSDK";
- // Versioned test apps
- private static final String VERSIONED_APPS_FILENAME_PREFIX = "External455kb_v";
- private static final String VERSIONED_APPS_PKG = "com.appsonsd.mytests.External455kb";
- private static final int VERSIONED_APPS_START_VERSION = 1; // inclusive
- private static final int VERSIONED_APPS_END_VERSION = 250; // inclusive
- // Large number of app installs
- // @TODO: increase the max when we can install more apps
- private static final int MANY_APPS_START = 1;
- private static final int MANY_APPS_END = 100;
- private static final String MANY_APPS_PKG_PREFIX = "com.appsonsd.mytests.External49kb_";
- private static final String MANY_APPS_APK_PREFIX = "External49kb_";
-
- public static Test suite() {
- return new DeviceTestSuite(PackageManagerStressHostTests.class);
- }
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
-
- // setup the PackageManager host tests utilities class, and get various paths we'll need...
- mPMHostUtils = new PackageManagerHostTestUtils(getDevice());
- AppRepositoryPath = System.getenv("ANDROID_TEST_APP_REPOSITORY");
- assertNotNull(AppRepositoryPath);
-
- // Make sure path ends with a separator
- if (!AppRepositoryPath.endsWith(File.separator)) {
- AppRepositoryPath += File.separator;
- }
- }
-
- /**
- * Get the absolute file system location of repository test app with given filename
- * @param fileName the file name of the test app apk
- * @return {@link String} of absolute file path
- */
- private String getRepositoryTestAppFilePath(String fileDirectory, String fileName) {
- return String.format("%s%s%s%s", AppRepositoryPath, fileDirectory,
- File.separator, fileName);
- }
-
- /**
- * Get the absolute file system location of test app with given filename
- * @param fileName the file name of the test app apk
- * @return {@link String} of absolute file path
- */
- public String getTestAppFilePath(String fileName) {
- return String.format("%s%s%s", getTestAppPath(), File.separator, fileName);
- }
-
- /**
- * Stress test to verify that we can update an app multiple times on the SD card.
- * <p/>
- * Assumes adb is running as root in device under test.
- */
- public void testUpdateAppManyTimesOnSD() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test updating an app on SD numerous times");
-
- // cleanup test app just in case it already exists
- mPMHostUtils.uninstallApp(VERSIONED_APPS_PKG);
- // grep for package to make sure its not installed
- assertFalse(mPMHostUtils.doesPackageExist(VERSIONED_APPS_PKG));
-
- try {
- for (int i = VERSIONED_APPS_START_VERSION; i <= VERSIONED_APPS_END_VERSION; ++i) {
- String currentApkName = String.format("%s%d.apk",
- VERSIONED_APPS_FILENAME_PREFIX, i);
-
- Log.i(LOG_TAG, "Installing app " + currentApkName);
- mPMHostUtils.installFile(getRepositoryTestAppFilePath(VERSIONED_APPS_DIRECTORY_NAME,
- currentApkName), true);
- mPMHostUtils.waitForPackageManager();
- assertTrue(mPMHostUtils.doesAppExistOnSDCard(VERSIONED_APPS_PKG));
- assertTrue(mPMHostUtils.doesPackageExist(VERSIONED_APPS_PKG));
- }
- }
- finally {
- // cleanup test app
- mPMHostUtils.uninstallApp(VERSIONED_APPS_PKG);
- // grep for package to make sure its not installed
- assertFalse(mPMHostUtils.doesPackageExist(VERSIONED_APPS_PKG));
- }
- }
-
- /**
- * Stress test to verify that an app can be installed, uninstalled, and
- * reinstalled on SD many times.
- * <p/>
- * Assumes adb is running as root in device under test.
- */
- public void testUninstallReinstallAppOnSDManyTimes() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test updating an app on the SD card stays on the SD card");
-
- // cleanup test app just in case it was already exists
- mPMHostUtils.uninstallApp(EXTERNAL_LOC_PKG);
- // grep for package to make sure its not installed
- assertFalse(mPMHostUtils.doesPackageExist(EXTERNAL_LOC_PKG));
-
- for (int i = 0; i <= 500; ++i) {
- Log.i(LOG_TAG, "Installing app");
-
- try {
- // install the app
- mPMHostUtils.installFile(getRepositoryTestAppFilePath(MISC_APPS_DIRECTORY_NAME,
- EXTERNAL_LOC_APK), false);
- mPMHostUtils.waitForPackageManager();
- assertTrue(mPMHostUtils.doesAppExistOnSDCard(EXTERNAL_LOC_PKG));
- assertTrue(mPMHostUtils.doesPackageExist(EXTERNAL_LOC_PKG));
- }
- finally {
- // now uninstall the app
- Log.i(LOG_TAG, "Uninstalling app");
- mPMHostUtils.uninstallApp(EXTERNAL_LOC_PKG);
- mPMHostUtils.waitForPackageManager();
- assertFalse(mPMHostUtils.doesPackageExist(EXTERNAL_LOC_PKG));
- }
- }
- }
-
- /**
- * Stress test to verify that we can install, 20 large apps (>1mb each)
- * <p/>
- * Assumes adb is running as root in device under test.
- */
- public void testInstallManyLargeAppsOnSD() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installing 20 large apps onto the sd card");
-
- try {
- // Install all the large apps
- for (int i=0; i < LARGE_APPS.length; ++i) {
- String apkName = LARGE_APPS[i][APK.FILENAME.ordinal()];
- String pkgName = LARGE_APPS[i][APK.PACKAGENAME.ordinal()];
-
- // cleanup test app just in case it already exists
- mPMHostUtils.uninstallApp(pkgName);
- // grep for package to make sure its not installed
- assertFalse(mPMHostUtils.doesPackageExist(pkgName));
-
- Log.i(LOG_TAG, "Installing app " + apkName);
- // install the app
- mPMHostUtils.installFile(getRepositoryTestAppFilePath(LARGE_APPS_DIRECTORY_NAME,
- apkName), false);
- mPMHostUtils.waitForPackageManager();
- assertTrue(mPMHostUtils.doesAppExistOnSDCard(pkgName));
- assertTrue(mPMHostUtils.doesPackageExist(pkgName));
- }
- }
- finally {
- // Cleanup - ensure we uninstall all large apps if they were installed
- for (int i=0; i < LARGE_APPS.length; ++i) {
- String apkName = LARGE_APPS[i][APK.FILENAME.ordinal()];
- String pkgName = LARGE_APPS[i][APK.PACKAGENAME.ordinal()];
-
- Log.i(LOG_TAG, "Uninstalling app " + apkName);
- // cleanup test app just in case it was accidently installed
- mPMHostUtils.uninstallApp(pkgName);
- // grep for package to make sure its not installed anymore
- assertFalse(mPMHostUtils.doesPackageExist(pkgName));
- assertFalse(mPMHostUtils.doesAppExistOnSDCard(pkgName));
- }
- }
- }
-
- /**
- * Stress test to verify that we can install many small apps onto SD.
- * <p/>
- * Assumes adb is running as root in device under test.
- */
- public void testInstallManyAppsOnSD() throws IOException, InterruptedException,
- InstallException, TimeoutException, AdbCommandRejectedException,
- ShellCommandUnresponsiveException {
- Log.i(LOG_TAG, "Test installing 500 small apps onto SD");
-
- try {
- for (int i = MANY_APPS_START; i <= MANY_APPS_END; ++i) {
- String currentPkgName = String.format("%s%d", MANY_APPS_PKG_PREFIX, i);
-
- // cleanup test app just in case it already exists
- mPMHostUtils.uninstallApp(currentPkgName);
- // grep for package to make sure its not installed
- assertFalse(mPMHostUtils.doesPackageExist(currentPkgName));
-
- String currentApkName = String.format("%s%d.apk", MANY_APPS_APK_PREFIX, i);
- Log.i(LOG_TAG, "Installing app " + currentApkName);
- mPMHostUtils.installFile(getRepositoryTestAppFilePath(MANY_APPS_DIRECTORY_NAME,
- currentApkName), true);
- mPMHostUtils.waitForPackageManager();
- assertTrue(mPMHostUtils.doesAppExistOnSDCard(currentPkgName));
- assertTrue(mPMHostUtils.doesPackageExist(currentPkgName));
- }
- }
- finally {
- for (int i = MANY_APPS_START; i <= MANY_APPS_END; ++i) {
- String currentPkgName = String.format("%s%d", MANY_APPS_PKG_PREFIX, i);
-
- // cleanup test app
- mPMHostUtils.uninstallApp(currentPkgName);
- // grep for package to make sure its not installed
- assertFalse(mPMHostUtils.doesPackageExist(currentPkgName));
- }
- }
- }
-} \ No newline at end of file
diff --git a/core/tests/hosttests/src/android/net/DownloadManagerHostTests.java b/core/tests/hosttests/src/android/net/DownloadManagerHostTests.java
deleted file mode 100644
index a94555c..0000000
--- a/core/tests/hosttests/src/android/net/DownloadManagerHostTests.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net;
-
-import android.content.pm.PackageManagerHostTestUtils;
-
-import com.android.ddmlib.Log;
-import com.android.hosttest.DeviceTestCase;
-import com.android.hosttest.DeviceTestSuite;
-
-import java.io.File;
-import java.util.Hashtable;
-
-import junit.framework.Test;
-
-/**
- * Host-based tests of the DownloadManager API. (Uses a device-based app to actually invoke the
- * various tests.)
- */
-public class DownloadManagerHostTests extends DeviceTestCase {
- protected PackageManagerHostTestUtils mPMUtils = null;
-
- private static final String LOG_TAG = "android.net.DownloadManagerHostTests";
- private static final String FILE_DOWNLOAD_APK = "DownloadManagerTestApp.apk";
- private static final String FILE_DOWNLOAD_PKG = "com.android.frameworks.downloadmanagertests";
- private static final String FILE_DOWNLOAD_CLASS =
- "com.android.frameworks.downloadmanagertests.DownloadManagerTestApp";
- private static final String DOWNLOAD_TEST_RUNNER_NAME =
- "com.android.frameworks.downloadmanagertests.DownloadManagerTestRunner";
-
- // Extra parameters to pass to the TestRunner
- private static final String EXTERNAL_DOWNLOAD_URI_KEY = "external_download_uri";
- // Note: External environment variable ANDROID_TEST_EXTERNAL_URI must be set to point to the
- // external URI under which the files downloaded by the tests can be found. Note that the Uri
- // must be accessible by the device during a test run. Correspondingly,
- // ANDROID_TEST_EXTERNAL_LARGE_URI should point to the external URI of the folder containing
- // large files.
- private static String externalDownloadUriValue = null;
-
- Hashtable<String, String> mExtraParams = null;
-
- public static Test suite() {
- return new DeviceTestSuite(DownloadManagerHostTests.class);
- }
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- // ensure apk path has been set before test is run
- assertNotNull(getTestAppPath());
- mPMUtils = new PackageManagerHostTestUtils(getDevice());
- externalDownloadUriValue = System.getenv("ANDROID_TEST_EXTERNAL_URI");
- assertNotNull(externalDownloadUriValue);
- mExtraParams = getExtraParams();
- }
-
- /**
- * Helper function to get extra params that can be used to pass into the helper app.
- */
- protected Hashtable<String, String> getExtraParams() {
- Hashtable<String, String> extraParams = new Hashtable<String, String>();
- extraParams.put(EXTERNAL_DOWNLOAD_URI_KEY, externalDownloadUriValue);
- return extraParams;
- }
-
- /**
- * Tests that a large download over WiFi
- * @throws Exception if the test failed at any point
- */
- public void testLargeDownloadOverWiFi() throws Exception {
- mPMUtils.installAppAndVerifyExistsOnDevice(String.format("%s%s%s", getTestAppPath(),
- File.separator, FILE_DOWNLOAD_APK), FILE_DOWNLOAD_PKG, true);
-
- boolean testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "runLargeDownloadOverWiFi", DOWNLOAD_TEST_RUNNER_NAME,
- mExtraParams);
-
- assertTrue("Failed to install large file over WiFi in < 10 minutes!", testPassed);
- }
-
- /**
- * Spawns a device-based function to initiate a download on the device, reboots the device,
- * then waits and verifies the download succeeded.
- *
- * @throws Exception if the test failed at any point
- */
- public void testDownloadManagerSingleReboot() throws Exception {
- mPMUtils.installAppAndVerifyExistsOnDevice(String.format("%s%s%s", getTestAppPath(),
- File.separator, FILE_DOWNLOAD_APK), FILE_DOWNLOAD_PKG, true);
-
- boolean testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "initiateDownload", DOWNLOAD_TEST_RUNNER_NAME,
- mExtraParams);
-
- assertTrue("Failed to initiate download properly!", testPassed);
- mPMUtils.rebootDevice();
- testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "verifyFileDownloadSucceeded", DOWNLOAD_TEST_RUNNER_NAME,
- mExtraParams);
- assertTrue("Failed to verify initiated download completed properyly!", testPassed);
- }
-
- /**
- * Spawns a device-based function to initiate a download on the device, reboots the device three
- * times (using different intervals), then waits and verifies the download succeeded.
- *
- * @throws Exception if the test failed at any point
- */
- public void testDownloadManagerMultipleReboots() throws Exception {
- mPMUtils.installAppAndVerifyExistsOnDevice(String.format("%s%s%s", getTestAppPath(),
- File.separator, FILE_DOWNLOAD_APK), FILE_DOWNLOAD_PKG, true);
-
- boolean testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "initiateDownload", DOWNLOAD_TEST_RUNNER_NAME,
- mExtraParams);
-
- assertTrue("Failed to initiate download properly!", testPassed);
- Thread.sleep(5000);
-
- // Do 3 random reboots - after 13, 9, and 19 seconds
- Log.i(LOG_TAG, "First reboot...");
- mPMUtils.rebootDevice();
- Thread.sleep(13000);
- Log.i(LOG_TAG, "Second reboot...");
- mPMUtils.rebootDevice();
- Thread.sleep(9000);
- Log.i(LOG_TAG, "Third reboot...");
- mPMUtils.rebootDevice();
- Thread.sleep(19000);
- testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "verifyFileDownloadSucceeded", DOWNLOAD_TEST_RUNNER_NAME,
- mExtraParams);
- assertTrue("Failed to verify initiated download completed properyly!", testPassed);
- }
-
- /**
- * Spawns a device-based function to test download while WiFi is enabled/disabled multiple times
- * during the download.
- *
- * @throws Exception if the test failed at any point
- */
- public void testDownloadMultipleWiFiEnableDisable() throws Exception {
- mPMUtils.installAppAndVerifyExistsOnDevice(String.format("%s%s%s", getTestAppPath(),
- File.separator, FILE_DOWNLOAD_APK), FILE_DOWNLOAD_PKG, true);
-
- boolean testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "runDownloadMultipleWiFiEnableDisable",
- DOWNLOAD_TEST_RUNNER_NAME, mExtraParams);
- assertTrue(testPassed);
- }
-
- /**
- * Spawns a device-based function to test switching on/off both airplane mode and WiFi
- *
- * @throws Exception if the test failed at any point
- */
- public void testDownloadMultipleSwitching() throws Exception {
- mPMUtils.installAppAndVerifyExistsOnDevice(String.format("%s%s%s", getTestAppPath(),
- File.separator, FILE_DOWNLOAD_APK), FILE_DOWNLOAD_PKG, true);
-
- boolean testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "runDownloadMultipleSwitching",
- DOWNLOAD_TEST_RUNNER_NAME, mExtraParams);
- assertTrue(testPassed);
- }
-
- /**
- * Spawns a device-based function to test switching on/off airplane mode multiple times
- *
- * @throws Exception if the test failed at any point
- */
- public void testDownloadMultipleAirplaneModeEnableDisable() throws Exception {
- mPMUtils.installAppAndVerifyExistsOnDevice(String.format("%s%s%s", getTestAppPath(),
- File.separator, FILE_DOWNLOAD_APK), FILE_DOWNLOAD_PKG, true);
-
- boolean testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "runDownloadMultipleAirplaneModeEnableDisable",
- DOWNLOAD_TEST_RUNNER_NAME, mExtraParams);
- assertTrue(testPassed);
- }
-
- /**
- * Spawns a device-based function to test 15 concurrent downloads of 5,000,000-byte files
- *
- * @throws Exception if the test failed at any point
- */
- public void testDownloadMultipleSimultaneously() throws Exception {
- mPMUtils.installAppAndVerifyExistsOnDevice(String.format("%s%s%s", getTestAppPath(),
- File.separator, FILE_DOWNLOAD_APK), FILE_DOWNLOAD_PKG, true);
-
- boolean testPassed = mPMUtils.runDeviceTestsDidAllTestsPass(FILE_DOWNLOAD_PKG,
- FILE_DOWNLOAD_CLASS, "runDownloadMultipleSimultaneously",
- DOWNLOAD_TEST_RUNNER_NAME, mExtraParams);
- assertTrue(testPassed);
- }
-}