diff options
| author | Kenny Root <kroot@google.com> | 2010-08-05 10:04:59 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-08-05 10:04:59 -0700 |
| commit | 983d4583e7bb1788d377296fe34babc1956c0a3c (patch) | |
| tree | ff0bcd1316517e065fb3c8b842a603a7bf9c444f /core/tests | |
| parent | c6d1519e549740abd56df7a98b5348bd9095ae46 (diff) | |
| parent | dec43a102226de55307de20d5779e20a435be8b1 (diff) | |
| download | frameworks_base-983d4583e7bb1788d377296fe34babc1956c0a3c.zip frameworks_base-983d4583e7bb1788d377296fe34babc1956c0a3c.tar.gz frameworks_base-983d4583e7bb1788d377296fe34babc1956c0a3c.tar.bz2 | |
am dec43a10: Merge "Fix up PackageManager tests" into gingerbread
Merge commit 'dec43a102226de55307de20d5779e20a435be8b1' into gingerbread-plus-aosp
* commit 'dec43a102226de55307de20d5779e20a435be8b1':
Fix up PackageManager tests
Diffstat (limited to 'core/tests')
| -rwxr-xr-x | core/tests/coretests/src/android/content/pm/PackageManagerTests.java | 111 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/os/storage/StorageListener.java | 21 |
2 files changed, 79 insertions, 53 deletions
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java index 7c28516..cbf8c87 100755 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java @@ -69,7 +69,7 @@ public class PackageManagerTests extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); - mOrigState = getMediaState(); + mOrigState = checkMediaState(Environment.MEDIA_MOUNTED); if (!mountMedia()) { Log.i(TAG, "sdcard not mounted? Some of these tests might fail"); } @@ -78,12 +78,12 @@ public class PackageManagerTests extends AndroidTestCase { @Override protected void tearDown() throws Exception { // Restore media state. - boolean newState = getMediaState(); + boolean newState = checkMediaState(Environment.MEDIA_MOUNTED); if (newState != mOrigState) { if (mOrigState) { - getMs().mountVolume(Environment.getExternalStorageDirectory().getPath()); + mountMedia(); } else { - getMs().unmountVolume(Environment.getExternalStorageDirectory().getPath(), true); + unmountMedia(); } } super.tearDown(); @@ -576,6 +576,7 @@ public class PackageManagerTests extends AndroidTestCase { @LargeTest public void testInstallSdcard() { + mountMedia(); sampleInstallFromRawResource(PackageManager.INSTALL_EXTERNAL, true); } @@ -913,41 +914,62 @@ public class PackageManagerTests extends AndroidTestCase { return null; } - boolean getMediaState() { + boolean checkMediaState(String desired) { try { - String mPath = Environment.getExternalStorageDirectory().getPath(); - String state = getMs().getVolumeState(mPath); - return Environment.MEDIA_MOUNTED.equals(state); + String mPath = Environment.getExternalStorageDirectory().getPath(); + String actual = getMs().getVolumeState(mPath); + if (desired.equals(actual)) { + return true; + } else { + return false; + } } catch (RemoteException e) { + Log.e(TAG, "Exception while checking media state", e); return false; } } boolean mountMedia() { - if (getMediaState()) { + if (checkMediaState(Environment.MEDIA_MOUNTED)) { return true; } + + final String path = Environment.getExternalStorageDirectory().toString(); + StorageListener observer = new StorageListener(Environment.MEDIA_MOUNTED); + StorageManager sm = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); + sm.registerListener(observer); try { - String mPath = Environment.getExternalStorageDirectory().toString(); - int ret = getMs().mountVolume(mPath); - return ret == StorageResultCode.OperationSucceeded; - } catch (RemoteException e) { + // Wait on observer + synchronized (observer) { + int ret = getMs().mountVolume(path); + if (ret != StorageResultCode.OperationSucceeded) { + throw new Exception("Could not mount the media"); + } + long waitTime = 0; + while ((!observer.isDone()) && (waitTime < MAX_WAIT_TIME)) { + observer.wait(WAIT_TIME_INCR); + waitTime += WAIT_TIME_INCR; + } + if (!observer.isDone()) { + throw new Exception("Timed out waiting for unmount media notification"); + } + return true; + } + } catch (Exception e) { + Log.e(TAG, "Exception : " + e); return false; + } finally { + sm.unregisterListener(observer); } } private boolean unmountMedia() { - String path = Environment.getExternalStorageDirectory().getPath(); - try { - String state = getMs().getVolumeState(path); - if (Environment.MEDIA_UNMOUNTED.equals(state)) { - return true; - } - } catch (RemoteException e) { - failStr(e); + if (checkMediaState(Environment.MEDIA_UNMOUNTED)) { + return true; } - StorageListener observer = new StorageListener(); + final String path = Environment.getExternalStorageDirectory().getPath(); + StorageListener observer = new StorageListener(Environment.MEDIA_UNMOUNTED); StorageManager sm = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); sm.registerListener(observer); try { @@ -976,7 +998,7 @@ public class PackageManagerTests extends AndroidTestCase { // Install pkg on sdcard InstallParams ip = sampleInstallFromRawResource(PackageManager.INSTALL_EXTERNAL, false); if (localLOGV) Log.i(TAG, "Installed pkg on sdcard"); - boolean origState = getMediaState(); + boolean origState = checkMediaState(Environment.MEDIA_MOUNTED); boolean registeredReceiver = false; SdMountReceiver receiver = new SdMountReceiver(new String[]{ip.pkg.packageName}); try { @@ -1468,7 +1490,7 @@ public class PackageManagerTests extends AndroidTestCase { */ @LargeTest public void testInstallSdcardUnmount() { - boolean origState = getMediaState(); + boolean origState = checkMediaState(Environment.MEDIA_MOUNTED); try { // Unmount sdcard assertTrue(unmountMedia()); @@ -1493,22 +1515,22 @@ public class PackageManagerTests extends AndroidTestCase { */ @LargeTest public void testInstallManifestSdcardUnmount() { - boolean origState = getMediaState(); - try { - // Unmount sdcard - assertTrue(unmountMedia()); - InstallParams ip = new InstallParams("install.apk", R.raw.install_loc_sdcard); - installFromRawResource(ip, 0, true, false, -1, - PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY); - } finally { - // Restore original media state - if (origState) { - mountMedia(); - } else { - unmountMedia(); - } - } - } + boolean origState = checkMediaState(Environment.MEDIA_MOUNTED); + try { + // Unmount sdcard + assertTrue(unmountMedia()); + InstallParams ip = new InstallParams("install.apk", R.raw.install_loc_sdcard); + installFromRawResource(ip, 0, true, false, -1, + PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY); + } finally { + // Restore original media state + if (origState) { + mountMedia(); + } else { + unmountMedia(); + } + } + } /*---------- Recommended install location tests ----*/ /* Precedence: FlagManifestExistingUser @@ -2269,7 +2291,7 @@ public class PackageManagerTests extends AndroidTestCase { @LargeTest public void testInstallOnSdPermissionsUnmount() { InstallParams ip = null; - boolean origMediaState = getMediaState(); + boolean origMediaState = checkMediaState(Environment.MEDIA_MOUNTED); try { // **: Upon installing a package, are its declared permissions published? int iFlags = PackageManager.INSTALL_INTERNAL; @@ -2300,8 +2322,10 @@ public class PackageManagerTests extends AndroidTestCase { */ @LargeTest public void testInstallSdcardStaleContainer() { - boolean origMediaState = getMediaState(); + boolean origMediaState = checkMediaState(Environment.MEDIA_MOUNTED); try { + // Mount media first + mountMedia(); String outFileName = "install.apk"; int rawResId = R.raw.install; PackageManager pm = mContext.getPackageManager(); @@ -2342,7 +2366,7 @@ public class PackageManagerTests extends AndroidTestCase { */ @LargeTest public void testInstallSdcardStaleContainerReinstall() { - boolean origMediaState = getMediaState(); + boolean origMediaState = checkMediaState(Environment.MEDIA_MOUNTED); try { // Mount media first mountMedia(); @@ -2375,7 +2399,6 @@ public class PackageManagerTests extends AndroidTestCase { } else { unmountMedia(); } - } } /* diff --git a/core/tests/coretests/src/android/os/storage/StorageListener.java b/core/tests/coretests/src/android/os/storage/StorageListener.java index d6dae22..6a26b88 100644 --- a/core/tests/coretests/src/android/os/storage/StorageListener.java +++ b/core/tests/coretests/src/android/os/storage/StorageListener.java @@ -21,21 +21,24 @@ import android.util.Log; public class StorageListener extends StorageEventListener { private static final boolean localLOGV = true; - public static final String TAG="StorageListener"; + public static final String TAG = "StorageListener"; - String oldState; - String newState; - String path; + private String mTargetState; private boolean doneFlag = false; + + public StorageListener(String targetState) { + mTargetState = targetState; + } + @Override public void onStorageStateChanged(String path, String oldState, String newState) { if (localLOGV) Log.i(TAG, "Storage state changed from " + oldState + " to " + newState); + synchronized (this) { - this.oldState = oldState; - this.newState = newState; - this.path = path; - doneFlag = true; - notifyAll(); + if (mTargetState.equals(newState)) { + doneFlag = true; + notifyAll(); + } } } |
